From e2dfab5c964462d0d904a48d2ea251d8a0b3b7ce Mon Sep 17 00:00:00 2001 From: Felix DeGrood Date: Wed, 26 Apr 2023 18:26:06 +0000 Subject: [PATCH] anv: re-enable RT data in INTEL_MEASURE Per-RenderTarget analysis was removed from anv's INTEL_MEASURE previously, probably after switching to dynamic rendering model. Restore capability by tracking count of beginRenderPass calls. Reviewed-by: Mark Janes Part-of: --- src/intel/common/intel_measure.c | 1 + src/intel/common/intel_measure.h | 1 + src/intel/vulkan/anv_measure.c | 30 ++++++++---------------------- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/src/intel/common/intel_measure.c b/src/intel/common/intel_measure.c index 9dff9df..a076a4a 100644 --- a/src/intel/common/intel_measure.c +++ b/src/intel/common/intel_measure.c @@ -225,6 +225,7 @@ intel_measure_init(struct intel_measure_device *device) device->config = NULL; device->frame = 0; + device->render_pass_count = 0; device->release_batch = NULL; pthread_mutex_init(&device->mutex, NULL); list_inithead(&device->queued_snapshots); diff --git a/src/intel/common/intel_measure.h b/src/intel/common/intel_measure.h index d7fbf6a..727a207 100644 --- a/src/intel/common/intel_measure.h +++ b/src/intel/common/intel_measure.h @@ -134,6 +134,7 @@ typedef void (*intel_measure_release_batch_cb)(struct intel_measure_batch *base) struct intel_measure_device { struct intel_measure_config *config; unsigned frame; + unsigned render_pass_count; intel_measure_release_batch_cb release_batch; /* Holds the list of (iris/anv)_measure_batch snapshots that have been diff --git a/src/intel/vulkan/anv_measure.c b/src/intel/vulkan/anv_measure.c index ea65566..ce56af1 100644 --- a/src/intel/vulkan/anv_measure.c +++ b/src/intel/vulkan/anv_measure.c @@ -138,18 +138,6 @@ anv_measure_start_snapshot(struct anv_cmd_buffer *cmd_buffer, if (measure->base.frame == 0) measure->base.frame = device_frame; -// uintptr_t framebuffer = (uintptr_t)cmd_buffer->state.framebuffer; -// -// if (!measure->base.framebuffer && -// cmd_buffer->vk.level == VK_COMMAND_BUFFER_LEVEL_SECONDARY) -// /* secondary command buffer inherited the framebuffer from the primary */ -// measure->base.framebuffer = framebuffer; -// -// /* verify framebuffer has been properly tracked */ -// assert(type == INTEL_SNAPSHOT_END || -// framebuffer == measure->base.framebuffer || -// framebuffer == 0 ); /* compute has no framebuffer */ - unsigned index = measure->base.index++; if (event_name == NULL) event_name = intel_measure_snapshot_string(type); @@ -176,7 +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 = framebuffer; + snapshot->framebuffer = (type == INTEL_SNAPSHOT_COMPUTE) ? 0 + : measure->base.framebuffer; if (type == INTEL_SNAPSHOT_COMPUTE && cmd_buffer->state.compute.pipeline) { snapshot->cs = (uintptr_t) cmd_buffer->state.compute.pipeline->cs; @@ -338,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.framebuffer = 0; measure->base.frame = 0; measure->base.event_count = 0; list_inithead(&measure->base.link); @@ -474,15 +463,11 @@ _anv_measure_beginrenderpass(struct anv_cmd_buffer *cmd_buffer) { struct intel_measure_config *config = config_from_command_buffer(cmd_buffer); struct anv_measure_batch *measure = cmd_buffer->measure; + struct anv_physical_device *device = cmd_buffer->device->physical; + struct intel_measure_device *measure_device = &device->measure_device; - if (!config) + if (!config || !measure) return; - if (measure == NULL) - return; - -// if (measure->base.framebuffer == (uintptr_t) cmd_buffer->state.framebuffer) -// /* no change */ -// return; bool filtering = (config->flags & (INTEL_MEASURE_RENDERPASS | INTEL_MEASURE_SHADER)); @@ -493,7 +478,8 @@ _anv_measure_beginrenderpass(struct anv_cmd_buffer *cmd_buffer) measure->base.event_count = 0; } -// measure->base.framebuffer = (uintptr_t) cmd_buffer->state.framebuffer; + measure->base.framebuffer = + (uintptr_t) p_atomic_inc_return(&measure_device->render_pass_count); } void -- 2.7.4