Mesa (main): v3dv: handle IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Aug 2 10:41:30 UTC 2021


Module: Mesa
Branch: main
Commit: 1815a76e3d7dd1b05da360f177a22e36f202748b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1815a76e3d7dd1b05da360f177a22e36f202748b

Author: Iago Toral Quiroga <itoral at igalia.com>
Date:   Wed Jul 28 13:01:16 2021 +0200

v3dv: handle IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT

Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12098>

---

 src/broadcom/vulkan/v3dv_image.c | 30 ++++++++++++++++++++----------
 1 file changed, 20 insertions(+), 10 deletions(-)

diff --git a/src/broadcom/vulkan/v3dv_image.c b/src/broadcom/vulkan/v3dv_image.c
index 15d896a85f6..a7662fc74c2 100644
--- a/src/broadcom/vulkan/v3dv_image.c
+++ b/src/broadcom/vulkan/v3dv_image.c
@@ -275,18 +275,28 @@ create_image(struct v3dv_device *device,
       const VkImageDrmFormatModifierListCreateInfoEXT *mod_info =
          vk_find_struct_const(pCreateInfo->pNext,
                               IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT);
-      assert(mod_info);
-      for (uint32_t i = 0; i < mod_info->drmFormatModifierCount; i++) {
-         switch (mod_info->pDrmFormatModifiers[i]) {
-         case DRM_FORMAT_MOD_LINEAR:
-            if (modifier == DRM_FORMAT_MOD_INVALID)
-               modifier = DRM_FORMAT_MOD_LINEAR;
-            break;
-         case DRM_FORMAT_MOD_BROADCOM_UIF:
-            modifier = DRM_FORMAT_MOD_BROADCOM_UIF;
-            break;
+      const VkImageDrmFormatModifierExplicitCreateInfoEXT *explicit_mod_info =
+         vk_find_struct_const(pCreateInfo->pNext,
+                              IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT);
+      assert(mod_info || explicit_mod_info);
+
+      if (mod_info) {
+         for (uint32_t i = 0; i < mod_info->drmFormatModifierCount; i++) {
+            switch (mod_info->pDrmFormatModifiers[i]) {
+            case DRM_FORMAT_MOD_LINEAR:
+               if (modifier == DRM_FORMAT_MOD_INVALID)
+                  modifier = DRM_FORMAT_MOD_LINEAR;
+               break;
+            case DRM_FORMAT_MOD_BROADCOM_UIF:
+               modifier = DRM_FORMAT_MOD_BROADCOM_UIF;
+               break;
+            }
          }
+      } else {
+         modifier = explicit_mod_info->drmFormatModifier;
       }
+      assert(modifier == DRM_FORMAT_MOD_LINEAR ||
+             modifier == DRM_FORMAT_MOD_BROADCOM_UIF);
    } else {
       const struct wsi_image_create_info *wsi_info =
          vk_find_struct_const(pCreateInfo->pNext, WSI_IMAGE_CREATE_INFO_MESA);



More information about the mesa-commit mailing list