case PIPE_QUERY_PRIMITIVES_EMITTED:
*result = pq->num_primitives_written;
break;
+ case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
+ *result = pq->so_has_overflown;
+ break;
case PIPE_QUERY_SO_STATISTICS: {
struct pipe_query_data_so_statistics *stats =
(struct pipe_query_data_so_statistics *)vresult;
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) {
/* reset our cache */
if (llvmpipe->active_statistics_queries == 0) {
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) {
pq->stats.ia_vertices =
llvmpipe->pipeline_statistics.ia_vertices - pq->stats.ia_vertices;
unsigned type; /* PIPE_QUERY_* */
unsigned num_primitives_generated;
unsigned num_primitives_written;
+ boolean so_has_overflown;
struct pipe_query_data_pipeline_statistics stats;
};
case PIPE_QUERY_PRIMITIVES_EMITTED:
case PIPE_QUERY_SO_STATISTICS:
case PIPE_QUERY_PIPELINE_STATISTICS:
+ case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
break;
default:
assert(0);
case PIPE_QUERY_PRIMITIVES_EMITTED:
case PIPE_QUERY_SO_STATISTICS:
case PIPE_QUERY_PIPELINE_STATISTICS:
+ case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
break;
default:
assert(0);