diff options
author | Zack Rusin <zackr@vmware.com> | 2013-04-09 03:50:32 -0700 |
---|---|---|
committer | Zack Rusin <zackr@vmware.com> | 2013-04-10 12:32:56 -0700 |
commit | c1cd19c3b8339a48024e381515806186b8056256 (patch) | |
tree | 7632b0744ca9d78a4381aa92ab56aa386c7c1e95 | |
parent | 7466e0b6c84ce0c6029e60739daac8baeccb8b0b (diff) |
llvmpipe: implement PIPE_QUERY_SO_STATISTICS
We were missing the implementation of PIPE_QUERY_SO_STATISTICS
query, this change implements it on top of the existing
facilities.
Signed-off-by: Zack Rusin <zackr@vmware.com>
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_query.c | 19 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_rast.c | 2 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_query.c b/src/gallium/drivers/llvmpipe/lp_query.c index 01d5201a100..013d1928c11 100644 --- a/src/gallium/drivers/llvmpipe/lp_query.c +++ b/src/gallium/drivers/llvmpipe/lp_query.c @@ -137,6 +137,13 @@ llvmpipe_get_query_result(struct pipe_context *pipe, case PIPE_QUERY_PRIMITIVES_EMITTED: *result = pq->num_primitives_written; break; + case PIPE_QUERY_SO_STATISTICS: { + struct pipe_query_data_so_statistics *stats = + (struct pipe_query_data_so_statistics *)vresult; + stats->num_primitives_written = pq->num_primitives_written; + stats->primitives_storage_needed = pq->num_primitives_generated; + } + break; default: assert(0); break; @@ -174,6 +181,13 @@ llvmpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q) llvmpipe->num_primitives_generated = 0; } + if (pq->type == PIPE_QUERY_SO_STATISTICS) { + pq->num_primitives_written = 0; + llvmpipe->so_stats.num_primitives_written = 0; + pq->num_primitives_generated = 0; + llvmpipe->num_primitives_generated = 0; + } + if (pq->type == PIPE_QUERY_OCCLUSION_COUNTER) { llvmpipe->active_occlusion_query = TRUE; llvmpipe->dirty |= LP_NEW_OCCLUSION_QUERY; @@ -197,6 +211,11 @@ llvmpipe_end_query(struct pipe_context *pipe, struct pipe_query *q) pq->num_primitives_generated = llvmpipe->num_primitives_generated; } + if (pq->type == PIPE_QUERY_SO_STATISTICS) { + pq->num_primitives_written = llvmpipe->so_stats.num_primitives_written; + pq->num_primitives_generated = llvmpipe->num_primitives_generated; + } + if (pq->type == PIPE_QUERY_OCCLUSION_COUNTER) { assert(llvmpipe->active_occlusion_query); llvmpipe->active_occlusion_query = FALSE; diff --git a/src/gallium/drivers/llvmpipe/lp_rast.c b/src/gallium/drivers/llvmpipe/lp_rast.c index 6183f4108d6..6cb27020566 100644 --- a/src/gallium/drivers/llvmpipe/lp_rast.c +++ b/src/gallium/drivers/llvmpipe/lp_rast.c @@ -476,6 +476,7 @@ lp_rast_begin_query(struct lp_rasterizer_task *task, break; case PIPE_QUERY_PRIMITIVES_GENERATED: case PIPE_QUERY_PRIMITIVES_EMITTED: + case PIPE_QUERY_SO_STATISTICS: break; default: assert(0); @@ -507,6 +508,7 @@ lp_rast_end_query(struct lp_rasterizer_task *task, break; case PIPE_QUERY_PRIMITIVES_GENERATED: case PIPE_QUERY_PRIMITIVES_EMITTED: + case PIPE_QUERY_SO_STATISTICS: break; default: assert(0); |