summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZack Rusin <zackr@vmware.com>2013-04-09 03:50:32 -0700
committerZack Rusin <zackr@vmware.com>2013-04-10 12:32:56 -0700
commitc1cd19c3b8339a48024e381515806186b8056256 (patch)
tree7632b0744ca9d78a4381aa92ab56aa386c7c1e95
parent7466e0b6c84ce0c6029e60739daac8baeccb8b0b (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.c19
-rw-r--r--src/gallium/drivers/llvmpipe/lp_rast.c2
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);