llvmpipe: Unmapping vertex/index buffers does NOT flush draw module anymore.
authorJosé Fonseca <jfonseca@vmware.com>
Mon, 28 Dec 2009 22:52:41 +0000 (22:52 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Mon, 28 Dec 2009 22:53:41 +0000 (22:53 +0000)
Not since 6094e79f4e3350d123c7532b1c73faa60834a62d.

Drivers now need to flush draw module explicitely (which explains why
all those previous commits adding draw_flushes calls were necessary).

This is a good thing, but it's tricky to get this right in face of user buffers
(it's not even clear who has the responsibility to flush when a user buffer
is seen -- statetracker or pipe driver), so just force flush (temporarily)
since it's not a bottleneck now.

src/gallium/drivers/llvmpipe/lp_draw_arrays.c

index 2299566c665ea78d21da369f57a6665b9e95055c..a96c2cad9dc910141a4c67dbd1c07e74192cc872 100644 (file)
@@ -103,7 +103,7 @@ llvmpipe_draw_range_elements(struct pipe_context *pipe,
    draw_arrays(draw, mode, start, count);
 
    /*
-    * unmap vertex/index buffers - will cause draw module to flush
+    * unmap vertex/index buffers
     */
    for (i = 0; i < lp->num_vertex_buffers; i++) {
       draw_set_mapped_vertex_buffer(draw, i, NULL);
@@ -112,6 +112,12 @@ llvmpipe_draw_range_elements(struct pipe_context *pipe,
       draw_set_mapped_element_buffer(draw, 0, NULL);
    }
 
+   /*
+    * TODO: Flush only when a user vertex/index buffer is present
+    * (or even better, modify draw module to do this
+    * internally when this condition is seen?)
+    */
+   draw_flush(draw);
 
    /* Note: leave drawing surfaces mapped */