Heuristically optimize buffer usage.

TRAC #16343
Signed-off-by: Daniel Koch
Author: Nicolas Capens

git-svn-id: https://angleproject.googlecode.com/svn/trunk@616 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/VertexDataManager.cpp b/src/libGLESv2/VertexDataManager.cpp
index 4d4f66a..a7716ce 100644
--- a/src/libGLESv2/VertexDataManager.cpp
+++ b/src/libGLESv2/VertexDataManager.cpp
@@ -127,7 +127,7 @@
         if (translated[i].active && attribs[i].mArrayEnabled)
         {
             Buffer *buffer = attribs[i].mBoundBuffer.get();
-            StaticVertexBuffer *staticBuffer = buffer ? buffer->getVertexBuffer() : NULL;
+            StaticVertexBuffer *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
 
             if (staticBuffer)
             {
@@ -158,7 +158,7 @@
         if (translated[i].active && attribs[i].mArrayEnabled)
         {
             Buffer *buffer = attribs[i].mBoundBuffer.get();
-            ArrayVertexBuffer *staticBuffer = buffer ? buffer->getVertexBuffer() : NULL;
+            ArrayVertexBuffer *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
             ArrayVertexBuffer *vertexBuffer = staticBuffer ? staticBuffer : mStreamingBuffer;
 
             if (vertexBuffer)
@@ -173,10 +173,10 @@
     {
         if (translated[i].active)
         {
-            Buffer *buffer = attribs[i].mBoundBuffer.get();
-
             if (attribs[i].mArrayEnabled)
             {
+                Buffer *buffer = attribs[i].mBoundBuffer.get();
+
                 if (!buffer && attribs[i].mPointer == NULL)
                 {
                     // This is an application error that would normally result in a crash, but we catch it and return an error
@@ -186,7 +186,7 @@
 
                 const FormatConverter &converter = formatConverter(attribs[i]);
 
-                StaticVertexBuffer *staticBuffer = buffer ? buffer->getVertexBuffer() : NULL;
+                StaticVertexBuffer *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
                 ArrayVertexBuffer *vertexBuffer = staticBuffer ? staticBuffer : static_cast<ArrayVertexBuffer*>(mStreamingBuffer);
 
                 UINT streamOffset = -1;
@@ -242,6 +242,19 @@
         }
     }
 
+    for (int i = 0; i < MAX_VERTEX_ATTRIBS; i++)
+    {
+        if (translated[i].active && attribs[i].mArrayEnabled)
+        {
+            Buffer *buffer = attribs[i].mBoundBuffer.get();
+
+            if (buffer)
+            {
+                buffer->promoteStaticUsage(count * attribs[i].typeSize());
+            }
+        }
+    }
+
     return GL_NO_ERROR;
 }