vc4: Sanity check that flushes don't happen between state emit and draw.
authorEric Anholt <eric@anholt.net>
Fri, 15 Apr 2016 20:43:14 +0000 (13:43 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 18 Apr 2016 17:10:44 +0000 (10:10 -0700)
Catches the cause of failure in
arb_vertex_buffer_object-mixed-immediate-and-vbo, I've had this class of
failure before, and it probably won't be the last time.

src/gallium/drivers/vc4/vc4_draw.c

index 68b857376284df95f6d71f637b1f76a5b427b9f5..cf3f5e0009e68efe2d774eb437a1799e64bfe336 100644 (file)
@@ -296,6 +296,7 @@ vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
         vc4_start_draw(vc4, info->count);
         vc4_update_compiled_shaders(vc4, info->mode);
 
+        uint32_t start_draw_calls_queued = vc4->draw_calls_queued;
         vc4_emit_state(pctx);
 
         if ((vc4->dirty & (VC4_DIRTY_VTXBUF |
@@ -425,6 +426,12 @@ vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
         }
         cl_end(&vc4->bcl, bcl);
 
+        /* No flushes of the job should have happened between when we started
+         * emitting state for our draw and when we just emitted our draw's
+         * primitives.
+         */
+        assert(start_draw_calls_queued == vc4->draw_calls_queued);
+
         if (vc4->zsa && vc4->zsa->base.depth.enabled) {
                 vc4->resolve |= PIPE_CLEAR_DEPTH;
         }