Increase DX11 uniform count to 1024.

TRAC #22243
Signed-off-by: Jamie Madill
Signed-off-by: Daniel Koch
Author: Nicolas Capens

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1774 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Context.h b/src/libGLESv2/Context.h
index 1aa102f..2ce9943 100644
--- a/src/libGLESv2/Context.h
+++ b/src/libGLESv2/Context.h
@@ -58,10 +58,7 @@
 
 enum
 {
-    D3D9_MAX_FLOAT_CONSTANTS = 256,
-
     MAX_VERTEX_ATTRIBS = 16,
-    MAX_VERTEX_UNIFORM_VECTORS = D3D9_MAX_FLOAT_CONSTANTS - 2,   // Reserve space for dx_HalfPixelSize and dx_DepthRange.
     MAX_VARYING_VECTORS_SM2 = 8,
     MAX_VARYING_VECTORS_SM3 = 10,
     MAX_TEXTURE_IMAGE_UNITS = 16,
@@ -71,8 +68,6 @@
     IMPLEMENTATION_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 16,
     IMPLEMENTATION_MAX_COMBINED_TEXTURE_IMAGE_UNITS = MAX_TEXTURE_IMAGE_UNITS + IMPLEMENTATION_MAX_VERTEX_TEXTURE_IMAGE_UNITS,    
 
-    MAX_FRAGMENT_UNIFORM_VECTORS_SM2 = 32 - 3,    // Reserve space for dx_Coord, dx_DepthFront and dx_DepthRange.
-    MAX_FRAGMENT_UNIFORM_VECTORS_SM3 = 224 - 3,
     MAX_DRAW_BUFFERS = 1
 };
 
diff --git a/src/libGLESv2/Shader.cpp b/src/libGLESv2/Shader.cpp
index 4146c5d..3390a75 100644
--- a/src/libGLESv2/Shader.cpp
+++ b/src/libGLESv2/Shader.cpp
@@ -236,7 +236,7 @@
             ShInitBuiltInResources(&resources);
 
             resources.MaxVertexAttribs = MAX_VERTEX_ATTRIBS;
-            resources.MaxVertexUniformVectors = MAX_VERTEX_UNIFORM_VECTORS;
+            resources.MaxVertexUniformVectors = mRenderer->getMaxVertexUniformVectors();
             resources.MaxVaryingVectors = context->getMaximumVaryingVectors();
             resources.MaxVertexTextureImageUnits = mRenderer->getMaxVertexTextureImageUnits();
             resources.MaxCombinedTextureImageUnits = context->getMaximumCombinedTextureImageUnits();
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index fbf0c99..fe19655 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -1872,12 +1872,16 @@
 
 int Renderer11::getMaxVertexUniformVectors() const
 {
-    return gl::MAX_VERTEX_UNIFORM_VECTORS;
+    META_ASSERT(MAX_VERTEX_UNIFORM_VECTORS_D3D11 <= D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT);
+    ASSERT(mFeatureLevel >= D3D_FEATURE_LEVEL_10_0);
+    return MAX_VERTEX_UNIFORM_VECTORS_D3D11;
 }
 
 int Renderer11::getMaxFragmentUniformVectors() const
 {
-    return getMajorShaderModel() >= 3 ? gl::MAX_FRAGMENT_UNIFORM_VECTORS_SM3 : gl::MAX_FRAGMENT_UNIFORM_VECTORS_SM2;
+    META_ASSERT(MAX_FRAGMENT_UNIFORM_VECTORS_D3D11 <= D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT);
+    ASSERT(mFeatureLevel >= D3D_FEATURE_LEVEL_10_0);
+    return MAX_FRAGMENT_UNIFORM_VECTORS_D3D11;
 }
 
 bool Renderer11::getNonPower2TextureSupport() const
diff --git a/src/libGLESv2/renderer/Renderer11.h b/src/libGLESv2/renderer/Renderer11.h
index 756694c..8f37e6e 100644
--- a/src/libGLESv2/renderer/Renderer11.h
+++ b/src/libGLESv2/renderer/Renderer11.h
@@ -33,6 +33,12 @@
 class IndexDataManager;
 class StreamingIndexBufferInterface;
 
