mesa: simplify and optimise vertex bindings tracking
authorTimothy Arceri <tarceri@itsqueeze.com>
Thu, 6 Apr 2017 04:47:34 +0000 (14:47 +1000)
committerTimothy Arceri <tarceri@itsqueeze.com>
Sat, 8 Apr 2017 01:18:50 +0000 (11:18 +1000)
We only need to update it if something changes. Also
_mesa_bind_vertex_buffer() will update the mask when binding to a
NULL or default buffer so no need to do that update here.

Reviewed-by: Juan A. Suarez Romero <jasuarez@igalia.com>
src/mesa/main/varray.c

index 1312695..233dc0d 100644 (file)
@@ -137,14 +137,12 @@ vertex_attrib_binding(struct gl_context *ctx,
 {
    struct gl_array_attributes *array = &vao->VertexAttrib[attribIndex];
 
-   if (!_mesa_is_bufferobj(vao->BufferBinding[bindingIndex].BufferObj))
-      vao->VertexAttribBufferMask &= ~VERT_BIT(attribIndex);
-   else
-      vao->VertexAttribBufferMask |= VERT_BIT(attribIndex);
-
    if (array->BufferBindingIndex != bindingIndex) {
       const GLbitfield64 array_bit = VERT_BIT(attribIndex);
 
+      if (_mesa_is_bufferobj(vao->BufferBinding[bindingIndex].BufferObj))
+         vao->VertexAttribBufferMask |= array_bit;
+
       FLUSH_VERTICES(ctx, _NEW_ARRAY);
 
       vao->BufferBinding[array->BufferBindingIndex]._BoundArrays &= ~array_bit;