From a7f63a5dbb1f621a48e227f4c1c092ed9ffe65a2 Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Thu, 6 Nov 2025 15:38:40 +0100 Subject: [PATCH] tu: Do not WAIT_FOR_BR if concurrent binning is disabled The sync emitted on TU_CMD_FLAG_WAIT_FOR_BR didn't disable CB when CB was previously disabled for the renderpass, this resulted in less resources vertex processing resources available for BR. We can just not emit the sync instead, since next time CB is enabled it will force the sync. Signed-off-by: Danylo Piliaiev Part-of: --- src/freedreno/vulkan/tu_cmd_buffer.cc | 5 ++++- src/freedreno/vulkan/tu_cmd_buffer.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index de8a60fde04..486178a548a 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -364,7 +364,8 @@ tu_emit_cache_flush(struct tu_cmd_buffer *cmd_buffer) tu6_emit_flushes(cmd_buffer, cs, cache); - if ((flushes & TU_CMD_FLAG_WAIT_FOR_BR) && CHIP >= A7XX) { + if ((flushes & TU_CMD_FLAG_WAIT_FOR_BR) && CHIP >= A7XX && + !(cmd_buffer->state.pass && cmd_buffer->state.renderpass_cb_disabled)) { trace_start_concurrent_binning_barrier(&cmd_buffer->trace, cs, cmd_buffer); tu_cs_emit_pkt7(cs, CP_THREAD_CONTROL, 1); @@ -2800,6 +2801,7 @@ tu7_emit_concurrent_binning(struct tu_cmd_buffer *cmd, struct tu_cs *cs, tu_cs_emit(cs, CP_THREAD_CONTROL_0_THREAD(CP_SET_THREAD_BR) | CP_THREAD_CONTROL_0_CONCURRENT_BIN_DISABLE); tu7_set_pred_bit(cs, TU_PREDICATE_CB_ENABLED, false); + cmd->state.renderpass_cb_disabled = true; return false; } tu7_thread_control(cs, CP_SET_THREAD_BOTH); @@ -3900,6 +3902,7 @@ static void tu_reset_render_pass(struct tu_cmd_buffer *cmd_buffer) cmd_buffer->state.attachments = NULL; cmd_buffer->state.clear_values = NULL; cmd_buffer->state.gmem_layout = TU_GMEM_LAYOUT_COUNT; /* invalid value to prevent looking up gmem offsets */ + cmd_buffer->state.renderpass_cb_disabled = false; memset(&cmd_buffer->state.rp, 0, sizeof(cmd_buffer->state.rp)); /* LRZ is not valid next time we use it */ diff --git a/src/freedreno/vulkan/tu_cmd_buffer.h b/src/freedreno/vulkan/tu_cmd_buffer.h index 60c7e3435f2..d203e3cd854 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.h +++ b/src/freedreno/vulkan/tu_cmd_buffer.h @@ -612,6 +612,7 @@ struct tu_cmd_state uint32_t total_dispatches; unsigned tile_render_pass_count; + bool renderpass_cb_disabled; }; struct tu_vis_stream_patchpoint {