From a673c9e414f8db2ebf054464bbea88ddcd3b5a41 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 10 Feb 2026 12:08:51 +0100 Subject: [PATCH] radv/meta: stop fixing up DCC after a partial resolve using compute The decompression pass already resets DCC to its uncompressed state, so this is just redundant. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/meta/radv_meta_resolve_cs.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/amd/vulkan/meta/radv_meta_resolve_cs.c b/src/amd/vulkan/meta/radv_meta_resolve_cs.c index afeaeafdbfb..787a24bc813 100644 --- a/src/amd/vulkan/meta/radv_meta_resolve_cs.c +++ b/src/amd/vulkan/meta/radv_meta_resolve_cs.c @@ -253,11 +253,14 @@ radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer, struct radv_ */ uint32_t queue_mask = radv_image_queue_family_mask(dst_image, cmd_buffer->qf, cmd_buffer->qf); + const bool is_partial_resolve = + (region->dstOffset.x || region->dstOffset.y || region->dstOffset.z || + region->extent.width != dst_image->vk.extent.width || region->extent.height != dst_image->vk.extent.height || + region->extent.depth != dst_image->vk.extent.depth); + if (!radv_image_use_dcc_image_stores(device, dst_image) && radv_layout_dcc_compressed(device, dst_image, region->dstSubresource.mipLevel, dst_image_layout, queue_mask) && - (region->dstOffset.x || region->dstOffset.y || region->dstOffset.z || - region->extent.width != dst_image->vk.extent.width || region->extent.height != dst_image->vk.extent.height || - region->extent.depth != dst_image->vk.extent.depth)) { + is_partial_resolve) { radv_decompress_dcc(cmd_buffer, dst_image, &(VkImageSubresourceRange){ .aspectMask = region->dstSubresource.aspectMask, @@ -345,7 +348,8 @@ radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer, struct radv_ radv_meta_restore(&saved_state, cmd_buffer); if (!radv_image_use_dcc_image_stores(device, dst_image) && - radv_layout_dcc_compressed(device, dst_image, region->dstSubresource.mipLevel, dst_image_layout, queue_mask)) { + radv_layout_dcc_compressed(device, dst_image, region->dstSubresource.mipLevel, dst_image_layout, queue_mask) && + !is_partial_resolve) { cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_CS_PARTIAL_FLUSH | RADV_CMD_FLAG_INV_VCACHE;