+ switch (sq->type) {
+ case PIPE_QUERY_OCCLUSION_COUNTER:
+ case PIPE_QUERY_OCCLUSION_PREDICATE:
+ sq->end = softpipe->occlusion_count;
+ break;
+ case PIPE_QUERY_TIMESTAMP:
+ sq->start = 0;
+ /* fall through */
+ case PIPE_QUERY_TIME_ELAPSED:
+ sq->end = os_time_get_nano();
+ break;
+ case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
+ sq->so.num_primitives_written =
+ softpipe->so_stats.num_primitives_written - sq->so.num_primitives_written;
+ sq->so.primitives_storage_needed =
+ softpipe->so_stats.primitives_storage_needed - sq->so.primitives_storage_needed;
+ sq->end = sq->so.primitives_storage_needed > sq->so.num_primitives_written;
+ break;
+ case PIPE_QUERY_SO_STATISTICS:
+ sq->so.num_primitives_written =
+ softpipe->so_stats.num_primitives_written - sq->so.num_primitives_written;
+ sq->so.primitives_storage_needed =
+ softpipe->so_stats.primitives_storage_needed - sq->so.primitives_storage_needed;
+ break;
+ case PIPE_QUERY_PRIMITIVES_EMITTED:
+ sq->so.num_primitives_written =
+ softpipe->so_stats.num_primitives_written - sq->so.num_primitives_written;
+ break;
+ case PIPE_QUERY_PRIMITIVES_GENERATED:
+ sq->so.primitives_storage_needed =
+ softpipe->so_stats.primitives_storage_needed - sq->so.primitives_storage_needed;
+ break;
+ case PIPE_QUERY_GPU_FINISHED:
+ case PIPE_QUERY_TIMESTAMP_DISJOINT:
+ break;
+ case PIPE_QUERY_PIPELINE_STATISTICS:
+ sq->stats.ia_vertices =
+ softpipe->pipeline_statistics.ia_vertices - sq->stats.ia_vertices;
+ sq->stats.ia_primitives =
+ softpipe->pipeline_statistics.ia_primitives - sq->stats.ia_primitives;
+ sq->stats.vs_invocations =
+ softpipe->pipeline_statistics.vs_invocations - sq->stats.vs_invocations;
+ sq->stats.gs_invocations =
+ softpipe->pipeline_statistics.gs_invocations - sq->stats.gs_invocations;
+ sq->stats.gs_primitives =
+ softpipe->pipeline_statistics.gs_primitives - sq->stats.gs_primitives;
+ sq->stats.c_invocations =
+ softpipe->pipeline_statistics.c_invocations - sq->stats.c_invocations;
+ sq->stats.c_primitives =
+ softpipe->pipeline_statistics.c_primitives - sq->stats.c_primitives;
+ sq->stats.ps_invocations =
+ softpipe->pipeline_statistics.ps_invocations - sq->stats.ps_invocations;
+
+ softpipe->active_statistics_queries--;
+ break;
+ default:
+ assert(0);
+ break;
+ }