Module: Mesa Branch: master Commit: 4900e625bd195021ec5577ae625685307c408910 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4900e625bd195021ec5577ae625685307c408910
Author: Roland Scheidegger <srol...@vmware.com> Date: Fri Aug 23 21:23:07 2013 +0200 softpipe: support nested/overlapping queries for all query types There's just no way resetting the counters is working with nested/overlapping queries. Reviewed-by: Brian Paul <bri...@vmware.com> --- src/gallium/drivers/softpipe/sp_prim_vbuf.c | 2 +- src/gallium/drivers/softpipe/sp_query.c | 33 +++++++++++++-------------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/gallium/drivers/softpipe/sp_prim_vbuf.c b/src/gallium/drivers/softpipe/sp_prim_vbuf.c index 5d0b5e1..80c6450 100644 --- a/src/gallium/drivers/softpipe/sp_prim_vbuf.c +++ b/src/gallium/drivers/softpipe/sp_prim_vbuf.c @@ -595,7 +595,7 @@ sp_vbuf_so_info(struct vbuf_render *vbr, uint primitives, uint vertices, struct softpipe_context *softpipe = cvbr->softpipe; softpipe->so_stats.num_primitives_written += primitives; - softpipe->so_stats.primitives_storage_needed = + softpipe->so_stats.primitives_storage_needed += vertices * 4 /*sizeof(float|int32)*/ * 4 /*x,y,z,w*/; softpipe->num_primitives_generated += prim_generated; } diff --git a/src/gallium/drivers/softpipe/sp_query.c b/src/gallium/drivers/softpipe/sp_query.c index daeef53..ca15f03 100644 --- a/src/gallium/drivers/softpipe/sp_query.c +++ b/src/gallium/drivers/softpipe/sp_query.c @@ -99,22 +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.primitives_storage_needed = 0; - sq->num_primitives_generated = 0; - softpipe->num_primitives_generated = 0; - sq->so.num_primitives_written = 0; - softpipe->so_stats.num_primitives_written = 0; + sq->so.num_primitives_written = softpipe->so_stats.num_primitives_written; + sq->so.primitives_storage_needed = softpipe->num_primitives_generated; break; case PIPE_QUERY_SO_OVERFLOW_PREDICATE: sq->end = FALSE; break; case PIPE_QUERY_PRIMITIVES_EMITTED: - sq->so.num_primitives_written = 0; - softpipe->so_stats.num_primitives_written = 0; + sq->so.num_primitives_written = softpipe->so_stats.num_primitives_written; break; case PIPE_QUERY_PRIMITIVES_GENERATED: - sq->num_primitives_generated = 0; - softpipe->num_primitives_generated = 0; + sq->num_primitives_generated = softpipe->num_primitives_generated; break; case PIPE_QUERY_TIMESTAMP: case PIPE_QUERY_GPU_FINISHED: @@ -158,21 +153,25 @@ softpipe_end_query(struct pipe_context *pipe, struct pipe_query *q) sq->end = os_time_get_nano(); break; case PIPE_QUERY_SO_OVERFLOW_PREDICATE: - sq->end = (softpipe->num_primitives_generated > - softpipe->so_stats.num_primitives_written); + sq->so.num_primitives_written = + softpipe->so_stats.num_primitives_written - sq->so.num_primitives_written; + sq->num_primitives_generated = + softpipe->num_primitives_generated - sq->num_primitives_generated; + sq->end = sq->num_primitives_generated > sq->so.num_primitives_written; break; case PIPE_QUERY_SO_STATISTICS: - sq->num_primitives_generated = - softpipe->num_primitives_generated; sq->so.num_primitives_written = - softpipe->so_stats.num_primitives_written; + softpipe->so_stats.num_primitives_written - sq->so.num_primitives_written; + sq->so.primitives_storage_needed = + softpipe->num_primitives_generated - sq->so.primitives_storage_needed; break; case PIPE_QUERY_PRIMITIVES_EMITTED: sq->so.num_primitives_written = - softpipe->so_stats.num_primitives_written; + softpipe->so_stats.num_primitives_written - sq->so.num_primitives_written; break; case PIPE_QUERY_PRIMITIVES_GENERATED: - sq->num_primitives_generated = softpipe->num_primitives_generated; + sq->num_primitives_generated = + softpipe->num_primitives_generated - sq->num_primitives_generated; break; case PIPE_QUERY_GPU_FINISHED: case PIPE_QUERY_TIMESTAMP_DISJOINT: @@ -219,7 +218,7 @@ softpipe_get_query_result(struct pipe_context *pipe, struct pipe_query_data_so_statistics *stats = (struct pipe_query_data_so_statistics *)vresult; stats->num_primitives_written = sq->so.num_primitives_written; - stats->primitives_storage_needed = sq->num_primitives_generated; + stats->primitives_storage_needed = sq->so.primitives_storage_needed; } break; case PIPE_QUERY_PIPELINE_STATISTICS: _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit