Module: Mesa
Branch: staging/23.1
Commit: 7d2596ab03347a3829e8ceafc187c348f2b75e7c
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7d2596ab03347a3829e8ceafc187c348f2b75e7c

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 | 33 +++++++++++----------------------
 2 files changed, 12 insertions(+), 23 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index ac5a894a7cb..0d4cc5f860f 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -49,7 +49,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
     },
diff --git a/src/amd/vulkan/radv_formats.c b/src/amd/vulkan/radv_formats.c
index 0df99671407..32e87f64fbf 100644
--- a/src/amd/vulkan/radv_formats.c
+++ b/src/amd/vulkan/radv_formats.c
@@ -1706,30 +1706,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:

Reply via email to