Fixed a bug where the streaming buffer would not get space reserved if a higher index static buffer was invalidated.

TRAC #22543

Signed-off-by: Jamie Madill
Signed-off-by: Nicolas Capens
Author: Geoff Lang

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1901 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/VertexDataManager.cpp b/src/libGLESv2/renderer/VertexDataManager.cpp
index 1baf293..5b7a402 100644
--- a/src/libGLESv2/renderer/VertexDataManager.cpp
+++ b/src/libGLESv2/renderer/VertexDataManager.cpp
@@ -94,8 +94,23 @@
         {
             gl::Buffer *buffer = attribs[i].mBoundBuffer.get();
             StaticVertexBufferInterface *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
-            VertexBufferInterface *vertexBuffer = staticBuffer ? staticBuffer : static_cast<VertexBufferInterface*>(mStreamingBuffer);
 
+            if (staticBuffer && staticBuffer->getBufferSize() > 0 && staticBuffer->lookupAttribute(attribs[i]) == -1 &&
+                !directStoragePossible(staticBuffer, attribs[i]))
+            {
+                buffer->invalidateStaticData();
+            }
+        }
+    }
+
+    // Reserve the required space in the buffers
+    for (int i = 0; i < gl::MAX_VERTEX_ATTRIBS; i++)
+    {
+        if (translated[i].active && attribs[i].mArrayEnabled)
+        {
+            gl::Buffer *buffer = attribs[i].mBoundBuffer.get();
+            StaticVertexBufferInterface *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
+            VertexBufferInterface *vertexBuffer = staticBuffer ? staticBuffer : static_cast<VertexBufferInterface*>(mStreamingBuffer);
 
             if (!directStoragePossible(vertexBuffer, attribs[i]))
             {
@@ -106,11 +121,6 @@
                         int totalCount = elementsInBuffer(attribs[i], buffer->size());
                         staticBuffer->reserveVertexSpace(attribs[i], totalCount, 0);
                     }
-                    else if (staticBuffer->lookupAttribute(attribs[i]) == -1)
-                    {
-                        mStreamingBuffer->reserveVertexSpace(attribs[i], count, instances);
-                        buffer->invalidateStaticData();
-                    }
                 }
                 else
                 {