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;
}