| Index: src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp | 
| diff --git a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp | 
| index e89193ff550974069c2f79fecdd4615f3346b5b1..a5813215467d3eca8905762d78d8d07871c510c9 100644 | 
| --- a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp | 
| +++ b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp | 
| @@ -62,11 +62,8 @@ class Edge2PtConicalEffect : public GrGradientEffect { | 
| public: | 
| class GLSLEdge2PtConicalProcessor; | 
|  | 
| -    static sk_sp<GrFragmentProcessor> Make(GrContext* ctx, | 
| -                                           const SkTwoPointConicalGradient& shader, | 
| -                                           const SkMatrix& matrix, | 
| -                                           SkShader::TileMode tm) { | 
| -        return sk_sp<GrFragmentProcessor>(new Edge2PtConicalEffect(ctx, shader, matrix, tm)); | 
| +    static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args) { | 
| +        return sk_sp<GrFragmentProcessor>(new Edge2PtConicalEffect(args)); | 
| } | 
|  | 
| virtual ~Edge2PtConicalEffect() {} | 
| @@ -93,14 +90,13 @@ private: | 
| this->fDiffRadius == s.fDiffRadius); | 
| } | 
|  | 
| -    Edge2PtConicalEffect(GrContext* ctx, | 
| -                         const SkTwoPointConicalGradient& shader, | 
| -                         const SkMatrix& matrix, | 
| -                         SkShader::TileMode tm) | 
| -        : INHERITED(ctx, shader, matrix, tm), | 
| -        fCenterX1(shader.getCenterX1()), | 
| -        fRadius0(shader.getStartRadius()), | 
| -        fDiffRadius(shader.getDiffRadius()){ | 
| +    Edge2PtConicalEffect(const CreateArgs& args) | 
| +        : INHERITED(args) { | 
| +        const SkTwoPointConicalGradient& shader = | 
| +            *static_cast<const SkTwoPointConicalGradient*>(args.fShader); | 
| +        fCenterX1 = shader.getCenterX1(); | 
| +        fRadius0 = shader.getStartRadius(); | 
| +        fDiffRadius = shader.getDiffRadius(); | 
| this->initClassID<Edge2PtConicalEffect>(); | 
| // We should only be calling this shader if we are degenerate case with touching circles | 
| // When deciding if we are in edge case, we scaled by the end radius for cases when the | 
| @@ -376,13 +372,9 @@ class FocalOutside2PtConicalEffect : public GrGradientEffect { | 
| public: | 
| class GLSLFocalOutside2PtConicalProcessor; | 
|  | 
| -    static sk_sp<GrFragmentProcessor> Make(GrContext* ctx, | 
| -                                           const SkTwoPointConicalGradient& shader, | 
| -                                           const SkMatrix& matrix, | 
| -                                           SkShader::TileMode tm, | 
| -                                           SkScalar focalX) { | 
| +    static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args, SkScalar focalX) { | 
| return sk_sp<GrFragmentProcessor>( | 
| -            new FocalOutside2PtConicalEffect(ctx, shader, matrix, tm, focalX)); | 
| +            new FocalOutside2PtConicalEffect(args, focalX)); | 
| } | 
|  | 
| virtual ~FocalOutside2PtConicalEffect() { } | 
| @@ -406,14 +398,10 @@ private: | 
| this->fIsFlipped == s.fIsFlipped); | 
| } | 
|  | 
| -    FocalOutside2PtConicalEffect(GrContext* ctx, | 
| -                                 const SkTwoPointConicalGradient& shader, | 
| -                                 const SkMatrix& matrix, | 
| -                                 SkShader::TileMode tm, | 
| -                                 SkScalar focalX) | 
| -    : INHERITED(ctx, shader, matrix, tm) | 
| +    FocalOutside2PtConicalEffect(const CreateArgs& args, SkScalar focalX) | 
| +    : INHERITED(args) | 
| , fFocalX(focalX) | 
| -    , fIsFlipped(shader.isFlippedGrad()) { | 
| +    , fIsFlipped(static_cast<const SkTwoPointConicalGradient*>(args.fShader)->isFlippedGrad()) { | 
| this->initClassID<FocalOutside2PtConicalEffect>(); | 
| } | 
|  | 
| @@ -591,13 +579,9 @@ class FocalInside2PtConicalEffect : public GrGradientEffect { | 
| public: | 
| class GLSLFocalInside2PtConicalProcessor; | 
|  | 
| -    static sk_sp<GrFragmentProcessor> Make(GrContext* ctx, | 
| -                                           const SkTwoPointConicalGradient& shader, | 
| -                                           const SkMatrix& matrix, | 
| -                                           SkShader::TileMode tm, | 
| -                                           SkScalar focalX) { | 
| +    static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args, SkScalar focalX) { | 
| return sk_sp<GrFragmentProcessor>( | 
| -            new FocalInside2PtConicalEffect(ctx, shader, matrix, tm, focalX)); | 
| +            new FocalInside2PtConicalEffect(args, focalX)); | 
| } | 
|  | 
| virtual ~FocalInside2PtConicalEffect() {} | 
| @@ -621,12 +605,8 @@ private: | 
| this->fFocalX == s.fFocalX); | 
| } | 
|  | 
| -    FocalInside2PtConicalEffect(GrContext* ctx, | 
| -                                const SkTwoPointConicalGradient& shader, | 
| -                                const SkMatrix& matrix, | 
| -                                SkShader::TileMode tm, | 
| -                                SkScalar focalX) | 
| -        : INHERITED(ctx, shader, matrix, tm), fFocalX(focalX) { | 
| +    FocalInside2PtConicalEffect(const CreateArgs& args, SkScalar focalX) | 
| +        : INHERITED(args), fFocalX(focalX) { | 
| this->initClassID<FocalInside2PtConicalEffect>(); | 
| } | 
|  | 
| @@ -837,13 +817,9 @@ class CircleInside2PtConicalEffect : public GrGradientEffect { | 
| public: | 
| class GLSLCircleInside2PtConicalProcessor; | 
|  | 
| -    static sk_sp<GrFragmentProcessor> Make(GrContext* ctx, | 
| -                                           const SkTwoPointConicalGradient& shader, | 
| -                                           const SkMatrix& matrix, | 
| -                                           SkShader::TileMode tm, | 
| -                                           const CircleConicalInfo& info) { | 
| +    static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args, const CircleConicalInfo& info) { | 
| return sk_sp<GrFragmentProcessor>( | 
| -            new CircleInside2PtConicalEffect(ctx, shader, matrix, tm, info)); | 
| +            new CircleInside2PtConicalEffect(args, info)); | 
| } | 
|  | 
| virtual ~CircleInside2PtConicalEffect() {} | 
| @@ -871,12 +847,8 @@ private: | 
| this->fInfo.fC == s.fInfo.fC); | 
| } | 
|  | 
| -    CircleInside2PtConicalEffect(GrContext* ctx, | 
| -                                 const SkTwoPointConicalGradient& shader, | 
| -                                 const SkMatrix& matrix, | 
| -                                 SkShader::TileMode tm, | 
| -                                 const CircleConicalInfo& info) | 
| -        : INHERITED(ctx, shader, matrix, tm), fInfo(info) { | 
| +    CircleInside2PtConicalEffect(const CreateArgs& args, const CircleConicalInfo& info) | 
| +        : INHERITED(args), fInfo(info) { | 
| this->initClassID<CircleInside2PtConicalEffect>(); | 
| } | 
|  | 
| @@ -1060,13 +1032,9 @@ class CircleOutside2PtConicalEffect : public GrGradientEffect { | 
| public: | 
| class GLSLCircleOutside2PtConicalProcessor; | 
|  | 
| -    static sk_sp<GrFragmentProcessor> Make(GrContext* ctx, | 
| -                                           const SkTwoPointConicalGradient& shader, | 
| -                                           const SkMatrix& matrix, | 
| -                                           SkShader::TileMode tm, | 
| -                                           const CircleConicalInfo& info) { | 
| +    static sk_sp<GrFragmentProcessor> Make(const CreateArgs& args, const CircleConicalInfo& info) { | 
| return sk_sp<GrFragmentProcessor>( | 
| -            new CircleOutside2PtConicalEffect(ctx, shader, matrix, tm, info)); | 
| +            new CircleOutside2PtConicalEffect(args, info)); | 
| } | 
|  | 
| virtual ~CircleOutside2PtConicalEffect() {} | 
| @@ -1097,13 +1065,11 @@ private: | 
| this->fIsFlipped == s.fIsFlipped); | 
| } | 
|  | 
| -    CircleOutside2PtConicalEffect(GrContext* ctx, | 
| -                                  const SkTwoPointConicalGradient& shader, | 
| -                                  const SkMatrix& matrix, | 
| -                                  SkShader::TileMode tm, | 
| -                                  const CircleConicalInfo& info) | 
| -        : INHERITED(ctx, shader, matrix, tm), fInfo(info) { | 
| +    CircleOutside2PtConicalEffect(const CreateArgs& args, const CircleConicalInfo& info) | 
| +        : INHERITED(args), fInfo(info) { | 
| this->initClassID<CircleOutside2PtConicalEffect>(); | 
| +        const SkTwoPointConicalGradient& shader = | 
| +            *static_cast<const SkTwoPointConicalGradient*>(args.fShader); | 
| if (shader.getStartRadius() != shader.getEndRadius()) { | 
| fTLimit = shader.getStartRadius() / (shader.getStartRadius() - shader.getEndRadius()); | 
| } else { | 
| @@ -1322,32 +1288,35 @@ void CircleOutside2PtConicalEffect::GLSLCircleOutside2PtConicalProcessor::GenKey | 
|  | 
| ////////////////////////////////////////////////////////////////////////////// | 
|  | 
| -sk_sp<GrFragmentProcessor> Gr2PtConicalGradientEffect::Make(GrContext* ctx, | 
| -                                                            const SkTwoPointConicalGradient& shader, | 
| -                                                            SkShader::TileMode tm, | 
| -                                                            const SkMatrix* localMatrix) { | 
| +sk_sp<GrFragmentProcessor> Gr2PtConicalGradientEffect::Make( | 
| +                                                         const GrGradientEffect::CreateArgs& args) { | 
| +    const SkTwoPointConicalGradient& shader = | 
| +        *static_cast<const SkTwoPointConicalGradient*>(args.fShader); | 
| + | 
| SkMatrix matrix; | 
| if (!shader.getLocalMatrix().invert(&matrix)) { | 
| return nullptr; | 
| } | 
| -    if (localMatrix) { | 
| +    if (args.fMatrix) { | 
| SkMatrix inv; | 
| -        if (!localMatrix->invert(&inv)) { | 
| +        if (!args.fMatrix->invert(&inv)) { | 
| return nullptr; | 
| } | 
| matrix.postConcat(inv); | 
| } | 
|  | 
| +    GrGradientEffect::CreateArgs newArgs(args.fContext, args.fShader, &matrix, args.fTileMode); | 
| + | 
| if (shader.getStartRadius() < kErrorTol) { | 
| SkScalar focalX; | 
| ConicalType type = set_matrix_focal_conical(shader, &matrix, &focalX); | 
| if (type == kInside_ConicalType) { | 
| -            return FocalInside2PtConicalEffect::Make(ctx, shader, matrix, tm, focalX); | 
| +            return FocalInside2PtConicalEffect::Make(newArgs, focalX); | 
| } else if(type == kEdge_ConicalType) { | 
| set_matrix_edge_conical(shader, &matrix); | 
| -            return Edge2PtConicalEffect::Make(ctx, shader, matrix, tm); | 
| +            return Edge2PtConicalEffect::Make(newArgs); | 
| } else { | 
| -            return FocalOutside2PtConicalEffect::Make(ctx, shader, matrix, tm, focalX); | 
| +            return FocalOutside2PtConicalEffect::Make(newArgs, focalX); | 
| } | 
| } | 
|  | 
| @@ -1355,12 +1324,12 @@ sk_sp<GrFragmentProcessor> Gr2PtConicalGradientEffect::Make(GrContext* ctx, | 
| ConicalType type = set_matrix_circle_conical(shader, &matrix, &info); | 
|  | 
| if (type == kInside_ConicalType) { | 
| -        return CircleInside2PtConicalEffect::Make(ctx, shader, matrix, tm, info); | 
| +        return CircleInside2PtConicalEffect::Make(newArgs, info); | 
| } else if (type == kEdge_ConicalType) { | 
| set_matrix_edge_conical(shader, &matrix); | 
| -        return Edge2PtConicalEffect::Make(ctx, shader, matrix, tm); | 
| +        return Edge2PtConicalEffect::Make(newArgs); | 
| } else { | 
| -        return CircleOutside2PtConicalEffect::Make(ctx, shader, matrix, tm, info); | 
| +        return CircleOutside2PtConicalEffect::Make(newArgs, info); | 
| } | 
| } | 
|  | 
|  |