X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fvbo%2Fvbo_split_inplace.c;h=9c5c288700f1e351284338734c38d6e30c94fc02;hb=76a3ce8fa583262d8650667390e53900e7799453;hp=2fc866c577306fc77797a3713b8fa2b858e48a61;hpb=45dac0d82a5a69166e86dce77c2550f7512c541e;p=mesa.git diff --git a/src/mesa/vbo/vbo_split_inplace.c b/src/mesa/vbo/vbo_split_inplace.c index 2fc866c5773..9c5c288700f 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,19 +17,20 @@ * 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 Whitwell */ #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,8 +41,8 @@ * that. */ struct split_context { - GLcontext *ctx; - const struct gl_client_array **array; + struct gl_context *ctx; + const struct gl_vertex_array **array; const struct _mesa_prim *prim; GLuint nr_prims; const struct _mesa_index_buffer *ib; @@ -62,6 +62,8 @@ struct split_context { static void flush_vertex( struct split_context *split ) { + struct gl_context *ctx = split->ctx; + const struct gl_vertex_array **saved_arrays = ctx->Array._DrawArrays; struct _mesa_index_buffer ib; GLuint i; @@ -73,7 +75,7 @@ static void flush_vertex( struct split_context *split ) ib.count = split->max_index - split->min_index + 1; ib.ptr = (const void *)((const char *)ib.ptr + - split->min_index * _mesa_sizeof_type(ib.type)); + split->min_index * ib.index_size); /* Rebase the primitives to save index buffer entries. */ for (i = 0; i < split->dstprim_nr; 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); @@ -213,14 +223,16 @@ static void split_prims( struct split_context *split) elts[j] = prim->start + j; ib.count = count; - ib.type = GL_UNSIGNED_INT; + ib.index_size = 4; 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); @@ -249,8 +261,8 @@ static void split_prims( struct split_context *split) } -void vbo_split_inplace( GLcontext *ctx, - const struct gl_client_array *arrays[], +void vbo_split_inplace( struct gl_context *ctx, + const struct gl_vertex_array *arrays[], const struct _mesa_prim *prim, GLuint nr_prims, const struct _mesa_index_buffer *ib,