| Index: experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp
 | 
| diff --git a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp
 | 
| index 8afbee0827bba8140f5a65d3649a0dbbb068f6b7..233638253c949516dc9e438f8b4424179e098bc0 100644
 | 
| --- a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp
 | 
| +++ b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp
 | 
| @@ -609,8 +609,6 @@ void SkPerlinNoiseShader2::PerlinNoiseShaderContext::shadeSpan(
 | 
|  
 | 
|  class GrGLPerlinNoise2 : public GrGLSLFragmentProcessor {
 | 
|  public:
 | 
| -    GrGLPerlinNoise2(const GrProcessor&);
 | 
| -
 | 
|      void emitCode(EmitArgs&) override;
 | 
|  
 | 
|      static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuilder* b);
 | 
| @@ -619,14 +617,9 @@ protected:
 | 
|      void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override;
 | 
|  
 | 
|  private:
 | 
| -
 | 
|      GrGLSLProgramDataManager::UniformHandle fStitchDataUni;
 | 
| -    SkPerlinNoiseShader2::Type              fType;
 | 
| -    bool                                    fStitchTiles;
 | 
| -    int                                     fNumOctaves;
 | 
|      GrGLSLProgramDataManager::UniformHandle fBaseFrequencyUni;
 | 
|  
 | 
| -private:
 | 
|      typedef GrGLSLFragmentProcessor INHERITED;
 | 
|  };
 | 
|  
 | 
| @@ -657,7 +650,7 @@ public:
 | 
|  
 | 
|  private:
 | 
|      GrGLSLFragmentProcessor* onCreateGLSLInstance() const override {
 | 
| -        return new GrGLPerlinNoise2(*this);
 | 
| +        return new GrGLPerlinNoise2;
 | 
|      }
 | 
|  
 | 
|      virtual void onGetGLSLProcessorKey(const GrGLSLCaps& caps,
 | 
| @@ -736,13 +729,9 @@ const GrFragmentProcessor* GrPerlinNoise2Effect::TestCreate(GrProcessorTestData*
 | 
|                                         kNone_SkFilterQuality);
 | 
|  }
 | 
|  
 | 
| -GrGLPerlinNoise2::GrGLPerlinNoise2(const GrProcessor& processor)
 | 
| -  : fType(processor.cast<GrPerlinNoise2Effect>().type())
 | 
| -  , fStitchTiles(processor.cast<GrPerlinNoise2Effect>().stitchTiles())
 | 
| -  , fNumOctaves(processor.cast<GrPerlinNoise2Effect>().numOctaves()) {
 | 
| -}
 | 
| -
 | 
