Mesa (staging/21.3): radv: Fix modifier property query.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Oct 14 20:48:05 UTC 2021


Module: Mesa
Branch: staging/21.3
Commit: 09c46de97b8525ff4997e6448076fd8dc3a8e312
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=09c46de97b8525ff4997e6448076fd8dc3a8e312

Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date:   Wed Oct 13 22:37:35 2021 +0200

radv: Fix modifier property query.

radv_get_modifier_flags read the format properties, doesn't write any. Setting
the central format properties based on the drm format properties doesn't make
any sense.

Fixes: 5dee0d9da96 "radv: switch to VK_FORMAT_FEATURE_2_XXX/VkFormatProperties3KHR"
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5498
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Tested-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13357>
(cherry picked from commit b4aa5a3fdd0ec2b3ac3c019e1c323208c0fa1faf)

---

 .pick_status.json             |  2 +-
 src/amd/vulkan/radv_formats.c | 35 ++++++++++++-----------------------
 2 files changed, 13 insertions(+), 24 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 1b6be9711ba..bc00d4bf002 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -67,7 +67,7 @@
         "description": "radv: Fix modifier property query.",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "5dee0d9da961b9a027910ce7e8e16a2f849d9b8d"
     },
diff --git a/src/amd/vulkan/radv_formats.c b/src/amd/vulkan/radv_formats.c
index 93eeb27bed1..8d355d3a28d 100644
--- a/src/amd/vulkan/radv_formats.c
+++ b/src/amd/vulkan/radv_formats.c
@@ -1219,10 +1219,9 @@ features2_to_features(VkFormatFeatureFlags2KHR features2)
 
 static void
 radv_list_drm_format_modifiers(struct radv_physical_device *dev, VkFormat format,
-                               VkFormatProperties2 *pFormatProperties)
+                               const VkFormatProperties3KHR *format_props,
+                               VkDrmFormatModifierPropertiesListEXT *mod_list)
 {
-   VkDrmFormatModifierPropertiesListEXT *mod_list =
-      vk_find_struct(pFormatProperties, DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT);
    unsigned mod_count;
 
    if (!mod_list)
@@ -1253,9 +1252,8 @@ radv_list_drm_format_modifiers(struct radv_physical_device *dev, VkFormat format
 
    mod_list->drmFormatModifierCount = 0;
    for (unsigned i = 0; i < mod_count; ++i) {
-      VkFormatProperties3KHR format_props;
       VkFormatFeatureFlags2KHR features =
-         radv_get_modifier_flags(dev, format, mods[i], &format_props);
+         radv_get_modifier_flags(dev, format, mods[i], format_props);
       unsigned planes = vk_format_get_plane_count(format);
       if (planes == 1) {
          if (ac_modifier_has_dcc_retile(mods[i]))
@@ -1264,13 +1262,6 @@ radv_list_drm_format_modifiers(struct radv_physical_device *dev, VkFormat format
             planes = 2;
       }
 
-      pFormatProperties->formatProperties.linearTilingFeatures =
-         features2_to_features(format_props.linearTilingFeatures);
-      pFormatProperties->formatProperties.optimalTilingFeatures =
-         features2_to_features(format_props.optimalTilingFeatures);
-      pFormatProperties->formatProperties.bufferFeatures =
-         features2_to_features(format_props.bufferFeatures);
-
       if (!features)
          continue;
 
@@ -1289,10 +1280,9 @@ radv_list_drm_format_modifiers(struct radv_physical_device *dev, VkFormat format
 
 static void
 radv_list_drm_format_modifiers_2(struct radv_physical_device *dev, VkFormat format,
-                                 VkFormatProperties2 *pFormatProperties)
+                                 const VkFormatProperties3KHR *format_props,
+                                 VkDrmFormatModifierPropertiesList2EXT *mod_list)
 {
-   VkDrmFormatModifierPropertiesList2EXT *mod_list =
-      vk_find_struct(pFormatProperties, DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT);
    unsigned mod_count;
 
    if (!mod_list)
@@ -1323,9 +1313,8 @@ radv_list_drm_format_modifiers_2(struct radv_physical_device *dev, VkFormat form
 
    mod_list->drmFormatModifierCount = 0;
    for (unsigned i = 0; i < mod_count; ++i) {
-      VkFormatProperties3KHR format_props;
       VkFormatFeatureFlags2KHR features =
-         radv_get_modifier_flags(dev, format, mods[i], &format_props);
+         radv_get_modifier_flags(dev, format, mods[i], format_props);
       unsigned planes = vk_format_get_plane_count(format);
       if (planes == 1) {
          if (ac_modifier_has_dcc_retile(mods[i]))
@@ -1334,10 +1323,6 @@ radv_list_drm_format_modifiers_2(struct radv_physical_device *dev, VkFormat form
             planes = 2;
       }
 
-      pFormatProperties->formatProperties.linearTilingFeatures = format_props.linearTilingFeatures;
-      pFormatProperties->formatProperties.optimalTilingFeatures = format_props.optimalTilingFeatures;
-      pFormatProperties->formatProperties.bufferFeatures = format_props.bufferFeatures;
-
       if (!features)
          continue;
 
@@ -1455,8 +1440,12 @@ radv_GetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice, VkForma
       format_props_extended->bufferFeatures = format_props.bufferFeatures;
    }
 
-   radv_list_drm_format_modifiers(physical_device, format, pFormatProperties);
-   radv_list_drm_format_modifiers_2(physical_device, format, pFormatProperties);
+   radv_list_drm_format_modifiers(
+      physical_device, format, &format_props,
+      vk_find_struct(pFormatProperties, DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT));
+   radv_list_drm_format_modifiers_2(
+      physical_device, format, &format_props,
+      vk_find_struct(pFormatProperties, DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT));
 }
 
 static VkResult



More information about the mesa-commit mailing list