From e6735409eefaec52ef78acecd3f3e7c310c63887 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 6 Mar 2023 19:06:17 +0100 Subject: [PATCH] radv: disable DCC with signedness reinterpretation on GFX11 All formats should be compatible on GFX11 but for some weird reasons DCC with signedness reinterpretation doesn't work as expected, like R8_UINT<->R8_SINT. Note that RadeonSI also has issues with this. This might be a hardware bug on RDNA3. This fixes DCC issues with Cyberpunk and A Plague Tale: Requiem. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/8020 Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/8371 Cc: mesa-stable Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_formats.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/amd/vulkan/radv_formats.c b/src/amd/vulkan/radv_formats.c index e6fb0266e39..5af81a80590 100644 --- a/src/amd/vulkan/radv_formats.c +++ b/src/amd/vulkan/radv_formats.c @@ -2100,10 +2100,6 @@ radv_dcc_formats_compatible(enum amd_gfx_level gfx_level, VkFormat format1, VkFo unsigned size1, size2; int i; - /* All formats are compatible on GFX11. */ - if (gfx_level >= GFX11) - return true; - if (format1 == format2) return true; @@ -2126,8 +2122,16 @@ radv_dcc_formats_compatible(enum amd_gfx_level gfx_level, VkFormat format1, VkFo (type1 == dcc_channel_float) != (type2 == dcc_channel_float) || size1 != size2) return false; - if (type1 != type2) + if (type1 != type2) { + /* FIXME: All formats should be compatible on GFX11 but for some reasons DCC with signedness + * reinterpretation doesn't work as expected, like R8_UINT<->R8_SINT. Note that disabling + * fast-clears doesn't help. + */ + if (gfx_level >= GFX11) + return false; + *sign_reinterpret = true; + } return true; }