SkSL sample() now permits specification of coordinates
Bug: skia:
Change-Id: I16073008ac852f1864bd1d2bd38087a5b661d05a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/232581
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/src/gpu/glsl/GrGLSLGeometryProcessor.cpp b/src/gpu/glsl/GrGLSLGeometryProcessor.cpp
index af9bd5c..d99239e 100644
--- a/src/gpu/glsl/GrGLSLGeometryProcessor.cpp
+++ b/src/gpu/glsl/GrGLSLGeometryProcessor.cpp
@@ -84,15 +84,18 @@
SkString strVaryingName;
strVaryingName.printf("TransformedCoords_%d", i);
GrGLSLVarying v(varyingType);
- varyingHandler->addVarying(strVaryingName.c_str(), &v);
+ if (coordTransform->computeInVertexShader()) {
+ varyingHandler->addVarying(strVaryingName.c_str(), &v);
- handler->specifyCoordsForCurrCoordTransform(SkString(v.fsIn()), varyingType);
-
- if (kFloat2_GrSLType == varyingType) {
- vb->codeAppendf("%s = (%s * %s).xy;", v.vsOut(), uniName, localCoords.c_str());
- } else {
- vb->codeAppendf("%s = %s * %s;", v.vsOut(), uniName, localCoords.c_str());
+ if (kFloat2_GrSLType == varyingType) {
+ vb->codeAppendf("%s = (%s * %s).xy;", v.vsOut(), uniName, localCoords.c_str());
+ } else {
+ vb->codeAppendf("%s = %s * %s;", v.vsOut(), uniName, localCoords.c_str());
+ }
}
+ handler->specifyCoordsForCurrCoordTransform(SkString(uniName),
+ fInstalledTransforms.back().fHandle,
+ GrShaderVar(SkString(v.fsIn()), varyingType));
++i;
}
}