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 <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:26:06 +00:00
committed by Marge Bot
parent f783f581a8
commit e2dfab5c96
3 changed files with 10 additions and 22 deletions
+1
View File
@@ -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);
+1
View File
@@ -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
+8 -22
View File
@@ -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