Am 27.05.2015 um 09:45 schrieb Dave Airlie: > We need indexed queries to retrieve the geom shader info. > > Signed-off-by: Dave Airlie <airl...@redhat.com> > --- > src/gallium/drivers/softpipe/sp_context.h | 2 +- > src/gallium/drivers/softpipe/sp_prim_vbuf.c | 4 ++-- > src/gallium/drivers/softpipe/sp_query.c | 23 ++++++++++++----------- > src/gallium/include/pipe/p_state.h | 2 +- > 4 files changed, 16 insertions(+), 15 deletions(-) > > diff --git a/src/gallium/drivers/softpipe/sp_context.h > b/src/gallium/drivers/softpipe/sp_context.h > index 50a7336..fa91854 100644 > --- a/src/gallium/drivers/softpipe/sp_context.h > +++ b/src/gallium/drivers/softpipe/sp_context.h > @@ -91,7 +91,7 @@ struct softpipe_context { > struct draw_so_target *so_targets[PIPE_MAX_SO_BUFFERS]; > unsigned num_so_targets; > > - struct pipe_query_data_so_statistics so_stats; > + struct pipe_query_data_so_statistics so_stats[PIPE_MAX_VERTEX_STREAMS]; > > struct pipe_query_data_pipeline_statistics pipeline_statistics; > unsigned active_statistics_queries; > diff --git a/src/gallium/drivers/softpipe/sp_prim_vbuf.c > b/src/gallium/drivers/softpipe/sp_prim_vbuf.c > index 5809fd5..6c16d9c 100644 > --- a/src/gallium/drivers/softpipe/sp_prim_vbuf.c > +++ b/src/gallium/drivers/softpipe/sp_prim_vbuf.c > @@ -602,8 +602,8 @@ sp_vbuf_so_info(struct vbuf_render *vbr, uint stream, > uint primitives, uint prim > struct softpipe_vbuf_render *cvbr = softpipe_vbuf_render(vbr); > struct softpipe_context *softpipe = cvbr->softpipe; > > - softpipe->so_stats.num_primitives_written += primitives; > - softpipe->so_stats.primitives_storage_needed += prim_generated; > + softpipe->so_stats[stream].num_primitives_written += primitives; > + softpipe->so_stats[stream].primitives_storage_needed += prim_generated; > } > > static void > diff --git a/src/gallium/drivers/softpipe/sp_query.c > b/src/gallium/drivers/softpipe/sp_query.c > index e773870..0707219 100644 > --- a/src/gallium/drivers/softpipe/sp_query.c > +++ b/src/gallium/drivers/softpipe/sp_query.c > @@ -39,6 +39,7 @@ > > struct softpipe_query { > unsigned type; > + unsigned index; > uint64_t start; > uint64_t end; > struct pipe_query_data_so_statistics so; > @@ -71,7 +72,7 @@ softpipe_create_query(struct pipe_context *pipe, > type == PIPE_QUERY_TIMESTAMP_DISJOINT); > sq = CALLOC_STRUCT( softpipe_query ); > sq->type = type; > - > + sq->index = index; > return (struct pipe_query *)sq; > } > > @@ -98,17 +99,17 @@ softpipe_begin_query(struct pipe_context *pipe, struct > pipe_query *q) > sq->start = os_time_get_nano(); > break; > case PIPE_QUERY_SO_STATISTICS: > - sq->so.num_primitives_written = > softpipe->so_stats.num_primitives_written; > - sq->so.primitives_storage_needed = > softpipe->so_stats.primitives_storage_needed; > + sq->so.num_primitives_written = > softpipe->so_stats[0].num_primitives_written; > + sq->so.primitives_storage_needed = > softpipe->so_stats[0].primitives_storage_needed; > break; > case PIPE_QUERY_SO_OVERFLOW_PREDICATE: > sq->end = FALSE; > break; > case PIPE_QUERY_PRIMITIVES_EMITTED: > - sq->so.num_primitives_written = > softpipe->so_stats.num_primitives_written; > + sq->so.num_primitives_written = > softpipe->so_stats[sq->index].num_primitives_written; > break; > case PIPE_QUERY_PRIMITIVES_GENERATED: > - sq->so.primitives_storage_needed = > softpipe->so_stats.primitives_storage_needed; > + sq->so.primitives_storage_needed = > softpipe->so_stats[sq->index].primitives_storage_needed; > break; > case PIPE_QUERY_TIMESTAMP: > case PIPE_QUERY_GPU_FINISHED: > @@ -154,24 +155,24 @@ softpipe_end_query(struct pipe_context *pipe, struct > pipe_query *q) > break; > case PIPE_QUERY_SO_OVERFLOW_PREDICATE: > sq->so.num_primitives_written = > - softpipe->so_stats.num_primitives_written - > sq->so.num_primitives_written; > + softpipe->so_stats[0].num_primitives_written - > sq->so.num_primitives_written; > sq->so.primitives_storage_needed = > - softpipe->so_stats.primitives_storage_needed - > sq->so.primitives_storage_needed; > + softpipe->so_stats[0].primitives_storage_needed - > sq->so.primitives_storage_needed; > sq->end = sq->so.primitives_storage_needed > > sq->so.num_primitives_written; > break; > case PIPE_QUERY_SO_STATISTICS: > sq->so.num_primitives_written = > - softpipe->so_stats.num_primitives_written - > sq->so.num_primitives_written; > + softpipe->so_stats[sq->index].num_primitives_written - > sq->so.num_primitives_written; > sq->so.primitives_storage_needed = > - softpipe->so_stats.primitives_storage_needed - > sq->so.primitives_storage_needed; > + softpipe->so_stats[sq->index].primitives_storage_needed - > sq->so.primitives_storage_needed; > break; > case PIPE_QUERY_PRIMITIVES_EMITTED: > sq->so.num_primitives_written = > - softpipe->so_stats.num_primitives_written - > sq->so.num_primitives_written; > + softpipe->so_stats[sq->index].num_primitives_written - > sq->so.num_primitives_written; > break; > case PIPE_QUERY_PRIMITIVES_GENERATED: > sq->so.primitives_storage_needed = > - softpipe->so_stats.primitives_storage_needed - > sq->so.primitives_storage_needed; > + softpipe->so_stats[sq->index].primitives_storage_needed - > sq->so.primitives_storage_needed; > break; > case PIPE_QUERY_GPU_FINISHED: > case PIPE_QUERY_TIMESTAMP_DISJOINT: > diff --git a/src/gallium/include/pipe/p_state.h > b/src/gallium/include/pipe/p_state.h > index e01c62c..b979730 100644 > --- a/src/gallium/include/pipe/p_state.h > +++ b/src/gallium/include/pipe/p_state.h > @@ -68,7 +68,7 @@ extern "C" { > #define PIPE_MAX_VIEWPORTS 16 > #define PIPE_MAX_CLIP_OR_CULL_DISTANCE_COUNT 8 > #define PIPE_MAX_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT 2 > - > +#define PIPE_MAX_VERTEX_STREAMS 4 > > struct pipe_reference > { >
I think this last hunk probably deserves its own commit as it is meant to indicate a general gallium limit. Roland _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev