StateManagerGL: Use dirty bits for VAO bindings.
Delay binding the VAO in VertexArrayGL::syncDrawState until we actually
need to make glVertexAttrib calls.
BUG=angleproject:2188
Change-Id: Ib7d22d641c9f19c639ba8c596bff6bc7de952e7f
Reviewed-on: https://chromium-review.googlesource.com/919503
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Luc Ferron <lucferron@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/gl/VertexArrayGL.cpp b/src/libANGLE/renderer/gl/VertexArrayGL.cpp
index 25f542f..651ee3e 100644
--- a/src/libANGLE/renderer/gl/VertexArrayGL.cpp
+++ b/src/libANGLE/renderer/gl/VertexArrayGL.cpp
@@ -152,8 +152,6 @@
bool primitiveRestartEnabled,
const void **outIndices) const
{
- mStateManager->bindVertexArray(mVertexArrayID, getAppliedElementArrayBufferID());
-
// Check if any attributes need to be streamed, determines if the index range needs to be
// computed
bool attributesNeedStreaming = mAttributesNeedStreaming.any();
@@ -233,6 +231,8 @@
mStreamingElementArrayBufferSize = 0;
}
+ mStateManager->bindVertexArray(mVertexArrayID, getAppliedElementArrayBufferID());
+
mStateManager->bindBuffer(gl::BufferBinding::ElementArray, mStreamingElementArrayBuffer);
mAppliedElementArrayBuffer.set(context, nullptr);
@@ -329,6 +329,8 @@
mStreamingArrayBufferSize = requiredBufferSize;
}
+ mStateManager->bindVertexArray(mVertexArrayID, getAppliedElementArrayBufferID());
+
// Unmapping a buffer can return GL_FALSE to indicate that the system has corrupted the data
// somehow (such as by a screen change), retry writing the data a few times and return
// OUT_OF_MEMORY if that fails.