summaryrefslogtreecommitdiff
path: root/src/amd/vulkan/radv_cmd_buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/amd/vulkan/radv_cmd_buffer.c')
-rw-r--r--src/amd/vulkan/radv_cmd_buffer.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 1f98414bae1..f1751cbfc17 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -6390,6 +6390,17 @@ static void radv_init_color_image_metadata(struct radv_cmd_buffer *cmd_buffer,
cmd_buffer->state.flush_bits |= flush_bits;
}
+static void radv_retile_transition(struct radv_cmd_buffer *cmd_buffer,
+ struct radv_image *image,
+ VkImageLayout src_layout,
+ VkImageLayout dst_layout,
+ unsigned dst_queue_mask)
+{
+ if (src_layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR &&
+ (dst_layout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR ||
+ (dst_queue_mask & (1u << RADV_QUEUE_FOREIGN))))
+ radv_retile_dcc(cmd_buffer, image);
+}
/**
* Handle color image transitions for DCC/FMASK/CMASK.
*/
@@ -6417,9 +6428,8 @@ static void radv_handle_color_image_transition(struct radv_cmd_buffer *cmd_buffe
src_queue_mask, dst_queue_mask,
range);
- if (dst_layout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR &&
- image->retile_map)
- radv_retile_dcc(cmd_buffer, image);
+ if (image->retile_map)
+ radv_retile_transition(cmd_buffer, image, src_layout, dst_layout, dst_queue_mask);
return;
}
@@ -6439,10 +6449,8 @@ static void radv_handle_color_image_transition(struct radv_cmd_buffer *cmd_buffe
fast_clear_flushed = true;
}
- if (src_layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR &&
- dst_layout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR &&
- image->retile_map)
- radv_retile_dcc(cmd_buffer, image);
+ if (image->retile_map)
+ radv_retile_transition(cmd_buffer, image, src_layout, dst_layout, dst_queue_mask);
} else if (radv_image_has_cmask(image) || radv_image_has_fmask(image)) {
if (radv_layout_can_fast_clear(cmd_buffer->device, image, src_layout,
src_render_loop, src_queue_mask) &&