v3d: add support for adjacency primitives
[mesa.git] / src / gallium / drivers / v3d / v3d_query.c
index d31b9dd896b98a801e27f70482f914f4d458880a..f8419605dc260e3f8d84529e477b27e631b0e35d 100644 (file)
@@ -75,6 +75,11 @@ v3d_begin_query(struct pipe_context *pctx, struct pipe_query *query)
                 q->start = v3d->prims_generated;
                 break;
         case PIPE_QUERY_PRIMITIVES_EMITTED:
+                /* If we are inside transform feedback we need to update the
+                 * primitive counts to skip primtives recorded before this.
+                 */
+                if (v3d->streamout.num_targets > 0)
+                        v3d_tf_update_counters(v3d);
                 q->start = v3d->tf_prims_generated;
                 break;
         case PIPE_QUERY_OCCLUSION_COUNTER:
@@ -105,6 +110,12 @@ v3d_end_query(struct pipe_context *pctx, struct pipe_query *query)
                 q->end = v3d->prims_generated;
                 break;
         case PIPE_QUERY_PRIMITIVES_EMITTED:
+                /* If transform feedback has ended, then we have already
+                 * updated the primitive counts at glEndTransformFeedback()
+                 * time. Otherwise, we have to do it now.
+                 */
+                if (v3d->streamout.num_targets > 0)
+                        v3d_tf_update_counters(v3d);
                 q->end = v3d->tf_prims_generated;
                 break;
         case PIPE_QUERY_OCCLUSION_COUNTER:
@@ -132,10 +143,10 @@ v3d_get_query_result(struct pipe_context *pctx, struct pipe_query *query,
                 v3d_flush_jobs_using_bo(v3d, q->bo);
 
                 if (wait) {
-                        if (!v3d_bo_wait(q->bo, 0, "query"))
+                        if (!v3d_bo_wait(q->bo, ~0ull, "query"))
                                 return false;
                 } else {
-                        if (!v3d_bo_wait(q->bo, ~0ull, "query"))
+                        if (!v3d_bo_wait(q->bo, 0, "query"))
                                 return false;
                 }