From ce3a1378920bf5a8b14d07e67abd8d0b63df75ad Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 24 Jan 2025 07:14:30 -0800 Subject: [PATCH] radv: fix the number of drm modifier planes for DCC on GFX12 It's always 1 plane because DCC isn't allocated from the userspace driver. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_formats.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/amd/vulkan/radv_formats.c b/src/amd/vulkan/radv_formats.c index d8410814553..ee0f3e199b7 100644 --- a/src/amd/vulkan/radv_formats.c +++ b/src/amd/vulkan/radv_formats.c @@ -674,8 +674,14 @@ radv_list_drm_format_modifiers(struct radv_physical_device *pdev, VkFormat forma if (!features) continue; - unsigned planes = - vk_format_get_plane_count(format) + ac_modifier_has_dcc(mods[i]) + ac_modifier_has_dcc_retile(mods[i]); + unsigned planes = vk_format_get_plane_count(format); + + if (pdev->info.gfx_level < GFX12) { + /* DCC is transparent to the userspace driver on GFX12 so it doesn't + * need additional planes. + */ + planes += ac_modifier_has_dcc(mods[i]) + ac_modifier_has_dcc_retile(mods[i]); + } vk_outarray_append_typed(VkDrmFormatModifierPropertiesEXT, &out, out_props) { @@ -725,8 +731,14 @@ radv_list_drm_format_modifiers_2(struct radv_physical_device *pdev, VkFormat for if (!features) continue; - unsigned planes = - vk_format_get_plane_count(format) + ac_modifier_has_dcc(mods[i]) + ac_modifier_has_dcc_retile(mods[i]); + unsigned planes = vk_format_get_plane_count(format); + + if (pdev->info.gfx_level < GFX12) { + /* DCC is transparent to the userspace driver on GFX12 so it doesn't + * need additional planes. + */ + planes += ac_modifier_has_dcc(mods[i]) + ac_modifier_has_dcc_retile(mods[i]); + } vk_outarray_append_typed(VkDrmFormatModifierProperties2EXT, &out, out_props) {