From 1001f843a45e95f6df1d44242b6b06c77898e870 Mon Sep 17 00:00:00 2001 From: Brian Osman Date: Fri, 12 Jan 2018 10:16:41 -0500 Subject: 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 Commit-Queue: Brian Osman --- tests/SkSLGLSLTest.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'tests/SkSLGLSLTest.cpp') 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) { -- cgit v1.2.3