From 9c391fe47eded5c99503c45ce90ade206b967444 Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Wed, 4 May 2022 21:48:12 +0200 Subject: [PATCH] radv: Mark all formats as DCC compatible with each other on gfx11. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Samuel Pitoiset Reviewed-by: Timur Kristóf Part-of: --- src/amd/vulkan/radv_formats.c | 7 ++++++- src/amd/vulkan/radv_image.c | 4 ++-- src/amd/vulkan/radv_meta_copy.c | 3 ++- src/amd/vulkan/radv_private.h | 3 ++- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/amd/vulkan/radv_formats.c b/src/amd/vulkan/radv_formats.c index 5daa8f23113..8561b72160a 100644 --- a/src/amd/vulkan/radv_formats.c +++ b/src/amd/vulkan/radv_formats.c @@ -2084,13 +2084,18 @@ radv_get_dcc_channel_type(const struct util_format_description *desc, enum dcc_c /* Return if it's allowed to reinterpret one format as another with DCC enabled. */ bool -radv_dcc_formats_compatible(VkFormat format1, VkFormat format2, bool *sign_reinterpret) +radv_dcc_formats_compatible(enum amd_gfx_level gfx_level, VkFormat format1, VkFormat format2, + bool *sign_reinterpret) { const struct util_format_description *desc1, *desc2; enum dcc_channel_type type1, type2; unsigned size1, size2; int i; + /* All formats are compatible on GFX11. */ + if (gfx_level >= GFX11) + return true; + if (format1 == format2) return true; diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index cd1a6376789..ce39d3f5ceb 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -179,8 +179,8 @@ radv_are_formats_dcc_compatible(const struct radv_physical_device *pdev, const v if (format_list->pViewFormats[i] == VK_FORMAT_UNDEFINED) continue; - if (!radv_dcc_formats_compatible(format, format_list->pViewFormats[i], - sign_reinterpret)) + if (!radv_dcc_formats_compatible(pdev->rad_info.gfx_level, format, + format_list->pViewFormats[i], sign_reinterpret)) return false; } } else { diff --git a/src/amd/vulkan/radv_meta_copy.c b/src/amd/vulkan/radv_meta_copy.c index 464cda90e23..08e09c275f9 100644 --- a/src/amd/vulkan/radv_meta_copy.c +++ b/src/amd/vulkan/radv_meta_copy.c @@ -492,7 +492,8 @@ copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image, bool need_dcc_sign_reinterpret = false; if (!src_compressed || - (radv_dcc_formats_compatible(b_src.format, b_dst.format, &need_dcc_sign_reinterpret) && + (radv_dcc_formats_compatible(cmd_buffer->device->physical_device->rad_info.gfx_level, + b_src.format, b_dst.format, &need_dcc_sign_reinterpret) && !need_dcc_sign_reinterpret)) { b_src.format = b_dst.format; } else if (!dst_compressed) { diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 9c65d5b1ff6..fed95ce1594 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -2101,7 +2101,8 @@ bool radv_is_storage_image_format_supported(struct radv_physical_device *physica VkFormat format); bool radv_is_colorbuffer_format_supported(const struct radv_physical_device *pdevice, VkFormat format, bool *blendable); -bool radv_dcc_formats_compatible(VkFormat format1, VkFormat format2, bool *sign_reinterpret); +bool radv_dcc_formats_compatible(enum amd_gfx_level gfx_level, VkFormat format1, VkFormat format2, + bool *sign_reinterpret); bool radv_is_atomic_format_supported(VkFormat format); bool radv_device_supports_etc(struct radv_physical_device *physical_device);