Remove use of SkMatrixProvider in SkShaderBase::appendRootStages
Towards getting rid of SkMatrixProvider in favor of just using CTM
SkMatrices.
Bug: skia:14076
Change-Id: I6b6e0c11155ca72b6e4e7fe84e0edbb05dee34d9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/635083
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index 9fb8e58..2b1de56 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -763,7 +763,7 @@
}
}
if (auto blitter = SkCreateRasterPipelineBlitter(
- device, *paint, matrixProvider, alloc, clipShader, props)) {
+ device, *paint, matrixProvider.localToDevice(), alloc, clipShader, props)) {
return blitter;
}
if (!gUseSkVMBlitter) {
diff --git a/src/core/SkCoreBlitters.h b/src/core/SkCoreBlitters.h
index 75d3d27..63b4612 100644
--- a/src/core/SkCoreBlitters.h
+++ b/src/core/SkCoreBlitters.h
@@ -145,9 +145,12 @@
///////////////////////////////////////////////////////////////////////////////////////////////////
-SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap&, const SkPaint&,
- const SkMatrixProvider& matrixProvider, SkArenaAlloc*,
- sk_sp<SkShader> clipShader, const SkSurfaceProps& props);
+SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap&,
+ const SkPaint&,
+ const SkMatrix& ctm,
+ SkArenaAlloc*,
+ sk_sp<SkShader> clipShader,
+ const SkSurfaceProps& props);
// Use this if you've pre-baked a shader pipeline, including modulating with paint alpha.
SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap&, const SkPaint&,
const SkRasterPipeline& shaderPipeline,
diff --git a/src/core/SkDraw_atlas.cpp b/src/core/SkDraw_atlas.cpp
index a6ff804..f5410c8 100644
--- a/src/core/SkDraw_atlas.cpp
+++ b/src/core/SkDraw_atlas.cpp
@@ -117,7 +117,7 @@
SkStageRec rec = {&pipeline, &alloc, fDst.colorType(), fDst.colorSpace(), p, props};
// We pass an identity matrix here rather than the CTM. The CTM gets folded into the
// per-triangle matrix.
- if (!as_SB(transformShader)->appendRootStages(rec, SkMatrixProvider{SkMatrix::I()})) {
+ if (!as_SB(transformShader)->appendRootStages(rec, SkMatrix::I())) {
return false;
}
diff --git a/src/core/SkDraw_vertices.cpp b/src/core/SkDraw_vertices.cpp
index c8d0cb9..da59139 100644
--- a/src/core/SkDraw_vertices.cpp
+++ b/src/core/SkDraw_vertices.cpp
@@ -412,8 +412,12 @@
VertState::Proc vertProc = state.chooseProc(info.mode());
SkSurfaceProps props = SkSurfacePropsCopyOrDefault(fProps);
- auto blitter = SkCreateRasterPipelineBlitter(fDst, finalPaint, *matrixProvider,
- outerAlloc, fRC->clipShader(), props);
+ auto blitter = SkCreateRasterPipelineBlitter(fDst,
+ finalPaint,
+ matrixProvider->localToDevice(),
+ outerAlloc,
+ fRC->clipShader(),
+ props);
if (!blitter) {
return false;
}
diff --git a/src/core/SkRasterPipelineBlitter.cpp b/src/core/SkRasterPipelineBlitter.cpp
index a4975a1..6d73f60 100644
--- a/src/core/SkRasterPipelineBlitter.cpp
+++ b/src/core/SkRasterPipelineBlitter.cpp
@@ -92,7 +92,7 @@
SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap& dst,
const SkPaint& paint,
- const SkMatrixProvider& matrixProvider,
+ const SkMatrix& ctm,
SkArenaAlloc* alloc,
sk_sp<SkShader> clipShader,
const SkSurfaceProps& props) {
@@ -123,8 +123,7 @@
bool is_opaque = shader->isOpaque() && paintColor.fA == 1.0f;
bool is_constant = shader->isConstant();
- if (shader->appendRootStages({&shaderPipeline, alloc, dstCT, dstCS, paint, props},
- matrixProvider)) {
+ if (shader->appendRootStages({&shaderPipeline, alloc, dstCT, dstCS, paint, props}, ctm)) {
if (paintColor.fA != 1.0f) {
shaderPipeline.append(SkRasterPipelineOp::scale_1_float,
alloc->make<float>(paintColor.fA));
@@ -176,7 +175,7 @@
SkColorSpace* clipCS = nullptr;
SkSurfaceProps props{}; // default OK; clipShader doesn't render text
SkStageRec rec = {clipP, alloc, clipCT, clipCS, clipPaint, props};
- if (as_SB(clipShader)->appendRootStages(rec, SkMatrixProvider{SkMatrix::I()})) {
+ if (as_SB(clipShader)->appendRootStages(rec, SkMatrix::I())) {
struct Storage {
// large enough for highp (float) or lowp(U16)
float fA[SkRasterPipeline_kMaxStride];
diff --git a/src/shaders/SkLocalMatrixShader.cpp b/src/shaders/SkLocalMatrixShader.cpp
index 8c77026..2ed34fb 100644
--- a/src/shaders/SkLocalMatrixShader.cpp
+++ b/src/shaders/SkLocalMatrixShader.cpp
@@ -163,7 +163,7 @@
void flatten(SkWriteBuffer&) const override { SkASSERT(false); }
bool appendStages(const SkStageRec& rec, const MatrixRec&) const override {
- return as_SB(fProxyShader)->appendRootStages(rec, SkMatrixProvider(fCTM));
+ return as_SB(fProxyShader)->appendRootStages(rec, fCTM);
}
skvm::Color onProgram(skvm::Builder* p,
diff --git a/src/shaders/SkShader.cpp b/src/shaders/SkShader.cpp
index 541cb46..1fdc8cc 100644
--- a/src/shaders/SkShader.cpp
+++ b/src/shaders/SkShader.cpp
@@ -34,10 +34,7 @@
SkShaderBase::~SkShaderBase() = default;
-SkShaderBase::MatrixRec::MatrixRec(const SkMatrixProvider& mp)
- : fPendingMatrix(mp.localToDevice())
- , fTotalMatrix(mp.localToDevice())
- , fTotalMatrixIsValid(mp.localToDeviceHitsPixelCenters()) {}
+SkShaderBase::MatrixRec::MatrixRec(const SkMatrix& m) : fPendingMatrix(m), fTotalMatrix(m) {}
std::optional<SkShaderBase::MatrixRec>
SkShaderBase::MatrixRec::apply(const SkStageRec& rec, const SkMatrix& postInv) const {
@@ -156,8 +153,8 @@
tmx, tmy, sampling, lm);
}
-bool SkShaderBase::appendRootStages(const SkStageRec& rec, const SkMatrixProvider& mp) const {
- return this->appendStages(rec, MatrixRec(mp));
+bool SkShaderBase::appendRootStages(const SkStageRec& rec, const SkMatrix& ctm) const {
+ return this->appendStages(rec, MatrixRec(ctm));
}
bool SkShaderBase::appendStages(const SkStageRec& rec, const MatrixRec& mRec) const {
diff --git a/src/shaders/SkShaderBase.h b/src/shaders/SkShaderBase.h
index 5094e26..5e443f7 100644
--- a/src/shaders/SkShaderBase.h
+++ b/src/shaders/SkShaderBase.h
@@ -199,7 +199,7 @@
public:
MatrixRec() = default;
- MatrixRec(const SkMatrixProvider&);
+ MatrixRec(const SkMatrix&);
/**
* Returns a new MatrixRec that represents the existing total and pending matrix
@@ -300,7 +300,7 @@
* not yet been seeded.
*/
SK_WARN_UNUSED_RESULT
- bool appendRootStages(const SkStageRec& rec, const SkMatrixProvider&) const;
+ bool appendRootStages(const SkStageRec& rec, const SkMatrix& ctm) const;
/**
* Adds stages to implement this shader. To ensure that the correct input coords are present