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
