| Index: src/gpu/effects/GrRRectEffect.cpp
 | 
| diff --git a/src/gpu/effects/GrRRectEffect.cpp b/src/gpu/effects/GrRRectEffect.cpp
 | 
| index 432e6ff402529996494ad02c5bdbcd97505cd5a2..c95690ff195e0f1c944e596448658ceb36578d5a 100644
 | 
| --- a/src/gpu/effects/GrRRectEffect.cpp
 | 
| +++ b/src/gpu/effects/GrRRectEffect.cpp
 | 
| @@ -128,12 +128,7 @@ class GLCircularRRectEffect : public GrGLFragmentProcessor {
 | 
|  public:
 | 
|      GLCircularRRectEffect(const GrProcessor&);
 | 
|  
 | 
| -    virtual void emitCode(GrGLFPBuilder* builder,
 | 
| -                          const GrFragmentProcessor& fp,
 | 
| -                          const char* outputColor,
 | 
| -                          const char* inputColor,
 | 
| -                          const TransformedCoordsArray&,
 | 
| -                          const TextureSamplerArray&) override;
 | 
| +    virtual void emitCode(EmitArgs&) override;
 | 
|  
 | 
|      static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuilder*);
 | 
|  
 | 
| @@ -150,29 +145,24 @@ GLCircularRRectEffect::GLCircularRRectEffect(const GrProcessor& ) {
 | 
|      fPrevRRect.setEmpty();
 | 
|  }
 | 
|  
 | 
| -void GLCircularRRectEffect::emitCode(GrGLFPBuilder* builder,
 | 
| -                                     const GrFragmentProcessor& fp,
 | 
| -                                     const char* outputColor,
 | 
| -                                     const char* inputColor,
 | 
| -                                     const TransformedCoordsArray&,
 | 
| -                                     const TextureSamplerArray& samplers) {
 | 
| -    const CircularRRectEffect& crre = fp.cast<CircularRRectEffect>();
 | 
| +void GLCircularRRectEffect::emitCode(EmitArgs& args) {
 | 
| +    const CircularRRectEffect& crre = args.fFp.cast<CircularRRectEffect>();
 | 
|      const char *rectName;
 | 
|      const char *radiusPlusHalfName;
 | 
|      // The inner rect is the rrect bounds inset by the radius. Its left, top, right, and bottom
 | 
|      // edges correspond to components x, y, z, and w, respectively. When a side of the rrect has
 | 
|      // only rectangular corners, that side's value corresponds to the rect edge's value outset by
 | 
|      // half a pixel.
 | 
| -    fInnerRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
 | 
| +    fInnerRectUniform = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
 | 
|                                              kVec4f_GrSLType, kDefault_GrSLPrecision,
 | 
|                                              "innerRect",
 | 
|                                              &rectName);
 | 
| -    fRadiusPlusHalfUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
 | 
| +    fRadiusPlusHalfUniform = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
 | 
|                                                   kFloat_GrSLType, kDefault_GrSLPrecision,
 | 
|                                                   "radiusPlusHalf",
 | 
|                                                   &radiusPlusHalfName);
 | 
|  
 | 
| -    GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder();
 | 
| +    GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder();
 | 
|      const char* fragmentPos = fsBuilder->fragmentPosition();
 | 
|      // At each quarter-circle corner we compute a vector that is the offset of the fragment position
 | 
|      // from the circle center. The vector is pinned in x and y to be in the quarter-plane relevant
 | 
| @@ -279,8 +269,8 @@ void GLCircularRRectEffect::emitCode(GrGLFPBuilder* builder,
 | 
|          fsBuilder->codeAppend("\t\talpha = 1.0 - alpha;\n");
 | 
|      }
 | 
|  
 | 
| -    fsBuilder->codeAppendf("\t\t%s = %s;\n", outputColor,
 | 
| -                           (GrGLSLExpr4(inputColor) * GrGLSLExpr1("alpha")).c_str());
 | 
| +    fsBuilder->codeAppendf("\t\t%s = %s;\n", args.fOutputColor,
 | 
| +                           (GrGLSLExpr4(args.fInputColor) * GrGLSLExpr1("alpha")).c_str());
 | 
|  }
 | 
|  
 | 
