Add loadExecutable function to Renderer

Trac #22155
Signed-off-by: Geoff Lang
Signed-off-by: Nicolas Capens

factored out of compileToExecutable as we also need this when loading binaries from disk.

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1504 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index f2e1350..d091d49 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -2632,6 +2632,39 @@
     return renderTarget;
 }
 
+ShaderExecutable *Renderer9::loadExecutable(const DWORD *function, size_t length, GLenum type, void *data)
+{
+    ShaderExecutable9 *executable = NULL;
+    gl::D3DConstantTable *table = reinterpret_cast<gl::D3DConstantTable *>(data);
+
+    switch (type)
+    {
+      case GL_VERTEX_SHADER:
+        {
+            IDirect3DVertexShader9 *vshader = createVertexShader(function, length);
+            if (vshader)
+            {
+                executable = new ShaderExecutable9(vshader, table);
+            }
+        }
+        break;
+      case GL_FRAGMENT_SHADER:
+        {
+            IDirect3DPixelShader9 *pshader = createPixelShader(function, length);
+            if (pshader)
+            {
+                executable = new ShaderExecutable9(pshader, table);
+            }
+        }
+        break;
+      default:
+        UNREACHABLE();
+        break;
+    }
+
+    return executable;
+}
+
 ShaderExecutable *Renderer9::compileToExecutable(gl::InfoLog &infoLog, const char *shaderHLSL, GLenum type)
 {
     const char *profile = NULL;
@@ -2654,32 +2687,7 @@
     if (!binary)
         return NULL;
 
-    ShaderExecutable9 *executable = NULL;
-
-    switch (type)
-    {
-      case GL_VERTEX_SHADER:
-        {
-            IDirect3DVertexShader9 *vshader = createVertexShader((DWORD *)binary->GetBufferPointer(), binary->GetBufferSize());
-            if (vshader)
-            {
-                executable = new ShaderExecutable9(vshader, constantTable);
-            }
-        }
-        break;
-      case GL_FRAGMENT_SHADER:
-        {
-            IDirect3DPixelShader9 *pshader = createPixelShader((DWORD *)binary->GetBufferPointer(), binary->GetBufferSize());
-            if (pshader)
-            {
-                executable = new ShaderExecutable9(pshader, constantTable);
-            }
-        }
-        break;
-      default:
-        UNREACHABLE();
-        break;
-    }
+    ShaderExecutable *executable = loadExecutable((DWORD *)binary->GetBufferPointer(), binary->GetBufferSize(), type, constantTable);
 
     return executable;
 }