Re: [Mesa-dev] [PATCH 1/3] softpipe: support nested/overlapping queries for all query types
On 08/23/2013 03:10 PM, srol...@vmware.com wrote: From: Roland Scheidegger srol...@vmware.com There's just no way resetting the counters is working with nested/overlapping queries. --- 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: For the series: Reviewed-by: Brian Paul bri...@vmware.com ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 1/3] softpipe: support nested/overlapping queries for all query types
From: Roland Scheidegger srol...@vmware.com There's just no way resetting the counters is working with nested/overlapping queries. --- 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: -- 1.7.9.5 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev