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 { -- 2.1.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev