mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-15 02:20:29 +01:00
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:
parent
bea21177f2
commit
cff047280a
3 changed files with 18 additions and 0 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue