Store ShaderExecutables on the ProgramBinary instead of d3d9 shaders

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

Also hooks up binary loading to the loadExecutable function.
The other notable change is that getVertex/Pixel shader no longer
add reference counts to the returned objects.

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1505 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index d091d49..6a951a4 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -1377,8 +1377,14 @@
 
 void Renderer9::applyShaders(gl::ProgramBinary *programBinary)
 {
-    IDirect3DVertexShader9 *vertexShader = programBinary->getVertexShader();
-    IDirect3DPixelShader9 *pixelShader = programBinary->getPixelShader();
+    ShaderExecutable *vertexExe = programBinary->getVertexExecutable();
+    ShaderExecutable *pixelExe = programBinary->getPixelExecutable();
+
+    IDirect3DVertexShader9 *vertexShader = NULL;
+    if (vertexExe) vertexShader = ShaderExecutable9::makeShaderExecutable9(vertexExe)->getVertexShader();
+
+    IDirect3DPixelShader9 *pixelShader = NULL;
+    if (pixelExe) pixelShader = ShaderExecutable9::makeShaderExecutable9(pixelExe)->getPixelShader();
 
     mDevice->SetPixelShader(pixelShader);
     mDevice->SetVertexShader(vertexShader);