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:
committed by
Marge Bot
parent
8e6f5aab33
commit
b4aa5a3fdd
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user