Mesa (master): mesa: Only update enabled VAO gl_vertex_array entries.

Mathias Fröhlich frohlich at kemper.freedesktop.org
Fri Feb 9 03:53:00 UTC 2018


Module: Mesa
Branch: master
Commit: 77cb2fc0bd8f57b646ef5ab674c1f76d873a22ae
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=77cb2fc0bd8f57b646ef5ab674c1f76d873a22ae

Author: Mathias Fröhlich <mathias.froehlich at web.de>
Date:   Sun Feb  4 17:13:06 2018 +0100

mesa: Only update enabled VAO gl_vertex_array entries.

Instead of updating all modified gl_vertex_array_object::_VertexArray
entries just update those that are modified and enabled.
Also release buffer object from the _VertexArray that belong
to disabled attributes.

v2: Also set Ptr and Size to zero.

Signed-off-by: Mathias Fröhlich <Mathias.Froehlich at web.de>
Reviewed-by: Brian Paul <brianp at vmware.com>

---

 src/mesa/main/varray.c |  8 ++++----
 src/mesa/main/varray.h | 29 ++++++++++++++++++-----------
 2 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index 4dfc3546a8..d55f74e968 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -178,7 +178,7 @@ vertex_attrib_binding(struct gl_context *ctx,
 
       array->BufferBindingIndex = bindingIndex;
 
-      vao->NewArrays |= array_bit;
+      vao->NewArrays |= vao->_Enabled & array_bit;
    }
 }
 
@@ -213,7 +213,7 @@ _mesa_bind_vertex_buffer(struct gl_context *ctx,
       else
          vao->VertexAttribBufferMask |= binding->_BoundArrays;
 
-      vao->NewArrays |= binding->_BoundArrays;
+      vao->NewArrays |= vao->_Enabled & binding->_BoundArrays;
    }
 }
 
@@ -234,7 +234,7 @@ vertex_binding_divisor(struct gl_context *ctx,
    if (binding->InstanceDivisor != divisor) {
       FLUSH_VERTICES(ctx, _NEW_ARRAY);
       binding->InstanceDivisor = divisor;
-      vao->NewArrays |= binding->_BoundArrays;
+      vao->NewArrays |= vao->_Enabled & binding->_BoundArrays;
    }
 }
 
@@ -344,7 +344,7 @@ _mesa_update_array_format(struct gl_context *ctx,
    array->RelativeOffset = relativeOffset;
    array->_ElementSize = elementSize;
 
-   vao->NewArrays |= VERT_BIT(attrib);
+   vao->NewArrays |= vao->_Enabled & VERT_BIT(attrib);
    ctx->NewState |= _NEW_ARRAY;
 }
 
diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h
index ddabd0bc58..46f83b2200 100644
--- a/src/mesa/main/varray.h
+++ b/src/mesa/main/varray.h
@@ -58,17 +58,24 @@ _mesa_update_vertex_array(struct gl_context *ctx,
                           const struct gl_array_attributes *attribs,
                           const struct gl_vertex_buffer_binding *binding)
 {
-   dst->Size = attribs->Size;
-   dst->Type = attribs->Type;
-   dst->Format = attribs->Format;
-   dst->StrideB = binding->Stride;
-   dst->Ptr = _mesa_vertex_attrib_address(attribs, binding);
-   dst->Normalized = attribs->Normalized;
-   dst->Integer = attribs->Integer;
-   dst->Doubles = attribs->Doubles;
-   dst->InstanceDivisor = binding->InstanceDivisor;
-   dst->_ElementSize = attribs->_ElementSize;
-   _mesa_reference_buffer_object(ctx, &dst->BufferObj, binding->BufferObj);
+   if (attribs->Enabled) {
+      dst->Size = attribs->Size;
+      dst->Type = attribs->Type;
+      dst->Format = attribs->Format;
+      dst->StrideB = binding->Stride;
+      dst->Ptr = _mesa_vertex_attrib_address(attribs, binding);
+      dst->Normalized = attribs->Normalized;
+      dst->Integer = attribs->Integer;
+      dst->Doubles = attribs->Doubles;
+      dst->InstanceDivisor = binding->InstanceDivisor;
+      dst->_ElementSize = attribs->_ElementSize;
+      _mesa_reference_buffer_object(ctx, &dst->BufferObj, binding->BufferObj);
+   } else {
+      /* Disabled arrays shall not be consumed */
+      dst->Size = 0;
+      dst->Ptr = NULL;
+      _mesa_reference_buffer_object(ctx, &dst->BufferObj, NULL);
+   }
 }
 
 




More information about the mesa-commit mailing list