[Mesa-dev] [PATCH] vbo: Correctly handle source arrays in vbo_split_copy.

Brian Paul brian.e.paul at gmail.com
Wed Mar 14 21:28:28 UTC 2018


Reviewed-by: Brian Paul <brianp at vmware.com>


On Wed, Mar 14, 2018 at 2:47 PM, <Mathias.Froehlich at gmx.net> wrote:

> From: Mathias Fröhlich <mathias.froehlich at 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.Froehlich at 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 = &copy->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 = &copy->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 = &copy->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 = &copy->dstarray[i];
>        struct gl_vertex_buffer_binding *dstbind =
> &copy->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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180314/a2b02edd/attachment.html>


More information about the mesa-dev mailing list