Implement D3DConstantTable.

Remove ProgramBinary dependencies on D3DX.
Review URL: https://codereview.appspot.com/6485061

git-svn-id: https://angleproject.googlecode.com/svn/trunk@1271 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/ProgramBinary.h b/src/libGLESv2/ProgramBinary.h
index 5443cca..f2f1c0f 100644
--- a/src/libGLESv2/ProgramBinary.h
+++ b/src/libGLESv2/ProgramBinary.h
@@ -14,13 +14,14 @@
 #include <GLES2/gl2.h>
 #include <GLES2/gl2ext.h>
 
-#include <d3dx9.h>
 #include <d3dcompiler.h>
 #include <string>
 #include <vector>
 
-#include "libGLESv2/Shader.h"
 #include "libGLESv2/Context.h"
+#include "libGLESv2/D3DConstantTable.h"
+#include "libGLESv2/mathutil.h"
+#include "libGLESv2/Shader.h"
 
 namespace gl
 {
@@ -54,18 +55,18 @@
             registerCount = 0;
         }
 
-        void set(const D3DXCONSTANT_DESC &constantDescription)
+        void set(const D3DConstant *constant)
         {
-            switch(constantDescription.RegisterSet)
+            switch(constant->registerSet)
             {
-              case D3DXRS_BOOL:    boolIndex = constantDescription.RegisterIndex;    break;
-              case D3DXRS_FLOAT4:  float4Index = constantDescription.RegisterIndex;  break;
-              case D3DXRS_SAMPLER: samplerIndex = constantDescription.RegisterIndex; break;
+              case D3DConstant::RS_BOOL:    boolIndex = constant->registerIndex;    break;
+              case D3DConstant::RS_FLOAT4:  float4Index = constant->registerIndex;  break;
+              case D3DConstant::RS_SAMPLER: samplerIndex = constant->registerIndex; break;
               default: UNREACHABLE();
             }
             
-            ASSERT(registerCount == 0 || registerCount == (int)constantDescription.RegisterCount);
-            registerCount = constantDescription.RegisterCount;
+            ASSERT(registerCount == 0 || registerCount == (int)constant->registerCount);
+            registerCount = constant->registerCount;
         }
 
         int float4Index;
@@ -163,23 +164,23 @@
   private:
     DISALLOW_COPY_AND_ASSIGN(ProgramBinary);
 
-    ID3D10Blob *compileToBinary(InfoLog &infoLog, const char *hlsl, const char *profile, ID3DXConstantTable **constantTable);
+    ID3D10Blob *compileToBinary(InfoLog &infoLog, const char *hlsl, const char *profile, D3DConstantTable **constantTable);
 
     int packVaryings(InfoLog &infoLog, const Varying *packing[][4], FragmentShader *fragmentShader);
     bool linkVaryings(InfoLog &infoLog, std::string& pixelHLSL, std::string& vertexHLSL, FragmentShader *fragmentShader, VertexShader *vertexShader);
 
     bool linkAttributes(InfoLog &infoLog, const AttributeBindings &attributeBindings, FragmentShader *fragmentShader, VertexShader *vertexShader);
 
-    bool linkUniforms(InfoLog &infoLog, GLenum shader, ID3DXConstantTable *constantTable);
-    bool defineUniform(InfoLog &infoLog, GLenum shader, const D3DXHANDLE &constantHandle, const D3DXCONSTANT_DESC &constantDescription, std::string name = "");
-    bool defineUniform(GLenum shader, const D3DXCONSTANT_DESC &constantDescription, const std::string &name);
-    Uniform *createUniform(const D3DXCONSTANT_DESC &constantDescription, const std::string &name);
+    bool linkUniforms(InfoLog &infoLog, GLenum shader, D3DConstantTable *constantTable);
+    bool defineUniform(InfoLog &infoLog, GLenum shader, const D3DConstant *constant, std::string name = "");
+    bool defineUniform(GLenum shader, const D3DConstant *constant, const std::string &name);
+    Uniform *createUniform( const D3DConstant *constant, const std::string &name);
     bool applyUniformnfv(Uniform *targetUniform, const GLfloat *v);
     bool applyUniform1iv(Uniform *targetUniform, GLsizei count, const GLint *v);
     bool applyUniform2iv(Uniform *targetUniform, GLsizei count, const GLint *v);
     bool applyUniform3iv(Uniform *targetUniform, GLsizei count, const GLint *v);
     bool applyUniform4iv(Uniform *targetUniform, GLsizei count, const GLint *v);
-    void applyUniformniv(Uniform *targetUniform, GLsizei count, const D3DXVECTOR4 *vector);
+    void applyUniformniv(Uniform *targetUniform, GLsizei count, const Vector4 *vector);
     void applyUniformnbv(Uniform *targetUniform, GLsizei count, int width, const GLboolean *v);
 
     IDirect3DDevice9 *mDevice;
@@ -188,8 +189,8 @@
     IDirect3DVertexShader9 *mVertexExecutable;
 
     // These are only used during linking.
-    ID3DXConstantTable *mConstantTablePS;
-    ID3DXConstantTable *mConstantTableVS;
+    D3DConstantTable *mConstantTablePS;
+    D3DConstantTable *mConstantTableVS;
 
     Attribute mLinkedAttribute[MAX_VERTEX_ATTRIBS];
     int mSemanticIndex[MAX_VERTEX_ATTRIBS];