Mesa (master): llvmpipe/query: add support for indexed queries
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Feb 7 01:34:48 UTC 2020
Module: Mesa
Branch: master
Commit: 9d70002744ca121bff51dd40bfa76b633320652c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9d70002744ca121bff51dd40bfa76b633320652c
Author: Dave Airlie <airlied at redhat.com>
Date: Thu Jan 23 15:48:46 2020 +1000
llvmpipe/query: add support for indexed queries
This adds support for the queries needed for gpu_shader5 vertex streams
Reviewed-by: Roland Scheidegger <sroland at vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3530>
---
src/gallium/drivers/llvmpipe/lp_context.h | 2 +-
src/gallium/drivers/llvmpipe/lp_query.c | 25 +++++++++++++------------
src/gallium/drivers/llvmpipe/lp_query.h | 1 +
src/gallium/drivers/llvmpipe/lp_setup_vbuf.c | 4 ++--
4 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/src/gallium/drivers/llvmpipe/lp_context.h b/src/gallium/drivers/llvmpipe/lp_context.h
index 0e029f59122..b9bdfa10978 100644
--- a/src/gallium/drivers/llvmpipe/lp_context.h
+++ b/src/gallium/drivers/llvmpipe/lp_context.h
@@ -96,7 +96,7 @@ struct llvmpipe_context {
struct draw_so_target *so_targets[PIPE_MAX_SO_BUFFERS];
int 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/llvmpipe/lp_query.c b/src/gallium/drivers/llvmpipe/lp_query.c
index 276fd3bab78..75e3b47bfdb 100644
--- a/src/gallium/drivers/llvmpipe/lp_query.c
+++ b/src/gallium/drivers/llvmpipe/lp_query.c
@@ -61,6 +61,7 @@ llvmpipe_create_query(struct pipe_context *pipe,
if (pq) {
pq->type = type;
+ pq->index = index;
}
return (struct pipe_query *) pq;
@@ -357,20 +358,20 @@ llvmpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q)
switch (pq->type) {
case PIPE_QUERY_PRIMITIVES_EMITTED:
- pq->num_primitives_written = llvmpipe->so_stats.num_primitives_written;
+ pq->num_primitives_written = llvmpipe->so_stats[pq->index].num_primitives_written;
break;
case PIPE_QUERY_PRIMITIVES_GENERATED:
- pq->num_primitives_generated = llvmpipe->so_stats.primitives_storage_needed;
+ pq->num_primitives_generated = llvmpipe->so_stats[pq->index].primitives_storage_needed;
llvmpipe->active_primgen_queries++;
break;
case PIPE_QUERY_SO_STATISTICS:
- pq->num_primitives_written = llvmpipe->so_stats.num_primitives_written;
- pq->num_primitives_generated = llvmpipe->so_stats.primitives_storage_needed;
+ pq->num_primitives_written = llvmpipe->so_stats[pq->index].num_primitives_written;
+ pq->num_primitives_generated = llvmpipe->so_stats[pq->index].primitives_storage_needed;
break;
case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
case PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE:
- pq->num_primitives_written = llvmpipe->so_stats.num_primitives_written;
- pq->num_primitives_generated = llvmpipe->so_stats.primitives_storage_needed;
+ pq->num_primitives_written = llvmpipe->so_stats[pq->index].num_primitives_written;
+ pq->num_primitives_generated = llvmpipe->so_stats[pq->index].primitives_storage_needed;
break;
case PIPE_QUERY_PIPELINE_STATISTICS:
/* reset our cache */
@@ -406,26 +407,26 @@ llvmpipe_end_query(struct pipe_context *pipe, struct pipe_query *q)
case PIPE_QUERY_PRIMITIVES_EMITTED:
pq->num_primitives_written =
- llvmpipe->so_stats.num_primitives_written - pq->num_primitives_written;
+ llvmpipe->so_stats[pq->index].num_primitives_written - pq->num_primitives_written;
break;
case PIPE_QUERY_PRIMITIVES_GENERATED:
assert(llvmpipe->active_primgen_queries);
llvmpipe->active_primgen_queries--;
pq->num_primitives_generated =
- llvmpipe->so_stats.primitives_storage_needed - pq->num_primitives_generated;
+ llvmpipe->so_stats[pq->index].primitives_storage_needed - pq->num_primitives_generated;
break;
case PIPE_QUERY_SO_STATISTICS:
pq->num_primitives_written =
- llvmpipe->so_stats.num_primitives_written - pq->num_primitives_written;
+ llvmpipe->so_stats[pq->index].num_primitives_written - pq->num_primitives_written;
pq->num_primitives_generated =
- llvmpipe->so_stats.primitives_storage_needed - pq->num_primitives_generated;
+ llvmpipe->so_stats[pq->index].primitives_storage_needed - pq->num_primitives_generated;
break;
case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
case PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE:
pq->num_primitives_written =
- llvmpipe->so_stats.num_primitives_written - pq->num_primitives_written;
+ llvmpipe->so_stats[pq->index].num_primitives_written - pq->num_primitives_written;
pq->num_primitives_generated =
- llvmpipe->so_stats.primitives_storage_needed - pq->num_primitives_generated;
+ llvmpipe->so_stats[pq->index].primitives_storage_needed - pq->num_primitives_generated;
break;
case PIPE_QUERY_PIPELINE_STATISTICS:
pq->stats.ia_vertices =
diff --git a/src/gallium/drivers/llvmpipe/lp_query.h b/src/gallium/drivers/llvmpipe/lp_query.h
index 797375c8843..aa6707ce661 100644
--- a/src/gallium/drivers/llvmpipe/lp_query.h
+++ b/src/gallium/drivers/llvmpipe/lp_query.h
@@ -46,6 +46,7 @@ struct llvmpipe_query {
uint64_t end[LP_MAX_THREADS]; /* end count value for each thread */
struct lp_fence *fence; /* fence from last scene this was binned in */
unsigned type; /* PIPE_QUERY_* */
+ unsigned index;
unsigned num_primitives_generated;
unsigned num_primitives_written;
diff --git a/src/gallium/drivers/llvmpipe/lp_setup_vbuf.c b/src/gallium/drivers/llvmpipe/lp_setup_vbuf.c
index 5dd318329e0..a400d79fb87 100644
--- a/src/gallium/drivers/llvmpipe/lp_setup_vbuf.c
+++ b/src/gallium/drivers/llvmpipe/lp_setup_vbuf.c
@@ -549,8 +549,8 @@ lp_setup_so_info(struct vbuf_render *vbr, uint stream, uint primitives, uint pri
struct lp_setup_context *setup = lp_setup_context(vbr);
struct llvmpipe_context *lp = llvmpipe_context(setup->pipe);
- lp->so_stats.num_primitives_written += primitives;
- lp->so_stats.primitives_storage_needed += prim_generated;
+ lp->so_stats[stream].num_primitives_written += primitives;
+ lp->so_stats[stream].primitives_storage_needed += prim_generated;
}
static void
More information about the mesa-commit
mailing list