anv: avoid invalid timestamp generation due to skipped commands

We skip the stall emission for STATE_BASE_ADDRESS since this one can
be skipped on Gfx12.5+ and instead add a new sba tracepoint that has
valid timestamps.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Fixes: 0147908a89 ("anv: predicate emission of STATE_BASE_ADDRESS")
Reviewed-by: Casey Bowman <casey.g.bowman@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38256>
This commit is contained in:
Lionel Landwerlin 2025-11-05 12:49:23 +02:00 committed by Marge Bot
parent bea21177f2
commit cff047280a
3 changed files with 18 additions and 0 deletions

View file

@ -395,6 +395,7 @@ extern "C" {
CREATE_DUAL_EVENT_CALLBACK(frame, INTEL_DS_QUEUE_STAGE_FRAME)
CREATE_DUAL_EVENT_CALLBACK(batch, INTEL_DS_QUEUE_STAGE_CMD_BUFFER)
CREATE_DUAL_EVENT_CALLBACK(cmd_buffer, INTEL_DS_QUEUE_STAGE_CMD_BUFFER)
CREATE_DUAL_EVENT_CALLBACK(sba, INTEL_DS_QUEUE_STAGE_CMD_BUFFER)
CREATE_DUAL_EVENT_CALLBACK(render_pass, INTEL_DS_QUEUE_STAGE_RENDER_PASS)
CREATE_DUAL_EVENT_CALLBACK(blorp, INTEL_DS_QUEUE_STAGE_BLORP)
CREATE_DUAL_EVENT_CALLBACK(draw, INTEL_DS_QUEUE_STAGE_DRAW)

View file

@ -126,6 +126,10 @@ def define_tracepoints(args):
begin_end_tp('xfb',
end_pipelined=False)
# STATE_BASE_ADDRESS emission, only for Anv
begin_end_tp('sba',
end_pipelined=False)
# Dynamic rendering tracepoints, only for Anv
begin_end_tp('render_pass',
tp_args=[Arg(type='uint64_t', var='command_buffer_handle', c_format='%" PRIu64 "', perfetto_field=True),

View file

@ -251,6 +251,15 @@ genX(cmd_buffer_emit_state_base_address)(struct anv_cmd_buffer *cmd_buffer)
fill_state_base_addr(cmd_buffer, &sba);
#if GFX_VERx10 >= 125
trace_intel_begin_sba(cmd_buffer->batch.trace);
/* Disable stall tracing to avoid leaving a tracepoint with random
* timestamp if the STATE_BASE_ADDRESS instruction sequence is skipped
* over.
*/
struct u_trace *tmp_trace = cmd_buffer->batch.trace;
cmd_buffer->batch.trace = NULL;
struct mi_builder b;
mi_builder_init(&b, device->info, &cmd_buffer->batch);
mi_builder_set_mocs(&b, isl_mocs(&device->isl_dev, 0, false));
@ -369,6 +378,10 @@ genX(cmd_buffer_emit_state_base_address)(struct anv_cmd_buffer *cmd_buffer)
mi_imm(sba.BindlessSurfaceStateBaseAddress.offset));
mi_goto_target(&b, &t);
cmd_buffer->batch.trace = tmp_trace;
trace_intel_end_sba(cmd_buffer->batch.trace);
#endif
#if GFX_VERx10 >= 125