| Index: src/gpu/glsl/GrGLSLUtil.cpp
 | 
| diff --git a/src/gpu/glsl/GrGLSLUtil.cpp b/src/gpu/glsl/GrGLSLUtil.cpp
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..5a333244b29526af6c7a33811d9d2afa0211d500
 | 
| --- /dev/null
 | 
| +++ b/src/gpu/glsl/GrGLSLUtil.cpp
 | 
| @@ -0,0 +1,52 @@
 | 
| +/*
 | 
| +* Copyright 2015 Google Inc.
 | 
| +*
 | 
| +* Use of this source code is governed by a BSD-style license that can be
 | 
| +* found in the LICENSE file.
 | 
| +*/
 | 
| +
 | 
| +#include "GrGLSLUtil.h"
 | 
| +#include "SkMatrix.h"
 | 
| +
 | 
| +template<> void GrGLSLGetMatrix<3>(float* dest, const SkMatrix& src) {
 | 
| +    // Col 0
 | 
| +    dest[0] = SkScalarToFloat(src[SkMatrix::kMScaleX]);
 | 
| +    dest[1] = SkScalarToFloat(src[SkMatrix::kMSkewY]);
 | 
| +    dest[2] = SkScalarToFloat(src[SkMatrix::kMPersp0]);
 | 
| +
 | 
| +    // Col 1
 | 
| +    dest[3] = SkScalarToFloat(src[SkMatrix::kMSkewX]);
 | 
| +    dest[4] = SkScalarToFloat(src[SkMatrix::kMScaleY]);
 | 
| +    dest[5] = SkScalarToFloat(src[SkMatrix::kMPersp1]);
 | 
| +
 | 
| +    // Col 2
 | 
| +    dest[6] = SkScalarToFloat(src[SkMatrix::kMTransX]);
 | 
| +    dest[7] = SkScalarToFloat(src[SkMatrix::kMTransY]);
 | 
| +    dest[8] = SkScalarToFloat(src[SkMatrix::kMPersp2]);
 | 
| +}
 | 
| +
 | 
| +template<> void GrGLSLGetMatrix<4>(float* dest, const SkMatrix& src) {
 | 
| +    // Col 0
 | 
| +    dest[0] = SkScalarToFloat(src[SkMatrix::kMScaleX]);
 | 
| +    dest[1] = SkScalarToFloat(src[SkMatrix::kMSkewY]);
 | 
| +    dest[2] = 0;
 | 
| +    dest[3] = SkScalarToFloat(src[SkMatrix::kMPersp0]);
 | 
| +
 | 
| +    // Col 1
 | 
| +    dest[4] = SkScalarToFloat(src[SkMatrix::kMSkewX]);
 | 
| +    dest[5] = SkScalarToFloat(src[SkMatrix::kMScaleY]);
 | 
| +    dest[6] = 0;
 | 
| +    dest[7] = SkScalarToFloat(src[SkMatrix::kMPersp1]);
 | 
| +
 | 
| +    // Col 2
 | 
| +    dest[8] = 0;
 | 
| +    dest[9] = 0;
 | 
| +    dest[10] = 1;
 | 
| +    dest[11] = 0;
 | 
| +
 | 
| +    // Col 3
 | 
| +    dest[12] = SkScalarToFloat(src[SkMatrix::kMTransX]);
 | 
| +    dest[13] = SkScalarToFloat(src[SkMatrix::kMTransY]);
 | 
| +    dest[14] = 0;
 | 
| +    dest[15] = SkScalarToFloat(src[SkMatrix::kMPersp2]);
 | 
| +}
 | 
| 
 |