Treat transform feedback generic binding point specially

The transform feedback generic binding point is not part of the
transform feedback object and is not used for transform feedback. Only
the indexed binding points are used. A buffer that is bound to the
generic binding point should be usable for either transform feedback or
non-transform-feedback purposes.

Bug: 853978
Change-Id: I5b730212c65524188134ac34645328328664f0a4
Reviewed-on: https://chromium-review.googlesource.com/1112841
Commit-Queue: James Darpinian <jdarpinian@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/VertexArray.cpp b/src/libANGLE/VertexArray.cpp
index 14499bd..4cc474d 100644
--- a/src/libANGLE/VertexArray.cpp
+++ b/src/libANGLE/VertexArray.cpp
@@ -65,7 +65,8 @@
         binding.setBuffer(context, nullptr, isBound);
     }
     if (isBound && mState.mElementArrayBuffer.get())
-        mState.mElementArrayBuffer->onBindingChanged(context, false, BufferBinding::ElementArray);
+        mState.mElementArrayBuffer->onBindingChanged(context, false, BufferBinding::ElementArray,
+                                                     false);
     mState.mElementArrayBuffer.set(context, nullptr);
     mVertexArray->destroy(context);
     SafeDelete(mVertexArray);
@@ -106,7 +107,8 @@
     if (mState.mElementArrayBuffer.id() == bufferName)
     {
         if (isBound && mState.mElementArrayBuffer.get())
-            mState.mElementArrayBuffer->onBindingChanged(context, false, BufferBinding::Array);
+            mState.mElementArrayBuffer->onBindingChanged(context, false, BufferBinding::Array,
+                                                         false);
         mState.mElementArrayBuffer.set(context, nullptr);
     }
 }
@@ -288,10 +290,12 @@
 {
     bool isBound = context->isCurrentVertexArray(this);
     if (isBound && mState.mElementArrayBuffer.get())
-        mState.mElementArrayBuffer->onBindingChanged(context, false, BufferBinding::ElementArray);
+        mState.mElementArrayBuffer->onBindingChanged(context, false, BufferBinding::ElementArray,
+                                                     false);
     mState.mElementArrayBuffer.set(context, buffer);
     if (isBound && mState.mElementArrayBuffer.get())
-        mState.mElementArrayBuffer->onBindingChanged(context, true, BufferBinding::ElementArray);
+        mState.mElementArrayBuffer->onBindingChanged(context, true, BufferBinding::ElementArray,
+                                                     false);
     mElementArrayBufferObserverBinding.bind(buffer ? buffer->getImplementation() : nullptr);
     mDirtyBits.set(DIRTY_BIT_ELEMENT_ARRAY_BUFFER);
 }
@@ -319,7 +323,8 @@
 void VertexArray::onBindingChanged(const Context *context, bool bound)
 {
     if (mState.mElementArrayBuffer.get())
-        mState.mElementArrayBuffer->onBindingChanged(context, bound, BufferBinding::ElementArray);
+        mState.mElementArrayBuffer->onBindingChanged(context, bound, BufferBinding::ElementArray,
+                                                     false);
     for (auto &binding : mState.mVertexBindings)
     {
         binding.onContainerBindingChanged(context, bound);