i965/fs: Change fs_visitor::emit_lrp to use MAC for gen<6
[mesa.git] / src / mesa / vbo / vbo_split_inplace.c
index 9e596f668913fa2aa4f5e189a3dbbbb8f08335bd..5887b74d8298cb832fa38cd9a6a12cfefe47cb97 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,15 +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,
-              NULL);
+              NULL, NULL);
+
+   ctx->Array._DrawArrays = saved_arrays;
+   ctx->NewDriverState |= ctx->DriverFlags.NewArray;
 
    split->dstprim_nr = 0;
    split->min_index = ~0;
@@ -173,13 +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);
 
@@ -218,12 +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);