sq->start = os_time_get_nano();
break;
case PIPE_QUERY_SO_STATISTICS:
- sq->so.primitives_storage_needed = 0;
- sq->num_primitives_generated = 0;
- softpipe->num_primitives_generated = 0;
- sq->so.num_primitives_written = 0;
- softpipe->so_stats.num_primitives_written = 0;
+ sq->so.num_primitives_written = softpipe->so_stats.num_primitives_written;
+ sq->so.primitives_storage_needed = softpipe->num_primitives_generated;
break;
case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
sq->end = FALSE;
break;
case PIPE_QUERY_PRIMITIVES_EMITTED:
- sq->so.num_primitives_written = 0;
- softpipe->so_stats.num_primitives_written = 0;
+ sq->so.num_primitives_written = softpipe->so_stats.num_primitives_written;
break;
case PIPE_QUERY_PRIMITIVES_GENERATED:
- sq->num_primitives_generated = 0;
- softpipe->num_primitives_generated = 0;
+ sq->num_primitives_generated = softpipe->num_primitives_generated;
break;
case PIPE_QUERY_TIMESTAMP:
case PIPE_QUERY_GPU_FINISHED:
sq->end = os_time_get_nano();
break;
case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
- sq->end = (softpipe->num_primitives_generated >
- softpipe->so_stats.num_primitives_written);
+ sq->so.num_primitives_written =
+ softpipe->so_stats.num_primitives_written - sq->so.num_primitives_written;
+ sq->num_primitives_generated =
+ softpipe->num_primitives_generated - sq->num_primitives_generated;
+ sq->end = sq->num_primitives_generated > sq->so.num_primitives_written;
break;
case PIPE_QUERY_SO_STATISTICS:
- sq->num_primitives_generated =
- softpipe->num_primitives_generated;
sq->so.num_primitives_written =
- softpipe->so_stats.num_primitives_written;
+ softpipe->so_stats.num_primitives_written - sq->so.num_primitives_written;
+ sq->so.primitives_storage_needed =
+ softpipe->num_primitives_generated - sq->so.primitives_storage_needed;
break;
case PIPE_QUERY_PRIMITIVES_EMITTED:
sq->so.num_primitives_written =
- softpipe->so_stats.num_primitives_written;
+ softpipe->so_stats.num_primitives_written - sq->so.num_primitives_written;
break;
case PIPE_QUERY_PRIMITIVES_GENERATED:
- sq->num_primitives_generated = softpipe->num_primitives_generated;
+ sq->num_primitives_generated =
+ softpipe->num_primitives_generated - sq->num_primitives_generated;
break;
case PIPE_QUERY_GPU_FINISHED:
case PIPE_QUERY_TIMESTAMP_DISJOINT:
struct pipe_query_data_so_statistics *stats =
(struct pipe_query_data_so_statistics *)vresult;
stats->num_primitives_written = sq->so.num_primitives_written;
- stats->primitives_storage_needed = sq->num_primitives_generated;
+ stats->primitives_storage_needed = sq->so.primitives_storage_needed;
}
break;
case PIPE_QUERY_PIPELINE_STATISTICS: