From 2786928ce8d6803cabed6914e9f1a44d68e3b1d6 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 29 May 2024 15:47:51 +0200 Subject: [PATCH] radv: do not flush L2 metadata on GFX12 This doesn't seem to exist. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 5187fdcf560..744906a790a 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -6917,6 +6917,7 @@ radv_dst_access_flush(struct radv_cmd_buffer *cmd_buffer, VkAccessFlags2 dst_fla enum radv_cmd_flush_bits flush_bits = 0; bool flush_CB = true, flush_DB = true; bool image_is_coherent = image ? image->l2_coherent : false; + bool flush_L2_metadata = false; if (image) { if (!(image->vk.usage & VK_IMAGE_USAGE_STORAGE_BIT)) { @@ -6930,6 +6931,8 @@ radv_dst_access_flush(struct radv_cmd_buffer *cmd_buffer, VkAccessFlags2 dst_fla has_DB_meta = false; } + flush_L2_metadata = (has_CB_meta || has_DB_meta) && pdev->info.gfx_level < GFX12; + /* All the L2 invalidations below are not the CB/DB. So if there are no incoherent images * in the L2 cache in CB/DB mode then they are already usable from all the other L2 clients. */ image_is_coherent |= can_skip_buffer_l2_flushes(device) && !cmd_buffer->state.rb_noncoherent_dirty; @@ -6962,7 +6965,7 @@ radv_dst_access_flush(struct radv_cmd_buffer *cmd_buffer, VkAccessFlags2 dst_fla case VK_ACCESS_2_TRANSFER_WRITE_BIT: flush_bits |= RADV_CMD_FLAG_INV_VCACHE; - if (has_CB_meta || has_DB_meta) + if (flush_L2_metadata) flush_bits |= RADV_CMD_FLAG_INV_L2_METADATA; if (!image_is_coherent) flush_bits |= RADV_CMD_FLAG_INV_L2; @@ -6980,7 +6983,7 @@ radv_dst_access_flush(struct radv_cmd_buffer *cmd_buffer, VkAccessFlags2 dst_fla FALLTHROUGH; case VK_ACCESS_2_SHADER_SAMPLED_READ_BIT: flush_bits |= RADV_CMD_FLAG_INV_VCACHE; - if (has_CB_meta || has_DB_meta) + if (flush_L2_metadata) flush_bits |= RADV_CMD_FLAG_INV_L2_METADATA; if (!image_is_coherent) flush_bits |= RADV_CMD_FLAG_INV_L2; @@ -7010,7 +7013,7 @@ radv_dst_access_flush(struct radv_cmd_buffer *cmd_buffer, VkAccessFlags2 dst_fla flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_DB_META; break; case VK_ACCESS_2_MEMORY_READ_BIT: - if (has_CB_meta || has_DB_meta) + if (flush_L2_metadata) flush_bits |= RADV_CMD_FLAG_INV_L2_METADATA; FALLTHROUGH; case VK_ACCESS_2_MEMORY_WRITE_BIT: