radv: fix VkDrmFormatModifierProperties2EXT for multi-planar formats

Do not report DCC modifiers for multi-planar formats.  We don't support
DCC for them and drmFormatModifierPlaneCount had incorrect values.

Fix vkGetImageSubresourceLayout for multi-planar images with modifiers.
In that case, memory planes and format planes are equivalent.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25964>
This commit is contained in:
Chia-I Wu 2023-10-30 14:39:13 -07:00 committed by Marge Bot
parent 90dda31901
commit 8f60ccf969

View file

@ -1091,6 +1091,10 @@ radv_get_modifier_flags(struct radv_physical_device *dev, VkFormat format, uint6
features &= ~VK_FORMAT_FEATURE_2_DISJOINT_BIT;
if (ac_modifier_has_dcc(modifier)) {
/* We don't enable DCC for multi-planar formats */
if (vk_format_get_plane_count(format) > 1)
return 0;
/* Only disable support for STORAGE_IMAGE on modifiers that
* do not support DCC image stores.
*/
@ -1136,17 +1140,12 @@ radv_list_drm_format_modifiers(struct radv_physical_device *dev, VkFormat format
for (unsigned i = 0; i < mod_count; ++i) {
VkFormatFeatureFlags2 features = 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]))
planes = 3;
else if (ac_modifier_has_dcc(mods[i]))
planes = 2;
}
if (!features)
continue;
unsigned planes =
vk_format_get_plane_count(format) + ac_modifier_has_dcc(mods[i]) + ac_modifier_has_dcc_retile(mods[i]);
vk_outarray_append_typed(VkDrmFormatModifierPropertiesEXT, &out, out_props)
{
*out_props = (VkDrmFormatModifierPropertiesEXT){
@ -1192,17 +1191,12 @@ radv_list_drm_format_modifiers_2(struct radv_physical_device *dev, VkFormat form
for (unsigned i = 0; i < mod_count; ++i) {
VkFormatFeatureFlags2 features = 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]))
planes = 3;
else if (ac_modifier_has_dcc(mods[i]))
planes = 2;
}
if (!features)
continue;
unsigned planes =
vk_format_get_plane_count(format) + ac_modifier_has_dcc(mods[i]) + ac_modifier_has_dcc_retile(mods[i]);
vk_outarray_append_typed(VkDrmFormatModifierProperties2EXT, &out, out_props)
{
*out_props = (VkDrmFormatModifierProperties2EXT){