/* 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;
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 {
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) {
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);