u_trace: pass command stream through tracing functions
Allows writing timestamps into different command streams. Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com> Reviewed-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10969>
This commit is contained in:
@@ -1372,7 +1372,7 @@ tu6_blit_image(struct tu_cmd_buffer *cmd,
|
||||
unreachable("unexpected D32_S8 aspect mask in blit_image");
|
||||
}
|
||||
|
||||
trace_start_blit(&cmd->trace);
|
||||
trace_start_blit(&cmd->trace, cs);
|
||||
|
||||
ops->setup(cmd, cs, format, info->dstSubresource.aspectMask,
|
||||
blit_param, false, dst_image->layout[0].ubwc,
|
||||
@@ -1423,7 +1423,7 @@ tu6_blit_image(struct tu_cmd_buffer *cmd,
|
||||
|
||||
ops->teardown(cmd, cs);
|
||||
|
||||
trace_end_blit(&cmd->trace,
|
||||
trace_end_blit(&cmd->trace, cs,
|
||||
ops == &r3d_ops,
|
||||
src_image->vk_format,
|
||||
dst_image->vk_format,
|
||||
@@ -2042,7 +2042,7 @@ resolve_sysmem(struct tu_cmd_buffer *cmd,
|
||||
{
|
||||
const struct blit_ops *ops = &r2d_ops;
|
||||
|
||||
trace_start_resolve(&cmd->trace);
|
||||
trace_start_resolve(&cmd->trace, cs);
|
||||
|
||||
ops->setup(cmd, cs, format, VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
0, false, dst->ubwc_enabled, VK_SAMPLE_COUNT_1_BIT);
|
||||
@@ -2061,7 +2061,7 @@ resolve_sysmem(struct tu_cmd_buffer *cmd,
|
||||
|
||||
ops->teardown(cmd, cs);
|
||||
|
||||
trace_end_resolve(&cmd->trace);
|
||||
trace_end_resolve(&cmd->trace, cs);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -989,12 +989,12 @@ tu6_emit_binning_pass(struct tu_cmd_buffer *cmd, struct tu_cs *cs)
|
||||
tu_cs_emit_regs(cs,
|
||||
A6XX_SP_TP_WINDOW_OFFSET(.x = 0, .y = 0));
|
||||
|
||||
trace_start_binning_ib(&cmd->trace);
|
||||
trace_start_binning_ib(&cmd->trace, cs);
|
||||
|
||||
/* emit IB to binning drawcmds: */
|
||||
tu_cs_emit_call(cs, &cmd->draw_cs);
|
||||
|
||||
trace_end_binning_ib(&cmd->trace);
|
||||
trace_end_binning_ib(&cmd->trace, cs);
|
||||
|
||||
/* switching from binning pass to GMEM pass will cause a switch from
|
||||
* PROGRAM_BINNING to PROGRAM, which invalidates const state (XS_CONST states)
|
||||
@@ -1343,9 +1343,9 @@ tu_cmd_render_tiles(struct tu_cmd_buffer *cmd)
|
||||
for (uint32_t tx = tx1; tx < tx2; tx++, slot++) {
|
||||
tu6_emit_tile_select(cmd, &cmd->cs, tx, ty, pipe, slot);
|
||||
|
||||
trace_start_draw_ib_gmem(&cmd->trace);
|
||||
trace_start_draw_ib_gmem(&cmd->trace, &cmd->cs);
|
||||
tu6_render_tile(cmd, &cmd->cs);
|
||||
trace_end_draw_ib_gmem(&cmd->trace);
|
||||
trace_end_draw_ib_gmem(&cmd->trace, &cmd->cs);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1353,7 +1353,7 @@ tu_cmd_render_tiles(struct tu_cmd_buffer *cmd)
|
||||
|
||||
tu6_tile_render_end(cmd, &cmd->cs);
|
||||
|
||||
trace_end_render_pass(&cmd->trace, fb);
|
||||
trace_end_render_pass(&cmd->trace, &cmd->cs, fb);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1361,15 +1361,15 @@ tu_cmd_render_sysmem(struct tu_cmd_buffer *cmd)
|
||||
{
|
||||
tu6_sysmem_render_begin(cmd, &cmd->cs);
|
||||
|
||||
trace_start_draw_ib_sysmem(&cmd->trace);
|
||||
trace_start_draw_ib_sysmem(&cmd->trace, &cmd->cs);
|
||||
|
||||
tu_cs_emit_call(&cmd->cs, &cmd->draw_cs);
|
||||
|
||||
trace_end_draw_ib_sysmem(&cmd->trace);
|
||||
trace_end_draw_ib_sysmem(&cmd->trace, &cmd->cs);
|
||||
|
||||
tu6_sysmem_render_end(cmd, &cmd->cs);
|
||||
|
||||
trace_end_render_pass(&cmd->trace, cmd->state.framebuffer);
|
||||
trace_end_render_pass(&cmd->trace, &cmd->cs, cmd->state.framebuffer);
|
||||
}
|
||||
|
||||
static VkResult
|
||||
@@ -3093,7 +3093,7 @@ tu_CmdBeginRenderPass2(VkCommandBuffer commandBuffer,
|
||||
cmd->state.framebuffer = fb;
|
||||
cmd->state.render_area = pRenderPassBegin->renderArea;
|
||||
|
||||
trace_start_render_pass(&cmd->trace);
|
||||
trace_start_render_pass(&cmd->trace, &cmd->cs);
|
||||
|
||||
/* Note: because this is external, any flushes will happen before draw_cs
|
||||
* gets called. However deferred flushes could have to happen later as part
|
||||
@@ -4494,7 +4494,7 @@ tu_dispatch(struct tu_cmd_buffer *cmd,
|
||||
A6XX_HLSQ_CS_KERNEL_GROUP_Y(1),
|
||||
A6XX_HLSQ_CS_KERNEL_GROUP_Z(1));
|
||||
|
||||
trace_start_compute(&cmd->trace);
|
||||
trace_start_compute(&cmd->trace, cs);
|
||||
|
||||
if (info->indirect) {
|
||||
uint64_t iova = tu_buffer_iova(info->indirect) + info->indirect_offset;
|
||||
@@ -4514,7 +4514,7 @@ tu_dispatch(struct tu_cmd_buffer *cmd,
|
||||
tu_cs_emit(cs, CP_EXEC_CS_3_NGROUPS_Z(info->blocks[2]));
|
||||
}
|
||||
|
||||
trace_end_compute(&cmd->trace,
|
||||
trace_end_compute(&cmd->trace, cs,
|
||||
info->indirect != NULL,
|
||||
local_size[0], local_size[1], local_size[2],
|
||||
info->blocks[0], info->blocks[1], info->blocks[2]);
|
||||
|
||||
@@ -1278,18 +1278,17 @@ tu_trace_destroy_ts_buffer(struct u_trace_context *utctx, void *timestamps)
|
||||
}
|
||||
|
||||
static void
|
||||
tu_trace_record_ts(struct u_trace *ut, void *timestamps,
|
||||
tu_trace_record_ts(struct u_trace *ut, void *cs, void *timestamps,
|
||||
unsigned idx)
|
||||
{
|
||||
struct tu_cmd_buffer *cmd = container_of(ut, struct tu_cmd_buffer, trace);
|
||||
struct tu_bo *bo = timestamps;
|
||||
struct tu_cs *cs = &cmd->cs;
|
||||
struct tu_cs *ts_cs = cs;
|
||||
|
||||
unsigned ts_offset = idx * sizeof(uint64_t);
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE, 4);
|
||||
tu_cs_emit(cs, CP_EVENT_WRITE_0_EVENT(RB_DONE_TS) | CP_EVENT_WRITE_0_TIMESTAMP);
|
||||
tu_cs_emit_qw(cs, bo->iova + ts_offset);
|
||||
tu_cs_emit(cs, 0x00000000);
|
||||
tu_cs_emit_pkt7(ts_cs, CP_EVENT_WRITE, 4);
|
||||
tu_cs_emit(ts_cs, CP_EVENT_WRITE_0_EVENT(RB_DONE_TS) | CP_EVENT_WRITE_0_TIMESTAMP);
|
||||
tu_cs_emit_qw(ts_cs, bo->iova + ts_offset);
|
||||
tu_cs_emit(ts_cs, 0x00000000);
|
||||
}
|
||||
|
||||
static uint64_t
|
||||
|
||||
@@ -74,20 +74,20 @@ u_trace_pipe_context_init(struct u_trace_context *utctx,
|
||||
}
|
||||
|
||||
inline void
|
||||
trace_framebuffer_state(struct u_trace *ut, const struct pipe_framebuffer_state *pfb)
|
||||
trace_framebuffer_state(struct u_trace *ut, void *cs, const struct pipe_framebuffer_state *pfb)
|
||||
{
|
||||
if (likely(!ut->enabled))
|
||||
return;
|
||||
|
||||
trace_framebuffer(ut, pfb);
|
||||
trace_framebuffer(ut, cs, pfb);
|
||||
|
||||
for (unsigned i = 0; i < pfb->nr_cbufs; i++) {
|
||||
if (pfb->cbufs[i]) {
|
||||
trace_surface(ut, pfb->cbufs[i]);
|
||||
trace_surface(ut, cs, pfb->cbufs[i]);
|
||||
}
|
||||
}
|
||||
if (pfb->zsbuf) {
|
||||
trace_surface(ut, pfb->zsbuf);
|
||||
trace_surface(ut, cs, pfb->zsbuf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ u_trace_pipe_context_init(struct u_trace_context *utctx,
|
||||
*/
|
||||
|
||||
void
|
||||
trace_framebuffer_state(struct u_trace *ut, const struct pipe_framebuffer_state *pfb);
|
||||
trace_framebuffer_state(struct u_trace *ut, void *cs, const struct pipe_framebuffer_state *pfb);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -938,7 +938,7 @@ handle_rgba_blit(struct fd_context *ctx,
|
||||
|
||||
DBG_BLIT(info, batch);
|
||||
|
||||
trace_start_blit(&batch->trace, info->src.resource->target,
|
||||
trace_start_blit(&batch->trace, batch->draw, info->src.resource->target,
|
||||
info->dst.resource->target);
|
||||
|
||||
if ((info->src.resource->target == PIPE_BUFFER) &&
|
||||
@@ -953,7 +953,7 @@ handle_rgba_blit(struct fd_context *ctx,
|
||||
emit_blit_texture(ctx, batch->draw, info);
|
||||
}
|
||||
|
||||
trace_end_blit(&batch->trace);
|
||||
trace_end_blit(&batch->trace, batch->draw);
|
||||
|
||||
fd6_event_write(batch, batch->draw, PC_CCU_FLUSH_COLOR_TS, true);
|
||||
fd6_event_write(batch, batch->draw, PC_CCU_FLUSH_DEPTH_TS, true);
|
||||
|
||||
@@ -174,8 +174,8 @@ fd6_launch_grid(struct fd_context *ctx, const struct pipe_grid_info *info) in_dt
|
||||
OUT_RING(ring, 1); /* HLSQ_CS_KERNEL_GROUP_Y */
|
||||
OUT_RING(ring, 1); /* HLSQ_CS_KERNEL_GROUP_Z */
|
||||
|
||||
trace_grid_info(&ctx->batch->trace, info);
|
||||
trace_start_compute(&ctx->batch->trace);
|
||||
trace_grid_info(&ctx->batch->trace, ring, info);
|
||||
trace_start_compute(&ctx->batch->trace, ring);
|
||||
|
||||
if (info->indirect) {
|
||||
struct fd_resource *rsc = fd_resource(info->indirect);
|
||||
@@ -195,7 +195,7 @@ fd6_launch_grid(struct fd_context *ctx, const struct pipe_grid_info *info) in_dt
|
||||
OUT_RING(ring, CP_EXEC_CS_3_NGROUPS_Z(info->grid[2]));
|
||||
}
|
||||
|
||||
trace_end_compute(&ctx->batch->trace);
|
||||
trace_end_compute(&ctx->batch->trace, ring);
|
||||
|
||||
OUT_WFI5(ring);
|
||||
|
||||
|
||||
@@ -1247,7 +1247,7 @@ fd6_emit_restore(struct fd_batch *batch, struct fd_ringbuffer *ring)
|
||||
// struct fd_context *ctx = batch->ctx;
|
||||
|
||||
if (!batch->nondraw) {
|
||||
trace_start_state_restore(&batch->trace);
|
||||
trace_start_state_restore(&batch->trace, ring);
|
||||
}
|
||||
|
||||
fd6_cache_inv(batch, ring);
|
||||
@@ -1360,7 +1360,7 @@ fd6_emit_restore(struct fd_batch *batch, struct fd_ringbuffer *ring)
|
||||
OUT_RING(ring, 0x00000000);
|
||||
|
||||
if (!batch->nondraw) {
|
||||
trace_end_state_restore(&batch->trace);
|
||||
trace_end_state_restore(&batch->trace, ring);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -710,9 +710,9 @@ emit_binning_pass(struct fd_batch *batch) assert_dt
|
||||
A6XX_SP_TP_WINDOW_OFFSET_X(0) | A6XX_SP_TP_WINDOW_OFFSET_Y(0));
|
||||
|
||||
/* emit IB to binning drawcmds: */
|
||||
trace_start_binning_ib(&batch->trace);
|
||||
trace_start_binning_ib(&batch->trace, ring);
|
||||
fd6_emit_ib(ring, batch->draw);
|
||||
trace_end_binning_ib(&batch->trace);
|
||||
trace_end_binning_ib(&batch->trace, ring);
|
||||
|
||||
fd_reset_wfi(batch);
|
||||
|
||||
@@ -732,9 +732,9 @@ emit_binning_pass(struct fd_batch *batch) assert_dt
|
||||
|
||||
OUT_PKT7(ring, CP_WAIT_FOR_ME, 0);
|
||||
|
||||
trace_start_vsc_overflow_test(&batch->trace);
|
||||
trace_start_vsc_overflow_test(&batch->trace, batch->gmem);
|
||||
emit_vsc_overflow_test(batch);
|
||||
trace_end_vsc_overflow_test(&batch->trace);
|
||||
trace_end_vsc_overflow_test(&batch->trace, batch->gmem);
|
||||
|
||||
OUT_PKT7(ring, CP_SET_VISIBILITY_OVERRIDE, 1);
|
||||
OUT_RING(ring, 0x0);
|
||||
@@ -794,9 +794,9 @@ fd6_emit_tile_init(struct fd_batch *batch) assert_dt
|
||||
fd6_emit_lrz_flush(ring);
|
||||
|
||||
if (batch->prologue) {
|
||||
trace_start_prologue(&batch->trace);
|
||||
trace_start_prologue(&batch->trace, ring);
|
||||
fd6_emit_ib(ring, batch->prologue);
|
||||
trace_end_prologue(&batch->trace);
|
||||
trace_end_prologue(&batch->trace, ring);
|
||||
}
|
||||
|
||||
fd6_cache_inv(batch, ring);
|
||||
@@ -1249,13 +1249,13 @@ fd6_emit_tile_renderprep(struct fd_batch *batch, const struct fd_tile *tile)
|
||||
if (!batch->tile_setup)
|
||||
return;
|
||||
|
||||
trace_start_clear_restore(&batch->trace, batch->fast_cleared);
|
||||
trace_start_clear_restore(&batch->trace, batch->gmem, batch->fast_cleared);
|
||||
if (batch->fast_cleared || !use_hw_binning(batch)) {
|
||||
fd6_emit_ib(batch->gmem, batch->tile_setup);
|
||||
} else {
|
||||
emit_conditional_ib(batch, tile, batch->tile_setup);
|
||||
}
|
||||
trace_end_clear_restore(&batch->trace);
|
||||
trace_end_clear_restore(&batch->trace, batch->gmem);
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -1427,13 +1427,13 @@ fd6_emit_tile_gmem2mem(struct fd_batch *batch, const struct fd_tile *tile)
|
||||
OUT_RING(ring, A6XX_CP_SET_MARKER_0_MODE(RM6_RESOLVE));
|
||||
emit_marker6(ring, 7);
|
||||
|
||||
trace_start_resolve(&batch->trace);
|
||||
trace_start_resolve(&batch->trace, batch->gmem);
|
||||
if (batch->fast_cleared || !use_hw_binning(batch)) {
|
||||
fd6_emit_ib(batch->gmem, batch->tile_fini);
|
||||
} else {
|
||||
emit_conditional_ib(batch, tile, batch->tile_fini);
|
||||
}
|
||||
trace_end_resolve(&batch->trace);
|
||||
trace_end_resolve(&batch->trace, batch->gmem);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1466,7 +1466,7 @@ emit_sysmem_clears(struct fd_batch *batch, struct fd_ringbuffer *ring) assert_dt
|
||||
if (!buffers)
|
||||
return;
|
||||
|
||||
trace_start_clear_restore(&batch->trace, buffers);
|
||||
trace_start_clear_restore(&batch->trace, ring, buffers);
|
||||
|
||||
if (buffers & PIPE_CLEAR_COLOR) {
|
||||
for (int i = 0; i < pfb->nr_cbufs; i++) {
|
||||
@@ -1514,7 +1514,7 @@ emit_sysmem_clears(struct fd_batch *batch, struct fd_ringbuffer *ring) assert_dt
|
||||
fd6_event_write(batch, ring, PC_CCU_FLUSH_COLOR_TS, true);
|
||||
fd_wfi(batch, ring);
|
||||
|
||||
trace_end_clear_restore(&batch->trace);
|
||||
trace_end_clear_restore(&batch->trace, ring);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1547,11 +1547,11 @@ fd6_emit_sysmem_prep(struct fd_batch *batch) assert_dt
|
||||
|
||||
if (batch->prologue) {
|
||||
if (!batch->nondraw) {
|
||||
trace_start_prologue(&batch->trace);
|
||||
trace_start_prologue(&batch->trace, ring);
|
||||
}
|
||||
fd6_emit_ib(ring, batch->prologue);
|
||||
if (!batch->nondraw) {
|
||||
trace_end_prologue(&batch->trace);
|
||||
trace_end_prologue(&batch->trace, ring);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -452,11 +452,11 @@ fd_get_device_reset_status(struct pipe_context *pctx)
|
||||
}
|
||||
|
||||
static void
|
||||
fd_trace_record_ts(struct u_trace *ut, void *timestamps,
|
||||
fd_trace_record_ts(struct u_trace *ut, void *cs, void *timestamps,
|
||||
unsigned idx)
|
||||
{
|
||||
struct fd_batch *batch = container_of(ut, struct fd_batch, trace);
|
||||
struct fd_ringbuffer *ring = batch->nondraw ? batch->draw : batch->gmem;
|
||||
struct fd_ringbuffer *ring = cs;
|
||||
struct pipe_resource *buffer = timestamps;
|
||||
|
||||
if (ring->cur == batch->last_timestamp_cmd) {
|
||||
|
||||
@@ -592,7 +592,7 @@ render_tiles(struct fd_batch *batch, struct fd_gmem_stateobj *gmem) assert_dt
|
||||
for (i = 0; i < (gmem->nbins_x * gmem->nbins_y); i++) {
|
||||
struct fd_tile *tile = &gmem->tile[i];
|
||||
|
||||
trace_start_tile(&batch->trace, tile->bin_h, tile->yoff, tile->bin_w,
|
||||
trace_start_tile(&batch->trace, batch->gmem, tile->bin_h, tile->yoff, tile->bin_w,
|
||||
tile->xoff);
|
||||
|
||||
ctx->emit_tile_prep(batch, tile);
|
||||
@@ -607,13 +607,13 @@ render_tiles(struct fd_batch *batch, struct fd_gmem_stateobj *gmem) assert_dt
|
||||
ctx->query_prepare_tile(batch, i, batch->gmem);
|
||||
|
||||
/* emit IB to drawcmds: */
|
||||
trace_start_draw_ib(&batch->trace);
|
||||
trace_start_draw_ib(&batch->trace, batch->gmem);
|
||||
if (ctx->emit_tile) {
|
||||
ctx->emit_tile(batch, tile);
|
||||
} else {
|
||||
ctx->screen->emit_ib(batch->gmem, batch->draw);
|
||||
}
|
||||
trace_end_draw_ib(&batch->trace);
|
||||
trace_end_draw_ib(&batch->trace, batch->gmem);
|
||||
fd_reset_wfi(batch);
|
||||
|
||||
/* emit gmem2mem to transfer tile back to system memory: */
|
||||
@@ -637,13 +637,13 @@ render_sysmem(struct fd_batch *batch) assert_dt
|
||||
ctx->query_prepare_tile(batch, 0, batch->gmem);
|
||||
|
||||
if (!batch->nondraw) {
|
||||
trace_start_draw_ib(&batch->trace);
|
||||
trace_start_draw_ib(&batch->trace, batch->gmem);
|
||||
}
|
||||
/* emit IB to drawcmds: */
|
||||
ctx->screen->emit_ib(batch->gmem, batch->draw);
|
||||
|
||||
if (!batch->nondraw) {
|
||||
trace_end_draw_ib(&batch->trace);
|
||||
trace_end_draw_ib(&batch->trace, batch->gmem);
|
||||
}
|
||||
|
||||
fd_reset_wfi(batch);
|
||||
@@ -682,9 +682,9 @@ fd_gmem_render_tiles(struct fd_batch *batch)
|
||||
*/
|
||||
fd_perfetto_submit(ctx);
|
||||
#endif
|
||||
trace_flush_batch(&batch->trace, batch, batch->cleared,
|
||||
trace_flush_batch(&batch->trace, batch->gmem, batch, batch->cleared,
|
||||
batch->gmem_reason, batch->num_draws);
|
||||
trace_framebuffer_state(&batch->trace, pfb);
|
||||
trace_framebuffer_state(&batch->trace, batch->gmem, pfb);
|
||||
}
|
||||
|
||||
if (ctx->emit_sysmem_prep && !batch->nondraw) {
|
||||
@@ -727,30 +727,30 @@ fd_gmem_render_tiles(struct fd_batch *batch)
|
||||
render_sysmem(batch);
|
||||
ctx->stats.batch_nondraw++;
|
||||
} else if (sysmem) {
|
||||
trace_render_sysmem(&batch->trace);
|
||||
trace_start_render_pass(
|
||||
&batch->trace, ctx->submit_count, pipe_surface_format(pfb->cbufs[0]),
|
||||
trace_render_sysmem(&batch->trace, batch->gmem);
|
||||
trace_start_render_pass(&batch->trace, batch->gmem,
|
||||
ctx->submit_count, pipe_surface_format(pfb->cbufs[0]),
|
||||
pipe_surface_format(pfb->zsbuf), pfb->width, pfb->height,
|
||||
pfb->nr_cbufs, pfb->samples, 0, 0, 0);
|
||||
if (ctx->query_prepare)
|
||||
ctx->query_prepare(batch, 1);
|
||||
render_sysmem(batch);
|
||||
trace_end_render_pass(&batch->trace);
|
||||
trace_end_render_pass(&batch->trace, batch->gmem);
|
||||
ctx->stats.batch_sysmem++;
|
||||
} else {
|
||||
struct fd_gmem_stateobj *gmem = lookup_gmem_state(batch, false, false);
|
||||
batch->gmem_state = gmem;
|
||||
trace_render_gmem(&batch->trace, gmem->nbins_x, gmem->nbins_y,
|
||||
trace_render_gmem(&batch->trace, batch->gmem, gmem->nbins_x, gmem->nbins_y,
|
||||
gmem->bin_w, gmem->bin_h);
|
||||
trace_start_render_pass(
|
||||
&batch->trace, ctx->submit_count, pipe_surface_format(pfb->cbufs[0]),
|
||||
trace_start_render_pass(&batch->trace, batch->gmem,
|
||||
ctx->submit_count, pipe_surface_format(pfb->cbufs[0]),
|
||||
pipe_surface_format(pfb->zsbuf), pfb->width, pfb->height,
|
||||
pfb->nr_cbufs, pfb->samples, gmem->nbins_x * gmem->nbins_y,
|
||||
gmem->bin_w, gmem->bin_h);
|
||||
if (ctx->query_prepare)
|
||||
ctx->query_prepare(batch, gmem->nbins_x * gmem->nbins_y);
|
||||
render_tiles(batch, gmem);
|
||||
trace_end_render_pass(&batch->trace);
|
||||
trace_end_render_pass(&batch->trace, batch->gmem);
|
||||
batch->gmem_state = NULL;
|
||||
|
||||
fd_screen_lock(ctx->screen);
|
||||
|
||||
@@ -471,7 +471,7 @@ u_trace_disable_event_range(struct u_trace_iterator begin_it,
|
||||
* functions.
|
||||
*/
|
||||
void *
|
||||
u_trace_append(struct u_trace *ut, const struct u_tracepoint *tp)
|
||||
u_trace_append(struct u_trace *ut, void *cs, const struct u_tracepoint *tp)
|
||||
{
|
||||
struct u_trace_chunk *chunk = get_chunk(ut);
|
||||
|
||||
@@ -491,7 +491,7 @@ u_trace_append(struct u_trace *ut, const struct u_tracepoint *tp)
|
||||
chunk->payload_buf += tp->payload_sz;
|
||||
|
||||
/* record a timestamp for the trace: */
|
||||
ut->utctx->record_timestamp(ut, chunk->timestamps, chunk->num_traces);
|
||||
ut->utctx->record_timestamp(ut, cs, chunk->timestamps, chunk->num_traces);
|
||||
|
||||
chunk->traces[chunk->num_traces] = (struct u_trace_event) {
|
||||
.tp = tp,
|
||||
|
||||
@@ -90,14 +90,15 @@ typedef void (*u_trace_delete_ts_buffer)(struct u_trace_context *utctx,
|
||||
void *timestamps);
|
||||
|
||||
/**
|
||||
* Driver provided callback to emit commands to capture a 64b timestamp
|
||||
* into the specified timestamps buffer, at the specified index.
|
||||
* Driver provided callback to emit commands into the soecified command
|
||||
* stream to capture a 64b timestamp into the specified timestamps buffer,
|
||||
* at the specified index.
|
||||
*
|
||||
* The hw counter that the driver records should be something that runs at
|
||||
* a fixed rate, even as the GPU freq changes. The same source used for
|
||||
* GL_TIMESTAMP queries should be appropriate.
|
||||
*/
|
||||
typedef void (*u_trace_record_ts)(struct u_trace *ut,
|
||||
typedef void (*u_trace_record_ts)(struct u_trace *ut, void *cs,
|
||||
void *timestamps, unsigned idx);
|
||||
|
||||
/**
|
||||
|
||||
@@ -198,12 +198,12 @@ struct trace_${trace_name} {
|
||||
void ${trace.tp_perfetto}(${ctx_param}, uint64_t ts_ns, const void *flush_data, const struct trace_${trace_name} *payload);
|
||||
#endif
|
||||
% endif
|
||||
void __trace_${trace_name}(struct u_trace *ut
|
||||
void __trace_${trace_name}(struct u_trace *ut, void *cs
|
||||
% for arg in trace.args:
|
||||
, ${arg.type} ${arg.var}
|
||||
% endfor
|
||||
);
|
||||
static inline void trace_${trace_name}(struct u_trace *ut
|
||||
static inline void trace_${trace_name}(struct u_trace *ut, void *cs
|
||||
% for arg in trace.args:
|
||||
, ${arg.type} ${arg.var}
|
||||
% endfor
|
||||
@@ -214,7 +214,7 @@ static inline void trace_${trace_name}(struct u_trace *ut
|
||||
if (!unlikely(ut->enabled))
|
||||
% endif
|
||||
return;
|
||||
__trace_${trace_name}(ut
|
||||
__trace_${trace_name}(ut, cs
|
||||
% for arg in trace.args:
|
||||
, ${arg.var}
|
||||
% endfor
|
||||
@@ -303,13 +303,13 @@ static const struct u_tracepoint __tp_${trace_name} = {
|
||||
#endif
|
||||
% endif
|
||||
};
|
||||
void __trace_${trace_name}(struct u_trace *ut
|
||||
void __trace_${trace_name}(struct u_trace *ut, void *cs
|
||||
% for arg in trace.args:
|
||||
, ${arg.type} ${arg.var}
|
||||
% endfor
|
||||
) {
|
||||
struct trace_${trace_name} *__entry =
|
||||
(struct trace_${trace_name} *)u_trace_append(ut, &__tp_${trace_name});
|
||||
(struct trace_${trace_name} *)u_trace_append(ut, cs, &__tp_${trace_name});
|
||||
(void)__entry;
|
||||
% for arg in trace.tp_struct:
|
||||
__entry->${arg.name} = ${arg.var};
|
||||
|
||||
@@ -55,6 +55,6 @@ struct u_tracepoint {
|
||||
* Append a tracepoint, returning pointer that can be filled with trace
|
||||
* payload.
|
||||
*/
|
||||
void * u_trace_append(struct u_trace *ut, const struct u_tracepoint *tp);
|
||||
void * u_trace_append(struct u_trace *ut, void *cs, const struct u_tracepoint *tp);
|
||||
|
||||
#endif /* _U_TRACE_PRIV_H */
|
||||
|
||||
Reference in New Issue
Block a user