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