Revert "Merge the ProgramBinary class into Program."

Issues appeared on the FYI waterfall, content_gl_tests hangs.

This reverts commit 2195a6d6032883ed05468d5ecd019e7cb9a27bce.

Change-Id: I9fe1a53cf40887ae5a98fd77b4872f41085fcea7
Reviewed-on: https://chromium-review.googlesource.com/232386
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/d3d/ProgramD3D.cpp b/src/libANGLE/renderer/d3d/ProgramD3D.cpp
index e7317e6..05707a8 100644
--- a/src/libANGLE/renderer/d3d/ProgramD3D.cpp
+++ b/src/libANGLE/renderer/d3d/ProgramD3D.cpp
@@ -11,6 +11,7 @@
 #include "libANGLE/Framebuffer.h"
 #include "libANGLE/FramebufferAttachment.h"
 #include "libANGLE/Program.h"
+#include "libANGLE/ProgramBinary.h"
 #include "libANGLE/renderer/ShaderExecutable.h"
 #include "libANGLE/renderer/d3d/DynamicHLSL.h"
 #include "libANGLE/renderer/d3d/RendererD3D.h"
@@ -147,8 +148,6 @@
 {
 }
 
-unsigned int ProgramD3D::mCurrentSerial = 1;
-
 ProgramD3D::ProgramD3D(RendererD3D *renderer)
     : ProgramImpl(),
       mRenderer(renderer),
@@ -162,8 +161,7 @@
       mUsedVertexSamplerRange(0),
       mUsedPixelSamplerRange(0),
       mDirtySamplerMapping(true),
-      mShaderVersion(100),
-      mSerial(issueSerial())
+      mShaderVersion(100)
 {
     mDynamicHLSL = new DynamicHLSL(renderer);
 }
@@ -400,7 +398,7 @@
     return true;
 }
 
-LinkResult ProgramD3D::load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream)
+gl::LinkResult ProgramD3D::load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream)
 {
     stream->readInt(&mShaderVersion);
 
@@ -430,7 +428,7 @@
     if (stream->error())
     {
         infoLog.append("Invalid program binary.");
-        return LinkResult(false, gl::Error(GL_NO_ERROR));
+        return gl::LinkResult(false, gl::Error(GL_NO_ERROR));
     }
 
     mUniforms.resize(uniformCount);
@@ -463,7 +461,7 @@
     if (stream->error())
     {
         infoLog.append("Invalid program binary.");
-        return LinkResult(false, gl::Error(GL_NO_ERROR));
+        return gl::LinkResult(false, gl::Error(GL_NO_ERROR));
     }
 
     mUniformIndex.resize(uniformIndexCount);
@@ -478,7 +476,7 @@
     if (stream->error())
     {
         infoLog.append("Invalid program binary.");
-        return LinkResult(false, gl::Error(GL_NO_ERROR));
+        return gl::LinkResult(false, gl::Error(GL_NO_ERROR));
     }
 
     mUniformBlocks.resize(uniformBlockCount);
@@ -562,13 +560,13 @@
                                                     &shaderExecutable);
         if (error.isError())
         {
-            return LinkResult(false, error);
+            return gl::LinkResult(false, error);
         }
 
         if (!shaderExecutable)
         {
             infoLog.append("Could not create vertex shader.");
-            return LinkResult(false, gl::Error(GL_NO_ERROR));
+            return gl::LinkResult(false, gl::Error(GL_NO_ERROR));
         }
 
         // generated converted input layout
@@ -600,13 +598,13 @@
                                                     &shaderExecutable);
         if (error.isError())
         {
-            return LinkResult(false, error);
+            return gl::LinkResult(false, error);
         }
 
         if (!shaderExecutable)
         {
             infoLog.append("Could not create pixel shader.");
-            return LinkResult(false, gl::Error(GL_NO_ERROR));
+            return gl::LinkResult(false, gl::Error(GL_NO_ERROR));
         }
 
         // add new binary
@@ -626,13 +624,13 @@
                                                     &mGeometryExecutable);
         if (error.isError())
         {
-            return LinkResult(false, error);
+            return gl::LinkResult(false, error);
         }
 
         if (!mGeometryExecutable)
         {
             infoLog.append("Could not create geometry shader.");
-            return LinkResult(false, gl::Error(GL_NO_ERROR));
+            return gl::LinkResult(false, gl::Error(GL_NO_ERROR));
         }
         stream->skip(geometryShaderSize);
     }
@@ -644,12 +642,12 @@
     if (memcmp(&identifier, &binaryIdentifier, sizeof(GUID)) != 0)
     {
         infoLog.append("Invalid program binary.");
-        return LinkResult(false, gl::Error(GL_NO_ERROR));
+        return gl::LinkResult(false, gl::Error(GL_NO_ERROR));
     }
 
     initializeUniformStorage();
 
-    return LinkResult(true, gl::Error(GL_NO_ERROR));
+    return gl::LinkResult(true, gl::Error(GL_NO_ERROR));
 }
 
 gl::Error ProgramD3D::save(gl::BinaryOutputStream *stream)
@@ -919,8 +917,8 @@
     return gl::Error(GL_NO_ERROR);
 }
 
