From a8725ec3dc2aa23598071d2505131253c433b8c6 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 1 Nov 2021 09:21:01 +1000 Subject: [PATCH] vulkan/wsi: set correct bits for host allocations/exports for images. Lavapipe was hitting asserts in this area due to incorrect bits being specified. Set the handle type depending on the sw flag, and set a correct handle type for the memory host ptrs. v2: add image export struct to image creation (Jason) Fixes: 895d3399f7fb ("lavapipe: add support for KHR_external_memory_fd") Reviewed-by: Roland Scheidegger Reviewed-by: Jason Ekstrand Part-of: --- src/vulkan/wsi/wsi_common_drm.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/vulkan/wsi/wsi_common_drm.c b/src/vulkan/wsi/wsi_common_drm.c index 496143c6f52..09684b2272d 100644 --- a/src/vulkan/wsi/wsi_common_drm.c +++ b/src/vulkan/wsi/wsi_common_drm.c @@ -120,9 +120,15 @@ wsi_create_native_image(const struct wsi_swapchain *chain, struct wsi_image_create_info image_wsi_info = { .sType = VK_STRUCTURE_TYPE_WSI_IMAGE_CREATE_INFO_MESA, }; + VkExternalMemoryImageCreateInfo ext_mem_image_create_info = { + .sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO, + .pNext = &image_wsi_info, + .handleTypes = wsi->sw ? VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT : + VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT, + }; VkImageCreateInfo image_info = { .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, - .pNext = &image_wsi_info, + .pNext = &ext_mem_image_create_info, .flags = 0, .imageType = VK_IMAGE_TYPE_2D, .format = pCreateInfo->imageFormat, @@ -319,7 +325,8 @@ wsi_create_native_image(const struct wsi_swapchain *chain, const VkExportMemoryAllocateInfo memory_export_info = { .sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO, .pNext = &memory_wsi_info, - .handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT, + .handleTypes = wsi->sw ? VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT : + VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT, }; const VkMemoryDedicatedAllocateInfo memory_dedicated_info = { .sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO, @@ -331,6 +338,7 @@ wsi_create_native_image(const struct wsi_swapchain *chain, .sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT, .pNext = &memory_dedicated_info, .pHostPointer = sw_host_ptr, + .handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT, }; const VkMemoryAllocateInfo memory_info = { .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,