llvmpipe: implement so_overflow query
Signed-off-by: Zack Rusin <zackr@vmware.com> Reviewed-by: José Fonseca <jfonseca@vmware.com> Reviewed-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
parent
49dda2d92f
commit
562835bcdf
|
@ -139,6 +139,9 @@ llvmpipe_get_query_result(struct pipe_context *pipe,
|
||||||
case PIPE_QUERY_PRIMITIVES_EMITTED:
|
case PIPE_QUERY_PRIMITIVES_EMITTED:
|
||||||
*result = pq->num_primitives_written;
|
*result = pq->num_primitives_written;
|
||||||
break;
|
break;
|
||||||
|
case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
|
||||||
|
*result = pq->so_has_overflown;
|
||||||
|
break;
|
||||||
case PIPE_QUERY_SO_STATISTICS: {
|
case PIPE_QUERY_SO_STATISTICS: {
|
||||||
struct pipe_query_data_so_statistics *stats =
|
struct pipe_query_data_so_statistics *stats =
|
||||||
(struct pipe_query_data_so_statistics *)vresult;
|
(struct pipe_query_data_so_statistics *)vresult;
|
||||||
|
@ -196,6 +199,10 @@ llvmpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q)
|
||||||
llvmpipe->num_primitives_generated = 0;
|
llvmpipe->num_primitives_generated = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pq->type == PIPE_QUERY_SO_OVERFLOW_PREDICATE) {
|
||||||
|
pq->so_has_overflown = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (pq->type == PIPE_QUERY_PIPELINE_STATISTICS) {
|
if (pq->type == PIPE_QUERY_PIPELINE_STATISTICS) {
|
||||||
/* reset our cache */
|
/* reset our cache */
|
||||||
if (llvmpipe->active_statistics_queries == 0) {
|
if (llvmpipe->active_statistics_queries == 0) {
|
||||||
|
@ -234,6 +241,11 @@ llvmpipe_end_query(struct pipe_context *pipe, struct pipe_query *q)
|
||||||
pq->num_primitives_generated = llvmpipe->num_primitives_generated;
|
pq->num_primitives_generated = llvmpipe->num_primitives_generated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pq->type == PIPE_QUERY_SO_OVERFLOW_PREDICATE) {
|
||||||
|
pq->so_has_overflown = (llvmpipe->num_primitives_generated >
|
||||||
|
llvmpipe->so_stats.num_primitives_written);
|
||||||
|
}
|
||||||
|
|
||||||
if (pq->type == PIPE_QUERY_PIPELINE_STATISTICS) {
|
if (pq->type == PIPE_QUERY_PIPELINE_STATISTICS) {
|
||||||
pq->stats.ia_vertices =
|
pq->stats.ia_vertices =
|
||||||
llvmpipe->pipeline_statistics.ia_vertices - pq->stats.ia_vertices;
|
llvmpipe->pipeline_statistics.ia_vertices - pq->stats.ia_vertices;
|
||||||
|
|
|
@ -47,6 +47,7 @@ struct llvmpipe_query {
|
||||||
unsigned type; /* PIPE_QUERY_* */
|
unsigned type; /* PIPE_QUERY_* */
|
||||||
unsigned num_primitives_generated;
|
unsigned num_primitives_generated;
|
||||||
unsigned num_primitives_written;
|
unsigned num_primitives_written;
|
||||||
|
boolean so_has_overflown;
|
||||||
|
|
||||||
struct pipe_query_data_pipeline_statistics stats;
|
struct pipe_query_data_pipeline_statistics stats;
|
||||||
};
|
};
|
||||||
|
|
|
@ -478,6 +478,7 @@ lp_rast_begin_query(struct lp_rasterizer_task *task,
|
||||||
case PIPE_QUERY_PRIMITIVES_EMITTED:
|
case PIPE_QUERY_PRIMITIVES_EMITTED:
|
||||||
case PIPE_QUERY_SO_STATISTICS:
|
case PIPE_QUERY_SO_STATISTICS:
|
||||||
case PIPE_QUERY_PIPELINE_STATISTICS:
|
case PIPE_QUERY_PIPELINE_STATISTICS:
|
||||||
|
case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
|
@ -511,6 +512,7 @@ lp_rast_end_query(struct lp_rasterizer_task *task,
|
||||||
case PIPE_QUERY_PRIMITIVES_EMITTED:
|
case PIPE_QUERY_PRIMITIVES_EMITTED:
|
||||||
case PIPE_QUERY_SO_STATISTICS:
|
case PIPE_QUERY_SO_STATISTICS:
|
||||||
case PIPE_QUERY_PIPELINE_STATISTICS:
|
case PIPE_QUERY_PIPELINE_STATISTICS:
|
||||||
|
case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
|
|
Loading…
Reference in New Issue