Mesa (master): gallium/u_threaded: implement INTEL_performance_query hooks

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Apr 22 11:29:01 UTC 2021


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

Author: Marcin Ślusarz <marcin.slusarz at intel.com>
Date:   Fri Apr 16 19:07:12 2021 +0200

gallium/u_threaded: implement INTEL_performance_query hooks

Fixes: 206495cac4e ("iris: Enable u_threaded_context")
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4528

Signed-off-by: Marcin Ślusarz <marcin.slusarz at intel.com>
Acked-by: Marek Olšák <marek.olsak at amd.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9922>

---

 src/gallium/auxiliary/util/u_threaded_context.c | 125 ++++++++++++++++++++++++
 1 file changed, 125 insertions(+)

diff --git a/src/gallium/auxiliary/util/u_threaded_context.c b/src/gallium/auxiliary/util/u_threaded_context.c
index 75f75312613..c2236b5a3ae 100644
--- a/src/gallium/auxiliary/util/u_threaded_context.c
+++ b/src/gallium/auxiliary/util/u_threaded_context.c
@@ -2977,6 +2977,121 @@ tc_resource_commit(struct pipe_context *_pipe, struct pipe_resource *res,
    return true; /* we don't care about the return value for this call */
 }
 
+static unsigned
+tc_init_intel_perf_query_info(struct pipe_context *_pipe)
+{
+   struct threaded_context *tc = threaded_context(_pipe);
+   struct pipe_context *pipe = tc->pipe;
+
+   return pipe->init_intel_perf_query_info(pipe);
+}
+
+static void
+tc_get_intel_perf_query_info(struct pipe_context *_pipe,
+                             unsigned query_index,
+                             const char **name,
+                             uint32_t *data_size,
+                             uint32_t *n_counters,
+                             uint32_t *n_active)
+{
+   struct threaded_context *tc = threaded_context(_pipe);
+   struct pipe_context *pipe = tc->pipe;
+
+   pipe->get_intel_perf_query_info(pipe, query_index, name, data_size,
+         n_counters, n_active);
+}
+
+static void
+tc_get_intel_perf_query_counter_info(struct pipe_context *_pipe,
+                                     unsigned query_index,
+                                     unsigned counter_index,
+                                     const char **name,
+                                     const char **desc,
+                                     uint32_t *offset,
+                                     uint32_t *data_size,
+                                     uint32_t *type_enum,
+                                     uint32_t *data_type_enum,
+                                     uint64_t *raw_max)
+{
+   struct threaded_context *tc = threaded_context(_pipe);
+   struct pipe_context *pipe = tc->pipe;
+
+   pipe->get_intel_perf_query_counter_info(pipe, query_index, counter_index,
+         name, desc, offset, data_size, type_enum, data_type_enum, raw_max);
+}
+
+static struct pipe_query *
+tc_new_intel_perf_query_obj(struct pipe_context *_pipe, unsigned query_index)
+{
+   struct threaded_context *tc = threaded_context(_pipe);
+   struct pipe_context *pipe = tc->pipe;
+
+   return pipe->new_intel_perf_query_obj(pipe, query_index);
+}
+
+static bool
+tc_begin_intel_perf_query(struct pipe_context *_pipe, struct pipe_query *q)
+{
+   struct threaded_context *tc = threaded_context(_pipe);
+   struct pipe_context *pipe = tc->pipe;
+
+   tc_sync(tc);
+   return pipe->begin_intel_perf_query(pipe, q);
+}
+
+static void
+tc_end_intel_perf_query(struct pipe_context *_pipe, struct pipe_query *q)
+{
+   struct threaded_context *tc = threaded_context(_pipe);
+   struct pipe_context *pipe = tc->pipe;
+
+   tc_sync(tc);
+   pipe->end_intel_perf_query(pipe, q);
+}
+
+static void
+tc_delete_intel_perf_query(struct pipe_context *_pipe, struct pipe_query *q)
+{
+   struct threaded_context *tc = threaded_context(_pipe);
+   struct pipe_context *pipe = tc->pipe;
+
+   tc_sync(tc);
+   pipe->delete_intel_perf_query(pipe, q);
+}
+
+static void
+tc_wait_intel_perf_query(struct pipe_context *_pipe, struct pipe_query *q)
+{
+   struct threaded_context *tc = threaded_context(_pipe);
+   struct pipe_context *pipe = tc->pipe;
+
+   tc_sync(tc);
+   pipe->wait_intel_perf_query(pipe, q);
+}
+
+static bool
+tc_is_intel_perf_query_ready(struct pipe_context *_pipe, struct pipe_query *q)
+{
+   struct threaded_context *tc = threaded_context(_pipe);
+   struct pipe_context *pipe = tc->pipe;
+
+   tc_sync(tc);
+   return pipe->is_intel_perf_query_ready(pipe, q);
+}
+
+static void
+tc_get_intel_perf_query_data(struct pipe_context *_pipe,
+                             struct pipe_query *q,
+                             size_t data_size,
+                             uint32_t *data,
+                             uint32_t *bytes_written)
+{
+   struct threaded_context *tc = threaded_context(_pipe);
+   struct pipe_context *pipe = tc->pipe;
+
+   tc_sync(tc);
+   pipe->get_intel_perf_query_data(pipe, q, data_size, data, bytes_written);
+}
 
 /********************************************************************
  * callback
@@ -3259,6 +3374,16 @@ threaded_context_create(struct pipe_context *pipe,
    CTX_INIT(delete_image_handle);
    CTX_INIT(make_image_handle_resident);
    CTX_INIT(set_frontend_noop);
+   CTX_INIT(init_intel_perf_query_info);
+   CTX_INIT(get_intel_perf_query_info);
+   CTX_INIT(get_intel_perf_query_counter_info);
+   CTX_INIT(new_intel_perf_query_obj);
+   CTX_INIT(begin_intel_perf_query);
+   CTX_INIT(end_intel_perf_query);
+   CTX_INIT(delete_intel_perf_query);
+   CTX_INIT(wait_intel_perf_query);
+   CTX_INIT(is_intel_perf_query_ready);
+   CTX_INIT(get_intel_perf_query_data);
 #undef CTX_INIT
 
    if (out)



More information about the mesa-commit mailing list