|  void GLCircularRRectEffect::GenKey(const GrProcessor& processor, const GrGLSLCaps&,
 | 
| @@ -483,12 +473,7 @@ class GLEllipticalRRectEffect : public GrGLFragmentProcessor {
 | 
|  public:
 | 
|      GLEllipticalRRectEffect(const GrProcessor&);
 | 
|  
 | 
| -    virtual void emitCode(GrGLFPBuilder* builder,
 | 
| -                          const GrFragmentProcessor& effect,
 | 
| -                          const char* outputColor,
 | 
| -                          const char* inputColor,
 | 
| -                          const TransformedCoordsArray&,
 | 
| -                          const TextureSamplerArray&) override;
 | 
| +    virtual void emitCode(EmitArgs&) override;
 | 
|  
 | 
|      static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuilder*);
 | 
|  
 | 
| @@ -505,21 +490,16 @@ GLEllipticalRRectEffect::GLEllipticalRRectEffect(const GrProcessor& effect) {
 | 
|      fPrevRRect.setEmpty();
 | 
|  }
 | 
|  
 | 
| -void GLEllipticalRRectEffect::emitCode(GrGLFPBuilder* builder,
 | 
| -                                       const GrFragmentProcessor& effect,
 | 
| -                                       const char* outputColor,
 | 
| -                                       const char* inputColor,
 | 
| -                                       const TransformedCoordsArray&,
 | 
| -                                       const TextureSamplerArray& samplers) {
 | 
| -    const EllipticalRRectEffect& erre = effect.cast<EllipticalRRectEffect>();
 | 
| +void GLEllipticalRRectEffect::emitCode(EmitArgs& args) {
 | 
| +    const EllipticalRRectEffect& erre = args.fFp.cast<EllipticalRRectEffect>();
 | 
|      const char *rectName;
 | 
|      // The inner rect is the rrect bounds inset by the x/y radii
 | 
| -    fInnerRectUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
 | 
| +    fInnerRectUniform = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
 | 
|                                              kVec4f_GrSLType, kDefault_GrSLPrecision,
 | 
|                                              "innerRect",
 | 
|                                              &rectName);
 | 
|  
 | 
| -    GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder();
 | 
| +    GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder();
 | 
|      const char* fragmentPos = fsBuilder->fragmentPosition();
 | 
|      // At each quarter-ellipse corner we compute a vector that is the offset of the fragment pos
 | 
|      // to the ellipse center. The vector is pinned in x and y to be in the quarter-plane relevant
 | 
| @@ -537,7 +517,7 @@ void GLEllipticalRRectEffect::emitCode(GrGLFPBuilder* builder,
 | 
|      switch (erre.getRRect().getType()) {
 | 
|          case SkRRect::kSimple_Type: {
 | 
|              const char *invRadiiXYSqdName;
 | 
| -            fInvRadiiSqdUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
 | 
| +            fInvRadiiSqdUniform = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
 | 
|                                                        kVec2f_GrSLType, kDefault_GrSLPrecision,
 | 
|                                                        "invRadiiXY",
 | 
|                                                        &invRadiiXYSqdName);
 | 
| @@ -548,7 +528,7 @@ void GLEllipticalRRectEffect::emitCode(GrGLFPBuilder* builder,
 | 
|          }
 | 
|          case SkRRect::kNinePatch_Type: {
 | 
|              const char *invRadiiLTRBSqdName;
 | 
| -            fInvRadiiSqdUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
 | 
| +            fInvRadiiSqdUniform = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
 | 
|                                                        kVec4f_GrSLType, kDefault_GrSLPrecision,
 | 
|                                                        "invRadiiLTRB",
 | 
|                                                        &invRadiiLTRBSqdName);
 | 
| @@ -577,8 +557,8 @@ void GLEllipticalRRectEffect::emitCode(GrGLFPBuilder* builder,
 | 
|          fsBuilder->codeAppend("\t\tfloat alpha = clamp(0.5 + approx_dist, 0.0, 1.0);\n");
 | 
|      }
 | 
|  
 | 
| -    fsBuilder->codeAppendf("\t\t%s = %s;\n", outputColor,
 | 
| -                           (GrGLSLExpr4(inputColor) * GrGLSLExpr1("alpha")).c_str());
 | 
| +    fsBuilder->codeAppendf("\t\t%s = %s;\n", args.fOutputColor,
 | 
| +                           (GrGLSLExpr4(args.fInputColor) * GrGLSLExpr1("alpha")).c_str());
 | 
|  }
 | 
|  
 | 
|  void GLEllipticalRRectEffect::GenKey(const GrProcessor& effect, const GrGLSLCaps&,
 | 
| 
 |