Major rearchitecture of SkSL parsing, focused on improving performance.
Bug: skia:
Change-Id: I83e3a094d26085fc4d586e5d2581e0d61c55634e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/145080
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/src/gpu/effects/generated/GrEllipseEffect.cpp b/src/gpu/effects/generated/GrEllipseEffect.cpp
index 269e95f..b28f961 100644
--- a/src/gpu/effects/generated/GrEllipseEffect.cpp
+++ b/src/gpu/effects/generated/GrEllipseEffect.cpp
@@ -42,20 +42,21 @@
"%s;\nfloat2 d = sk_FragCoord.xy - %s.xy;\n@if (medPrecision) {\n d *= "
"%s.y;\n}\nfloat2 Z = d * %s.zw;\nfloat implicit = dot(Z, d) - 1.0;\nfloat "
"grad_dot = 4.0 * dot(Z, Z);\n@if (medPrecision) {\n grad_dot = max(grad_dot, "
- "6.1036000000000003e-05);\n} else {\n grad_dot = max(grad_dot, "
- "1.1755e-38);\n}\nfloat approx_dist = implicit * inversesqrt(grad_dot);\n@if "
- "(medPrecision) {\n approx_dist *= %s.x;\n}\nhalf alpha;\n@switch ",
+ "6.1036000261083245e-05);\n} else {\n grad_dot = max(grad_dot, "
+ "1.1754999560161448e-38);\n}\nfloat approx_dist = implicit * "
+ "inversesqrt(grad_dot);\n@if (medPrecision) {\n approx_dist *= %s.x;\n}\nhalf "
+ "alph",
prevRadii.fX, prevRadii.fY, (medPrecision ? "true" : "false"),
args.fUniformHandler->getUniformCStr(ellipseVar),
scaleVar.isValid() ? args.fUniformHandler->getUniformCStr(scaleVar) : "float2(0)",
args.fUniformHandler->getUniformCStr(ellipseVar),
scaleVar.isValid() ? args.fUniformHandler->getUniformCStr(scaleVar) : "float2(0)");
fragBuilder->codeAppendf(
- "(%d) {\n case 0:\n alpha = approx_dist > 0.0 ? 0.0 : 1.0;\n "
- "break;\n case 1:\n alpha = clamp(0.5 - half(approx_dist), 0.0, 1.0);\n "
- " break;\n case 2:\n alpha = approx_dist > 0.0 ? 1.0 : 0.0;\n "
- " break;\n case 3:\n alpha = clamp(0.5 + half(approx_dist), 0.0, 1.0);\n "
- " break;\n default:\n discard;\n}\n%s = %s * alpha;\n",
+ "a;\n@switch (%d) {\n case 0:\n alpha = approx_dist > 0.0 ? 0.0 : 1.0;\n "
+ " break;\n case 1:\n alpha = clamp(0.5 - half(approx_dist), 0.0, "
+ "1.0);\n break;\n case 2:\n alpha = approx_dist > 0.0 ? 1.0 : "
+ "0.0;\n break;\n case 3:\n alpha = clamp(0.5 + half(approx_dist), "
+ "0.0, 1.0);\n break;\n default:\n discard;\n}\n%s = %s * alpha;\n",
(int)_outer.edgeType, args.fOutputColor, args.fInputColor);
}