From 20bb9827882d11e7636b3484d66d7b824aa84eb6 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 24 Feb 2025 18:20:25 +0100 Subject: [PATCH] radv: fix missing SQTT barriers for fbfetch color/depth decompressions SQTT layout transitions need to be inside SQTT barrier. Otherwise, this throws an assertion in RADV and might also crash when the capture is opened with RGP. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12664 Cc: mesa-stable Signed-off-by: Samuel Pitoiset Part-of: (cherry picked from commit 67c150bf9e4bd2aa697e84983500eab3546259df) --- .pick_status.json | 2 +- src/amd/vulkan/radv_cmd_buffer.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 4266c5b5901..3733db7dc0b 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1654,7 +1654,7 @@ "description": "radv: fix missing SQTT barriers for fbfetch color/depth decompressions", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index e47ddf1b06b..b49c013a37e 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -8847,11 +8847,15 @@ radv_handle_color_fbfetch_output(struct radv_cmd_buffer *cmd_buffer, uint32_t in radv_src_access_flush(cmd_buffer, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT, 0, att->iview->image, &range); + radv_describe_barrier_start(cmd_buffer, RGP_BARRIER_UNKNOWN_REASON); + /* Force a transition to FEEDBACK_LOOP_OPTIMAL to decompress DCC. */ radv_handle_image_transition(cmd_buffer, att->iview->image, att->layout, VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT, RADV_QUEUE_GENERAL, RADV_QUEUE_GENERAL, &range, NULL); + radv_describe_barrier_end(cmd_buffer); + att->layout = VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT; cmd_buffer->state.flush_bits |= radv_dst_access_flush( @@ -8891,11 +8895,15 @@ radv_handle_depth_fbfetch_output(struct radv_cmd_buffer *cmd_buffer) radv_src_access_flush(cmd_buffer, VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT, VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, 0, att->iview->image, &range); + radv_describe_barrier_start(cmd_buffer, RGP_BARRIER_UNKNOWN_REASON); + /* Force a transition to FEEDBACK_LOOP_OPTIMAL to decompress HTILE. */ radv_handle_image_transition(cmd_buffer, att->iview->image, att->layout, VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT, RADV_QUEUE_GENERAL, RADV_QUEUE_GENERAL, &range, NULL); + radv_describe_barrier_end(cmd_buffer); + att->layout = VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT; att->stencil_layout = VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT;