llvmpipe: fix wrong results for queries not in a scene
authorRoland Scheidegger <sroland@vmware.com>
Thu, 20 Jun 2013 18:31:18 +0000 (20:31 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Sat, 22 Jun 2013 15:09:37 +0000 (17:09 +0200)
The result isn't always 0 in this case (depends on query type),
so instead of special casing this just use the ordinary path (should result
in correct values thanks to initialization in query_begin/end), just
skipping the fence wait.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/drivers/llvmpipe/lp_query.c

index 386639e5367b5e57120fc9027124df218e0a0aa6..1d3edffba9480acf7f32bfea7ee77b7c9e8aac3c 100644 (file)
@@ -100,20 +100,17 @@ llvmpipe_get_query_result(struct pipe_context *pipe,
    uint64_t *result = (uint64_t *)vresult;
    int i;
 
-   if (!pq->fence) {
-      /* no fence because there was no scene, so results is zero */
-      *result = 0;
-      return TRUE;
-   }
-
-   if (!lp_fence_signalled(pq->fence)) {
-      if (!lp_fence_issued(pq->fence))
-         llvmpipe_flush(pipe, NULL, __FUNCTION__);
+   if (pq->fence) {
+      /* only have a fence if there was a scene */
+      if (!lp_fence_signalled(pq->fence)) {
+         if (!lp_fence_issued(pq->fence))
+            llvmpipe_flush(pipe, NULL, __FUNCTION__);
 
-      if (!wait)
-         return FALSE;
+         if (!wait)
+            return FALSE;
 
-      lp_fence_wait(pq->fence);
+         lp_fence_wait(pq->fence);
+      }
    }
 
    /* Sum the results from each of the threads: