[Mesa-dev] [PATCH 4/4] llvmpipe: Drop PIPE_QUERY_TIME_ELAPSED support.
jfonseca at vmware.com
jfonseca at vmware.com
Wed Dec 19 15:26:48 PST 2012
From: José Fonseca <jose.r.fonseca at gmail.com>
It was slightly wrong: we were computing the longest duration of
the query among all the rasterizer tasks.
Regardless, for tile-based implementations such as llvmpipe, time differences
will never be very useful, because rendering before/during/after the query
is all interleaved. And this is expected, see ARB_timer_query spec, issue 10.
In particular, piglit ext_timer_query-time-elapsed still fails, because
it makes assumptions that don't hold true in in tiled architectures. Not
sure how to fix that though.
---
src/gallium/drivers/llvmpipe/lp_query.c | 7 -------
src/gallium/drivers/llvmpipe/lp_rast.c | 6 ------
src/gallium/drivers/llvmpipe/lp_screen.c | 1 +
3 files changed, 1 insertion(+), 13 deletions(-)
diff --git a/src/gallium/drivers/llvmpipe/lp_query.c b/src/gallium/drivers/llvmpipe/lp_query.c
index 7a62a80..01d5201 100644
--- a/src/gallium/drivers/llvmpipe/lp_query.c
+++ b/src/gallium/drivers/llvmpipe/lp_query.c
@@ -122,13 +122,6 @@ llvmpipe_get_query_result(struct pipe_context *pipe,
*result += pq->count[i];
}
break;
- case PIPE_QUERY_TIME_ELAPSED:
- for (i = 0; i < LP_MAX_THREADS; i++) {
- if (pq->count[i] > *result) {
- *result = pq->count[i];
- }
- }
- break;
case PIPE_QUERY_TIMESTAMP:
for (i = 0; i < LP_MAX_THREADS; i++) {
if (pq->count[i] > *result) {
diff --git a/src/gallium/drivers/llvmpipe/lp_rast.c b/src/gallium/drivers/llvmpipe/lp_rast.c
index 37be6ad..44e8324 100644
--- a/src/gallium/drivers/llvmpipe/lp_rast.c
+++ b/src/gallium/drivers/llvmpipe/lp_rast.c
@@ -437,9 +437,6 @@ lp_rast_begin_query(struct lp_rasterizer_task *task,
case PIPE_QUERY_OCCLUSION_COUNTER:
task->vis_counter = 0;
break;
- case PIPE_QUERY_TIME_ELAPSED:
- task->query_start = os_time_get_nano();
- break;
case PIPE_QUERY_PRIMITIVES_GENERATED:
case PIPE_QUERY_PRIMITIVES_EMITTED:
break;
@@ -468,9 +465,6 @@ lp_rast_end_query(struct lp_rasterizer_task *task,
case PIPE_QUERY_OCCLUSION_COUNTER:
pq->count[task->thread_index] += task->vis_counter;
break;
- case PIPE_QUERY_TIME_ELAPSED:
- pq->count[task->thread_index] = os_time_get_nano() - task->query_start;
- break;
case PIPE_QUERY_TIMESTAMP:
pq->count[task->thread_index] = os_time_get_nano();
break;
diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c
index a974427..3c2f60b 100644
--- a/src/gallium/drivers/llvmpipe/lp_screen.c
+++ b/src/gallium/drivers/llvmpipe/lp_screen.c
@@ -127,6 +127,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
case PIPE_CAP_OCCLUSION_QUERY:
return 1;
case PIPE_CAP_QUERY_TIME_ELAPSED:
+ return 0;
case PIPE_CAP_QUERY_TIMESTAMP:
return 1;
case PIPE_CAP_TEXTURE_MIRROR_CLAMP:
--
1.7.9.5
More information about the mesa-dev
mailing list