Reland "Perform bounding rect-relative calcs in full float in GrRRectBlurEffect"
This reverts commit 07829f27ec5fee73845830d0d090a9c009c6b459.
Reason for revert: actually looks like skp gone good
Original change's description:
> Revert "Perform bounding rect-relative calcs in full float in GrRRectBlurEffect"
>
> This reverts commit f4594d1d5bd3eb7c82a6634a165039acba1386df.
>
> Reason for revert: skp gone bad
>
> Original change's description:
> > Perform bounding rect-relative calcs in full float in GrRRectBlurEffect
> >
> > Add GM that tests very wide/tall SkRRects with blurs
> >
> > Bug: chromium:1138810
> > Change-Id: Ib5a2e04de50c441f57f5e4b6194c3f9829323dc9
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/328383
> > Commit-Queue: Brian Salomon <bsalomon@google.com>
> > Reviewed-by: Michael Ludwig <michaelludwig@google.com>
>
> TBR=bsalomon@google.com,michaelludwig@google.com
>
> Change-Id: I3633efd4802a0a9493831ec471304333272fa87e
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: chromium:1138810
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/328905
> Reviewed-by: Brian Salomon <bsalomon@google.com>
> Commit-Queue: Brian Salomon <bsalomon@google.com>
TBR=bsalomon@google.com,michaelludwig@google.com
# Not skipping CQ checks because this is a reland.
Bug: chromium:1138810
Change-Id: Ic061849c410f43411d03972cdfadc5f0610efe6c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/328907
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/effects/generated/GrRRectBlurEffect.cpp b/src/gpu/effects/generated/GrRRectBlurEffect.cpp
index 0d811f6..5b6632f 100644
--- a/src/gpu/effects/generated/GrRRectBlurEffect.cpp
+++ b/src/gpu/effects/generated/GrRRectBlurEffect.cpp
@@ -360,35 +360,35 @@
blurRadiusVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag,
kHalf_GrSLType, "blurRadius");
fragBuilder->codeAppendf(
- R"SkSL(half2 translatedFragPos = half2(sk_FragCoord.xy - %s.xy);
-half2 proxyCenter = half2((%s.zw - %s.xy) * 0.5);
+ R"SkSL(float2 translatedFragPosFloat = sk_FragCoord.xy - %s.xy;
+float2 proxyCenter = (%s.zw - %s.xy) * 0.5;
half edgeSize = (2.0 * %s + %s) + 0.5;
-translatedFragPos -= proxyCenter;
-half2 fragDirection = sign(translatedFragPos);
-translatedFragPos = abs(translatedFragPos);
-translatedFragPos -= proxyCenter - edgeSize;
-translatedFragPos = max(translatedFragPos, 0.0);
-translatedFragPos *= fragDirection;
-translatedFragPos += half2(edgeSize);
+translatedFragPosFloat -= proxyCenter;
+half2 fragDirection = half2(sign(translatedFragPosFloat));
+translatedFragPosFloat = abs(translatedFragPosFloat);
+half2 translatedFragPosHalf = half2(translatedFragPosFloat - (proxyCenter - float(edgeSize)));
+translatedFragPosHalf = max(translatedFragPosHalf, 0.0);
+translatedFragPosHalf *= fragDirection;
+translatedFragPosHalf += half2(edgeSize);
half2 proxyDims = half2(2.0 * edgeSize);
-half2 texCoord = translatedFragPos / proxyDims;)SkSL",
+half2 texCoord = translatedFragPosHalf / proxyDims;)SkSL",
args.fUniformHandler->getUniformCStr(proxyRectVar),
args.fUniformHandler->getUniformCStr(proxyRectVar),
args.fUniformHandler->getUniformCStr(proxyRectVar),
args.fUniformHandler->getUniformCStr(blurRadiusVar),
args.fUniformHandler->getUniformCStr(cornerRadiusVar));
- SkString _sample17491 = this->invokeChild(0, args);
+ SkString _sample17574 = this->invokeChild(0, args);
fragBuilder->codeAppendf(
R"SkSL(
half4 inputColor = %s;)SkSL",
- _sample17491.c_str());
- SkString _coords17539("float2(texCoord)");
- SkString _sample17539 = this->invokeChild(1, args, _coords17539.c_str());
+ _sample17574.c_str());
+ SkString _coords17622("float2(texCoord)");
+ SkString _sample17622 = this->invokeChild(1, args, _coords17622.c_str());
fragBuilder->codeAppendf(
R"SkSL(
%s = inputColor * %s;
)SkSL",
- args.fOutputColor, _sample17539.c_str());
+ args.fOutputColor, _sample17622.c_str());
}
private: