intel: refactor INTEL_MEASURE pointer dumping

Refactor framebuffer to renderpass to mirror previous INTEL_MEASURE
changes.

We dump hashes/pointers for shaders and framebuffer/renderpass.
Reduce from 64bit to 32bit pointers. We don't benefit from the
extra precision and reduced output size is convenient.

Reviewed-by: Mark Janes <markjanes@swizzler.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22723>
This commit is contained in:
Felix DeGrood 2023-04-26 18:52:21 +00:00 committed by Marge Bot
parent e2dfab5c96
commit 82f6a477f3
4 changed files with 21 additions and 20 deletions

View file

@ -121,7 +121,7 @@ iris_init_batch_measure(struct iris_context *ice, struct iris_batch *batch)
config->batch_size * sizeof(uint64_t), 8,
IRIS_MEMZONE_OTHER, BO_ALLOC_ZEROED);
measure->base.timestamps = iris_bo_map(NULL, measure->bo, MAP_READ);
measure->base.framebuffer =
measure->base.renderpass =
(uintptr_t)util_hash_crc32(&ice->state.framebuffer,
sizeof(ice->state.framebuffer));
}
@ -155,7 +155,7 @@ measure_start_snapshot(struct iris_context *ice,
if (measure_batch->frame == 0)
measure_batch->frame = screen_frame;
uintptr_t framebuffer = measure_batch->framebuffer;
uintptr_t renderpass = measure_batch->renderpass;
if (measure_batch->index == config->batch_size) {
/* Snapshot buffer is full. The batch must be flushed before additional
@ -199,7 +199,7 @@ measure_start_snapshot(struct iris_context *ice,
snapshot->count = (unsigned) count;
snapshot->event_count = measure_batch->event_count;
snapshot->event_name = event_name;
snapshot->framebuffer = framebuffer;
snapshot->renderpass = renderpass;
if (type == INTEL_SNAPSHOT_COMPUTE) {
snapshot->cs = (uintptr_t) ice->shaders.prog[MESA_SHADER_COMPUTE];
@ -269,7 +269,7 @@ iris_measure_renderpass(struct iris_context *ice)
return;
uint32_t framebuffer_crc = util_hash_crc32(&ice->state.framebuffer,
sizeof(ice->state.framebuffer));
if (framebuffer_crc == batch->framebuffer)
if (framebuffer_crc == batch->renderpass)
return;
bool filtering = config->flags & INTEL_MEASURE_RENDERPASS;
if (filtering && batch->index % 2 == 1) {
@ -279,7 +279,7 @@ iris_measure_renderpass(struct iris_context *ice)
batch->event_count = 0;
}
batch->framebuffer = framebuffer_crc;
batch->renderpass = framebuffer_crc;
}
void

View file

@ -213,9 +213,9 @@ intel_measure_init(struct intel_measure_device *device)
}
if (!config.cpu_measure)
fputs("draw_start,draw_end,frame,batch,"
fputs("draw_start,draw_end,frame,batch,renderpass,"
"event_index,event_count,type,count,vs,tcs,tes,"
"gs,fs,cs,ms,ts,framebuffer,idle_us,time_us\n",
"gs,fs,cs,ms,ts,idle_us,time_us\n",
config.file);
else
fputs("draw_start,frame,batch,event_index,event_count,"
@ -305,7 +305,7 @@ intel_measure_state_changed(const struct intel_measure_batch *batch,
}
if (config.flags & INTEL_MEASURE_RENDERPASS) {
return ((last_snap->framebuffer != batch->framebuffer) ||
return ((last_snap->renderpass != batch->renderpass) ||
/* compute workloads are always in their own renderpass */
(cs != 0));
}
@ -616,15 +616,15 @@ print_combined_results(struct intel_measure_device *measure_device,
uint64_t duration_time_ns =
intel_device_info_timebase_scale(info, duration_ts);
const struct intel_measure_snapshot *begin = &start_result->snapshot;
fprintf(config.file, "%"PRIu64",%"PRIu64",%u,%u,%u,%u,%s,%u,"
"0x%"PRIxPTR",0x%"PRIxPTR",0x%"PRIxPTR",0x%"PRIxPTR",0x%"PRIxPTR","
"0x%"PRIxPTR",0x%"PRIxPTR",0x%"PRIxPTR",0x%"PRIxPTR",%.3lf,%.3lf\n",
fprintf(config.file, "%"PRIu64",%"PRIu64",%u,%u,%u,%u,%u,%s,%u,"
"0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,%.3lf,%.3lf\n",
start_result->start_ts, current_result->end_ts,
start_result->frame, start_result->batch_count,
start_result->event_index, event_count,
begin->renderpass, start_result->event_index, event_count,
begin->event_name, begin->count,
begin->vs, begin->tcs, begin->tes, begin->gs, begin->fs, begin->cs,
begin->ms, begin->ts, begin->framebuffer,
(uint32_t)begin->vs, (uint32_t)begin->tcs, (uint32_t)begin->tes,
(uint32_t)begin->gs, (uint32_t)begin->fs, (uint32_t)begin->cs,
(uint32_t)begin->ms, (uint32_t)begin->ts,
(double)duration_idle_ns / 1000.0,
(double)duration_time_ns / 1000.0);
}

View file

@ -112,7 +112,8 @@ struct intel_measure_snapshot {
enum intel_measure_snapshot_type type;
unsigned count, event_count;
const char* event_name;
uintptr_t framebuffer, vs, tcs, tes, gs, fs, cs, ms, ts;
uint32_t renderpass;
uintptr_t vs, tcs, tes, gs, fs, cs, ms, ts;
/* for vulkan secondary command buffers */
struct intel_measure_batch *secondary;
};
@ -153,7 +154,7 @@ struct intel_measure_batch {
struct list_head link;
unsigned index;
unsigned frame, batch_count, event_count;
uintptr_t framebuffer;
uint32_t renderpass;
uint64_t *timestamps;
struct intel_measure_snapshot snapshots[0];
};

View file

@ -164,8 +164,8 @@ anv_measure_start_snapshot(struct anv_cmd_buffer *cmd_buffer,
snapshot->count = (unsigned) count;
snapshot->event_count = measure->base.event_count;
snapshot->event_name = event_name;
snapshot->framebuffer = (type == INTEL_SNAPSHOT_COMPUTE) ? 0
: measure->base.framebuffer;
snapshot->renderpass = (type == INTEL_SNAPSHOT_COMPUTE) ? 0
: measure->base.renderpass;
if (type == INTEL_SNAPSHOT_COMPUTE && cmd_buffer->state.compute.pipeline) {
snapshot->cs = (uintptr_t) cmd_buffer->state.compute.pipeline->cs;
@ -327,7 +327,7 @@ anv_measure_reset(struct anv_cmd_buffer *cmd_buffer)
assert(cmd_buffer->device != NULL);
measure->base.index = 0;
measure->base.framebuffer = 0;
measure->base.renderpass = 0;
measure->base.frame = 0;
measure->base.event_count = 0;
list_inithead(&measure->base.link);
@ -478,7 +478,7 @@ _anv_measure_beginrenderpass(struct anv_cmd_buffer *cmd_buffer)
measure->base.event_count = 0;
}
measure->base.framebuffer =
measure->base.renderpass =
(uintptr_t) p_atomic_inc_return(&measure_device->render_pass_count);
}