move homogenous with stride to matrixpriv

this appears to be needed only by Skia
internally, so move it out of the public
includes.

R=bsalomon@google.com
Bug: skia:6898
Change-Id: Iebdda8f2c9a8fd953dd44bac9b74158d7491c21a
Reviewed-on: https://skia-review.googlesource.com/85961
Commit-Queue: Cary Clark <caryclark@skia.org>
Commit-Queue: Cary Clark <caryclark@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
diff --git a/include/core/SkMatrix.h b/include/core/SkMatrix.h
index b527ab5..e882328 100644
--- a/include/core/SkMatrix.h
+++ b/include/core/SkMatrix.h
@@ -1337,9 +1337,6 @@
         @param count  items in SkPoint3 array to transform
     */
     void mapHomogeneousPoints(SkPoint3 dst[], const SkPoint3 src[], int count) const;
-    /** Same as above but with a variable offset between successive points. */
-    void mapHomogeneousPointsWithStride(SkPoint3 dst[], const SkPoint3 src[], size_t stride,
-                                        int count) const;
 
     /** Maps SkPoint (x, y) to result. SkPoint is mapped by multiplying by SkMatrix. Given:
 
diff --git a/src/core/SkMatrix.cpp b/src/core/SkMatrix.cpp
index 4851aea..23b4652 100644
--- a/src/core/SkMatrix.cpp
+++ b/src/core/SkMatrix.cpp
@@ -6,7 +6,7 @@
  */
 
 #include "SkFloatBits.h"
-#include "SkMatrix.h"
+#include "SkMatrixPriv.h"
 #include "SkNx.h"
 #include "SkPaint.h"
 #include "SkPoint3.h"
@@ -1037,14 +1037,15 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void SkMatrix::mapHomogeneousPointsWithStride(SkPoint3 dst[], const SkPoint3 src[], size_t stride,
-                                              int count) const {
+void SkMatrixPriv::MapHomogeneousPointsWithStride(const SkMatrix& mx, SkPoint3 dst[],
+                                                  const SkPoint3 src[], size_t stride,
+                                                  int count) {
     SkASSERT((dst && src && count > 0) || 0 == count);
     // no partial overlap
     SkASSERT(src == dst || &dst[count] <= &src[0] || &src[count] <= &dst[0]);
 
     if (count > 0) {
-        if (this->isIdentity()) {
+        if (mx.isIdentity()) {
             if (src != dst) {
                 if (stride == sizeof(SkPoint3)) {
                     memcpy(dst, src, count * sizeof(SkPoint3));
@@ -1064,10 +1065,11 @@
             SkScalar sy = src->fY;
             SkScalar sw = src->fZ;
             src = reinterpret_cast<const SkPoint3*>(reinterpret_cast<const char*>(src) + stride);
-
-            SkScalar x = sdot(sx, fMat[kMScaleX], sy, fMat[kMSkewX],  sw, fMat[kMTransX]);
-            SkScalar y = sdot(sx, fMat[kMSkewY],  sy, fMat[kMScaleY], sw, fMat[kMTransY]);
-            SkScalar w = sdot(sx, fMat[kMPersp0], sy, fMat[kMPersp1], sw, fMat[kMPersp2]);
+            const SkScalar* mat = mx.fMat;
+            typedef SkMatrix M;
+            SkScalar x = sdot(sx, mat[M::kMScaleX], sy, mat[M::kMSkewX],  sw, mat[M::kMTransX]);
+            SkScalar y = sdot(sx, mat[M::kMSkewY],  sy, mat[M::kMScaleY], sw, mat[M::kMTransY]);
+            SkScalar w = sdot(sx, mat[M::kMPersp0], sy, mat[M::kMPersp1], sw, mat[M::kMPersp2]);
 
             dst->set(x, y, w);
             dst = reinterpret_cast<SkPoint3*>(reinterpret_cast<char*>(dst) + stride);
@@ -1076,7 +1078,7 @@
 }
 
 void SkMatrix::mapHomogeneousPoints(SkPoint3 dst[], const SkPoint3 src[], int count) const {
-    this->mapHomogeneousPointsWithStride(dst, src, sizeof(SkPoint3), count);
+    SkMatrixPriv::MapHomogeneousPointsWithStride(*this, dst, src, sizeof(SkPoint3), count);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/SkMatrixPriv.h b/src/core/SkMatrixPriv.h
index 8b437c6..166981a 100644
--- a/src/core/SkMatrixPriv.h
+++ b/src/core/SkMatrixPriv.h
@@ -92,6 +92,9 @@
         }
     }
 
+    static void MapHomogeneousPointsWithStride(const SkMatrix& mx, SkPoint3 dst[],
+                                               const SkPoint3 src[], size_t stride, int count);
+
     static void SetMappedRectTriStrip(const SkMatrix& mx, const SkRect& rect, SkPoint quad[4]) {
         SkMatrix::TypeMask tm = mx.getType();
         SkScalar l = rect.fLeft;
diff --git a/src/gpu/ops/GrAtlasTextOp.cpp b/src/gpu/ops/GrAtlasTextOp.cpp
index d71cd92..c3698b9 100644
--- a/src/gpu/ops/GrAtlasTextOp.cpp
+++ b/src/gpu/ops/GrAtlasTextOp.cpp
@@ -11,6 +11,7 @@
 #include "GrResourceProvider.h"
 #include "SkGlyphCache.h"
 #include "SkMathPriv.h"
+#include "SkMatrixPriv.h"
 #include "SkPoint3.h"
 #include "effects/GrBitmapTextGeoProc.h"
 #include "effects/GrDistanceFieldGeoProc.h"
@@ -281,7 +282,7 @@
                 // arbitrary transformations would be complicated and accumulate error.
                 if (args.fViewMatrix.hasPerspective()) {
                     auto* pos = reinterpret_cast<SkPoint3*>(currVertex);
-                    args.fViewMatrix.mapHomogeneousPointsWithStride(
+                    SkMatrixPriv::MapHomogeneousPointsWithStride(args.fViewMatrix,
                             pos, pos, vertexStride, result.fGlyphsRegenerated * kVerticesPerGlyph);
                 } else {
                     auto* pos = reinterpret_cast<SkPoint*>(currVertex);