diff options
author | Christoph Bumiller <[email protected]> | 2011-10-15 16:35:27 +0200 |
---|---|---|
committer | Christoph Bumiller <[email protected]> | 2011-10-20 18:03:49 +0200 |
commit | 1f4f0c41db2eb81e858475f6677995c9e15ec03f (patch) | |
tree | ea6890581ab5407cd0439f3025898595e3d946cc /src/gallium/drivers/softpipe/sp_query.c | |
parent | 10f67c070b6af7000b31d0b08442f5ee38645344 (diff) |
softpipe: implement/fix TIMESTAMP queries
Diffstat (limited to 'src/gallium/drivers/softpipe/sp_query.c')
-rw-r--r-- | src/gallium/drivers/softpipe/sp_query.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/gallium/drivers/softpipe/sp_query.c b/src/gallium/drivers/softpipe/sp_query.c index 88f42572f19..c2c48e8ecb3 100644 --- a/src/gallium/drivers/softpipe/sp_query.c +++ b/src/gallium/drivers/softpipe/sp_query.c @@ -60,6 +60,7 @@ softpipe_create_query(struct pipe_context *pipe, type == PIPE_QUERY_TIME_ELAPSED || type == PIPE_QUERY_SO_STATISTICS || type == PIPE_QUERY_GPU_FINISHED || + type == PIPE_QUERY_TIMESTAMP || type == PIPE_QUERY_TIMESTAMP_DISJOINT); sq = CALLOC_STRUCT( softpipe_query ); sq->type = type; @@ -85,6 +86,7 @@ softpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q) case PIPE_QUERY_OCCLUSION_COUNTER: sq->start = softpipe->occlusion_count; break; + case PIPE_QUERY_TIMESTAMP_DISJOINT: case PIPE_QUERY_TIME_ELAPSED: sq->start = 1000*os_time_get(); break; @@ -92,9 +94,9 @@ softpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q) sq->so.num_primitives_written = 0; sq->so.primitives_storage_needed = 0; break; + case PIPE_QUERY_TIMESTAMP: case PIPE_QUERY_GPU_FINISHED: break; - case PIPE_QUERY_TIMESTAMP_DISJOINT: default: assert(0); break; @@ -115,6 +117,10 @@ softpipe_end_query(struct pipe_context *pipe, struct pipe_query *q) case PIPE_QUERY_OCCLUSION_COUNTER: sq->end = softpipe->occlusion_count; break; + case PIPE_QUERY_TIMESTAMP: + sq->start = 0; + /* fall through */ + case PIPE_QUERY_TIMESTAMP_DISJOINT: case PIPE_QUERY_TIME_ELAPSED: sq->end = 1000*os_time_get(); break; @@ -125,7 +131,6 @@ softpipe_end_query(struct pipe_context *pipe, struct pipe_query *q) softpipe->so_stats.primitives_storage_needed; break; case PIPE_QUERY_GPU_FINISHED: - case PIPE_QUERY_TIMESTAMP_DISJOINT: break; default: assert(0); @@ -156,7 +161,7 @@ softpipe_get_query_result(struct pipe_context *pipe, struct pipe_query_data_timestamp_disjoint td; /*os_get_time is in microseconds*/ td.frequency = 1000000; - td.disjoint = FALSE; + td.disjoint = sq->end != sq->start; memcpy(vresult, &td, sizeof(struct pipe_query_data_timestamp_disjoint)); } |