From ef693c5785b4c7f24a672c57601d9778b6b7fa40 Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Wed, 4 Sep 2024 08:52:07 -0400 Subject: [PATCH] tu: Fix flushes for feedback_invalidate case We also have to wait for the blits to land, and WFI so that everything finishes before any draws. Noticed when adding the equivalent thing for dynamic renderpasses. Part-of: --- src/freedreno/vulkan/tu_cmd_buffer.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index a2b9d4c1f1d..72089fc773c 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -4637,8 +4637,11 @@ tu_CmdBeginRenderPass2(VkCommandBuffer commandBuffer, cmd->state.cache.pending_flush_bits; cmd->state.renderpass_cache.flush_bits = 0; - if (pass->subpasses[0].feedback_invalidate) - cmd->state.renderpass_cache.flush_bits |= TU_CMD_FLAG_CACHE_INVALIDATE; + if (pass->subpasses[0].feedback_invalidate) { + cmd->state.renderpass_cache.flush_bits |= + TU_CMD_FLAG_CACHE_INVALIDATE | TU_CMD_FLAG_BLIT_CACHE_CLEAN | + TU_CMD_FLAG_WAIT_FOR_IDLE; + } tu_lrz_begin_renderpass(cmd); @@ -4973,8 +4976,11 @@ tu_CmdNextSubpass2(VkCommandBuffer commandBuffer, /* Handle dependencies for the next subpass */ tu_subpass_barrier(cmd, &cmd->state.subpass->start_barrier, false); - if (cmd->state.subpass->feedback_invalidate) - cmd->state.renderpass_cache.flush_bits |= TU_CMD_FLAG_CACHE_INVALIDATE; + if (cmd->state.subpass->feedback_invalidate) { + cmd->state.renderpass_cache.flush_bits |= + TU_CMD_FLAG_CACHE_INVALIDATE | TU_CMD_FLAG_BLIT_CACHE_CLEAN | + TU_CMD_FLAG_WAIT_FOR_IDLE; + } tu_emit_subpass_begin(cmd); }