vbo: pass the stream from DrawTransformFeedbackStream to drivers
[mesa.git] / src / mesa / vbo / vbo_split_inplace.c
index 789cf31364be92ca579a8ac9daf0a5bc9c21c85d..cff4bcd30ff3de4fa06de6c38c43921ced233871 100644 (file)
@@ -1,7 +1,6 @@
 
 /*
  * Mesa 3-D graphics library
- * Version:  6.5
  *
  * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  *
  * Authors:
- *    Keith Whitwell <keith@tungstengraphics.com>
+ *    Keith Whitwell <keithw@vmware.com>
  */
 
 
 #include "main/mtypes.h"
 #include "main/macros.h"
 #include "main/enums.h"
-#include "main/image.h"
+#include "main/glformats.h"
 #include "vbo_split.h"
 
 
@@ -62,6 +62,8 @@ struct split_context {
 
 static void flush_vertex( struct split_context *split )
 {
+   struct gl_context *ctx = split->ctx;
+   const struct gl_client_array **saved_arrays = ctx->Array._DrawArrays;
    struct _mesa_index_buffer ib;
    GLuint i;
 
@@ -82,14 +84,20 @@ static void flush_vertex( struct split_context *split )
 
    assert(split->max_index >= split->min_index);
 
-   split->draw(split->ctx,
-              split->array,
+   ctx->Array._DrawArrays = split->array;
+   ctx->NewDriverState |= ctx->DriverFlags.NewArray;
+
+   split->draw(ctx,
               split->dstprim,
               split->dstprim_nr,
               split->ib ? &ib : NULL,
               !split->ib,
               split->min_index,
-              split->max_index);
+              split->max_index,
+              NULL, 0, NULL);
+
+   ctx->Array._DrawArrays = saved_arrays;
+   ctx->NewDriverState |= ctx->DriverFlags.NewArray;
 
    split->dstprim_nr = 0;
    split->min_index = ~0;
@@ -172,12 +180,14 @@ static void split_prims( struct split_context *split)
 
            nr = MIN2( available, remaining );
            nr -= (nr - first) % incr;
-           
+
            outprim->mode = prim->mode;
            outprim->begin = (j == 0 && prim->begin);
            outprim->end = (nr == remaining && prim->end);
            outprim->start = prim->start + j;
            outprim->count = nr;
+            outprim->num_instances = prim->num_instances;
+            outprim->base_instance = prim->base_instance;
 
            update_index_bounds(split, outprim);
 
@@ -216,11 +226,13 @@ static void split_prims( struct split_context *split)
         ib.type = GL_UNSIGNED_INT;
         ib.obj = split->ctx->Shared->NullBufferObj;
         ib.ptr = elts;
-           
+
         tmpprim = *prim;
         tmpprim.indexed = 1;
         tmpprim.start = 0;
         tmpprim.count = count;
+         tmpprim.num_instances = 1;
+         tmpprim.base_instance = 0;
 
         flush_vertex(split);