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

Author: Dave Airlie <[email protected]>
Date:   Thu Dec 16 08:28:11 2021 +1000

mesa/st: merge perfmon counters/groups objects from st into mesa

This merges subclassed or side allocated objects into the main
ones.

Acked-by: Marek Olšák <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14327>

---

 src/mesa/main/mtypes.h                 |  8 +++++--
 src/mesa/state_tracker/st_cb_perfmon.c | 43 +++++++++-------------------------
 src/mesa/state_tracker/st_cb_perfmon.h | 16 -------------
 src/mesa/state_tracker/st_context.h    |  3 ---
 4 files changed, 17 insertions(+), 53 deletions(-)

diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index bdd55474bcd..42796835bf1 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1875,7 +1875,7 @@ struct gl_perf_monitor_object
 
    unsigned num_active_counters;
 
-   struct st_perf_counter_object {
+   struct gl_perf_counter_object {
       struct pipe_query *query;
       int id;
       int group_id;
@@ -1911,6 +1911,9 @@ struct gl_perf_monitor_counter
 
    /** Maximum counter value. */
    union gl_perf_monitor_counter_value Maximum;
+
+   unsigned query_type;
+   unsigned flags;
 };
 
 
@@ -1928,8 +1931,9 @@ struct gl_perf_monitor_group
    /** Array of counters within this group. */
    const struct gl_perf_monitor_counter *Counters;
    GLuint NumCounters;
-};
 
+   bool has_batch;
+};
 
 /**
  * A query object instance as described in INTEL_performance_query.
diff --git a/src/mesa/state_tracker/st_cb_perfmon.c 
b/src/mesa/state_tracker/st_cb_perfmon.c
index d188b827981..25b69945d5c 100644
--- a/src/mesa/state_tracker/st_cb_perfmon.c
+++ b/src/mesa/state_tracker/st_cb_perfmon.c
@@ -53,7 +53,6 @@ init_perf_monitor(struct gl_context *ctx, struct 
gl_perf_monitor_object *m)
    /* Determine the number of active counters. */
    for (gid = 0; gid < ctx->PerfMonitor.NumGroups; gid++) {
       const struct gl_perf_monitor_group *g = &ctx->PerfMonitor.Groups[gid];
-      const struct st_perf_monitor_group *stg = &st->perfmon[gid];
 
       if (m->ActiveGroups[gid] > g->MaxActiveCounters) {
          /* Maximum number of counters reached. Cannot start the session. */
@@ -65,7 +64,7 @@ init_perf_monitor(struct gl_context *ctx, struct 
gl_perf_monitor_object *m)
       }
 
       num_active_counters += m->ActiveGroups[gid];
-      if (stg->has_batch)
+      if (g->has_batch)
          max_batch_counters += m->ActiveGroups[gid];
    }
 
