tu: Add a reason for concurrent binning disablement to RP tracepoint

Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38258>
This commit is contained in:
Danylo Piliaiev 2025-11-05 13:06:05 +01:00 committed by Marge Bot
parent 6b0df4b01a
commit 9c4d2a1f51
3 changed files with 24 additions and 5 deletions

View file

@ -2702,7 +2702,8 @@ tu_trace_start_render_pass(struct tu_cmd_buffer *cmd)
trace_start_render_pass(&cmd->trace, &cmd->cs, cmd, cmd->state.framebuffer,
cmd->state.tiling, max_samples, clear_cpp,
load_cpp, store_cpp, has_depth, ubwc);
load_cpp, store_cpp, has_depth, ubwc,
cmd->state.rp.cb_disable_reason ? cmd->state.rp.cb_disable_reason : "");
}
template <chip CHIP>
@ -2767,16 +2768,29 @@ tu_emit_renderpass_begin(struct tu_cmd_buffer *cmd)
cmd->state.fdm_enabled = cmd->state.pass->has_fdm;
}
static inline bool
tu7_cb_disable_reason(bool disable_cb,
struct tu_cmd_buffer *cmd,
const char *reason)
{
if (disable_cb && !cmd->state.rp.cb_disable_reason) {
cmd->state.rp.cb_disable_reason = reason;
}
return disable_cb;
}
static bool
tu7_emit_concurrent_binning(struct tu_cmd_buffer *cmd, struct tu_cs *cs,
bool disable_cb)
{
if (disable_cb ||
if (tu7_cb_disable_reason(disable_cb, cmd, "disable_cb") ||
/* LRZ can only be cleared via fast clear in BV. Disable CB if we can't
* use it.
*/
!cmd->state.lrz.fast_clear ||
TU_DEBUG(NO_CONCURRENT_BINNING)) {
tu7_cb_disable_reason(!cmd->state.lrz.fast_clear, cmd,
"LRZ fast clear disabled") ||
tu7_cb_disable_reason(TU_DEBUG(NO_CONCURRENT_BINNING), cmd,
"TU_DEBUG(NO_CONCURRENT_BINNING)")) {
tu_cs_emit_pkt7(cs, CP_THREAD_CONTROL, 1);
tu_cs_emit(cs, CP_THREAD_CONTROL_0_THREAD(CP_SET_THREAD_BR) |
CP_THREAD_CONTROL_0_CONCURRENT_BIN_DISABLE);
@ -2972,6 +2986,9 @@ tu7_emit_concurrent_binning_gmem(struct tu_cmd_buffer *cmd, struct tu_cs *cs,
cmd->state.rp.has_vtx_stats_query_in_rp ||
cmd->state.prim_counters_running > 0;
tu7_cb_disable_reason(disable_cb, cmd,
"xfb/prim-gen/prim-counters/vtx-stats query is running");
tu7_cb_disable_reason(!use_hw_binning, cmd, "hw binning disabled");
if (!tu7_emit_concurrent_binning(cmd, cs, disable_cb || !use_hw_binning))
return false;

View file

@ -345,6 +345,7 @@ struct tu_render_pass_state
uint32_t lrz_write_disabled_at_draw;
const char *gmem_disable_reason;
const char *cb_disable_reason;
};
/* These are the states of the suspend/resume state machine. In addition to

View file

@ -102,7 +102,8 @@ begin_end_tp('render_pass',
Arg(type='uint8_t', var='loadCPP', c_format='%u'),
Arg(type='uint8_t', var='storeCPP', c_format='%u'),
Arg(type='bool', var='hasDepth', c_format='%s', to_prim_type='({} ? "true" : "false")'),
Arg(type='str', var='ubwc', c_format='%s', length_arg='11', copy_func='strncpy'),],
Arg(type='str', var='ubwc', c_format='%s', length_arg='11', copy_func='strncpy'),
Arg(type='const char *', var='cbDisableReason', c_format='%s'),],
tp_struct=[Arg(type='uint16_t', name='width', var='fb->width', c_format='%u'),
Arg(type='uint16_t', name='height', var='fb->height', c_format='%u'),
Arg(type='uint8_t', name='attachment_count', var='fb->attachment_count', c_format='%u'),