This CL wires up the backend portion necessary for sending transformed coords via vertex attributes.

BUG=skia:

Review URL: https://codereview.chromium.org/1243583002
diff --git a/src/gpu/gl/GrGLGeometryProcessor.cpp b/src/gpu/gl/GrGLGeometryProcessor.cpp
index dc4518f..4026c72 100644
--- a/src/gpu/gl/GrGLGeometryProcessor.cpp
+++ b/src/gpu/gl/GrGLGeometryProcessor.cpp
@@ -89,6 +89,35 @@
     }
 }
 
+void GrGLGeometryProcessor::emitTransforms(GrGLGPBuilder* pb,
+                                           const char* localCoords,
+                                           const TransformsIn& tin,
+                                           TransformsOut* tout) {
+    GrGLVertexBuilder* vb = pb->getVertexShaderBuilder();
+    tout->push_back_n(tin.count());
+    for (int i = 0; i < tin.count(); i++) {
+        const ProcCoords& coordTransforms = tin[i];
+        for (int t = 0; t < coordTransforms.count(); t++) {
+            GrSLType varyingType = kVec2f_GrSLType;
+
+            // Device coords aren't supported
+            SkASSERT(kDevice_GrCoordSet != coordTransforms[t]->sourceCoords());
+            GrSLPrecision precision = coordTransforms[t]->precision();
+
+            SkString strVaryingName("MatrixCoord");
+            strVaryingName.appendf("_%i_%i", i, t);
+
+            GrGLVertToFrag v(varyingType);
+            pb->addVarying(strVaryingName.c_str(), &v, precision);
+            vb->codeAppendf("%s = %s;", v.vsOut(), localCoords);
+
+            SkNEW_APPEND_TO_TARRAY(&(*tout)[i],
+                                   GrGLProcessor::TransformedCoords,
+                                   (SkString(v.fsIn()), varyingType));
+        }
+    }
+}
+
 void GrGLGeometryProcessor::setupPosition(GrGLGPBuilder* pb,
                                           GrGPArgs* gpArgs,
                                           const char* posName) {