diff options
author | Marek Olšák <[email protected]> | 2017-04-22 23:44:46 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-04-25 22:39:31 +0200 |
commit | 2c1ec23a0618b93cf0f5ae29aac27bb2c4a5e18c (patch) | |
tree | c8b8f97605b86f7217e64d5fc6762da70dfe16c4 /src/gallium/auxiliary/util | |
parent | 26a36c1af75f40cf225a47ee947ec6718d916a62 (diff) |
gallium/util: add debugging helpers printing pipeline statistics
typically useful for hw bring-up
Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/util')
-rw-r--r-- | src/gallium/auxiliary/util/u_helpers.c | 51 | ||||
-rw-r--r-- | src/gallium/auxiliary/util/u_helpers.h | 8 |
2 files changed, 59 insertions, 0 deletions
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 <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 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 <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 |