From 2c1ec23a0618b93cf0f5ae29aac27bb2c4a5e18c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 22 Apr 2017 23:44:46 +0200 Subject: [PATCH] gallium/util: add debugging helpers printing pipeline statistics MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit typically useful for hw bring-up Reviewed-by: Nicolai Hähnle --- 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 35cca82c8e0..5b46fa1351f 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 /** * 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 7de960b907d..2b382a1a54e 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 #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 -- 2.30.2