The series looks good. Another way to distinguish between return one and return all is to use "index". index <= 11 returns one. index == ~0 returns all. This is the least intrusive.
st/mesa and gallium/hud always want to get one. st/nine and util/u_helpers always want to get all. Marek On Sat, Dec 15, 2018 at 4:45 AM Kenneth Graunke <[email protected]> wrote: > Gallium handles pipeline statistics queries as a single query > (PIPE_QUERY_PIPELINE_STATISTICS) which returns a struct with 11 values. > Sometimes it's useful to refer to each of those values individually, > rather than as a group. To avoid hardcoding numbers, we define a new > enum for each value. Here, the name and enum value correspond to the > index in the struct pipe_query_data_pipeline_statistics result. > > Cc: Roland Scheidegger <[email protected]> > --- > src/gallium/include/pipe/p_defines.h | 17 +++++++++++++++++ > src/mesa/state_tracker/st_cb_queryobj.c | 22 +++++++++++----------- > 2 files changed, 28 insertions(+), 11 deletions(-) > > diff --git a/src/gallium/include/pipe/p_defines.h > b/src/gallium/include/pipe/p_defines.h > index 6d96f1ccb5b..21005955a36 100644 > --- a/src/gallium/include/pipe/p_defines.h > +++ b/src/gallium/include/pipe/p_defines.h > @@ -568,6 +568,23 @@ enum pipe_query_type { > PIPE_QUERY_DRIVER_SPECIFIC = 256, > }; > > +/** > + * Index for PIPE_QUERY_PIPELINE_STATISTICS subqueries. > + */ > +enum pipe_statistics_query_index { > + PIPE_STAT_QUERY_IA_VERTICES, > + PIPE_STAT_QUERY_IA_PRIMITIVES, > + PIPE_STAT_QUERY_VS_INVOCATIONS, > + PIPE_STAT_QUERY_GS_INVOCATIONS, > + PIPE_STAT_QUERY_GS_PRIMITIVES, > + PIPE_STAT_QUERY_C_INVOCATIONS, > + PIPE_STAT_QUERY_C_PRIMITIVES, > + PIPE_STAT_QUERY_PS_INVOCATIONS, > + PIPE_STAT_QUERY_HS_INVOCATIONS, > + PIPE_STAT_QUERY_DS_INVOCATIONS, > + PIPE_STAT_QUERY_CS_INVOCATIONS, > +}; > + > /** > * Conditional rendering modes > */ > diff --git a/src/mesa/state_tracker/st_cb_queryobj.c > b/src/mesa/state_tracker/st_cb_queryobj.c > index 69e6004c3f1..82f53243336 100644 > --- a/src/mesa/state_tracker/st_cb_queryobj.c > +++ b/src/mesa/state_tracker/st_cb_queryobj.c > @@ -386,37 +386,37 @@ st_StoreQueryResult(struct gl_context *ctx, struct > gl_query_object *q, > } else if (stq->type == PIPE_QUERY_PIPELINE_STATISTICS) { > switch (q->Target) { > case GL_VERTICES_SUBMITTED_ARB: > - index = 0; > + index = PIPE_STAT_QUERY_IA_VERTICES; > break; > case GL_PRIMITIVES_SUBMITTED_ARB: > - index = 1; > + index = PIPE_STAT_QUERY_IA_PRIMITIVES; > break; > case GL_VERTEX_SHADER_INVOCATIONS_ARB: > - index = 2; > + index = PIPE_STAT_QUERY_VS_INVOCATIONS; > break; > case GL_GEOMETRY_SHADER_INVOCATIONS: > - index = 3; > + index = PIPE_STAT_QUERY_GS_INVOCATIONS; > break; > case GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB: > - index = 4; > + index = PIPE_STAT_QUERY_GS_PRIMITIVES; > break; > case GL_CLIPPING_INPUT_PRIMITIVES_ARB: > - index = 5; > + index = PIPE_STAT_QUERY_C_INVOCATIONS; > break; > case GL_CLIPPING_OUTPUT_PRIMITIVES_ARB: > - index = 6; > + index = PIPE_STAT_QUERY_C_PRIMITIVES; > break; > case GL_FRAGMENT_SHADER_INVOCATIONS_ARB: > - index = 7; > + index = PIPE_STAT_QUERY_PS_INVOCATIONS; > break; > case GL_TESS_CONTROL_SHADER_PATCHES_ARB: > - index = 8; > + index = PIPE_STAT_QUERY_HS_INVOCATIONS; > break; > case GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB: > - index = 9; > + index = PIPE_STAT_QUERY_DS_INVOCATIONS; > break; > case GL_COMPUTE_SHADER_INVOCATIONS_ARB: > - index = 10; > + index = PIPE_STAT_QUERY_CS_INVOCATIONS; > break; > default: > unreachable("Unexpected target"); > -- > 2.19.1 > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
