From: Marek Olšák Date: Sat, 22 Apr 2017 21:44:46 +0000 (+0200) Subject: gallium/util: add debugging helpers printing pipeline statistics X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2c1ec23a0618b93cf0f5ae29aac27bb2c4a5e18c;p=mesa.git gallium/util: add debugging helpers printing pipeline statistics typically useful for hw bring-up Reviewed-by: Nicolai Hähnle --- 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