+enum
+{
+    MAX_VERTEX_UNIFORM_VECTORS_D3D11 = 1024,
+    MAX_FRAGMENT_UNIFORM_VECTORS_D3D11 = 1024
+};
+
 class Renderer11 : public Renderer
 {
   public:
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index f3c949e..107d8f2 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -1658,11 +1658,11 @@
 
 void Renderer9::applyUniformnbv(gl::Uniform *targetUniform, GLsizei count, int width, const GLboolean *v)
 {
-    float vector[gl::D3D9_MAX_FLOAT_CONSTANTS * 4];
+    float vector[D3D9_MAX_FLOAT_CONSTANTS * 4];
 
     if (targetUniform->psRegisterIndex >= 0 || targetUniform->vsRegisterIndex >= 0)
     {
-        ASSERT(count <= gl::D3D9_MAX_FLOAT_CONSTANTS);
+        ASSERT(count <= D3D9_MAX_FLOAT_CONSTANTS);
         for (int i = 0; i < count; i++)
         {
             for (int j = 0; j < 4; j++)
@@ -1697,8 +1697,8 @@
 
 void Renderer9::applyUniform1iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v)
 {
-    ASSERT(count <= gl::D3D9_MAX_FLOAT_CONSTANTS);
-    gl::Vector4 vector[gl::D3D9_MAX_FLOAT_CONSTANTS];
+    ASSERT(count <= D3D9_MAX_FLOAT_CONSTANTS);
+    gl::Vector4 vector[D3D9_MAX_FLOAT_CONSTANTS];
 
     for (int i = 0; i < count; i++)
     {
@@ -1710,8 +1710,8 @@
 
 void Renderer9::applyUniform2iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v)
 {
-    ASSERT(count <= gl::D3D9_MAX_FLOAT_CONSTANTS);
-    gl::Vector4 vector[gl::D3D9_MAX_FLOAT_CONSTANTS];
+    ASSERT(count <= D3D9_MAX_FLOAT_CONSTANTS);
+    gl::Vector4 vector[D3D9_MAX_FLOAT_CONSTANTS];
 
     for (int i = 0; i < count; i++)
     {
@@ -1725,8 +1725,8 @@
 
 void Renderer9::applyUniform3iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v)
 {
-    ASSERT(count <= gl::D3D9_MAX_FLOAT_CONSTANTS);
-    gl::Vector4 vector[gl::D3D9_MAX_FLOAT_CONSTANTS];
+    ASSERT(count <= D3D9_MAX_FLOAT_CONSTANTS);
+    gl::Vector4 vector[D3D9_MAX_FLOAT_CONSTANTS];
 
     for (int i = 0; i < count; i++)
     {
@@ -1740,8 +1740,8 @@
 
 void Renderer9::applyUniform4iv(gl::Uniform *targetUniform, GLsizei count, const GLint *v)
 {
-    ASSERT(count <= gl::D3D9_MAX_FLOAT_CONSTANTS);
-    gl::Vector4 vector[gl::D3D9_MAX_FLOAT_CONSTANTS];
+    ASSERT(count <= D3D9_MAX_FLOAT_CONSTANTS);
+    gl::Vector4 vector[D3D9_MAX_FLOAT_CONSTANTS];
 
     for (int i = 0; i < count; i++)
     {
@@ -2242,12 +2242,12 @@
 
 int Renderer9::getMaxVertexUniformVectors() const
 {
-    return gl::MAX_VERTEX_UNIFORM_VECTORS;
+    return MAX_VERTEX_UNIFORM_VECTORS;
 }
 
 int Renderer9::getMaxFragmentUniformVectors() const
 {
-    return getMajorShaderModel() >= 3 ? gl::MAX_FRAGMENT_UNIFORM_VECTORS_SM3 : gl::MAX_FRAGMENT_UNIFORM_VECTORS_SM2;
+    return getMajorShaderModel() >= 3 ? MAX_FRAGMENT_UNIFORM_VECTORS_SM3 : MAX_FRAGMENT_UNIFORM_VECTORS_SM2;
 }
 
 bool Renderer9::getNonPower2TextureSupport() const
diff --git a/src/libGLESv2/renderer/Renderer9.h b/src/libGLESv2/renderer/Renderer9.h
index 4eb582e..df026bf 100644
--- a/src/libGLESv2/renderer/Renderer9.h
+++ b/src/libGLESv2/renderer/Renderer9.h
@@ -35,6 +35,14 @@
 class StreamingIndexBufferInterface;
 struct TranslatedAttribute;
 
+enum
+{
+    D3D9_MAX_FLOAT_CONSTANTS = 256,
+    MAX_VERTEX_UNIFORM_VECTORS = D3D9_MAX_FLOAT_CONSTANTS - 2,   // Reserve space for dx_HalfPixelSize and dx_DepthRange.
+    MAX_FRAGMENT_UNIFORM_VECTORS_SM2 = 32 - 3,    // Reserve space for dx_Coord, dx_DepthFront and dx_DepthRange.
+    MAX_FRAGMENT_UNIFORM_VECTORS_SM3 = 224 - 3,
+};
+
 class Renderer9 : public Renderer
 {
   public: