Fixed sampling non-SkSL FPs with coordinates
This fixes an issue where fragment processors which were not written
in pure SkSL did not interact properly with coordinate overrides.
Change-Id: I960173986fd8d6be7322f55ab0d81a533b6b89e5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252916
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.cpp b/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.cpp
index 506cedb..48be12d 100644
--- a/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.cpp
+++ b/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.cpp
@@ -51,8 +51,7 @@
"color.w = %s;\n}\n%s = color;\n",
args.fInputColor,
fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]),
- _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str()
- : "_coords",
+ sk_TransformedCoords2D_0.c_str(),
fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str(),
args.fUniformHandler->getUniformCStr(outerThresholdVar),
args.fUniformHandler->getUniformCStr(outerThresholdVar),
diff --git a/src/gpu/effects/generated/GrMagnifierEffect.cpp b/src/gpu/effects/generated/GrMagnifierEffect.cpp
index 4f7a2ea..722423a 100644
--- a/src/gpu/effects/generated/GrMagnifierEffect.cpp
+++ b/src/gpu/effects/generated/GrMagnifierEffect.cpp
@@ -57,8 +57,7 @@
"- delta;\n float dist = length(delta);\n dist = max(2.0 - dist, 0.0);\n "
"weight = min(dist * dist, 1.0);\n} else {\n float2 delta_squared = delta * "
"delta;\n weight = min(min(delta_squared.x, delta_square",
- _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str()
- : "_coords",
+ sk_TransformedCoords2D_0.c_str(),
args.fUniformHandler->getUniformCStr(offsetVar),
args.fUniformHandler->getUniformCStr(xInvZoomVar),
args.fUniformHandler->getUniformCStr(yInvZoomVar),
diff --git a/src/gpu/effects/generated/GrSimpleTextureEffect.cpp b/src/gpu/effects/generated/GrSimpleTextureEffect.cpp
index dd843b9..279ea5d 100644
--- a/src/gpu/effects/generated/GrSimpleTextureEffect.cpp
+++ b/src/gpu/effects/generated/GrSimpleTextureEffect.cpp
@@ -30,8 +30,7 @@
fragBuilder->codeAppendf(
"%s = %s * sample(%s, %s).%s;\n", args.fOutputColor, args.fInputColor,
fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]),
- _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str()
- : "_coords",
+ sk_TransformedCoords2D_0.c_str(),
fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str());
}
diff --git a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
index f5919b4..6a07445 100644
--- a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
@@ -72,6 +72,9 @@
}
SkString GrGLSLFragmentShaderBuilder::ensureCoords2D(const GrShaderVar& coords) {
+ if (!coords.getName().size()) {
+ return SkString("_coords");
+ }
if (kFloat3_GrSLType != coords.getType() && kHalf3_GrSLType != coords.getType()) {
SkASSERT(kFloat2_GrSLType == coords.getType() || kHalf2_GrSLType == coords.getType());
return coords.getName();
diff --git a/src/gpu/gradients/generated/GrLinearGradientLayout.cpp b/src/gpu/gradients/generated/GrLinearGradientLayout.cpp
index a20b0e5..c5e70d6 100644
--- a/src/gpu/gradients/generated/GrLinearGradientLayout.cpp
+++ b/src/gpu/gradients/generated/GrLinearGradientLayout.cpp
@@ -29,9 +29,7 @@
fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint);
fragBuilder->codeAppendf(
"half t = half(%s.x) + 9.9999997473787516e-06;\n%s = half4(t, 1.0, 0.0, 0.0);\n",
- _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str()
- : "_coords",
- args.fOutputColor);
+ sk_TransformedCoords2D_0.c_str(), args.fOutputColor);
}
private:
diff --git a/src/gpu/gradients/generated/GrRadialGradientLayout.cpp b/src/gpu/gradients/generated/GrRadialGradientLayout.cpp
index f163943..79fbf48 100644
--- a/src/gpu/gradients/generated/GrRadialGradientLayout.cpp
+++ b/src/gpu/gradients/generated/GrRadialGradientLayout.cpp
@@ -28,10 +28,7 @@
SkString sk_TransformedCoords2D_0 =
fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint);
fragBuilder->codeAppendf("half t = half(length(%s));\n%s = half4(t, 1.0, 0.0, 0.0);\n",
- _outer.computeLocalCoordsInVertexShader()
- ? sk_TransformedCoords2D_0.c_str()
- : "_coords",
- args.fOutputColor);
+ sk_TransformedCoords2D_0.c_str(), args.fOutputColor);
}
private:
diff --git a/src/gpu/gradients/generated/GrSweepGradientLayout.cpp b/src/gpu/gradients/generated/GrSweepGradientLayout.cpp
index 6abcbb1..5b5f04a 100644
--- a/src/gpu/gradients/generated/GrSweepGradientLayout.cpp
+++ b/src/gpu/gradients/generated/GrSweepGradientLayout.cpp
@@ -39,17 +39,9 @@
"atan(-%s.y, length(%s) - %s.x));\n} else {\n angle = half(atan(-%s.y, "
"-%s.x));\n}\nhalf t = ((angle * 0.15915493667125702 + 0.5) + %s) * %s;\n%s = "
"half4(t, 1.0, 0.0, 0.0);\n",
- _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str()
- : "_coords",
- _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str()
- : "_coords",
- _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str()
- : "_coords",
- _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str()
- : "_coords",
- _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str()
- : "_coords",
- args.fUniformHandler->getUniformCStr(biasVar),
+ sk_TransformedCoords2D_0.c_str(), sk_TransformedCoords2D_0.c_str(),
+ sk_TransformedCoords2D_0.c_str(), sk_TransformedCoords2D_0.c_str(),
+ sk_TransformedCoords2D_0.c_str(), args.fUniformHandler->getUniformCStr(biasVar),
args.fUniformHandler->getUniformCStr(scaleVar), args.fOutputColor);
}
diff --git a/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.cpp b/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.cpp
index 804a42c..235a137 100644
--- a/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.cpp
+++ b/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.cpp
@@ -52,9 +52,8 @@
"0:\n {\n half r0 = %s.x;\n @if (%s) {\n "
" t = length(p) - float(r0);\n } else {\n t = "
"-length(p) - float(r0);\n ",
- _outer.computeLocalCoordsInVertexShader() ? sk_TransformedCoords2D_0.c_str()
- : "_coords",
- (int)_outer.type, args.fUniformHandler->getUniformCStr(focalParamsVar),
+ sk_TransformedCoords2D_0.c_str(), (int)_outer.type,
+ args.fUniformHandler->getUniformCStr(focalParamsVar),
args.fUniformHandler->getUniformCStr(focalParamsVar),
(_outer.isRadiusIncreasing ? "true" : "false"));
fragBuilder->codeAppendf(
diff --git a/src/sksl/SkSLCPPCodeGenerator.cpp b/src/sksl/SkSLCPPCodeGenerator.cpp
index a4d2e3b..0c46d71 100644
--- a/src/sksl/SkSLCPPCodeGenerator.cpp
+++ b/src/sksl/SkSLCPPCodeGenerator.cpp
@@ -122,8 +122,7 @@
}
int64_t index = ((IntLiteral&) *i.fIndex).fValue;
String name = "sk_TransformedCoords2D_" + to_string(index);
- fFormatArgs.push_back("_outer.computeLocalCoordsInVertexShader() ? " + name +
- ".c_str() : \"_coords\"");
+ fFormatArgs.push_back(name + ".c_str()");
if (fWrittenTransformedCoords.find(index) == fWrittenTransformedCoords.end()) {
addExtraEmitCodeLine("SkString " + name +
" = fragBuilder->ensureCoords2D(args.fTransformedCoords[" +