diff --git a/include/utils/SkMatrix44.h b/include/utils/SkMatrix44.h
index 97faf78..a046a07 100644
--- a/include/utils/SkMatrix44.h
+++ b/include/utils/SkMatrix44.h
@@ -119,6 +119,13 @@
     SkMScalar get(int row, int col) const;
     void set(int row, int col, const SkMScalar& value);
 
+    double getDouble(int row, int col) const {
+        return SkMScalarToDouble(this->get(row, col));
+    }
+    void setDouble(int row, int col, double value) {
+        this->set(row, col, SkDoubleToMScalar(value));
+    }
+
     void asColMajorf(float[]) const;
     void asColMajord(double[]) const;
     void asRowMajorf(float[]) const;
@@ -183,6 +190,9 @@
      */
     bool invert(SkMatrix44* inverse) const;
 
+    /** Transpose this matrix in place. */
+    void transpose();
+
     /** Apply the matrix to the src vector, returning the new vector in dst.
         It is legal for src and dst to point to the same memory.
      */
diff --git a/src/utils/SkMatrix44.cpp b/src/utils/SkMatrix44.cpp
index abef0b3..0e7ad16 100644
--- a/src/utils/SkMatrix44.cpp
+++ b/src/utils/SkMatrix44.cpp
@@ -323,6 +323,17 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
+void SkMatrix44::transpose() {
+    SkTSwap(fMat[0][1], fMat[1][0]);
+    SkTSwap(fMat[0][2], fMat[2][0]);
+    SkTSwap(fMat[0][3], fMat[3][0]);
+    SkTSwap(fMat[1][2], fMat[2][1]);
+    SkTSwap(fMat[1][3], fMat[3][1]);
+    SkTSwap(fMat[2][3], fMat[3][2]);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
 void SkMatrix44::mapScalars(const SkScalar src[4], SkScalar dst[4]) const {
     SkScalar result[4];
     for (int i = 0; i < 4; i++) {
diff --git a/tests/Matrix44Test.cpp b/tests/Matrix44Test.cpp
index af10e00..782b51e 100644
--- a/tests/Matrix44Test.cpp
+++ b/tests/Matrix44Test.cpp
@@ -147,6 +147,35 @@
   REPORTER_ASSERT(reporter, nearly_equal_double(0, e.determinant()));
 }
 
+static void test_transpose(skiatest::Reporter* reporter) {
+  SkMatrix44 a;
+  SkMatrix44 b;
+
+  int i = 0;
+  for (int row = 0; row < 4; ++row) {
+    for (int col = 0; col < 4; ++col) {
+      a.setDouble(row, col, i);
+      b.setDouble(col, row, i++);
+    }
+  }
+
+  a.transpose();
+  REPORTER_ASSERT(reporter, nearly_equal(a, b));
+}
+
+static void test_get_set_double(skiatest::Reporter* reporter) {
+  SkMatrix44 a;
+  for (int row = 0; row < 4; ++row) {
+    for (int col = 0; col < 4; ++col) {
+      a.setDouble(row, col, 3.141592653589793);
+      REPORTER_ASSERT(reporter, nearly_equal_double(3.141592653589793,
+                                                    a.getDouble(row, col)));
+      a.setDouble(row, col, 0);
+      REPORTER_ASSERT(reporter, nearly_equal_double(0, a.getDouble(row, col)));
+    }
+  }
+}
+
 static void TestMatrix44(skiatest::Reporter* reporter) {
 #ifdef SK_SCALAR_IS_FLOAT
     SkMatrix44 mat, inverse, iden1, iden2, rot;
@@ -217,6 +246,8 @@
     }
 
     test_determinant(reporter);
+    test_transpose(reporter);
+    test_get_set_double(reporter);
 #endif
 }
 
