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:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user