Move the vertex data manager and vertex declaration cache from Context to Renderer9.

TRAC #22016
Signed-off-by: Daniel Koch
Signed-off-by: Shannon Woods
Author: Nicolas Capens

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1474 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/VertexDataManager.cpp b/src/libGLESv2/VertexDataManager.cpp
index 44bd247..bb0888b 100644
--- a/src/libGLESv2/VertexDataManager.cpp
+++ b/src/libGLESv2/VertexDataManager.cpp
@@ -20,6 +20,8 @@
 #include "libGLESv2/vertexconversion.h"
 #include "libGLESv2/IndexDataManager.h"
 
+#include <limits>
+
 namespace
 {
     enum { INITIAL_STREAM_BUFFER_SIZE = 1024*1024 };
@@ -41,7 +43,10 @@
 {
     for (int i = 0; i < MAX_VERTEX_ATTRIBS; i++)
     {
-        mDirtyCurrentValue[i] = true;
+        mCurrentValue[i][0] = std::numeric_limits<float>::quiet_NaN();
+        mCurrentValue[i][1] = std::numeric_limits<float>::quiet_NaN();
+        mCurrentValue[i][2] = std::numeric_limits<float>::quiet_NaN();
+        mCurrentValue[i][3] = std::numeric_limits<float>::quiet_NaN();
         mCurrentValueBuffer[i] = NULL;
         mCurrentValueOffsets[i] = 0;
     }
@@ -121,7 +126,7 @@
     return streamOffset;
 }
 
-GLenum VertexDataManager::prepareVertexData(const VertexAttributeArray &attribs, ProgramBinary *programBinary, GLint start, GLsizei count, TranslatedAttribute *translated, GLsizei instances)
+GLenum VertexDataManager::prepareVertexData(const VertexAttribute attribs[], ProgramBinary *programBinary, GLint start, GLsizei count, TranslatedAttribute *translated, GLsizei instances)
 {
     if (!mStreamingBuffer)
     {
@@ -267,7 +272,10 @@
 
                 StreamingVertexBuffer *buffer = mCurrentValueBuffer[i];
 
-                if (mDirtyCurrentValue[i])
+                if (mCurrentValue[i][0] != attribs[i].mCurrentValue[0] ||
+                    mCurrentValue[i][1] != attribs[i].mCurrentValue[1] ||
+                    mCurrentValue[i][2] != attribs[i].mCurrentValue[2] ||
+                    mCurrentValue[i][3] != attribs[i].mCurrentValue[3])
                 {
                     const int requiredSpace = 4 * sizeof(float);
                     buffer->addRequiredSpace(requiredSpace);
@@ -280,7 +288,11 @@
                         data[2] = attribs[i].mCurrentValue[2];
                         data[3] = attribs[i].mCurrentValue[3];
                         buffer->unmap();
-                        mDirtyCurrentValue[i] = false;
+
+                        mCurrentValue[i][0] = attribs[i].mCurrentValue[0];
+                        mCurrentValue[i][1] = attribs[i].mCurrentValue[1];
+                        mCurrentValue[i][2] = attribs[i].mCurrentValue[2];
+                        mCurrentValue[i][3] = attribs[i].mCurrentValue[3];
                     }
                 }