Mesa (main): zink: populate modifier props onto screen object during init

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jul 13 00:32:41 UTC 2021


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Thu Apr  8 16:10:24 2021 -0400

zink: populate modifier props onto screen object during init

Acked-by: Dave Airlie <airlied at redhat.com>
Reviewed-by: Emil Velikov <emil.l.velikov at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10782>

---

 src/gallium/drivers/zink/zink_screen.c | 18 ++++++++++++++++++
 src/gallium/drivers/zink/zink_screen.h |  6 ++++++
 2 files changed, 24 insertions(+)

diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c
index 8d45decd194..ecb2b373aa4 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -1463,8 +1463,26 @@ populate_format_props(struct zink_screen *screen)
       if (screen->vk.GetPhysicalDeviceFormatProperties2) {
          VkFormatProperties2 props = {0};
          props.sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2;
+
+         VkDrmFormatModifierPropertiesListEXT mod_props;
+         VkDrmFormatModifierPropertiesEXT mods[128];
+         if (screen->info.have_EXT_image_drm_format_modifier) {
+            mod_props.sType = VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT;
+            mod_props.pNext = NULL;
+            mod_props.drmFormatModifierCount = ARRAY_SIZE(mods);
+            mod_props.pDrmFormatModifierProperties = mods;
+            props.pNext = &mod_props;
+         }
          screen->vk.GetPhysicalDeviceFormatProperties2(screen->pdev, format, &props);
          screen->format_props[i] = props.formatProperties;
+         if (screen->info.have_EXT_image_drm_format_modifier && mod_props.drmFormatModifierCount) {
+            screen->modifier_props[i].drmFormatModifierCount = mod_props.drmFormatModifierCount;
+            screen->modifier_props[i].pDrmFormatModifierProperties = ralloc_array(screen, VkDrmFormatModifierPropertiesEXT, mod_props.drmFormatModifierCount);
+            if (mod_props.pDrmFormatModifierProperties) {
+               for (unsigned j = 0; j < mod_props.drmFormatModifierCount; j++)
+                  screen->modifier_props[i].pDrmFormatModifierProperties[j] = mod_props.pDrmFormatModifierProperties[j];
+            }
+         }
       } else
          vkGetPhysicalDeviceFormatProperties(screen->pdev, format, &screen->format_props[i]);
    }
diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h
index b8af48f726c..da911f958ee 100644
--- a/src/gallium/drivers/zink/zink_screen.h
+++ b/src/gallium/drivers/zink/zink_screen.h
@@ -61,6 +61,11 @@ enum zink_descriptor_mode {
    ZINK_DESCRIPTOR_MODE_NOTEMPLATES,
 };
 
+struct zink_modifier_prop {
+    uint32_t                             drmFormatModifierCount;
+    VkDrmFormatModifierPropertiesEXT*    pDrmFormatModifierProperties;
+};
+
 struct zink_screen {
    struct pipe_screen base;
    bool threaded;
@@ -144,6 +149,7 @@ struct zink_screen {
    } driconf;
 
    VkFormatProperties format_props[PIPE_FORMAT_COUNT];
+   struct zink_modifier_prop modifier_props[PIPE_FORMAT_COUNT];
    struct {
       uint32_t image_view;
       uint32_t buffer_view;



More information about the mesa-commit mailing list