spec/arb_pipeline_statistics_query/arb_pipeline_statistics_query-frag: fail
spec/arb_post_depth_coverage/arb_post_depth_coverage-multisampling: fail
spec/arb_program_interface_query/arb_program_interface_query-getprogramresourceindex/'vs_input2[1][0]' on gl_program_input: fail
-spec/arb_query_buffer_object/qbo/query-gl_time_elapsed-async_cpu_read_before-gl_int: fail
-spec/arb_query_buffer_object/qbo/query-gl_time_elapsed-async_cpu_read_before-gl_unsigned_int: fail
-spec/arb_query_buffer_object/qbo/query-gl_time_elapsed-async_cpu_read_before-gl_unsigned_int64_arb: fail
-spec/arb_query_buffer_object/qbo/query-gl_time_elapsed-sync_cpu_read_after_cache_test-gl_int: fail
-spec/arb_query_buffer_object/qbo/query-gl_time_elapsed-sync_cpu_read_after_cache_test-gl_unsigned_int: fail
-spec/arb_query_buffer_object/qbo/query-gl_time_elapsed-sync_cpu_read_after_cache_test-gl_unsigned_int64_arb: fail
spec/arb_sample_locations/test: skip
spec/arb_sample_shading/builtin-gl-num-samples 16: skip
spec/arb_sample_shading/builtin-gl-num-samples 32: skip
}
}
break;
+ case PIPE_QUERY_TIME_ELAPSED: {
+ uint64_t start = (uint64_t)-1, end = 0;
+ for (i = 0; i < num_threads; i++) {
+ if (pq->start[i] && pq->start[i] < start)
+ start = pq->start[i];
+ if (pq->end[i] && pq->end[i] > end)
+ end = pq->end[i];
+ }
+ *result = end - start;
+ break;
+ }
case PIPE_QUERY_TIMESTAMP_DISJOINT: {
struct pipe_query_data_timestamp_disjoint *td =
(struct pipe_query_data_timestamp_disjoint *)vresult;
}
}
break;
+ case PIPE_QUERY_TIME_ELAPSED: {
+ uint64_t start = (uint64_t)-1, end = 0;
+ for (i = 0; i < num_threads; i++) {
+ if (pq->start[i] && pq->start[i] < start)
+ start = pq->start[i];
+ if (pq->end[i] && pq->end[i] > end)
+ end = pq->end[i];
+ }
+ value = end - start;
+ break;
+ }
case PIPE_QUERY_SO_STATISTICS:
value = pq->num_primitives_written[0];
value2 = pq->num_primitives_generated[0];
case PIPE_QUERY_PIPELINE_STATISTICS:
pq->start[task->thread_index] = task->thread_data.ps_invocations;
break;
+ case PIPE_QUERY_TIME_ELAPSED:
+ pq->start[task->thread_index] = os_time_get_nano();
+ break;
default:
assert(0);
break;
pq->start[task->thread_index] = 0;
break;
case PIPE_QUERY_TIMESTAMP:
+ case PIPE_QUERY_TIME_ELAPSED:
pq->end[task->thread_index] = os_time_get_nano();
break;
case PIPE_QUERY_PIPELINE_STATISTICS:
return PIPE_MAX_COLOR_BUFS;
case PIPE_CAP_OCCLUSION_QUERY:
case PIPE_CAP_QUERY_TIMESTAMP:
+ case PIPE_CAP_QUERY_TIME_ELAPSED:
return 1;
case PIPE_CAP_QUERY_PIPELINE_STATISTICS:
return 1;
if (!(pq->type == PIPE_QUERY_OCCLUSION_COUNTER ||
pq->type == PIPE_QUERY_OCCLUSION_PREDICATE ||
pq->type == PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE ||
- pq->type == PIPE_QUERY_PIPELINE_STATISTICS))
+ pq->type == PIPE_QUERY_PIPELINE_STATISTICS ||
+ pq->type == PIPE_QUERY_TIME_ELAPSED))
return;
/* init the query to its beginning state */
pq->type == PIPE_QUERY_OCCLUSION_PREDICATE ||
pq->type == PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE ||
pq->type == PIPE_QUERY_PIPELINE_STATISTICS ||
- pq->type == PIPE_QUERY_TIMESTAMP) {
+ pq->type == PIPE_QUERY_TIMESTAMP ||
+ pq->type == PIPE_QUERY_TIME_ELAPSED) {
if (pq->type == PIPE_QUERY_TIMESTAMP &&
!(setup->scene->tiles_x | setup->scene->tiles_y)) {
/*
if (pq->type == PIPE_QUERY_OCCLUSION_COUNTER ||
pq->type == PIPE_QUERY_OCCLUSION_PREDICATE ||
pq->type == PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE ||
- pq->type == PIPE_QUERY_PIPELINE_STATISTICS) {
+ pq->type == PIPE_QUERY_PIPELINE_STATISTICS ||
+ pq->type == PIPE_QUERY_TIME_ELAPSED) {
unsigned i;
/* remove from active binned query list */