Make GrGLSLProgramBuilder base class for GrGLProgramBuilder.

This CL still keeps the weird diamond shape we have for all our ProgramBuilders.
However, the GrGLSL base class will allow us to pull multiple other parts
of our program setup away from GL which will eventually allow us to break up
the diamond.

As part of this all ShaderBuilder subclass have been made gl independent,
however I will move them to GLSL files/class names in a follow on CL.

BUG=skia:

Review URL: https://codereview.chromium.org/1416423003
diff --git a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h
index 39ca5e7..16cc8cf 100644
--- a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h
+++ b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h
@@ -10,19 +10,20 @@
 
 #include "GrGLShaderBuilder.h"
 
-#include "gl/GrGLTypes.h"
 #include "glsl/GrGLSLProcessorTypes.h"
 
 class GrRenderTarget;
-class GrGLVarying;
+class GrGLSLVarying;
 
 /*
  * This base class encapsulates the functionality which the GP uses to build fragment shaders
  */
 class GrGLFragmentBuilder : public GrGLShaderBuilder {
 public:
-    GrGLFragmentBuilder(GrGLProgramBuilder* program)
-        : INHERITED(program) {
+    GrGLFragmentBuilder(GrGLSLProgramBuilder* program)
+        : INHERITED(program)
+        , fHasCustomColorOutput(false)
+        , fHasSecondaryOutput(false) {
         fSubstageIndices.push_back(0);
     }
     virtual ~GrGLFragmentBuilder() {}
@@ -62,6 +63,13 @@
 
     const SkString& getMangleString() const { return fMangleString; }
 
+    bool hasCustomColorOutput() const { return fHasCustomColorOutput; }
+    bool hasSecondaryOutput() const { return fHasSecondaryOutput; }
+
+protected:
+    bool fHasCustomColorOutput;
+    bool fHasSecondaryOutput;
+
 private:
     /*
      * State that tracks which child proc in the proc tree is currently emitting code.  This is
@@ -95,7 +103,7 @@
  */
 class GrGLXPFragmentBuilder : public GrGLFragmentBuilder {
 public:
-    GrGLXPFragmentBuilder(GrGLProgramBuilder* program) : INHERITED(program) {}
+    GrGLXPFragmentBuilder(GrGLSLProgramBuilder* program) : INHERITED(program) {}
 
     /** Returns the variable name that holds the color of the destination pixel. This may be nullptr if
         no effect advertised that it will read the destination. */
@@ -120,7 +128,7 @@
        the key is 0. */
     static FragPosKey KeyForFragmentPosition(const GrRenderTarget* dst);
 
-    GrGLFragmentShaderBuilder(GrGLProgramBuilder* program, uint8_t fragPosKey);
+    GrGLFragmentShaderBuilder(GrGLSLProgramBuilder* program, uint8_t fragPosKey);
 
     // true public interface, defined explicitly in the abstract interfaces above
     bool enableFeature(GLSLFeature) override;
@@ -137,7 +145,6 @@
     void enableSecondaryOutput();
     const char* getPrimaryColorOutputName() const;
     const char* getSecondaryColorOutputName() const;
-    void bindFragmentShaderLocations(GrGLuint programID);
 
     // As GLProcessors emit code, there are some conditions we need to verify.  We use the below
     // state to track this.  The reset call is called per processor emitted.
@@ -148,10 +155,13 @@
         fHasReadFragmentPosition = false;
     }
 
+    static const char* DeclaredColorOutputName() { return "fsColorOut"; }
+    static const char* DeclaredSecondaryColorOutputName() { return "fsSecondaryColorOut"; }
+
     /*
      * An internal call for GrGLProgramBuilder to use to add varyings to the vertex shader
      */
-    void addVarying(GrGLVarying*, GrSLPrecision);
+    void addVarying(GrGLSLVarying*, GrSLPrecision);
 
     void onFinalize() override;
 
@@ -174,8 +184,6 @@
 
     static const char* kDstTextureColorName;
 
-    bool fHasCustomColorOutput;
-    bool fHasSecondaryOutput;
     bool fSetupFragPosition;
     bool fTopLeftFragPosRead;
     int  fCustomColorOutputIndex;