mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 00:49:04 +02: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> (cherry picked from commitcff047280a) Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38432>
This commit is contained in:
parent
96d959986c
commit
478d92171d
4 changed files with 19 additions and 1 deletions
|
|
@ -1144,7 +1144,7 @@
|
|||
"description": "anv: avoid invalid timestamp generation due to skipped commands",
|
||||
"nominated": true,
|
||||
"nomination_type": 2,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "0147908a899958fe7ef1f74218ee20bf1a24175c",
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -249,6 +249,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));
|
||||
|
|
@ -367,6 +376,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