aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/SkSLGLSLTest.cpp
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2018-01-12 10:16:41 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-01-12 19:26:00 +0000
commit1001f843a45e95f6df1d44242b6b06c77898e870 (patch)
tree492d437b075eac3cabb095f3d1f0401d28150ba1 /tests/SkSLGLSLTest.cpp
parentf4c13166de2ad3c67a4a391d8595b5c8fa04ad4d (diff)
Added SkSL workaround for devices which cannot safely access gl_FragCoord
This is the root cause of https://github.com/flutter/flutter/issues/13216 I've got a GM that demonstrates the bug, but only in Viewer. Bug: skia:7410 Change-Id: Iaa1f27b10166aa09e4dc5949e5a6ca1bd14c99ac Reviewed-on: https://skia-review.googlesource.com/93920 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'tests/SkSLGLSLTest.cpp')
-rw-r--r--tests/SkSLGLSLTest.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/SkSLGLSLTest.cpp b/tests/SkSLGLSLTest.cpp
index 1ae421f8af..9b0571bcdc 100644
--- a/tests/SkSLGLSLTest.cpp
+++ b/tests/SkSLGLSLTest.cpp
@@ -1059,6 +1059,42 @@ DEF_TEST(SkSLFragCoord, r) {
"}\n",
&inputs);
REPORTER_ASSERT(r, !inputs.fRTHeight);
+
+ test(r,
+ "in float4 pos; void main() { sk_Position = pos; }",
+ *SkSL::ShaderCapsFactory::CannotUseFragCoord(),
+ "#version 400\n"
+ "out vec4 sk_FragCoord_Workaround;\n"
+ "in vec4 pos;\n"
+ "void main() {\n"
+ " sk_FragCoord_Workaround = (gl_Position = pos);\n"
+ "}\n",
+ SkSL::Program::kVertex_Kind);
+
+ test(r,
+ "in uniform float4 sk_RTAdjust; in float4 pos; void main() { sk_Position = pos; }",
+ *SkSL::ShaderCapsFactory::CannotUseFragCoord(),
+ "#version 400\n"
+ "out vec4 sk_FragCoord_Workaround;\n"
+ "in uniform vec4 sk_RTAdjust;\n"
+ "in vec4 pos;\n"
+ "void main() {\n"
+ " sk_FragCoord_Workaround = (gl_Position = pos);\n"
+ " gl_Position = vec4(gl_Position.x * sk_RTAdjust.x + gl_Position.w * sk_RTAdjust.y, "
+ "gl_Position.y * sk_RTAdjust.z + gl_Position.w * sk_RTAdjust.w, 0, gl_Position.w);\n"
+ "}\n",
+ SkSL::Program::kVertex_Kind);
+
+ test(r,
+ "void main() { sk_FragColor.xy = sk_FragCoord.xy; }",
+ *SkSL::ShaderCapsFactory::CannotUseFragCoord(),
+ "#version 400\n"
+ "in vec4 sk_FragCoord_Workaround;\n"
+ "out vec4 sk_FragColor;\n"
+ "void main() {\n"
+ " sk_FragColor.xy = vec4(sk_FragCoord_Workaround.xyz / sk_FragCoord_Workaround.w, "
+ "1.0 / sk_FragCoord_Workaround.w).xy;\n"
+ "}\n");
}
DEF_TEST(SkSLVertexID, r) {