-LinkResult ProgramD3D::compileProgramExecutables(gl::InfoLog &infoLog, gl::Shader *fragmentShader, gl::Shader *vertexShader,
-                                                 int registers)
+gl::LinkResult ProgramD3D::compileProgramExecutables(gl::InfoLog &infoLog, gl::Shader *fragmentShader, gl::Shader *vertexShader,
+                                                     int registers)
 {
     ShaderD3D *vertexShaderD3D = ShaderD3D::makeShaderD3D(vertexShader->getImplementation());
     ShaderD3D *fragmentShaderD3D = ShaderD3D::makeShaderD3D(fragmentShader->getImplementation());
@@ -931,7 +929,7 @@
     gl::Error error = getVertexExecutableForInputLayout(defaultInputLayout, &defaultVertexExecutable);
     if (error.isError())
     {
-        return LinkResult(false, error);
+        return gl::LinkResult(false, error);
     }
 
     std::vector<GLenum> defaultPixelOutput = GetDefaultOutputLayoutFromShader(getPixelShaderKey());
@@ -939,7 +937,7 @@
     error = getPixelExecutableForOutputLayout(defaultPixelOutput, &defaultPixelExecutable);
     if (error.isError())
     {
-        return LinkResult(false, error);
+        return gl::LinkResult(false, error);
     }
 
     if (usesGeometryShader())
@@ -952,7 +950,7 @@
                                                ANGLE_D3D_WORKAROUND_NONE, &mGeometryExecutable);
         if (error.isError())
         {
-            return LinkResult(false, error);
+            return gl::LinkResult(false, error);
         }
     }
 
@@ -978,15 +976,15 @@
 #endif
 
     bool linkSuccess = (defaultVertexExecutable && defaultPixelExecutable && (!usesGeometryShader() || mGeometryExecutable));
-    return LinkResult(linkSuccess, gl::Error(GL_NO_ERROR));
+    return gl::LinkResult(linkSuccess, gl::Error(GL_NO_ERROR));
 }
 
-LinkResult ProgramD3D::link(const gl::Data &data, gl::InfoLog &infoLog,
-                            gl::Shader *fragmentShader, gl::Shader *vertexShader,
-                            const std::vector<std::string> &transformFeedbackVaryings,
-                            GLenum transformFeedbackBufferMode,
-                            int *registers, std::vector<gl::LinkedVarying> *linkedVaryings,
-                            std::map<int, gl::VariableLocation> *outputVariables)
+gl::LinkResult ProgramD3D::link(const gl::Data &data, gl::InfoLog &infoLog,
+                                gl::Shader *fragmentShader, gl::Shader *vertexShader,
+                                const std::vector<std::string> &transformFeedbackVaryings,
+                                GLenum transformFeedbackBufferMode,
+                                int *registers, std::vector<gl::LinkedVarying> *linkedVaryings,
+                                std::map<int, gl::VariableLocation> *outputVariables)
 {
     ShaderD3D *vertexShaderD3D = ShaderD3D::makeShaderD3D(vertexShader->getImplementation());
     ShaderD3D *fragmentShaderD3D = ShaderD3D::makeShaderD3D(fragmentShader->getImplementation());
@@ -1009,24 +1007,24 @@
 
     if (*registers < 0)
     {
-        return LinkResult(false, gl::Error(GL_NO_ERROR));
+        return gl::LinkResult(false, gl::Error(GL_NO_ERROR));
     }
 
-    if (!gl::Program::linkVaryings(infoLog, fragmentShader, vertexShader))
+    if (!gl::ProgramBinary::linkVaryings(infoLog, fragmentShader, vertexShader))
     {
-        return LinkResult(false, gl::Error(GL_NO_ERROR));
+        return gl::LinkResult(false, gl::Error(GL_NO_ERROR));
     }
 
     if (!mDynamicHLSL->generateShaderLinkHLSL(data, infoLog, *registers, packing, mPixelHLSL, mVertexHLSL,
                                               fragmentShaderD3D, vertexShaderD3D, transformFeedbackVaryings,
                                               linkedVaryings, outputVariables, &mPixelShaderKey, &mUsesFragDepth))
     {
-        return LinkResult(false, gl::Error(GL_NO_ERROR));
+        return gl::LinkResult(false, gl::Error(GL_NO_ERROR));
     }
 
     mUsesPointSize = vertexShaderD3D->usesPointSize();
 
-    return LinkResult(true, gl::Error(GL_NO_ERROR));
+    return gl::LinkResult(true, gl::Error(GL_NO_ERROR));
 }
 
 void ProgramD3D::getInputLayoutSignature(const gl::VertexFormat inputLayout[], GLenum signature[]) const
@@ -1309,7 +1307,7 @@
         {
             const sh::Uniform &vertexUniform = *entry->second;
             const std::string &uniformName = "uniform '" + vertexUniform.name + "'";
-            if (!gl::Program::linkValidateUniforms(infoLog, uniformName, vertexUniform, fragmentUniform))
+            if (!gl::ProgramBinary::linkValidateUniforms(infoLog, uniformName, vertexUniform, fragmentUniform))
             {
                 return false;
             }
@@ -1923,14 +1921,4 @@
     mDirtySamplerMapping = true;
 }
 
-unsigned int ProgramD3D::getSerial() const
-{
-    return mSerial;
-}
-
-unsigned int ProgramD3D::issueSerial()
-{
-    return mCurrentSerial++;
-}
-
 }