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>
This commit is contained in:
Bas Nieuwenhuizen
2021-10-13 22:37:35 +02:00
committed by Marge Bot
parent 8e6f5aab33
commit b4aa5a3fdd
+12 -23
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