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: 5dee0d9da9 "radv: switch to VK_FORMAT_FEATURE_2_XXX/VkFormatProperties3KHR"
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5498
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Tested-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13357>
(cherry picked from commit b4aa5a3fdd)
This commit is contained in:
Bas Nieuwenhuizen 2021-10-13 22:37:35 +02:00 committed by Eric Engestrom
parent 70cd17bbf1
commit 81fe3260e0
2 changed files with 13 additions and 24 deletions

View file

@ -1795,7 +1795,7 @@
"description": "radv: Fix modifier property query.",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "5dee0d9da961b9a027910ce7e8e16a2f849d9b8d"
},

View file

@ -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