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; }