X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fvbo%2Fvbo_split_inplace.c;h=d04429707060efa0139823b0c8373a4497f475d9;hb=8bb15813e3047820a95724e4257aa2c862eeb31a;hp=2a671a5850e57a2d1bcad765056948421dc4a6a0;hpb=db0eb3a437fbc88429b2d73444335b61035d824f;p=mesa.git diff --git a/src/mesa/vbo/vbo_split_inplace.c b/src/mesa/vbo/vbo_split_inplace.c index 2a671a5850e..d0442970706 100644 --- a/src/mesa/vbo/vbo_split_inplace.c +++ b/src/mesa/vbo/vbo_split_inplace.c @@ -1,7 +1,6 @@ /* * Mesa 3-D graphics library - * Version: 6.5 * * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * @@ -18,9 +17,10 @@ * 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 @@ -30,7 +30,7 @@ #include "main/mtypes.h" #include "main/macros.h" #include "main/enums.h" -#include "main/image.h" +#include "main/glformats.h" #include "vbo_split.h" @@ -41,7 +41,7 @@ * that. */ struct split_context { - GLcontext *ctx; + struct gl_context *ctx; const struct gl_client_array **array; const struct _mesa_prim *prim; GLuint nr_prims; @@ -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; @@ -72,7 +74,8 @@ static void flush_vertex( struct split_context *split ) ib = *split->ib; ib.count = split->max_index - split->min_index + 1; - ib.ptr += split->min_index * _mesa_sizeof_type(ib.type); + ib.ptr = (const void *)((const char *)ib.ptr + + split->min_index * _mesa_sizeof_type(ib.type)); /* Rebase the primitives to save index buffer entries. */ for (i = 0; i < split->dstprim_nr; i++) @@ -81,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); + + ctx->Array._DrawArrays = saved_arrays; + ctx->NewDriverState |= ctx->DriverFlags.NewArray; split->dstprim_nr = 0; split->min_index = ~0; @@ -171,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); @@ -215,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); @@ -248,7 +261,7 @@ static void split_prims( struct split_context *split) } -void vbo_split_inplace( GLcontext *ctx, +void vbo_split_inplace( struct gl_context *ctx, const struct gl_client_array *arrays[], const struct _mesa_prim *prim, GLuint nr_prims,