Reviewed-by: Brian Paul <bri...@vmware.com>
On Wed, Mar 14, 2018 at 2:47 PM, <mathias.froehl...@gmx.net> wrote: > From: Mathias Fröhlich <mathias.froehl...@web.de> > > Hi, > > Seems that the big patch did break something. > Below the fix. > > please review > > best > > Mathias > > > > > The original approach did optimize away a bit too many fields. > Restablish the pointer into the original array and correctly feed that > one. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105471 > Fixes: 64d2a20480547d5897fd9d7b8fd306f2625138cb > mesa: Make gl_vertex_array contain pointers to first order VAO members. > Signed-off-by: Mathias Fröhlich <mathias.froehl...@web.de> > --- > src/mesa/vbo/vbo_split_copy.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/src/mesa/vbo/vbo_split_copy.c b/src/mesa/vbo/vbo_split_copy.c > index 09b5b3b651..96828a073f 100644 > --- a/src/mesa/vbo/vbo_split_copy.c > +++ b/src/mesa/vbo/vbo_split_copy.c > @@ -63,6 +63,7 @@ struct copy_context { > struct { > GLuint attr; > GLuint size; > + const struct gl_vertex_array *array; > const GLubyte *src_ptr; > > struct gl_vertex_buffer_binding dstbinding; > @@ -258,7 +259,7 @@ elt(struct copy_context *copy, GLuint elt_idx) > GLuint i; > > for (i = 0; i < copy->nr_varying; i++) { > - const struct gl_vertex_array *srcarray = ©->array[i]; > + const struct gl_vertex_array *srcarray = copy->varying[i].array; > const struct gl_vertex_buffer_binding* srcbinding > = srcarray->BufferBinding; > const GLubyte *srcptr > @@ -449,6 +450,7 @@ replay_init(struct copy_context *copy) > GLuint j = copy->nr_varying++; > > copy->varying[j].attr = i; > + copy->varying[j].array = ©->array[i]; > copy->varying[j].size = attr_size(attrib); > copy->vertex_size += attr_size(attrib); > > @@ -520,7 +522,7 @@ replay_init(struct copy_context *copy) > /* Setup new vertex arrays to point into the output buffer: > */ > for (offset = 0, i = 0; i < copy->nr_varying; i++) { > - const struct gl_vertex_array *src = ©->array[i]; > + const struct gl_vertex_array *src = copy->varying[i].array; > const struct gl_array_attributes *srcattr = src->VertexAttrib; > struct gl_vertex_array *dst = ©->dstarray[i]; > struct gl_vertex_buffer_binding *dstbind = > ©->varying[i].dstbinding; > @@ -576,7 +578,7 @@ replay_finish(struct copy_context *copy) > /* Unmap VBO's */ > for (i = 0; i < copy->nr_varying; i++) { > struct gl_buffer_object *vbo = > - copy->array[i].BufferBinding->BufferObj; > + copy->varying[i].array->BufferBinding->BufferObj; > if (_mesa_is_bufferobj(vbo) && _mesa_bufferobj_mapped(vbo, > MAP_INTERNAL)) > ctx->Driver.UnmapBuffer(ctx, vbo, MAP_INTERNAL); > } > -- > 2.14.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev