Module: Mesa Branch: staging/23.2 Commit: 4232287b918f27d97de7b48d734535f529ce7d5c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4232287b918f27d97de7b48d734535f529ce7d5c
Author: Mike Blumenkrantz <[email protected]> Date: Fri Sep 29 09:15:31 2023 -0400 radv: fix external handle type queries for dmabuf/fd the intent of the VkExternalMemoryProperties API is that all compatible handle types are returned, not just the type being queried. these two types are compatible, so return both when both are supported cc: mesa-stable Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25474> (cherry picked from commit a524f6b5d4fb04716a4d3c0e0f9014175e633595) --- .pick_status.json | 2 +- src/amd/vulkan/radv_formats.c | 31 +++++++++++-------------------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 43aa14a1fe4..2711049eda6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2754,7 +2754,7 @@ "description": "radv: fix external handle type queries for dmabuf/fd", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/vulkan/radv_formats.c b/src/amd/vulkan/radv_formats.c index f6c69504c5c..003e5624227 100644 --- a/src/amd/vulkan/radv_formats.c +++ b/src/amd/vulkan/radv_formats.c @@ -1541,28 +1541,19 @@ get_external_image_format_properties(struct radv_physical_device *physical_devic case VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT: if (pImageFormatInfo->tiling != VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT) break; - - switch (pImageFormatInfo->type) { - case VK_IMAGE_TYPE_2D: - flags = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT | VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT; - - compat_flags = export_flags = VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT; - break; - default: - break; - } - break; + FALLTHROUGH; case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT: - switch (pImageFormatInfo->type) { - case VK_IMAGE_TYPE_2D: - flags = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT | VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT; - if (pImageFormatInfo->tiling != VK_IMAGE_TILING_LINEAR) - flags |= VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT; - - compat_flags = export_flags = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT; - break; - default: + if (pImageFormatInfo->type != VK_IMAGE_TYPE_2D) break; + flags = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT | VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT; + if (handleType == VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT && + pImageFormatInfo->tiling != VK_IMAGE_TILING_LINEAR) + flags |= VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT; + + compat_flags = export_flags = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT; + if (pImageFormatInfo->tiling == VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT) { + compat_flags |= VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT; + export_flags |= VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT; } break; case VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID:
