Module: Mesa Branch: staging/21.3 Commit: 09c46de97b8525ff4997e6448076fd8dc3a8e312 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=09c46de97b8525ff4997e6448076fd8dc3a8e312
Author: Bas Nieuwenhuizen <[email protected]> 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 <[email protected]> Tested-By: Mike Blumenkrantz <[email protected]> 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
