llvmpipe: Drop PIPE_QUERY_TIME_ELAPSED support.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Sun, 9 Dec 2012 10:15:19 +0000 (10:15 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Thu, 20 Dec 2012 16:33:49 +0000 (16:33 +0000)
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.

Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Marek Olšák <maraeo@gmail.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/gallium/drivers/llvmpipe/lp_query.c
src/gallium/drivers/llvmpipe/lp_rast.c
src/gallium/drivers/llvmpipe/lp_screen.c

index 7a62a809d581c8eff0cbf96e1f898004f6add837..01d5201a100bbe9c738e24123271096e8a0712b4 100644 (file)
@@ -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) {
index 37be6ad571d15b65c6425d9fafe7bf3f0ba1decb..44e8324b2b148c783ffe6fba546852c135cc14d5 100644 (file)
@@ -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;
index 5ca73554de79ce109776388c8d0a0a0b18f393d5..b99e617e98cc7130fdca867e46ff3cf80f44a1c5 100644 (file)
@@ -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: