Gradient stages cleanup

Hoist the matrix setup into SkGradientShaderBase.

Drop the bool return for adjustMatrixAndAppendStages(), and rename to
appendGradientStages().

Change-Id: Iad412f638f86223e5af46a7d3dea6f768f52bcad
Reviewed-on: https://skia-review.googlesource.com/26427
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
diff --git a/src/shaders/gradients/SkGradientShader.cpp b/src/shaders/gradients/SkGradientShader.cpp
index c9a69e2..e2989e6 100644
--- a/src/shaders/gradients/SkGradientShader.cpp
+++ b/src/shaders/gradients/SkGradientShader.cpp
@@ -374,16 +374,13 @@
     if (!this->computeTotalInverse(ctm, localM, &matrix)) {
         return false;
     }
+    matrix.postConcat(fPtsToUnit);
 
-    SkRasterPipeline_<256> tPipeline;
     SkRasterPipeline_<256> postPipeline;
-    if (!this->adjustMatrixAndAppendStages(alloc, &matrix, &tPipeline, &postPipeline)) {
-        return false;
-    }
 
     p->append(SkRasterPipeline::seed_shader);
     p->append_matrix(alloc, matrix);
-    p->extend(tPipeline);
+    this->appendGradientStages(alloc, p, &postPipeline);
 
     switch(fTileMode) {
         case kMirror_TileMode: p->append(SkRasterPipeline::mirror_x_1); break;
diff --git a/src/shaders/gradients/SkGradientShaderPriv.h b/src/shaders/gradients/SkGradientShaderPriv.h
index 07ba7e3..b6da7b9 100644
--- a/src/shaders/gradients/SkGradientShaderPriv.h
+++ b/src/shaders/gradients/SkGradientShaderPriv.h
@@ -233,10 +233,8 @@
                         const SkMatrix& ctm, const SkPaint& paint,
                         const SkMatrix* localM) const override;
 
-    virtual bool adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
-                                             SkMatrix* matrix,
-                                             SkRasterPipeline* tPipeline,
-                                             SkRasterPipeline* postPipeline) const = 0;
+    virtual void appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline* tPipeline,
+                                      SkRasterPipeline* postPipeline) const = 0;
 
     template <typename T, typename... Args>
     static Context* CheckedMakeContext(SkArenaAlloc* alloc, Args&&... args) {
diff --git a/src/shaders/gradients/SkLinearGradient.cpp b/src/shaders/gradients/SkLinearGradient.cpp
index 605ae54..32b2ba5 100644
--- a/src/shaders/gradients/SkLinearGradient.cpp
+++ b/src/shaders/gradients/SkLinearGradient.cpp
@@ -79,12 +79,9 @@
                            : nullptr;
 }
 
-bool SkLinearGradient::adjustMatrixAndAppendStages(SkArenaAlloc*,
-                                                   SkMatrix* matrix,
-                                                   SkRasterPipeline*,
-                                                   SkRasterPipeline*) const {
-    matrix->postConcat(fPtsToUnit);
-    return true;
+void SkLinearGradient::appendGradientStages(SkArenaAlloc*, SkRasterPipeline*,
+                                            SkRasterPipeline*) const {
+    // No extra stage needed for linear gradients.
 }
 
 sk_sp<SkShader> SkLinearGradient::onMakeColorSpace(SkColorSpaceXformer* xformer) const {
diff --git a/src/shaders/gradients/SkLinearGradient.h b/src/shaders/gradients/SkLinearGradient.h
index abc3e0d..c0ba7f4 100644
--- a/src/shaders/gradients/SkLinearGradient.h
+++ b/src/shaders/gradients/SkLinearGradient.h
@@ -64,10 +64,8 @@
     Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override;
     Context* onMakeBurstPipelineContext(const ContextRec&, SkArenaAlloc*) const override;
 
-    bool adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
-                                     SkMatrix* matrix,
-                                     SkRasterPipeline* tPipeline,
-                                     SkRasterPipeline* postPipeline) const final;
+    void appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline* tPipeline,
+                              SkRasterPipeline* postPipeline) const final;
 
 
     sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override;
diff --git a/src/shaders/gradients/SkRadialGradient.cpp b/src/shaders/gradients/SkRadialGradient.cpp
index fc48482..22977f5 100644
--- a/src/shaders/gradients/SkRadialGradient.cpp
+++ b/src/shaders/gradients/SkRadialGradient.cpp
@@ -377,14 +377,9 @@
 #endif
 }
 
-bool SkRadialGradient::adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
-                                 SkMatrix* matrix,
-                                 SkRasterPipeline* p,
-                                 SkRasterPipeline*) const {
-    matrix->postConcat(fPtsToUnit);
-
+void SkRadialGradient::appendGradientStages(SkArenaAlloc*, SkRasterPipeline* p,
+                                            SkRasterPipeline*) const {
     p->append(SkRasterPipeline::xy_to_radius);
-    return true;
 }
 
 #ifndef SK_IGNORE_TO_STRING
diff --git a/src/shaders/gradients/SkRadialGradient.h b/src/shaders/gradients/SkRadialGradient.h
index f85bc8e..83680ef 100644
--- a/src/shaders/gradients/SkRadialGradient.h
+++ b/src/shaders/gradients/SkRadialGradient.h
@@ -38,10 +38,8 @@
     Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override;
     sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override;
     
-    bool adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
-                                     SkMatrix* matrix,
-                                     SkRasterPipeline* tPipeline,
-                                     SkRasterPipeline* postPipeline) const override;
+    void appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline* tPipeline,
+                              SkRasterPipeline* postPipeline) const override;
 
     bool onIsRasterPipelineOnly() const override;
 
diff --git a/src/shaders/gradients/SkSweepGradient.cpp b/src/shaders/gradients/SkSweepGradient.cpp
index 8a2e530..e70066a 100644
--- a/src/shaders/gradients/SkSweepGradient.cpp
+++ b/src/shaders/gradients/SkSweepGradient.cpp
@@ -224,14 +224,9 @@
     str->append(")");
 }
 
-bool SkSweepGradient::adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
-                                                  SkMatrix* matrix,
-                                                  SkRasterPipeline* p,
-                                                  SkRasterPipeline*) const {
-    matrix->postConcat(fPtsToUnit);
+void SkSweepGradient::appendGradientStages(SkArenaAlloc*, SkRasterPipeline* p,
+                                           SkRasterPipeline*) const {
     p->append(SkRasterPipeline::xy_to_unit_angle);
-
-    return true;
 }
 
 #endif
diff --git a/src/shaders/gradients/SkSweepGradient.h b/src/shaders/gradients/SkSweepGradient.h
index 00fcc97..647b454 100644
--- a/src/shaders/gradients/SkSweepGradient.h
+++ b/src/shaders/gradients/SkSweepGradient.h
@@ -27,10 +27,8 @@
     void flatten(SkWriteBuffer& buffer) const override;
     sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override;
 
-    bool adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
-                                     SkMatrix* matrix,
-                                     SkRasterPipeline* tPipeline,
-                                     SkRasterPipeline* postPipeline) const override;
+    void appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline* tPipeline,
+                              SkRasterPipeline* postPipeline) const override;
 
     bool onIsRasterPipelineOnly() const override { return true; }
 
diff --git a/src/shaders/gradients/SkTwoPointConicalGradient.cpp b/src/shaders/gradients/SkTwoPointConicalGradient.cpp
index 6f821a5..0bee74f 100644
--- a/src/shaders/gradients/SkTwoPointConicalGradient.cpp
+++ b/src/shaders/gradients/SkTwoPointConicalGradient.cpp
@@ -202,12 +202,8 @@
 }
 #endif
 
-bool SkTwoPointConicalGradient::adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
-                                                            SkMatrix* matrix,
-                                                            SkRasterPipeline* p,
-                                                            SkRasterPipeline* postPipeline) const {
-    matrix->postConcat(fPtsToUnit);
-
+void SkTwoPointConicalGradient::appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline* p,
+                                                     SkRasterPipeline* postPipeline) const {
     const auto dRadius = fRadius2 - fRadius1;
     SkASSERT(dRadius >= 0);
 
@@ -220,8 +216,7 @@
 
         p->append_matrix(alloc, SkMatrix::Concat(SkMatrix::MakeTrans(bias, 0),
                                                  SkMatrix::MakeScale(scale, 1)));
-
-        return true;
+        return;
     }
 
     const auto dCenter = (fCenter1 - fCenter2).length();
@@ -267,6 +262,4 @@
         p->append(SkRasterPipeline::mask_2pt_conical_degenerates, ctx);
         postPipeline->append(SkRasterPipeline::apply_vector_mask, &ctx->fMask);
     }
-
-    return true;
 }
diff --git a/src/shaders/gradients/SkTwoPointConicalGradient.h b/src/shaders/gradients/SkTwoPointConicalGradient.h
index 8b11963..81b3b20 100644
--- a/src/shaders/gradients/SkTwoPointConicalGradient.h
+++ b/src/shaders/gradients/SkTwoPointConicalGradient.h
@@ -38,10 +38,8 @@
     void flatten(SkWriteBuffer& buffer) const override;
     sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override;
 
-    bool adjustMatrixAndAppendStages(SkArenaAlloc* alloc,
-                                     SkMatrix* matrix,
-                                     SkRasterPipeline* tPipeline,
-                                     SkRasterPipeline* postPipeline) const override;
+    void appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline* tPipeline,
+                              SkRasterPipeline* postPipeline) const override;
 
     bool onIsRasterPipelineOnly() const override { return true; }