Mesa (master): gallium/util: add debugging helpers printing pipeline statistics

Marek Olšák mareko at kemper.freedesktop.org
Tue Apr 25 20:40:27 UTC 2017


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sat Apr 22 23:44:46 2017 +0200

gallium/util: add debugging helpers printing pipeline statistics

typically useful for hw bring-up

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

---

 src/gallium/auxiliary/util/u_helpers.c | 51 ++++++++++++++++++++++++++++++++++
 src/gallium/auxiliary/util/u_helpers.h |  8 ++++++
 2 files changed, 59 insertions(+)

diff --git a/src/gallium/auxiliary/util/u_helpers.c b/src/gallium/auxiliary/util/u_helpers.c
index 35cca82c8e..5b46fa1351 100644
--- a/src/gallium/auxiliary/util/u_helpers.c
+++ b/src/gallium/auxiliary/util/u_helpers.c
@@ -28,6 +28,7 @@
 #include "util/u_helpers.h"
 #include "util/u_inlines.h"
 #include "util/u_upload_mgr.h"
+#include <inttypes.h>
 
 /**
  * This function is used to copy an array of pipe_vertex_buffer structures,
@@ -139,3 +140,53 @@ util_save_and_upload_index_buffer(struct pipe_context *pipe,
    pipe_resource_reference(&new_ib.buffer, NULL);
    return true;
 }
+
+struct pipe_query *
+util_begin_pipestat_query(struct pipe_context *ctx)
+{
+   struct pipe_query *q =
+      ctx->create_query(ctx, PIPE_QUERY_PIPELINE_STATISTICS, 0);
+   if (!q)
+      return NULL;
+
+   ctx->begin_query(ctx, q);
+   return q;
+}
+
+void
+util_end_pipestat_query(struct pipe_context *ctx, struct pipe_query *q,
+                        FILE *f)
+{
+   static unsigned counter;
+   struct pipe_query_data_pipeline_statistics stats;
+
+   ctx->end_query(ctx, q);
+   ctx->get_query_result(ctx, q, true, (void*)&stats);
+   ctx->destroy_query(ctx, q);
+
+   fprintf(f,
+           "Draw call %u:\n"
+           "    ia_vertices    = %"PRIu64"\n"
+           "    ia_primitives  = %"PRIu64"\n"
+           "    vs_invocations = %"PRIu64"\n"
+           "    gs_invocations = %"PRIu64"\n"
+           "    gs_primitives  = %"PRIu64"\n"
+           "    c_invocations  = %"PRIu64"\n"
+           "    c_primitives   = %"PRIu64"\n"
+           "    ps_invocations = %"PRIu64"\n"
+           "    hs_invocations = %"PRIu64"\n"
+           "    ds_invocations = %"PRIu64"\n"
+           "    cs_invocations = %"PRIu64"\n",
+           p_atomic_inc_return(&counter),
+           stats.ia_vertices,
+           stats.ia_primitives,
+           stats.vs_invocations,
+           stats.gs_invocations,
+           stats.gs_primitives,
+           stats.c_invocations,
+           stats.c_primitives,
+           stats.ps_invocations,
+           stats.hs_invocations,
+           stats.ds_invocations,
+           stats.cs_invocations);
+}
diff --git a/src/gallium/auxiliary/util/u_helpers.h b/src/gallium/auxiliary/util/u_helpers.h
index 7de960b907..2b382a1a54 100644
--- a/src/gallium/auxiliary/util/u_helpers.h
+++ b/src/gallium/auxiliary/util/u_helpers.h
@@ -29,6 +29,7 @@
 #define U_HELPERS_H
 
 #include "pipe/p_state.h"
+#include <stdio.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -52,6 +53,13 @@ bool util_save_and_upload_index_buffer(struct pipe_context *pipe,
                                        const struct pipe_index_buffer *ib,
                                        struct pipe_index_buffer *out_saved);
 
+struct pipe_query *
+util_begin_pipestat_query(struct pipe_context *ctx);
+
+void
+util_end_pipestat_query(struct pipe_context *ctx, struct pipe_query *q,
+                        FILE *f);
+
 #ifdef __cplusplus
 }
 #endif




More information about the mesa-commit mailing list