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: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31261>
This commit is contained in:
Connor Abbott 2024-09-04 08:52:07 -04:00 committed by Marge Bot
parent cad2ca74d9
commit ef693c5785

View file

@ -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<CHIP>(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<CHIP>(cmd);
}