Module: Mesa Branch: main Commit: 58ba18474ba19c1306f0841805af41ae007f8f66 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=58ba18474ba19c1306f0841805af41ae007f8f66
Author: Mike Blumenkrantz <[email protected]> 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 <[email protected]> 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);
