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

Author: Dave Airlie <[email protected]>
Date:   Thu Dec 16 07:56:25 2021 +1000

mesa/st: merge perfmon object from st into mesa

This just merges the perf mon subclass into the base class,
and cleans up the result.

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

---

 src/mesa/main/mtypes.h                 |  12 ++++
 src/mesa/main/performance_monitor.c    |   3 +-
 src/mesa/state_tracker/st_cb_perfmon.c | 100 ++++++++++++++-------------------
 src/mesa/state_tracker/st_cb_perfmon.h |  31 ----------
 4 files changed, 56 insertions(+), 90 deletions(-)

diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 57b9cfe5a6f..bdd55474bcd 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1872,6 +1872,18 @@ struct gl_perf_monitor_object
     *    BITSET_TEST(ActiveCounters[g], c)
     */
    GLuint **ActiveCounters;
+
+   unsigned num_active_counters;
+
+   struct st_perf_counter_object {
+      struct pipe_query *query;
+      int id;
+      int group_id;
+      unsigned batch_index;
+   } *active_counters;
+
+   struct pipe_query *batch_query;
+   union pipe_query_result *batch_result;
 };
 
 
diff --git a/src/mesa/main/performance_monitor.c 
b/src/mesa/main/performance_monitor.c
index 2a875473fa4..edb3c0982f3 100644
--- a/src/mesa/main/performance_monitor.c
+++ b/src/mesa/main/performance_monitor.c
@@ -44,6 +44,7 @@
 #include "performance_monitor.h"
 #include "util/bitset.h"
 #include "util/ralloc.h"
+#include "util/u_memory.h"
 #include "api_exec_decl.h"
 
 #include "state_tracker/st_cb_perfmon.h"
@@ -67,7 +68,7 @@ static struct gl_perf_monitor_object *
 new_performance_monitor(struct gl_context *ctx, GLuint index)
 {
    unsigned i;
-   struct gl_perf_monitor_object *m = st_NewPerfMonitor(ctx);
+   struct gl_perf_monitor_object *m = CALLOC_STRUCT(gl_perf_monitor_object);
 
    if (m == NULL)
       return NULL;
diff --git a/src/mesa/state_tracker/st_cb_perfmon.c 
b/src/mesa/state_tracker/st_cb_perfmon.c
index 9d7444db6d9..d188b827981 100644
--- a/src/mesa/state_tracker/st_cb_perfmon.c
+++ b/src/mesa/state_tracker/st_cb_perfmon.c
@@ -41,7 +41,6 @@ static bool
 init_perf_monitor(struct gl_context *ctx, struct gl_perf_monitor_object *m)
 {
    struct st_context *st = st_context(ctx);
-   struct st_perf_monitor_object *stm = st_perf_monitor_object(m);
    struct pipe_context *pipe = st->pipe;
    unsigned *batch = NULL;
    unsigned num_active_counters = 0;
@@ -73,9 +72,9 @@ init_perf_monitor(struct gl_context *ctx, struct 
gl_perf_monitor_object *m)
    if (!num_active_counters)
       return true;
 
-   stm->active_counters = CALLOC(num_active_counters,
-                                 sizeof(*stm->active_counters));
-   if (!stm->active_counters)
+   m->active_counters = CALLOC(num_active_counters,
+                                 sizeof(*m->active_counters));
+   if (!m->active_counters)
       return false;
 
    if (max_batch_counters) {
@@ -92,7 +91,7 @@ init_perf_monitor(struct gl_context *ctx, struct 
gl_perf_monitor_object *m)
       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 =
-            &stm->active_counters[stm->num_active_counters];
+            &m->active_counters[m->num_active_counters];
 
          cntr->id       = cid;
          cntr->group_id = gid;
@@ -104,16 +103,16 @@ init_perf_monitor(struct gl_context *ctx, struct 
gl_perf_monitor_object *m)
             if (!cntr->query)
                goto fail;
          }
-         ++stm->num_active_counters;
+         ++m->num_active_counters;
       }
    }
 
    /* Create the batch query. */
    if (num_batch_counters) {
-      stm->batch_query = pipe->create_batch_query(pipe, num_batch_counters,
+      m->batch_query = pipe->create_batch_query(pipe, num_batch_counters,
                                                   batch);
-      stm->batch_result = CALLOC(num_batch_counters, 
sizeof(stm->batch_result->batch[0]));
-      if (!stm->batch_query || !stm->batch_result)
+      m->batch_result = CALLOC(num_batch_counters, 
sizeof(m->batch_result->batch[0]));
+      if (!m->batch_query || !m->batch_result)
          goto fail;
    }
 
@@ -126,55 +125,44 @@ fail:
 }
 
 static void
