Module: Mesa
Branch: main
Commit: e2dfab5c964462d0d904a48d2ea251d8a0b3b7ce
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e2dfab5c964462d0d904a48d2ea251d8a0b3b7ce

Author: Felix DeGrood <[email protected]>
Date:   Wed Apr 26 18:26:06 2023 +0000

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 <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22723>

---

 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 9dff9df2b5e..a076a4ac00f 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 d7fbf6a4c3e..727a207d2e8 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 ea65566b976..ce56af18b5d 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

Reply via email to