Add a Program::Data shared state structure.

Similar to the Framebuffer and other classes, this gives the Impl
class a read-only view of the object's state.

BUG=angleproject:1123

Change-Id: I580eaebe2de236adf8131d6e3f54633cecce8c25
Reviewed-on: https://chromium-review.googlesource.com/293760
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/gl/ProgramGL.cpp b/src/libANGLE/renderer/gl/ProgramGL.cpp
index ddf7216..247f5df 100644
--- a/src/libANGLE/renderer/gl/ProgramGL.cpp
+++ b/src/libANGLE/renderer/gl/ProgramGL.cpp
@@ -17,11 +17,10 @@
 namespace rx
 {
 
-ProgramGL::ProgramGL(const FunctionsGL *functions, StateManagerGL *stateManager)
-    : ProgramImpl(),
-      mFunctions(functions),
-      mStateManager(stateManager),
-      mProgramID(0)
+ProgramGL::ProgramGL(const gl::Program::Data &data,
+                     const FunctionsGL *functions,
+                     StateManagerGL *stateManager)
+    : ProgramImpl(data), mFunctions(functions), mStateManager(stateManager), mProgramID(0)
 {
     ASSERT(mFunctions);
     ASSERT(mStateManager);
@@ -398,8 +397,7 @@
     return true;
 }
 
-LinkResult ProgramGL::compileProgramExecutables(gl::InfoLog &infoLog, gl::Shader *fragmentShader, gl::Shader *vertexShader,
-                                                int registers)
+LinkResult ProgramGL::compileProgramExecutables(gl::InfoLog &infoLog, int registers)
 {
     //UNIMPLEMENTED();
     return LinkResult(true, gl::Error(GL_NO_ERROR));