Module: Mesa Branch: main Commit: 8f60ccf9695e690afb40284b92c2f310ce2f21ac URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8f60ccf9695e690afb40284b92c2f310ce2f21ac
Author: Chia-I Wu <[email protected]> Date: Mon Oct 30 14:39:13 2023 -0700 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> --- src/amd/vulkan/radv_formats.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/amd/vulkan/radv_formats.c b/src/amd/vulkan/radv_formats.c index 235af071ae1..103d982de0b 100644 --- a/src/amd/vulkan/radv_formats.c +++ b/src/amd/vulkan/radv_formats.c @@ -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){