|  void GrGLPerlinNoise2::emitCode(EmitArgs& args) {
 | 
| +    const GrPerlinNoise2Effect& pne = args.fFp.cast<GrPerlinNoise2Effect>();
 | 
| +
 | 
|      GrGLSLFragmentBuilder* fsBuilder = args.fFragBuilder;
 | 
|      GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
 | 
|      SkString vCoords = fsBuilder->ensureFSCoords2D(args.fCoords, 0);
 | 
| @@ -753,7 +742,7 @@ void GrGLPerlinNoise2::emitCode(EmitArgs& args) {
 | 
|      const char* baseFrequencyUni = uniformHandler->getUniformCStr(fBaseFrequencyUni);
 | 
|  
 | 
|      const char* stitchDataUni = nullptr;
 | 
| -    if (fStitchTiles) {
 | 
| +    if (pne.stitchTiles()) {
 | 
|          fStitchDataUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibility,
 | 
|                                                      kVec2f_GrSLType, kDefault_GrSLPrecision,
 | 
|                                                      "stitchData");
 | 
| @@ -806,7 +795,7 @@ void GrGLPerlinNoise2::emitCode(EmitArgs& args) {
 | 
|          noiseSmooth, fractVal, fractVal, fractVal);
 | 
|  
 | 
|      // Adjust frequencies if we're stitching tiles
 | 
| -    if (fStitchTiles) {
 | 
| +    if (pne.stitchTiles()) {
 | 
|          noiseCode.appendf("\n\tif(%s.x >= %s.x) { %s.x -= %s.x; }",
 | 
|              floorVal, stitchData, floorVal, stitchData);
 | 
|          noiseCode.appendf("\n\tif(%s.y >= %s.y) { %s.y -= %s.y; }",
 | 
| @@ -915,7 +904,7 @@ void GrGLPerlinNoise2::emitCode(EmitArgs& args) {
 | 
|      noiseCode.appendf("\n\treturn mix(%s.x, %s.y, %s.y);\n", ab, ab, noiseSmooth);
 | 
|  
 | 
|      SkString noiseFuncName;
 | 
| -    if (fStitchTiles) {
 | 
| +    if (pne.stitchTiles()) {
 | 
|          fsBuilder->emitFunction(kFloat_GrSLType,
 | 
|                                  "perlinnoise", SK_ARRAY_COUNT(gPerlinNoiseStitchArgs),
 | 
|                                  gPerlinNoiseStitchArgs, noiseCode.c_str(), &noiseFuncName);
 | 
| @@ -932,7 +921,7 @@ void GrGLPerlinNoise2::emitCode(EmitArgs& args) {
 | 
|      // Clear the color accumulator
 | 
|      fsBuilder->codeAppendf("\n\t\t%s = vec4(0.0);", args.fOutputColor);
 | 
|  
 | 
| -    if (fStitchTiles) {
 | 
| +    if (pne.stitchTiles()) {
 | 
|          // Set up TurbulenceInitial stitch values.
 | 
|          fsBuilder->codeAppendf("\n\t\tvec2 %s = %s;", stitchData, stitchDataUni);
 | 
|      }
 | 
| @@ -940,13 +929,13 @@ void GrGLPerlinNoise2::emitCode(EmitArgs& args) {
 | 
|      fsBuilder->codeAppendf("\n\t\tfloat %s = 1.0;", ratio);
 | 
|  
 | 
|      // Loop over all octaves
 | 
| -    fsBuilder->codeAppendf("\n\t\tfor (int octave = 0; octave < %d; ++octave) {", fNumOctaves);
 | 
| +    fsBuilder->codeAppendf("for (int octave = 0; octave < %d; ++octave) {", pne.numOctaves());
 | 
|  
 | 
|      fsBuilder->codeAppendf("\n\t\t\t%s += ", args.fOutputColor);
 | 
| -    if (fType != SkPerlinNoiseShader2::kFractalNoise_Type) {
 | 
| +    if (pne.type() != SkPerlinNoiseShader2::kFractalNoise_Type) {
 | 
|          fsBuilder->codeAppend("abs(");
 | 
|      }
 | 
| -    if (fStitchTiles) {
 | 
| +    if (pne.stitchTiles()) {
 | 
|          fsBuilder->codeAppendf(
 | 
|              "vec4(\n\t\t\t\t%s(%s, %s, %s),\n\t\t\t\t%s(%s, %s, %s),"
 | 
|                   "\n\t\t\t\t%s(%s, %s, %s),\n\t\t\t\t%s(%s, %s, %s))",
 | 
| @@ -963,7 +952,7 @@ void GrGLPerlinNoise2::emitCode(EmitArgs& args) {
 | 
|              noiseFuncName.c_str(), chanCoordB, noiseVec,
 | 
|              noiseFuncName.c_str(), chanCoordA, noiseVec);
 | 
|      }
 | 
| -    if (fType != SkPerlinNoiseShader2::kFractalNoise_Type) {
 | 
| +    if (pne.type() != SkPerlinNoiseShader2::kFractalNoise_Type) {
 | 
|          fsBuilder->codeAppendf(")"); // end of "abs("
 | 
|      }
 | 
|      fsBuilder->codeAppendf(" * %s;", ratio);
 | 
| @@ -971,12 +960,12 @@ void GrGLPerlinNoise2::emitCode(EmitArgs& args) {
 | 
|      fsBuilder->codeAppendf("\n\t\t\t%s *= vec2(2.0);", noiseVec);
 | 
|      fsBuilder->codeAppendf("\n\t\t\t%s *= 0.5;", ratio);
 | 
|  
 | 
| -    if (fStitchTiles) {
 | 
| +    if (pne.stitchTiles()) {
 | 
|          fsBuilder->codeAppendf("\n\t\t\t%s *= vec2(2.0);", stitchData);
 | 
|      }
 | 
|      fsBuilder->codeAppend("\n\t\t}"); // end of the for loop on octaves
 | 
|  
 | 
| -    if (fType == SkPerlinNoiseShader2::kFractalNoise_Type) {
 | 
| +    if (pne.type() == SkPerlinNoiseShader2::kFractalNoise_Type) {
 | 
|          // The value of turbulenceFunctionResult comes from ((turbulenceFunctionResult) + 1) / 2
 | 
|          // by fractalNoise and (turbulenceFunctionResult) by turbulence.
 | 
|          fsBuilder->codeAppendf("\n\t\t%s = %s * vec4(0.5) + vec4(0.5);",
 | 
| 
 |