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:
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:
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;
}