@@ -86,20 +85,19 @@ init_perf_monitor(struct gl_context *ctx, struct 
gl_perf_monitor_object *m)
    /* Create a query for each active counter. */
    for (gid = 0; gid < ctx->PerfMonitor.NumGroups; gid++) {
       const struct gl_perf_monitor_group *g = &ctx->PerfMonitor.Groups[gid];
-      const struct st_perf_monitor_group *stg = &st->perfmon[gid];
 
       BITSET_FOREACH_SET(cid, m->ActiveCounters[gid], g->NumCounters) {
-         const struct st_perf_monitor_counter *stc = &stg->counters[cid];
-         struct st_perf_counter_object *cntr =
+         const struct gl_perf_monitor_counter *c = &g->Counters[cid];
+         struct gl_perf_counter_object *cntr =
             &m->active_counters[m->num_active_counters];
 
          cntr->id       = cid;
          cntr->group_id = gid;
-         if (stc->flags & PIPE_DRIVER_QUERY_FLAG_BATCH) {
+         if (c->flags & PIPE_DRIVER_QUERY_FLAG_BATCH) {
             cntr->batch_index = num_batch_counters;
-            batch[num_batch_counters++] = stc->query_type;
+            batch[num_batch_counters++] = c->query_type;
          } else {
-            cntr->query = pipe->create_query(pipe, stc->query_type, 0);
+            cntr->query = pipe->create_query(pipe, c->query_type, 0);
             if (!cntr->query)
                goto fail;
          }
@@ -270,7 +268,7 @@ st_GetPerfMonitorResult(struct gl_context *ctx,
 
    /* Read query results for each active counter. */
    for (i = 0; i < m->num_active_counters; ++i) {
-      struct st_perf_counter_object *cntr = &m->active_counters[i];
+      struct gl_perf_counter_object *cntr = &m->active_counters[i];
       union pipe_query_result result = { 0 };
       int gid, cid;
       GLenum type;
@@ -330,7 +328,6 @@ st_InitPerfMonitorGroups(struct gl_context *ctx)
    struct gl_perf_monitor_state *perfmon = &ctx->PerfMonitor;
    struct pipe_screen *screen = st->screen;
    struct gl_perf_monitor_group *groups = NULL;
-   struct st_perf_monitor_group *stgroups = NULL;
    int num_counters, num_groups;
    int gid, cid;
 
@@ -343,16 +340,10 @@ st_InitPerfMonitorGroups(struct gl_context *ctx)
    if (!groups)
       return;
 
-   stgroups = CALLOC(num_groups, sizeof(*stgroups));
-   if (!stgroups)
-      goto fail_only_groups;
-
    for (gid = 0; gid < num_groups; gid++) {
       struct gl_perf_monitor_group *g = &groups[perfmon->NumGroups];
-      struct st_perf_monitor_group *stg = &stgroups[perfmon->NumGroups];
       struct pipe_driver_query_group_info group_info;
       struct gl_perf_monitor_counter *counters = NULL;
-      struct st_perf_monitor_counter *stcounters = NULL;
 
       if (!screen->get_driver_query_group_info(screen, gid, &group_info))
          continue;
@@ -366,14 +357,8 @@ st_InitPerfMonitorGroups(struct gl_context *ctx)
          goto fail;
       g->Counters = counters;
 
-      stcounters = CALLOC(group_info.num_queries, sizeof(*stcounters));
-      if (!stcounters)
-         goto fail;
-      stg->counters = stcounters;
-
       for (cid = 0; cid < num_counters; cid++) {
          struct gl_perf_monitor_counter *c = &counters[g->NumCounters];
-         struct st_perf_monitor_counter *stc = &stcounters[g->NumCounters];
          struct pipe_driver_query_info info;
 
          if (!screen->get_driver_query_info(screen, cid, &info))
@@ -410,27 +395,23 @@ st_InitPerfMonitorGroups(struct gl_context *ctx)
                unreachable("Invalid driver query type!");
          }
 
-         stc->query_type = info.query_type;
-         stc->flags = info.flags;
-         if (stc->flags & PIPE_DRIVER_QUERY_FLAG_BATCH)
-            stg->has_batch = true;
+         c->query_type = info.query_type;
+         c->flags = info.flags;
+         if (c->flags & PIPE_DRIVER_QUERY_FLAG_BATCH)
+            g->has_batch = true;
 
          g->NumCounters++;
       }
       perfmon->NumGroups++;
    }
    perfmon->Groups = groups;
-   st->perfmon = stgroups;
 
    return;
 
 fail:
    for (gid = 0; gid < num_groups; gid++) {
-      FREE(stgroups[gid].counters);
       FREE((void *)groups[gid].Counters);
    }
-   FREE(stgroups);
-fail_only_groups:
    FREE(groups);
 }
 
@@ -441,9 +422,7 @@ st_destroy_perfmon(struct st_context *st)
    int gid;
 
    for (gid = 0; gid < perfmon->NumGroups; gid++) {
-      FREE(st->perfmon[gid].counters);
       FREE((void *)perfmon->Groups[gid].Counters);
    }
-   FREE(st->perfmon);
    FREE((void *)perfmon->Groups);
 }
diff --git a/src/mesa/state_tracker/st_cb_perfmon.h 
b/src/mesa/state_tracker/st_cb_perfmon.h
index 3b8f934fb47..fb6f340f02a 100644
--- a/src/mesa/state_tracker/st_cb_perfmon.h
+++ b/src/mesa/state_tracker/st_cb_perfmon.h
@@ -26,22 +26,6 @@
 
 #include "util/list.h"
 
-/**
- * Extra data per counter, supplementing gl_perf_monitor_counter with
- * driver-specific information.
- */
-struct st_perf_monitor_counter
-{
-   unsigned query_type;
-   unsigned flags;
-};
-
-struct st_perf_monitor_group
-{
-   struct st_perf_monitor_counter *counters;
-   bool has_batch;
-};
-
 bool
 st_have_perfmon(struct st_context *st);
 
diff --git a/src/mesa/state_tracker/st_context.h 
b/src/mesa/state_tracker/st_context.h
index 24f68d437dc..df1fde3a0a3 100644
--- a/src/mesa/state_tracker/st_context.h
+++ b/src/mesa/state_tracker/st_context.h
@@ -51,7 +51,6 @@ struct draw_stage;
 struct gen_mipmap_state;
 struct st_context;
 struct st_program;
-struct st_perf_monitor_group;
 struct u_upload_mgr;
 
 #define ST_L3_PINNING_DISABLED 0xffffffff
@@ -362,8 +361,6 @@ struct st_context
 
    struct st_config_options options;
 
-   struct st_perf_monitor_group *perfmon;
-
    enum pipe_reset_status reset_status;
 
    /* Array of bound texture/image handles which are resident in the context.

Reply via email to