svga: skip query flush if we already have the query result
authorBrian Paul <brianp@vmware.com>
Thu, 15 Sep 2016 18:07:18 +0000 (12:07 -0600)
committerBrian Paul <brianp@vmware.com>
Sat, 17 Sep 2016 16:24:13 +0000 (10:24 -0600)
This reduces the number of times we flush in some situations (the
arbocclude demo is one trivial example).

Tested with Piglit, ETQW, Sauerbraten, arbocclude.

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
src/gallium/drivers/svga/svga_pipe_query.c

index 74a7f5fa52b2e8ebbf26f1e3833671475b9e25a4..5de3937474ea9dcf4c5ba8c5fcd50827470a618f 100644 (file)
@@ -638,11 +638,11 @@ get_query_result_vgpu10(struct svga_context *svga, struct svga_query *sq,
 
    sws->query_get_result(sws, sq->gb_query, sq->offset, &queryState, result, resultLen);
 
-   if (!sq->fence) {
-      /* The query hasn't been submitted yet.  We need to submit it now
-       * since the GL spec says "Querying the state for a given occlusion
-       * query forces that occlusion query to complete within a finite amount
-       * of time."
+   if (queryState != SVGA3D_QUERYSTATE_SUCCEEDED && !sq->fence) {
+      /* We don't have the query result yet, and the query hasn't been
+       * submitted.  We need to submit it now since the GL spec says
+       * "Querying the state for a given occlusion query forces that
+       * occlusion query to complete within a finite amount of time."
        */
       svga_context_flush(svga, &sq->fence);
    }