From 696ee859ef737f86c0bbf838b4e65eafcb7aea5a Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Mon, 17 Feb 2025 00:15:15 -0800 Subject: [PATCH] venus: support VK_KHR_map_memory2 This is purely on the driver side. Signed-off-by: Yiwei Zhang Part-of: --- docs/features.txt | 2 +- src/virtio/vulkan/vn_device.c | 5 +++++ src/virtio/vulkan/vn_device_memory.c | 19 ++++++++++--------- src/virtio/vulkan/vn_feedback.c | 14 +++++++++++--- src/virtio/vulkan/vn_physical_device.c | 1 + 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 8247c277d2e..6977589efb7 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -518,7 +518,7 @@ Vulkan 1.4 -- all DONE: anv, lvp, nvk, radv/gfx8+, tu/a7xx+ VK_KHR_load_store_op_none DONE (anv, lvp, nvk, radv, tu, v3dv, vn) VK_KHR_maintenance5 DONE (anv, lvp, nvk, radv, tu, v3dv, vn) VK_KHR_maintenance6 DONE (anv, lvp, nvk, radv, tu) - VK_KHR_map_memory2 DONE (anv, lvp, nvk, panvk, radv, tu) + VK_KHR_map_memory2 DONE (anv, lvp, nvk, panvk, radv, tu, vn) VK_KHR_push_descriptor DONE (anv, hasvk, lvp, nvk, panvk, radv, tu, vn) VK_KHR_shader_expect_assume DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_KHR_shader_float_controls2 DONE (anv, lvp, nvk, radv, tu, vn) diff --git a/src/virtio/vulkan/vn_device.c b/src/virtio/vulkan/vn_device.c index 46595a8fbd8..162540be9a1 100644 --- a/src/virtio/vulkan/vn_device.c +++ b/src/virtio/vulkan/vn_device.c @@ -355,6 +355,11 @@ vn_device_fix_create_info(const struct vn_device *dev, VK_EXT_EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXTENSION_NAME; } + if (app_exts->KHR_map_memory2) { + /* see vn_physical_device_get_native_extensions */ + block_exts[block_count++] = VK_KHR_MAP_MEMORY_2_EXTENSION_NAME; + } + if (app_exts->EXT_device_memory_report) { /* see vn_physical_device_get_native_extensions */ block_exts[block_count++] = VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME; diff --git a/src/virtio/vulkan/vn_device_memory.c b/src/virtio/vulkan/vn_device_memory.c index e277ce68916..662f3a384bd 100644 --- a/src/virtio/vulkan/vn_device_memory.c +++ b/src/virtio/vulkan/vn_device_memory.c @@ -434,16 +434,16 @@ vn_GetDeviceMemoryOpaqueCaptureAddress( } VkResult -vn_MapMemory(VkDevice device, - VkDeviceMemory memory, - VkDeviceSize offset, - VkDeviceSize size, - VkMemoryMapFlags flags, - void **ppData) +vn_MapMemory2(VkDevice device, + const VkMemoryMapInfo *pMemoryMapInfo, + void **ppData) { VN_TRACE_FUNC(); struct vn_device *dev = vn_device_from_handle(device); - struct vn_device_memory *mem = vn_device_memory_from_handle(memory); + struct vn_device_memory *mem = + vn_device_memory_from_handle(pMemoryMapInfo->memory); + const VkDeviceSize offset = pMemoryMapInfo->offset; + const VkDeviceSize size = pMemoryMapInfo->size; const struct vk_device_memory *mem_vk = &mem->base.base; const bool need_bo = !mem->base_bo; void *ptr = NULL; @@ -489,9 +489,10 @@ vn_MapMemory(VkDevice device, return VK_SUCCESS; } -void -vn_UnmapMemory(VkDevice device, VkDeviceMemory memory) +VkResult +vn_UnmapMemory2(VkDevice device, const VkMemoryUnmapInfo *pMemoryUnmapInfo) { + return VK_SUCCESS; } VkResult diff --git a/src/virtio/vulkan/vn_feedback.c b/src/virtio/vulkan/vn_feedback.c index d85340455d2..e2625c3419d 100644 --- a/src/virtio/vulkan/vn_feedback.c +++ b/src/virtio/vulkan/vn_feedback.c @@ -99,8 +99,12 @@ vn_feedback_buffer_create(struct vn_device *dev, if (result != VK_SUCCESS) goto out_free_memory; - result = vn_MapMemory(dev_handle, fb_buf->mem_handle, 0, VK_WHOLE_SIZE, 0, - &fb_buf->data); + const VkMemoryMapInfo map_info = { + .sType = VK_STRUCTURE_TYPE_MEMORY_MAP_INFO, + .memory = fb_buf->mem_handle, + .size = VK_WHOLE_SIZE, + }; + result = vn_MapMemory2(dev_handle, &map_info, &fb_buf->data); if (result != VK_SUCCESS) goto out_free_memory; @@ -127,7 +131,11 @@ vn_feedback_buffer_destroy(struct vn_device *dev, { VkDevice dev_handle = vn_device_to_handle(dev); - vn_UnmapMemory(dev_handle, fb_buf->mem_handle); + const VkMemoryUnmapInfo unmap_info = { + .sType = VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO, + .memory = fb_buf->mem_handle, + }; + vn_UnmapMemory2(dev_handle, &unmap_info); vn_FreeMemory(dev_handle, fb_buf->mem_handle, alloc); vn_DestroyBuffer(dev_handle, fb_buf->buf_handle, alloc); vk_free(alloc, fb_buf); diff --git a/src/virtio/vulkan/vn_physical_device.c b/src/virtio/vulkan/vn_physical_device.c index f562e971a0a..c6311c35d64 100644 --- a/src/virtio/vulkan/vn_physical_device.c +++ b/src/virtio/vulkan/vn_physical_device.c @@ -1011,6 +1011,7 @@ vn_physical_device_get_native_extensions( physical_dev->renderer_extensions.EXT_pci_bus_info; #endif + exts->KHR_map_memory2 = true; exts->EXT_physical_device_drm = true; /* use common implementation */ exts->EXT_tooling_info = true;