Initial refactor of shaderbuilder to prepare for geometry shaders

gitignore for eclipse

BUG=skia:
R=bsalomon@google.com, bsalomon@chromium.org

Author: joshualitt@chromium.org

Review URL: https://codereview.chromium.org/491673002
diff --git a/src/gpu/effects/GrTextureDomain.cpp b/src/gpu/effects/GrTextureDomain.cpp
index 2bad5e8..40006a3 100644
--- a/src/gpu/effects/GrTextureDomain.cpp
+++ b/src/gpu/effects/GrTextureDomain.cpp
@@ -5,11 +5,11 @@
  * found in the LICENSE file.
  */
 
+#include "gl/builders/GrGLProgramBuilder.h"
 #include "GrTextureDomain.h"
 #include "GrSimpleTextureEffect.h"
 #include "GrTBackendEffectFactory.h"
 #include "gl/GrGLEffect.h"
-#include "gl/GrGLShaderBuilder.h"
 #include "SkFloatingPoint.h"
 
 
@@ -49,23 +49,25 @@
     SkASSERT((Mode)-1 == fMode || textureDomain.mode() == fMode);
     SkDEBUGCODE(fMode = textureDomain.mode();)
 
+    GrGLProgramBuilder* program = builder->getProgramBuilder();
+
     if (textureDomain.mode() != kIgnore_Mode && !fDomainUni.isValid()) {
         const char* name;
         SkString uniName("TexDom");
         if (textureDomain.fIndex >= 0) {
             uniName.appendS32(textureDomain.fIndex);
         }
-        fDomainUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility,
-                                         kVec4f_GrSLType, uniName.c_str(), &name);
+        fDomainUni = program->addUniform(GrGLProgramBuilder::kFragment_Visibility, kVec4f_GrSLType,
+                uniName.c_str(), &name);
         fDomainName = name;
     }
 
     switch (textureDomain.mode()) {
         case kIgnore_Mode: {
-            builder->fsCodeAppendf("\t%s = ", outColor);
-            builder->fsAppendTextureLookupAndModulate(inModulateColor, sampler,
+            builder->codeAppendf("\t%s = ", outColor);
+            builder->appendTextureLookupAndModulate(inModulateColor, sampler,
                                                       inCoords.c_str());
-            builder->fsCodeAppend(";\n");
+            builder->codeAppend(";\n");
             break;
         }
         case kClamp_Mode: {
@@ -73,49 +75,49 @@
             clampedCoords.appendf("\tclamp(%s, %s.xy, %s.zw)",
                                   inCoords.c_str(), fDomainName.c_str(), fDomainName.c_str());
 
-            builder->fsCodeAppendf("\t%s = ", outColor);
-            builder->fsAppendTextureLookupAndModulate(inModulateColor, sampler,
+            builder->codeAppendf("\t%s = ", outColor);
+            builder->appendTextureLookupAndModulate(inModulateColor, sampler,
                                                       clampedCoords.c_str());
-            builder->fsCodeAppend(";\n");
+            builder->codeAppend(";\n");
             break;
         }
         case kDecal_Mode: {
             // Add a block since we're going to declare variables.
-            GrGLShaderBuilder::FSBlock block(builder);
+            GrGLShaderBuilder::ShaderBlock block(builder);
 
             const char* domain = fDomainName.c_str();
-            if (kImagination_GrGLVendor == builder->ctxInfo().vendor()) {
+            if (kImagination_GrGLVendor == program->ctxInfo().vendor()) {
                 // On the NexusS and GalaxyNexus, the other path (with the 'any'
                 // call) causes the compilation error "Calls to any function that
                 // may require a gradient calculation inside a conditional block
                 // may return undefined results". This appears to be an issue with
                 // the 'any' call since even the simple "result=black; if (any())
                 // result=white;" code fails to compile.
-                builder->fsCodeAppend("\tvec4 outside = vec4(0.0, 0.0, 0.0, 0.0);\n");
-                builder->fsCodeAppend("\tvec4 inside = ");
-                builder->fsAppendTextureLookupAndModulate(inModulateColor, sampler,
+                builder->codeAppend("\tvec4 outside = vec4(0.0, 0.0, 0.0, 0.0);\n");
+                builder->codeAppend("\tvec4 inside = ");
+                builder->appendTextureLookupAndModulate(inModulateColor, sampler,
                                                           inCoords.c_str());
-                builder->fsCodeAppend(";\n");
-                builder->fsCodeAppendf("\tfloat x = (%s).x;\n", inCoords.c_str());
-                builder->fsCodeAppendf("\tfloat y = (%s).y;\n", inCoords.c_str());
+                builder->codeAppend(";\n");
+                builder->codeAppendf("\tfloat x = (%s).x;\n", inCoords.c_str());
+                builder->codeAppendf("\tfloat y = (%s).y;\n", inCoords.c_str());
 
-                builder->fsCodeAppendf("\tx = abs(2.0*(x - %s.x)/(%s.z - %s.x) - 1.0);\n",
+                builder->codeAppendf("\tx = abs(2.0*(x - %s.x)/(%s.z - %s.x) - 1.0);\n",
                                        domain, domain, domain);
-                builder->fsCodeAppendf("\ty = abs(2.0*(y - %s.y)/(%s.w - %s.y) - 1.0);\n",
+                builder->codeAppendf("\ty = abs(2.0*(y - %s.y)/(%s.w - %s.y) - 1.0);\n",
                                        domain, domain, domain);
-                builder->fsCodeAppend("\tfloat blend = step(1.0, max(x, y));\n");
-                builder->fsCodeAppendf("\t%s = mix(inside, outside, blend);\n", outColor);
+                builder->codeAppend("\tfloat blend = step(1.0, max(x, y));\n");
+                builder->codeAppendf("\t%s = mix(inside, outside, blend);\n", outColor);
             } else {
-                builder->fsCodeAppend("\tbvec4 outside;\n");
-                builder->fsCodeAppendf("\toutside.xy = lessThan(%s, %s.xy);\n", inCoords.c_str(),
+                builder->codeAppend("\tbvec4 outside;\n");
+                builder->codeAppendf("\toutside.xy = lessThan(%s, %s.xy);\n", inCoords.c_str(),
                                        domain);
-                builder->fsCodeAppendf("\toutside.zw = greaterThan(%s, %s.zw);\n", inCoords.c_str(),
+                builder->codeAppendf("\toutside.zw = greaterThan(%s, %s.zw);\n", inCoords.c_str(),
                                        domain);
-                builder->fsCodeAppendf("\t%s = any(outside) ? vec4(0.0, 0.0, 0.0, 0.0) : ",
+                builder->codeAppendf("\t%s = any(outside) ? vec4(0.0, 0.0, 0.0, 0.0) : ",
                                        outColor);
-                builder->fsAppendTextureLookupAndModulate(inModulateColor, sampler,
+                builder->appendTextureLookupAndModulate(inModulateColor, sampler,
                                                           inCoords.c_str());
-                builder->fsCodeAppend(";\n");
+                builder->codeAppend(";\n");
             }
             break;
         }
@@ -125,10 +127,10 @@
                                  inCoords.c_str(), fDomainName.c_str(), fDomainName.c_str(),
                                  fDomainName.c_str(), fDomainName.c_str());
 
-            builder->fsCodeAppendf("\t%s = ", outColor);
-            builder->fsAppendTextureLookupAndModulate(inModulateColor, sampler,
+            builder->codeAppendf("\t%s = ", outColor);
+            builder->appendTextureLookupAndModulate(inModulateColor, sampler,
                                                       clampedCoords.c_str());
-            builder->fsCodeAppend(";\n");
+            builder->codeAppend(";\n");
             break;
         }
     }
@@ -167,7 +169,7 @@
 public:
     GrGLTextureDomainEffect(const GrBackendEffectFactory&, const GrDrawEffect&);
 
-    virtual void emitCode(GrGLShaderBuilder*,
+    virtual void emitCode(GrGLProgramBuilder*,
                           const GrDrawEffect&,
                           const GrEffectKey&,
                           const char* outputColor,
@@ -189,7 +191,7 @@
     : INHERITED(factory) {
 }
 
-void GrGLTextureDomainEffect::emitCode(GrGLShaderBuilder* builder,
+void GrGLTextureDomainEffect::emitCode(GrGLProgramBuilder* builder,
                                        const GrDrawEffect& drawEffect,
                                        const GrEffectKey& key,
                                        const char* outputColor,
@@ -199,8 +201,9 @@
     const GrTextureDomainEffect& effect = drawEffect.castEffect<GrTextureDomainEffect>();
     const GrTextureDomain& domain = effect.textureDomain();
 
-    SkString coords2D = builder->ensureFSCoords2D(coords, 0);
-    fGLDomain.sampleTexture(builder, domain, outputColor, coords2D, samplers[0], inputColor);
+    GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder();
+    SkString coords2D = fsBuilder->ensureFSCoords2D(coords, 0);
+    fGLDomain.sampleTexture(fsBuilder, domain, outputColor, coords2D, samplers[0], inputColor);
 }
 
 void GrGLTextureDomainEffect::setData(const GrGLProgramDataManager& pdman,