Refactor various gradient effect classes

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2221133002

Review-Url: https://codereview.chromium.org/2221133002
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp
index 52fbe81..710bde8 100644
--- a/src/effects/gradients/SkGradientShader.cpp
+++ b/src/effects/gradients/SkGradientShader.cpp
@@ -911,12 +911,12 @@
 #include "glsl/GrGLSLUniformHandler.h"
 #include "SkGr.h"
 
-GrGLGradientEffect::GrGLGradientEffect()
+GrGradientEffect::GLSLProcessor::GLSLProcessor()
     : fCachedYCoord(SK_ScalarMax) {
 }
 
-void GrGLGradientEffect::emitUniforms(GrGLSLUniformHandler* uniformHandler,
-                                      const GrGradientEffect& ge) {
+void GrGradientEffect::GLSLProcessor::emitUniforms(GrGLSLUniformHandler* uniformHandler,
+                                                   const GrGradientEffect& ge) {
 
     if (SkGradientShaderBase::kTwo_GpuColorType == ge.getColorType()) { // 2 Color case
         fColorStartUni = uniformHandler->addUniform(kFragment_GrShaderFlag,
@@ -966,8 +966,8 @@
                    a);
 }
 
-void GrGLGradientEffect::onSetData(const GrGLSLProgramDataManager& pdman,
-                                   const GrProcessor& processor) {
+void GrGradientEffect::GLSLProcessor::onSetData(const GrGLSLProgramDataManager& pdman,
+                                                const GrProcessor& processor) {
 
     const GrGradientEffect& e = processor.cast<GrGradientEffect>();
 
@@ -1004,7 +1004,7 @@
 }
 
 
-uint32_t GrGLGradientEffect::GenBaseGradientKey(const GrProcessor& processor) {
+uint32_t GrGradientEffect::GLSLProcessor::GenBaseGradientKey(const GrProcessor& processor) {
     const GrGradientEffect& e = processor.cast<GrGradientEffect>();
 
     uint32_t key = 0;
@@ -1022,14 +1022,14 @@
     return key;
 }
 
-void GrGLGradientEffect::emitColor(GrGLSLFPFragmentBuilder* fragBuilder,
-                                   GrGLSLUniformHandler* uniformHandler,
-                                   const GrGLSLCaps* glslCaps,
-                                   const GrGradientEffect& ge,
-                                   const char* gradientTValue,
-                                   const char* outputColor,
-                                   const char* inputColor,
-                                   const SamplerHandle* texSamplers) {
+void GrGradientEffect::GLSLProcessor::emitColor(GrGLSLFPFragmentBuilder* fragBuilder,
+                                                GrGLSLUniformHandler* uniformHandler,
+                                                const GrGLSLCaps* glslCaps,
+                                                const GrGradientEffect& ge,
+                                                const char* gradientTValue,
+                                                const char* outputColor,
+                                                const char* inputColor,
+                                                const SamplerHandle* texSamplers) {
     if (SkGradientShaderBase::kTwo_GpuColorType == ge.getColorType()){
         fragBuilder->codeAppendf("\tvec4 colorTemp = mix(%s, %s, clamp(%s, 0.0, 1.0));\n",
                                  uniformHandler->getUniformVariable(fColorStartUni).c_str(),
diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h
index 16c6475..50ad427 100644
--- a/src/effects/gradients/SkGradientShaderPriv.h
+++ b/src/effects/gradients/SkGradientShaderPriv.h
@@ -326,6 +326,7 @@
 // Base class for Gr gradient effects
 class GrGradientEffect : public GrFragmentProcessor {
 public:
+    class GLSLProcessor;
 
     GrGradientEffect(GrContext* ctx,
                      const SkGradientShaderBase& shader,
@@ -353,7 +354,6 @@
     }
 
 protected:
-
     /** Populates a pair of arrays with colors and stop info to construct a random gradient.
         The function decides whether stop values should be used or not. The return value indicates
         the number of colors, which will be capped by kMaxRandomGradientColors. colors should be
@@ -392,10 +392,10 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-// Base class for GL gradient effects
-class GrGLGradientEffect : public GrGLSLFragmentProcessor {
+// Base class for GLSL gradient effects
+class GrGradientEffect::GLSLProcessor : public GrGLSLFragmentProcessor {
 public:
-    GrGLGradientEffect();
+    GLSLProcessor();
 
 protected:
     void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override;
diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp
index cdac5c8..872c6e8 100644
--- a/src/effects/gradients/SkLinearGradient.cpp
+++ b/src/effects/gradients/SkLinearGradient.cpp
@@ -347,28 +347,9 @@
 
 /////////////////////////////////////////////////////////////////////
 
-class GrGLLinearGradient : public GrGLGradientEffect {
-public:
-
-    GrGLLinearGradient(const GrProcessor&) {}
-
-    virtual ~GrGLLinearGradient() { }
-
-    virtual void emitCode(EmitArgs&) override;
-
-    static void GenKey(const GrProcessor& processor, const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
-        b->add32(GenBaseGradientKey(processor));
-    }
-
-private:
-
-    typedef GrGLGradientEffect INHERITED;
-};
-
-/////////////////////////////////////////////////////////////////////
-
 class GrLinearGradient : public GrGradientEffect {
 public:
+    class GLSLLinearProcessor;
 
     static sk_sp<GrFragmentProcessor> Make(GrContext* ctx,
                                            const SkLinearGradient& shader,
@@ -390,14 +371,10 @@
         this->initClassID<GrLinearGradient>();
     }
 
-    GrGLSLFragmentProcessor* onCreateGLSLInstance() const override {
-        return new GrGLLinearGradient(*this);
-    }
+    GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
 
     virtual void onGetGLSLProcessorKey(const GrGLSLCaps& caps,
-                                       GrProcessorKeyBuilder* b) const override {
-        GrGLLinearGradient::GenKey(*this, caps, b);
-    }
+                                       GrProcessorKeyBuilder* b) const override;
 
     GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
 
@@ -406,6 +383,35 @@
 
 /////////////////////////////////////////////////////////////////////
 
+class GrLinearGradient::GLSLLinearProcessor : public GrGradientEffect::GLSLProcessor {
+public:
+    GLSLLinearProcessor(const GrProcessor&) {}
+
+    virtual ~GLSLLinearProcessor() { }
+
+    virtual void emitCode(EmitArgs&) override;
+
+    static void GenKey(const GrProcessor& processor, const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
+        b->add32(GenBaseGradientKey(processor));
+    }
+
+private:
+    typedef GrGradientEffect::GLSLProcessor INHERITED;
+};
+
+/////////////////////////////////////////////////////////////////////
+
+GrGLSLFragmentProcessor* GrLinearGradient::onCreateGLSLInstance() const {
+    return new GrLinearGradient::GLSLLinearProcessor(*this);
+}
+
+void GrLinearGradient::onGetGLSLProcessorKey(const GrGLSLCaps& caps,
+                                             GrProcessorKeyBuilder* b) const {
+    GrLinearGradient::GLSLLinearProcessor::GenKey(*this, caps, b);
+}
+
+/////////////////////////////////////////////////////////////////////
+
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrLinearGradient);
 
 sk_sp<GrFragmentProcessor> GrLinearGradient::TestCreate(GrProcessorTestData* d) {
@@ -428,7 +434,7 @@
 
 /////////////////////////////////////////////////////////////////////
 
-void GrGLLinearGradient::emitCode(EmitArgs& args) {
+void GrLinearGradient::GLSLLinearProcessor::emitCode(EmitArgs& args) {
     const GrLinearGradient& ge = args.fFp.cast<GrLinearGradient>();
     this->emitUniforms(args.fUniformHandler, ge);
     SkString t = args.fFragBuilder->ensureFSCoords2D(args.fCoords, 0);
@@ -436,7 +442,8 @@
     this->emitColor(args.fFragBuilder,
                     args.fUniformHandler,
                     args.fGLSLCaps,
-                    ge, t.c_str(),
+                    ge,
+                    t.c_str(),
                     args.fOutputColor,
                     args.fInputColor,
                     args.fTexSamplers);
diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp
index a3afe5a..78ecffa 100644
--- a/src/effects/gradients/SkRadialGradient.cpp
+++ b/src/effects/gradients/SkRadialGradient.cpp
@@ -242,28 +242,10 @@
 #include "glsl/GrGLSLCaps.h"
 #include "glsl/GrGLSLFragmentShaderBuilder.h"
 
-class GrGLRadialGradient : public GrGLGradientEffect {
-public:
-
-    GrGLRadialGradient(const GrProcessor&) {}
-    virtual ~GrGLRadialGradient() { }
-
-    virtual void emitCode(EmitArgs&) override;
-
-    static void GenKey(const GrProcessor& processor, const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
-        b->add32(GenBaseGradientKey(processor));
-    }
-
-private:
-
-    typedef GrGLGradientEffect INHERITED;
-
-};
-
-/////////////////////////////////////////////////////////////////////
-
 class GrRadialGradient : public GrGradientEffect {
 public:
+    class GLSLRadialProcessor;
+
     static sk_sp<GrFragmentProcessor> Make(GrContext* ctx,
                                            const SkRadialGradient& shader,
                                            const SkMatrix& matrix,
@@ -284,14 +266,10 @@
         this->initClassID<GrRadialGradient>();
     }
 
-    GrGLSLFragmentProcessor* onCreateGLSLInstance() const override {
-        return new GrGLRadialGradient(*this);
-    }
+    GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
 
     virtual void onGetGLSLProcessorKey(const GrGLSLCaps& caps,
-                                       GrProcessorKeyBuilder* b) const override {
-        GrGLRadialGradient::GenKey(*this, caps, b);
-    }
+                                       GrProcessorKeyBuilder* b) const override;
 
     GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
 
@@ -300,6 +278,35 @@
 
 /////////////////////////////////////////////////////////////////////
 
+class GrRadialGradient::GLSLRadialProcessor : public GrGradientEffect::GLSLProcessor {
+public:
+    GLSLRadialProcessor(const GrProcessor&) {}
+    virtual ~GLSLRadialProcessor() { }
+
+    virtual void emitCode(EmitArgs&) override;
+
+    static void GenKey(const GrProcessor& processor, const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
+        b->add32(GenBaseGradientKey(processor));
+    }
+
+private:
+    typedef GrGradientEffect::GLSLProcessor INHERITED;
+
+};
+
+/////////////////////////////////////////////////////////////////////
+
+GrGLSLFragmentProcessor* GrRadialGradient::onCreateGLSLInstance() const {
+    return new GrRadialGradient::GLSLRadialProcessor(*this);
+}
+
+void GrRadialGradient::onGetGLSLProcessorKey(const GrGLSLCaps& caps,
+                                             GrProcessorKeyBuilder* b) const {
+    GrRadialGradient::GLSLRadialProcessor::GenKey(*this, caps, b);
+}
+
+/////////////////////////////////////////////////////////////////////
+
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRadialGradient);
 
 sk_sp<GrFragmentProcessor> GrRadialGradient::TestCreate(GrProcessorTestData* d) {
@@ -322,7 +329,7 @@
 
 /////////////////////////////////////////////////////////////////////
 
-void GrGLRadialGradient::emitCode(EmitArgs& args) {
+void GrRadialGradient::GLSLRadialProcessor::emitCode(EmitArgs& args) {
     const GrRadialGradient& ge = args.fFp.cast<GrRadialGradient>();
     this->emitUniforms(args.fUniformHandler, ge);
     SkString t("length(");
diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp
index 8732534..6e32aa3 100644
--- a/src/effects/gradients/SkSweepGradient.cpp
+++ b/src/effects/gradients/SkSweepGradient.cpp
@@ -125,28 +125,10 @@
 #include "glsl/GrGLSLCaps.h"
 #include "glsl/GrGLSLFragmentShaderBuilder.h"
 
-class GrGLSweepGradient : public GrGLGradientEffect {
-public:
-
-    GrGLSweepGradient(const GrProcessor&) {}
-    virtual ~GrGLSweepGradient() { }
-
-    virtual void emitCode(EmitArgs&) override;
-
-    static void GenKey(const GrProcessor& processor, const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
-        b->add32(GenBaseGradientKey(processor));
-    }
-
-private:
-
-    typedef GrGLGradientEffect INHERITED;
-
-};
-
-/////////////////////////////////////////////////////////////////////
-
 class GrSweepGradient : public GrGradientEffect {
 public:
+    class GLSLSweepProcessor;
+
     static sk_sp<GrFragmentProcessor> Make(GrContext* ctx, const SkSweepGradient& shader,
                                            const SkMatrix& m) {
         return sk_sp<GrFragmentProcessor>(new GrSweepGradient(ctx, shader, m));
@@ -163,14 +145,10 @@
         this->initClassID<GrSweepGradient>();
     }
 
-    GrGLSLFragmentProcessor* onCreateGLSLInstance() const override {
-        return new GrGLSweepGradient(*this);
-    }
+    GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
 
     virtual void onGetGLSLProcessorKey(const GrGLSLCaps& caps,
-                                       GrProcessorKeyBuilder* b) const override {
-        GrGLSweepGradient::GenKey(*this, caps, b);
-    }
+                                       GrProcessorKeyBuilder* b) const override;
 
     GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
 
@@ -179,6 +157,36 @@
 
 /////////////////////////////////////////////////////////////////////
 
+class GrSweepGradient::GLSLSweepProcessor : public GrGradientEffect::GLSLProcessor {
+public:
+    GLSLSweepProcessor(const GrProcessor&) {}
+    virtual ~GLSLSweepProcessor() { }
+
+    virtual void emitCode(EmitArgs&) override;
+
+    static void GenKey(const GrProcessor& processor, const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
+        b->add32(GenBaseGradientKey(processor));
+    }
+
+private:
+    typedef GrGradientEffect::GLSLProcessor INHERITED;
+
+};
+
+/////////////////////////////////////////////////////////////////////
+
+GrGLSLFragmentProcessor* GrSweepGradient::onCreateGLSLInstance() const {
+    return new GrSweepGradient::GLSLSweepProcessor(*this);
+}
+
+void GrSweepGradient::onGetGLSLProcessorKey(const GrGLSLCaps& caps,
+                                            GrProcessorKeyBuilder* b) const {
+    GrSweepGradient::GLSLSweepProcessor::GenKey(*this, caps, b);
+}
+
+
+/////////////////////////////////////////////////////////////////////
+
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSweepGradient);
 
 sk_sp<GrFragmentProcessor> GrSweepGradient::TestCreate(GrProcessorTestData* d) {
@@ -201,7 +209,7 @@
 
 /////////////////////////////////////////////////////////////////////
 
-void GrGLSweepGradient::emitCode(EmitArgs& args) {
+void GrSweepGradient::GLSLSweepProcessor::emitCode(EmitArgs& args) {
     const GrSweepGradient& ge = args.fFp.cast<GrSweepGradient>();
     this->emitUniforms(args.fUniformHandler, ge);
     SkString coords2D = args.fFragBuilder->ensureFSCoords2D(args.fCoords, 0);
diff --git a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
index f1fe012..f11ca65 100644
--- a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
+++ b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
@@ -60,6 +60,7 @@
 
 class Edge2PtConicalEffect : public GrGradientEffect {
 public:
+    class GLSLEdge2PtConicalProcessor;
 
     static sk_sp<GrFragmentProcessor> Make(GrContext* ctx,
                                            const SkTwoPointConicalGradient& shader,
@@ -140,10 +141,10 @@
     typedef GrGradientEffect INHERITED;
 };
 
-class GLEdge2PtConicalEffect : public GrGLGradientEffect {
+class Edge2PtConicalEffect::GLSLEdge2PtConicalProcessor : public GrGradientEffect::GLSLProcessor {
 public:
-    GLEdge2PtConicalEffect(const GrProcessor&);
-    virtual ~GLEdge2PtConicalEffect() { }
+    GLSLEdge2PtConicalProcessor(const GrProcessor&);
+    virtual ~GLSLEdge2PtConicalProcessor() { }
 
     virtual void emitCode(EmitArgs&) override;
 
@@ -166,17 +167,17 @@
     // @}
 
 private:
-    typedef GrGLGradientEffect INHERITED;
+    typedef GrGradientEffect::GLSLProcessor INHERITED;
 
 };
 
 void Edge2PtConicalEffect::onGetGLSLProcessorKey(const GrGLSLCaps& caps,
                                                  GrProcessorKeyBuilder* b) const {
-    GLEdge2PtConicalEffect::GenKey(*this, caps, b);
+    Edge2PtConicalEffect::GLSLEdge2PtConicalProcessor::GenKey(*this, caps, b);
 }
 
 GrGLSLFragmentProcessor* Edge2PtConicalEffect::onCreateGLSLInstance() const {
-    return new GLEdge2PtConicalEffect(*this);
+    return new Edge2PtConicalEffect::GLSLEdge2PtConicalProcessor(*this);
 }
 
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(Edge2PtConicalEffect);
@@ -216,13 +217,13 @@
     return fp;
 }
 
-GLEdge2PtConicalEffect::GLEdge2PtConicalEffect(const GrProcessor&)
+Edge2PtConicalEffect::GLSLEdge2PtConicalProcessor::GLSLEdge2PtConicalProcessor(const GrProcessor&)
     : fVSVaryingName(nullptr)
     , fFSVaryingName(nullptr)
     , fCachedRadius(-SK_ScalarMax)
     , fCachedDiffRadius(-SK_ScalarMax) {}
 
-void GLEdge2PtConicalEffect::emitCode(EmitArgs& args) {
+void Edge2PtConicalEffect::GLSLEdge2PtConicalProcessor::emitCode(EmitArgs& args) {
     const Edge2PtConicalEffect& ge = args.fFp.cast<Edge2PtConicalEffect>();
     GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
     this->emitUniforms(uniformHandler, ge);
@@ -284,8 +285,9 @@
     fragBuilder->codeAppend("\t}\n");
 }
 
-void GLEdge2PtConicalEffect::onSetData(const GrGLSLProgramDataManager& pdman,
-                                       const GrProcessor& processor) {
+void Edge2PtConicalEffect::GLSLEdge2PtConicalProcessor::onSetData(
+                    const GrGLSLProgramDataManager& pdman,
+                    const GrProcessor& processor) {
     INHERITED::onSetData(pdman, processor);
     const Edge2PtConicalEffect& data = processor.cast<Edge2PtConicalEffect>();
     SkScalar radius0 = data.radius();
@@ -301,7 +303,7 @@
     }
 }
 
-void GLEdge2PtConicalEffect::GenKey(const GrProcessor& processor,
+void Edge2PtConicalEffect::GLSLEdge2PtConicalProcessor::GenKey(const GrProcessor& processor,
                                     const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
     b->add32(GenBaseGradientKey(processor));
 }
@@ -370,6 +372,7 @@
 
 class FocalOutside2PtConicalEffect : public GrGradientEffect {
 public:
+    class GLSLFocalOutside2PtConicalProcessor;
 
     static sk_sp<GrFragmentProcessor> Make(GrContext* ctx,
                                            const SkTwoPointConicalGradient& shader,
@@ -420,10 +423,11 @@
     typedef GrGradientEffect INHERITED;
 };
 
-class GLFocalOutside2PtConicalEffect : public GrGLGradientEffect {
+class FocalOutside2PtConicalEffect::GLSLFocalOutside2PtConicalProcessor 
+    : public GrGradientEffect::GLSLProcessor {
 public:
-    GLFocalOutside2PtConicalEffect(const GrProcessor&);
-    virtual ~GLFocalOutside2PtConicalEffect() { }
+    GLSLFocalOutside2PtConicalProcessor(const GrProcessor&);
+    virtual ~GLSLFocalOutside2PtConicalProcessor() { }
 
     virtual void emitCode(EmitArgs&) override;
 
@@ -447,17 +451,17 @@
     // @}
 
 private:
-    typedef GrGLGradientEffect INHERITED;
+    typedef GrGradientEffect::GLSLProcessor INHERITED;
 
 };
 
 void FocalOutside2PtConicalEffect::onGetGLSLProcessorKey(const GrGLSLCaps& caps,
                                                          GrProcessorKeyBuilder* b) const {
-    GLFocalOutside2PtConicalEffect::GenKey(*this, caps, b);
+    FocalOutside2PtConicalEffect::GLSLFocalOutside2PtConicalProcessor::GenKey(*this, caps, b);
 }
 
 GrGLSLFragmentProcessor* FocalOutside2PtConicalEffect::onCreateGLSLInstance() const {
-    return new GLFocalOutside2PtConicalEffect(*this);
+    return new FocalOutside2PtConicalEffect::GLSLFocalOutside2PtConicalProcessor(*this);
 }
 
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalOutside2PtConicalEffect);
@@ -494,7 +498,8 @@
     return fp;
 }
 
-GLFocalOutside2PtConicalEffect::GLFocalOutside2PtConicalEffect(const GrProcessor& processor)
+FocalOutside2PtConicalEffect::GLSLFocalOutside2PtConicalProcessor
+                            ::GLSLFocalOutside2PtConicalProcessor(const GrProcessor& processor)
     : fVSVaryingName(nullptr)
     , fFSVaryingName(nullptr)
     , fCachedFocal(SK_ScalarMax) {
@@ -502,7 +507,7 @@
     fIsFlipped = data.isFlipped();
 }
 
-void GLFocalOutside2PtConicalEffect::emitCode(EmitArgs& args) {
+void FocalOutside2PtConicalEffect::GLSLFocalOutside2PtConicalProcessor::emitCode(EmitArgs& args) {
     const FocalOutside2PtConicalEffect& ge = args.fFp.cast<FocalOutside2PtConicalEffect>();
     GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
     this->emitUniforms(uniformHandler, ge);
@@ -554,8 +559,9 @@
     fragBuilder->codeAppend("\t}\n");
 }
 
-void GLFocalOutside2PtConicalEffect::onSetData(const GrGLSLProgramDataManager& pdman,
-                                               const GrProcessor& processor) {
+void FocalOutside2PtConicalEffect::GLSLFocalOutside2PtConicalProcessor::onSetData(
+                                            const GrGLSLProgramDataManager& pdman,
+                                            const GrProcessor& processor) {
     INHERITED::onSetData(pdman, processor);
     const FocalOutside2PtConicalEffect& data = processor.cast<FocalOutside2PtConicalEffect>();
     SkASSERT(data.isFlipped() == fIsFlipped);
@@ -569,7 +575,8 @@
     }
 }
 
-void GLFocalOutside2PtConicalEffect::GenKey(const GrProcessor& processor,
+void FocalOutside2PtConicalEffect::GLSLFocalOutside2PtConicalProcessor::GenKey(
+                                            const GrProcessor& processor,
                                             const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
     uint32_t* key = b->add32n(2);
     key[0] = GenBaseGradientKey(processor);
@@ -578,10 +585,9 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-class GLFocalInside2PtConicalEffect;
-
 class FocalInside2PtConicalEffect : public GrGradientEffect {
 public:
+    class GLSLFocalInside2PtConicalProcessor;
 
     static sk_sp<GrFragmentProcessor> Make(GrContext* ctx,
                                            const SkTwoPointConicalGradient& shader,
@@ -600,7 +606,7 @@
 
     SkScalar focal() const { return fFocalX; }
 
-    typedef GLFocalInside2PtConicalEffect GLSLProcessor;
+    typedef FocalInside2PtConicalEffect::GLSLFocalInside2PtConicalProcessor GLSLProcessor;
 
 private:
     GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
@@ -629,10 +635,11 @@
     typedef GrGradientEffect INHERITED;
 };
 
-class GLFocalInside2PtConicalEffect : public GrGLGradientEffect {
+class FocalInside2PtConicalEffect::GLSLFocalInside2PtConicalProcessor 
+    : public GrGradientEffect::GLSLProcessor {
 public:
-    GLFocalInside2PtConicalEffect(const GrProcessor&);
-    virtual ~GLFocalInside2PtConicalEffect() {}
+    GLSLFocalInside2PtConicalProcessor(const GrProcessor&);
+    virtual ~GLSLFocalInside2PtConicalProcessor() {}
 
     virtual void emitCode(EmitArgs&) override;
 
@@ -654,17 +661,17 @@
     // @}
 
 private:
-    typedef GrGLGradientEffect INHERITED;
+    typedef GrGradientEffect::GLSLProcessor INHERITED;
 
 };
 
 void FocalInside2PtConicalEffect::onGetGLSLProcessorKey(const GrGLSLCaps& caps,
                                                         GrProcessorKeyBuilder* b) const {
-    GLFocalInside2PtConicalEffect::GenKey(*this, caps, b);
+    FocalInside2PtConicalEffect::GLSLFocalInside2PtConicalProcessor::GenKey(*this, caps, b);
 }
 
 GrGLSLFragmentProcessor* FocalInside2PtConicalEffect::onCreateGLSLInstance() const {
-    return new GLFocalInside2PtConicalEffect(*this);
+    return new FocalInside2PtConicalEffect::GLSLFocalInside2PtConicalProcessor(*this);
 }
 
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(FocalInside2PtConicalEffect);
@@ -703,12 +710,13 @@
     return fp;
 }
 
-GLFocalInside2PtConicalEffect::GLFocalInside2PtConicalEffect(const GrProcessor&)
+FocalInside2PtConicalEffect::GLSLFocalInside2PtConicalProcessor
+                           ::GLSLFocalInside2PtConicalProcessor(const GrProcessor&)
     : fVSVaryingName(nullptr)
     , fFSVaryingName(nullptr)
     , fCachedFocal(SK_ScalarMax) {}
 
-void GLFocalInside2PtConicalEffect::emitCode(EmitArgs& args) {
+void FocalInside2PtConicalEffect::GLSLFocalInside2PtConicalProcessor::emitCode(EmitArgs& args) {
     const FocalInside2PtConicalEffect& ge = args.fFp.cast<FocalInside2PtConicalEffect>();
     GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
     this->emitUniforms(uniformHandler, ge);
@@ -740,8 +748,9 @@
                     args.fTexSamplers);
 }
 
-void GLFocalInside2PtConicalEffect::onSetData(const GrGLSLProgramDataManager& pdman,
-                                              const GrProcessor& processor) {
+void FocalInside2PtConicalEffect::GLSLFocalInside2PtConicalProcessor::onSetData(
+                                            const GrGLSLProgramDataManager& pdman,
+                                            const GrProcessor& processor) {
     INHERITED::onSetData(pdman, processor);
     const FocalInside2PtConicalEffect& data = processor.cast<FocalInside2PtConicalEffect>();
     SkScalar focal = data.focal();
@@ -752,8 +761,9 @@
     }
 }
 
-void GLFocalInside2PtConicalEffect::GenKey(const GrProcessor& processor,
-                                           const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
+void FocalInside2PtConicalEffect::GLSLFocalInside2PtConicalProcessor::GenKey(
+                                            const GrProcessor& processor,
+                                            const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
     b->add32(GenBaseGradientKey(processor));
 }
 
@@ -823,6 +833,7 @@
 
 class CircleInside2PtConicalEffect : public GrGradientEffect {
 public:
+    class GLSLCircleInside2PtConicalProcessor;
 
     static sk_sp<GrFragmentProcessor> Make(GrContext* ctx,
                                            const SkTwoPointConicalGradient& shader,
@@ -874,10 +885,11 @@
     typedef GrGradientEffect INHERITED;
 };
 
-class GLCircleInside2PtConicalEffect : public GrGLGradientEffect {
+class CircleInside2PtConicalEffect::GLSLCircleInside2PtConicalProcessor 
+    : public GrGradientEffect::GLSLProcessor {
 public:
-    GLCircleInside2PtConicalEffect(const GrProcessor&);
-    virtual ~GLCircleInside2PtConicalEffect() {}
+    GLSLCircleInside2PtConicalProcessor(const GrProcessor&);
+    virtual ~GLSLCircleInside2PtConicalProcessor() {}
 
     virtual void emitCode(EmitArgs&) override;
 
@@ -904,17 +916,17 @@
     // @}
 
 private:
-    typedef GrGLGradientEffect INHERITED;
+    typedef GrGradientEffect::GLSLProcessor INHERITED;
 
 };
 
 void CircleInside2PtConicalEffect::onGetGLSLProcessorKey(const GrGLSLCaps& caps,
                                                          GrProcessorKeyBuilder* b) const {
-    GLCircleInside2PtConicalEffect::GenKey(*this, caps, b);
+    CircleInside2PtConicalEffect::GLSLCircleInside2PtConicalProcessor::GenKey(*this, caps, b);
 }
 
 GrGLSLFragmentProcessor* CircleInside2PtConicalEffect::onCreateGLSLInstance() const {
-    return new GLCircleInside2PtConicalEffect(*this);
+    return new CircleInside2PtConicalEffect::GLSLCircleInside2PtConicalProcessor(*this);
 }
 
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleInside2PtConicalEffect);
@@ -952,7 +964,8 @@
     return fp;
 }
 
-GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrProcessor& processor)
+CircleInside2PtConicalEffect::GLSLCircleInside2PtConicalProcessor
+                            ::GLSLCircleInside2PtConicalProcessor(const GrProcessor& processor)
     : fVSVaryingName(nullptr)
     , fFSVaryingName(nullptr)
     , fCachedCenterX(SK_ScalarMax)
@@ -961,7 +974,7 @@
     , fCachedB(SK_ScalarMax)
     , fCachedC(SK_ScalarMax) {}
 
-void GLCircleInside2PtConicalEffect::emitCode(EmitArgs& args) {
+void CircleInside2PtConicalEffect::GLSLCircleInside2PtConicalProcessor::emitCode(EmitArgs& args) {
     const CircleInside2PtConicalEffect& ge = args.fFp.cast<CircleInside2PtConicalEffect>();
     GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
     this->emitUniforms(uniformHandler, ge);
@@ -1008,8 +1021,9 @@
                     args.fTexSamplers);
 }
 
-void GLCircleInside2PtConicalEffect::onSetData(const GrGLSLProgramDataManager& pdman,
-                                               const GrProcessor& processor) {
+void CircleInside2PtConicalEffect::GLSLCircleInside2PtConicalProcessor::onSetData(
+                                            const GrGLSLProgramDataManager& pdman,
+                                            const GrProcessor& processor) {
     INHERITED::onSetData(pdman, processor);
     const CircleInside2PtConicalEffect& data = processor.cast<CircleInside2PtConicalEffect>();
     SkScalar centerX = data.centerX();
@@ -1032,7 +1046,8 @@
     }
 }
 
-void GLCircleInside2PtConicalEffect::GenKey(const GrProcessor& processor,
+void CircleInside2PtConicalEffect::GLSLCircleInside2PtConicalProcessor::GenKey(
+                                            const GrProcessor& processor,
                                             const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
     b->add32(GenBaseGradientKey(processor));
 }
@@ -1041,6 +1056,7 @@
 
 class CircleOutside2PtConicalEffect : public GrGradientEffect {
 public:
+    class GLSLCircleOutside2PtConicalProcessor;
 
     static sk_sp<GrFragmentProcessor> Make(GrContext* ctx,
                                            const SkTwoPointConicalGradient& shader,
@@ -1104,10 +1120,11 @@
     typedef GrGradientEffect INHERITED;
 };
 
-class GLCircleOutside2PtConicalEffect : public GrGLGradientEffect {
+class CircleOutside2PtConicalEffect::GLSLCircleOutside2PtConicalProcessor
+    : public GrGradientEffect::GLSLProcessor {
 public:
-    GLCircleOutside2PtConicalEffect(const GrProcessor&);
-    virtual ~GLCircleOutside2PtConicalEffect() {}
+    GLSLCircleOutside2PtConicalProcessor(const GrProcessor&);
+    virtual ~GLSLCircleOutside2PtConicalProcessor() {}
 
     virtual void emitCode(EmitArgs&) override;
 
@@ -1137,17 +1154,17 @@
     // @}
 
 private:
-    typedef GrGLGradientEffect INHERITED;
+    typedef GrGradientEffect::GLSLProcessor INHERITED;
 
 };
 
 void CircleOutside2PtConicalEffect::onGetGLSLProcessorKey(const GrGLSLCaps& caps,
                                                           GrProcessorKeyBuilder* b) const {
-    GLCircleOutside2PtConicalEffect::GenKey(*this, caps, b);
+    CircleOutside2PtConicalEffect::GLSLCircleOutside2PtConicalProcessor::GenKey(*this, caps, b);
 }
 
 GrGLSLFragmentProcessor* CircleOutside2PtConicalEffect::onCreateGLSLInstance() const {
-    return new GLCircleOutside2PtConicalEffect(*this);
+    return new CircleOutside2PtConicalEffect::GLSLCircleOutside2PtConicalProcessor(*this);
 }
 
 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(CircleOutside2PtConicalEffect);
@@ -1186,7 +1203,8 @@
     return fp;
 }
 
-GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrProcessor& processor)
+CircleOutside2PtConicalEffect::GLSLCircleOutside2PtConicalProcessor
+                             ::GLSLCircleOutside2PtConicalProcessor(const GrProcessor& processor)
     : fVSVaryingName(nullptr)
     , fFSVaryingName(nullptr)
     , fCachedCenterX(SK_ScalarMax)
@@ -1199,7 +1217,7 @@
     fIsFlipped = data.isFlipped();
     }
 
-void GLCircleOutside2PtConicalEffect::emitCode(EmitArgs& args) {
+void CircleOutside2PtConicalEffect::GLSLCircleOutside2PtConicalProcessor::emitCode(EmitArgs& args) {
     const CircleOutside2PtConicalEffect& ge = args.fFp.cast<CircleOutside2PtConicalEffect>();
     GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
     this->emitUniforms(uniformHandler, ge);
@@ -1263,7 +1281,8 @@
     fragBuilder->codeAppend("\t}\n");
 }
 
-void GLCircleOutside2PtConicalEffect::onSetData(const GrGLSLProgramDataManager& pdman,
+void CircleOutside2PtConicalEffect::GLSLCircleOutside2PtConicalProcessor::onSetData(
+                                                const GrGLSLProgramDataManager& pdman,
                                                 const GrProcessor& processor) {
     INHERITED::onSetData(pdman, processor);
     const CircleOutside2PtConicalEffect& data = processor.cast<CircleOutside2PtConicalEffect>();
@@ -1291,8 +1310,9 @@
     }
 }
 
-void GLCircleOutside2PtConicalEffect::GenKey(const GrProcessor& processor,
-                                             const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
+void CircleOutside2PtConicalEffect::GLSLCircleOutside2PtConicalProcessor::GenKey(
+                                            const GrProcessor& processor,
+                                            const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
     uint32_t* key = b->add32n(2);
     key[0] = GenBaseGradientKey(processor);
     key[1] = processor.cast<CircleOutside2PtConicalEffect>().isFlipped();