Mesa (main): aux/trace: fix PIPE_QUERY_PIPELINE_STATISTICS_SINGLE tracing

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Nov 5 19:01:19 UTC 2021


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Thu Oct 28 16:18:38 2021 -0400

aux/trace: fix PIPE_QUERY_PIPELINE_STATISTICS_SINGLE tracing

don't just crash, dump!

Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13582>

---

 src/gallium/auxiliary/driver_trace/tr_context.c    |  4 ++-
 src/gallium/auxiliary/driver_trace/tr_dump_state.c | 42 +++++++++++++++++++++-
 src/gallium/auxiliary/driver_trace/tr_dump_state.h |  2 +-
 3 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/src/gallium/auxiliary/driver_trace/tr_context.c b/src/gallium/auxiliary/driver_trace/tr_context.c
index b451a34d1ed..7702660e6b3 100644
--- a/src/gallium/auxiliary/driver_trace/tr_context.c
+++ b/src/gallium/auxiliary/driver_trace/tr_context.c
@@ -47,6 +47,7 @@ struct trace_query
 {
    struct threaded_query base;
    unsigned type;
+   unsigned index;
 
    struct pipe_query *query;
 };
@@ -201,6 +202,7 @@ trace_context_create_query(struct pipe_context *_pipe,
       if (tr_query) {
          tr_query->type = query_type;
          tr_query->query = query;
+         tr_query->index = index;
          query = (struct pipe_query *)tr_query;
       } else {
          pipe->destroy_query(pipe, query);
@@ -305,7 +307,7 @@ trace_context_get_query_result(struct pipe_context *_pipe,
 
    trace_dump_arg_begin("result");
    if (ret) {
-      trace_dump_query_result(tr_query->type, result);
+      trace_dump_query_result(tr_query->type, tr_query->index, result);
    } else {
       trace_dump_null();
    }
diff --git a/src/gallium/auxiliary/driver_trace/tr_dump_state.c b/src/gallium/auxiliary/driver_trace/tr_dump_state.c
index 1f5da80193f..3cbee41210c 100644
--- a/src/gallium/auxiliary/driver_trace/tr_dump_state.c
+++ b/src/gallium/auxiliary/driver_trace/tr_dump_state.c
@@ -936,7 +936,7 @@ void trace_dump_blit_info(const struct pipe_blit_info *info)
 }
 
 void
-trace_dump_query_result(unsigned query_type,
+trace_dump_query_result(unsigned query_type, unsigned index,
                         const union pipe_query_result *result)
 {
    if (!trace_dumping_enabled_locked())
@@ -994,6 +994,46 @@ trace_dump_query_result(unsigned query_type,
       trace_dump_struct_end();
       break;
 
+   case PIPE_QUERY_PIPELINE_STATISTICS_SINGLE:
+      trace_dump_struct_begin("pipe_query_data_pipeline_statistics");
+      switch (index) {
+      case PIPE_STAT_QUERY_IA_VERTICES:
+         trace_dump_member(uint, &result->pipeline_statistics, ia_vertices);
+         break;
+      case PIPE_STAT_QUERY_IA_PRIMITIVES:
+         trace_dump_member(uint, &result->pipeline_statistics, ia_primitives);
+         break;
+      case PIPE_STAT_QUERY_VS_INVOCATIONS:
+         trace_dump_member(uint, &result->pipeline_statistics, vs_invocations);
+         break;
+      case PIPE_STAT_QUERY_GS_INVOCATIONS:
+         trace_dump_member(uint, &result->pipeline_statistics, gs_invocations);
+         break;
+      case PIPE_STAT_QUERY_GS_PRIMITIVES:
+         trace_dump_member(uint, &result->pipeline_statistics, gs_primitives);
+         break;
+      case PIPE_STAT_QUERY_C_INVOCATIONS:
+         trace_dump_member(uint, &result->pipeline_statistics, c_invocations);
+         break;
+      case PIPE_STAT_QUERY_C_PRIMITIVES:
+         trace_dump_member(uint, &result->pipeline_statistics, c_primitives);
+         break;
+      case PIPE_STAT_QUERY_PS_INVOCATIONS:
+         trace_dump_member(uint, &result->pipeline_statistics, ps_invocations);
+         break;
+      case PIPE_STAT_QUERY_HS_INVOCATIONS:
+         trace_dump_member(uint, &result->pipeline_statistics, hs_invocations);
+         break;
+      case PIPE_STAT_QUERY_DS_INVOCATIONS:
+         trace_dump_member(uint, &result->pipeline_statistics, ds_invocations);
+         break;
+      case PIPE_STAT_QUERY_CS_INVOCATIONS:
+         trace_dump_member(uint, &result->pipeline_statistics, cs_invocations);
+         break;
+      }
+      trace_dump_struct_end();
+      break;
+
    default:
       assert(query_type >= PIPE_QUERY_DRIVER_SPECIFIC);
       trace_dump_uint(result->u64);
diff --git a/src/gallium/auxiliary/driver_trace/tr_dump_state.h b/src/gallium/auxiliary/driver_trace/tr_dump_state.h
index f5633b3be12..cef8a8274c7 100644
--- a/src/gallium/auxiliary/driver_trace/tr_dump_state.h
+++ b/src/gallium/auxiliary/driver_trace/tr_dump_state.h
@@ -94,7 +94,7 @@ void trace_dump_draw_indirect_info(const struct pipe_draw_indirect_info *state);
 
 void trace_dump_blit_info(const struct pipe_blit_info *);
 
-void trace_dump_query_result(unsigned query_type,
+void trace_dump_query_result(unsigned query_type, unsigned index,
                              const union pipe_query_result *result);
 
 void trace_dump_grid_info(const struct pipe_grid_info *state);



More information about the mesa-commit mailing list