-reset_perf_monitor(struct st_perf_monitor_object *stm,
+reset_perf_monitor(struct gl_perf_monitor_object *m,
                    struct pipe_context *pipe)
 {
    unsigned i;
 
-   for (i = 0; i < stm->num_active_counters; ++i) {
-      struct pipe_query *query = stm->active_counters[i].query;
+   for (i = 0; i < m->num_active_counters; ++i) {
+      struct pipe_query *query = m->active_counters[i].query;
       if (query)
          pipe->destroy_query(pipe, query);
    }
-   FREE(stm->active_counters);
-   stm->active_counters = NULL;
-   stm->num_active_counters = 0;
+   FREE(m->active_counters);
+   m->active_counters = NULL;
+   m->num_active_counters = 0;
 
-   if (stm->batch_query) {
-      pipe->destroy_query(pipe, stm->batch_query);
-      stm->batch_query = NULL;
+   if (m->batch_query) {
+      pipe->destroy_query(pipe, m->batch_query);
+      m->batch_query = NULL;
    }
-   FREE(stm->batch_result);
-   stm->batch_result = NULL;
-}
-
-struct gl_perf_monitor_object *
-st_NewPerfMonitor(struct gl_context *ctx)
-{
-   struct st_perf_monitor_object *stq = CALLOC_STRUCT(st_perf_monitor_object);
-   if (stq)
-      return &stq->base;
-   return NULL;
+   FREE(m->batch_result);
+   m->batch_result = NULL;
 }
 
 void
 st_DeletePerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m)
 {
-   struct st_perf_monitor_object *stm = st_perf_monitor_object(m);
    struct pipe_context *pipe = st_context(ctx)->pipe;
 
-   reset_perf_monitor(stm, pipe);
-   FREE(stm);
+   reset_perf_monitor(m, pipe);
+   FREE(m);
 }
 
 GLboolean
 st_BeginPerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m)
 {
-   struct st_perf_monitor_object *stm = st_perf_monitor_object(m);
    struct pipe_context *pipe = st_context(ctx)->pipe;
    unsigned i;
 
-   if (!stm->num_active_counters) {
+   if (!m->num_active_counters) {
       /* Create a query for each active counter before starting
        * a new monitoring session. */
       if (!init_perf_monitor(ctx, m))
@@ -182,51 +170,49 @@ st_BeginPerfMonitor(struct gl_context *ctx, struct 
gl_perf_monitor_object *m)
    }
 
    /* Start the query for each active counter. */
-   for (i = 0; i < stm->num_active_counters; ++i) {
-      struct pipe_query *query = stm->active_counters[i].query;
+   for (i = 0; i < m->num_active_counters; ++i) {
+      struct pipe_query *query = m->active_counters[i].query;
       if (query && !pipe->begin_query(pipe, query))
           goto fail;
    }
 
-   if (stm->batch_query && !pipe->begin_query(pipe, stm->batch_query))
+   if (m->batch_query && !pipe->begin_query(pipe, m->batch_query))
       goto fail;
 
    return true;
 
 fail:
    /* Failed to start the monitoring session. */
-   reset_perf_monitor(stm, pipe);
+   reset_perf_monitor(m, pipe);
    return false;
 }
 
 void
 st_EndPerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m)
 {
-   struct st_perf_monitor_object *stm = st_perf_monitor_object(m);
    struct pipe_context *pipe = st_context(ctx)->pipe;
    unsigned i;
 
    /* Stop the query for each active counter. */
-   for (i = 0; i < stm->num_active_counters; ++i) {
-      struct pipe_query *query = stm->active_counters[i].query;
+   for (i = 0; i < m->num_active_counters; ++i) {
+      struct pipe_query *query = m->active_counters[i].query;
       if (query)
          pipe->end_query(pipe, query);
    }
 
-   if (stm->batch_query)
-      pipe->end_query(pipe, stm->batch_query);
+   if (m->batch_query)
+      pipe->end_query(pipe, m->batch_query);
 }
 
 void
 st_ResetPerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object *m)
 {
-   struct st_perf_monitor_object *stm = st_perf_monitor_object(m);
    struct pipe_context *pipe = st_context(ctx)->pipe;
 
    if (!m->Ended)
       st_EndPerfMonitor(ctx, m);
 
-   reset_perf_monitor(stm, pipe);
+   reset_perf_monitor(m, pipe);
 
    if (m->Active)
       st_BeginPerfMonitor(ctx, m);
@@ -236,17 +222,16 @@ GLboolean
 st_IsPerfMonitorResultAvailable(struct gl_context *ctx,
                                 struct gl_perf_monitor_object *m)
 {
-   struct st_perf_monitor_object *stm = st_perf_monitor_object(m);
    struct pipe_context *pipe = st_context(ctx)->pipe;
    unsigned i;
 
-   if (!stm->num_active_counters)
+   if (!m->num_active_counters)
       return false;
 
    /* The result of a monitoring session is only available if the query of
     * each active counter is idle. */
-   for (i = 0; i < stm->num_active_counters; ++i) {
-      struct pipe_query *query = stm->active_counters[i].query;
+   for (i = 0; i < m->num_active_counters; ++i) {
+      struct pipe_query *query = m->active_counters[i].query;
       union pipe_query_result result;
       if (query && !pipe->get_query_result(pipe, query, FALSE, &result)) {
          /* The query is busy. */
@@ -254,8 +239,8 @@ st_IsPerfMonitorResultAvailable(struct gl_context *ctx,
       }
    }
 
-   if (stm->batch_query &&
-       !pipe->get_query_result(pipe, stm->batch_query, FALSE, 
stm->batch_result))
+   if (m->batch_query &&
+       !pipe->get_query_result(pipe, m->batch_query, FALSE, m->batch_result))
       return false;
 
    return true;
@@ -268,7 +253,6 @@ st_GetPerfMonitorResult(struct gl_context *ctx,
                         GLuint *data,
                         GLint *bytesWritten)
 {
-   struct st_perf_monitor_object *stm = st_perf_monitor_object(m);
    struct pipe_context *pipe = st_context(ctx)->pipe;
    unsigned i;
 
@@ -280,13 +264,13 @@ st_GetPerfMonitorResult(struct gl_context *ctx,
    GLsizei offset = 0;
    bool have_batch_query = false;
 
-   if (stm->batch_query)
-      have_batch_query = pipe->get_query_result(pipe, stm->batch_query, TRUE,
-                                                stm->batch_result);
+   if (m->batch_query)
+      have_batch_query = pipe->get_query_result(pipe, m->batch_query, TRUE,
+                                                m->batch_result);
 
    /* Read query results for each active counter. */
-   for (i = 0; i < stm->num_active_counters; ++i) {
-      struct st_perf_counter_object *cntr = &stm->active_counters[i];
+   for (i = 0; i < m->num_active_counters; ++i) {
+      struct st_perf_counter_object *cntr = &m->active_counters[i];
       union pipe_query_result result = { 0 };
       int gid, cid;
       GLenum type;
@@ -301,7 +285,7 @@ st_GetPerfMonitorResult(struct gl_context *ctx,
       } else {
          if (!have_batch_query)
             continue;
-         result.batch[0] = stm->batch_result->batch[cntr->batch_index];
+         result.batch[0] = m->batch_result->batch[cntr->batch_index];
       }
 
       data[offset++] = gid;
diff --git a/src/mesa/state_tracker/st_cb_perfmon.h 
b/src/mesa/state_tracker/st_cb_perfmon.h
index 5964d3bcf8e..3b8f934fb47 100644
--- a/src/mesa/state_tracker/st_cb_perfmon.h
+++ b/src/mesa/state_tracker/st_cb_perfmon.h
@@ -26,27 +26,6 @@
 
 #include "util/list.h"
 
-struct st_perf_counter_object
-{
-   struct pipe_query *query;
-   int id;
-   int group_id;
-   unsigned batch_index;
-};
-
-/**
- * Subclass of gl_perf_monitor_object
- */
-struct st_perf_monitor_object
-{
-   struct gl_perf_monitor_object base;
-   unsigned num_active_counters;
-   struct st_perf_counter_object *active_counters;
-
-   struct pipe_query *batch_query;
-   union pipe_query_result *batch_result;
-};
-
 /**
  * Extra data per counter, supplementing gl_perf_monitor_counter with
  * driver-specific information.
@@ -63,22 +42,12 @@ struct st_perf_monitor_group
    bool has_batch;
 };
 
-/**
- * Cast wrapper
- */
-static inline struct st_perf_monitor_object *
-st_perf_monitor_object(struct gl_perf_monitor_object *q)
-{
-   return (struct st_perf_monitor_object *)q;
-}
-
 bool
 st_have_perfmon(struct st_context *st);
 
 void
 st_destroy_perfmon(struct st_context *st);
 
-struct gl_perf_monitor_object *st_NewPerfMonitor(struct gl_context *ctx);
 void st_DeletePerfMonitor(struct gl_context *ctx, struct 
gl_perf_monitor_object *m);
 GLboolean st_BeginPerfMonitor(struct gl_context *ctx, struct 
gl_perf_monitor_object *m);
 void st_EndPerfMonitor(struct gl_context *ctx, struct gl_perf_monitor_object 
*m);

Reply via email to