Always link uniforms directly retrieved from the compiler.

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

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1633 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/ProgramBinary.cpp b/src/libGLESv2/ProgramBinary.cpp
index 446cbb7..f33d5f1 100644
--- a/src/libGLESv2/ProgramBinary.cpp
+++ b/src/libGLESv2/ProgramBinary.cpp
@@ -1801,18 +1801,10 @@
     }
 
     bool success = true;
-    rx::D3DConstantTable *constantTableVS = NULL;
-    rx::D3DConstantTable *constantTablePS = NULL;
     mVertexExecutable = mRenderer->compileToExecutable(infoLog, vertexHLSL.c_str(), GL_VERTEX_SHADER);
     mPixelExecutable = mRenderer->compileToExecutable(infoLog, pixelHLSL.c_str(), GL_FRAGMENT_SHADER);
 
-    if (mVertexExecutable && mPixelExecutable)
-    {
-        // D3D9_REPLACE
-        constantTableVS = mVertexExecutable->getConstantTable();
-        constantTablePS = mPixelExecutable->getConstantTable();
-    }
-    else
+    if (!mVertexExecutable || !mPixelExecutable)
     {
         infoLog.append("Failed to create D3D shaders.");
         success = false;
@@ -1828,32 +1820,9 @@
         success = false;
     }
 
-    if (constantTableVS && constantTablePS)   // D3D9_REPLACE
+    if (!linkUniforms(infoLog, vertexShader->getUniforms(), fragmentShader->getUniforms()))
     {
-        if (!linkUniforms(infoLog, constantTableVS, constantTablePS))
-        {
-            success = false;
-        }
-    }
-    else
-    {
-        for (sh::ActiveUniforms::const_iterator uniform = vertexShader->getUniforms().begin(); uniform != vertexShader->getUniforms().end(); uniform++)
-        {
-            if (!defineUniform(GL_VERTEX_SHADER, *uniform, infoLog))
-            {
-                success = false;
-                break;
-            }
-        }
-
-        for (sh::ActiveUniforms::const_iterator uniform = fragmentShader->getUniforms().begin(); uniform != fragmentShader->getUniforms().end(); uniform++)
-        {
-            if (!defineUniform(GL_FRAGMENT_SHADER, *uniform, infoLog))
-            {
-                success = false;
-                break;
-            }
-        }
+        success = false;
     }
 
     Context *context = getContext();
@@ -1932,27 +1901,24 @@
     return true;
 }
 
-bool ProgramBinary::linkUniforms(InfoLog &infoLog, rx::D3DConstantTable *vsConstantTable, rx::D3DConstantTable *psConstantTable)
+bool ProgramBinary::linkUniforms(InfoLog &infoLog, const sh::ActiveUniforms &vertexUniforms, const sh::ActiveUniforms &fragmentUniforms)
 {
-    for (unsigned int constantIndex = 0; constantIndex < psConstantTable->constants(); constantIndex++)
+    for (sh::ActiveUniforms::const_iterator uniform = vertexUniforms.begin(); uniform != vertexUniforms.end(); uniform++)
     {
-        const rx::D3DConstant *constant = psConstantTable->getConstant(constantIndex);
-
-        if (!defineUniform(infoLog, GL_FRAGMENT_SHADER, constant, "", vsConstantTable, psConstantTable))
+        if (!defineUniform(GL_VERTEX_SHADER, *uniform, infoLog))
         {
             return false;
         }
     }
 
-    for (unsigned int constantIndex = 0; constantIndex < vsConstantTable->constants(); constantIndex++)
+    for (sh::ActiveUniforms::const_iterator uniform = fragmentUniforms.begin(); uniform != fragmentUniforms.end(); uniform++)
     {
-        const rx::D3DConstant *constant = vsConstantTable->getConstant(constantIndex);
-
-        if (!defineUniform(infoLog, GL_VERTEX_SHADER, constant, "", vsConstantTable, psConstantTable))
+        if (!defineUniform(GL_FRAGMENT_SHADER, *uniform, infoLog))
         {
             return false;
         }
     }
+
     return true;
 }