aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/SkSLGLSLTest.cpp
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2017-05-10 15:06:17 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-05-10 19:31:34 +0000
commit5ac13c23628c6ee8c3f6056f38527706b403e502 (patch)
treec8a96588eed9009037bd368bb155a0f990cd4cc3 /tests/SkSLGLSLTest.cpp
parent37c5a96bbdeac2000c8b31d40f4786b31c39f2dd (diff)
sksl support for static ifs & switches
Bug: skia: Change-Id: Ic9e01a3a18efddb19bab26e92bfb473cad294fc1 Reviewed-on: https://skia-review.googlesource.com/16144 Commit-Queue: Ethan Nicholas <ethannicholas@google.com> Reviewed-by: Ben Wagner <benjaminwagner@google.com>
Diffstat (limited to 'tests/SkSLGLSLTest.cpp')
-rw-r--r--tests/SkSLGLSLTest.cpp118
1 files changed, 111 insertions, 7 deletions
diff --git a/tests/SkSLGLSLTest.cpp b/tests/SkSLGLSLTest.cpp
index 32fd668dda..ff1d5f5972 100644
--- a/tests/SkSLGLSLTest.cpp
+++ b/tests/SkSLGLSLTest.cpp
@@ -831,7 +831,7 @@ DEF_TEST(SkSLMatFolding, r) {
"}\n");
}
-DEF_TEST(SkSLStaticIf, r) {
+DEF_TEST(SkSLConstantIf, r) {
test(r,
"void main() {"
"int x;"
@@ -1067,10 +1067,11 @@ DEF_TEST(SkSLGeometry, r) {
}
DEF_TEST(SkSLSwitch, r) {
+ // basic "does a switch even work" test
test(r,
"void main() {"
" float x;"
- " switch (1) {"
+ " switch (int(sqrt(1))) {"
" case 0:"
" x = 0.0;"
" break;"
@@ -1087,7 +1088,7 @@ DEF_TEST(SkSLSwitch, r) {
"out vec4 sk_FragColor;\n"
"void main() {\n"
" float x;\n"
- " switch (1) {\n"
+ " switch (int(sqrt(1.0))) {\n"
" case 0:\n"
" x = 0.0;\n"
" break;\n"
@@ -1099,10 +1100,11 @@ DEF_TEST(SkSLSwitch, r) {
" }\n"
" sk_FragColor = vec4(x);\n"
"}\n");
+ // dead code inside of switch
test(r,
"void main() {"
" float x;"
- " switch (2) {"
+ " switch (int(sqrt(2))) {"
" case 0:"
" x = 0.0;"
" case 1:"
@@ -1116,7 +1118,7 @@ DEF_TEST(SkSLSwitch, r) {
"#version 400\n"
"out vec4 sk_FragColor;\n"
"void main() {\n"
- " switch (2) {\n"
+ " switch (int(sqrt(2.0))) {\n"
" case 0:\n"
" ;\n"
" case 1:\n"
@@ -1126,12 +1128,113 @@ DEF_TEST(SkSLSwitch, r) {
" }\n"
" sk_FragColor = vec4(2.0);\n"
"}\n");
+ // non-static test w/ fallthrough
+ test(r,
+ "void main() {"
+ " float x = 0.0;"
+ " switch (int(sqrt(3))) {"
+ " case 0:"
+ " x = 0.0;"
+ " case 1:"
+ " x = 1.0;"
+ " }"
+ " sk_FragColor = vec4(x);"
+ "}",
+ *SkSL::ShaderCapsFactory::Default(),
+ "#version 400\n"
+ "out vec4 sk_FragColor;\n"
+ "void main() {\n"
+ " float x = 0.0;\n"
+ " switch (int(sqrt(3.0))) {\n"
+ " case 0:\n"
+ " x = 0.0;\n"
+ " case 1:\n"
+ " x = 1.0;\n"
+ " }\n"
+ " sk_FragColor = vec4(x);\n"
+ "}\n");
+ // static test w/ fallthrough
+ test(r,
+ "void main() {"
+ " float x = 0.0;"
+ " switch (0) {"
+ " case 0:"
+ " x = 0.0;"
+ " case 1:"
+ " x = 1.0;"
+ " }"
+ " sk_FragColor = vec4(x);"
+ "}",
+ *SkSL::ShaderCapsFactory::Default(),
+ "#version 400\n"
+ "out vec4 sk_FragColor;\n"
+ "void main() {\n"
+ " sk_FragColor = vec4(1.0);\n"
+ "}\n");
+ // static test w/ fallthrough, different entry point
+ test(r,
+ "void main() {"
+ " float x = 0.0;"
+ " switch (1) {"
+ " case 0:"
+ " x = 0.0;"
+ " case 1:"
+ " x = 1.0;"
+ " }"
+ " sk_FragColor = vec4(x);"
+ "}",
+ *SkSL::ShaderCapsFactory::Default(),
+ "#version 400\n"
+ "out vec4 sk_FragColor;\n"
+ "void main() {\n"
+ " sk_FragColor = vec4(1.0);\n"
+ "}\n");
+ // static test w/ break
+ test(r,
+ "void main() {"
+ " float x = 0.0;"
+ " switch (0) {"
+ " case 0:"
+ " x = 0.0;"
+ " break;"
+ " case 1:"
+ " x = 1.0;"
+ " }"
+ " sk_FragColor = vec4(x);"
+ "}",
+ *SkSL::ShaderCapsFactory::Default(),
+ "#version 400\n"
+ "out vec4 sk_FragColor;\n"
+ "void main() {\n"
+ " sk_FragColor = vec4(0.0);\n"
+ "}\n");
+ // static test w/ static conditional break
+ test(r,
+ "void main() {"
+ " float x = 0.0;"
+ " switch (0) {"
+ " case 0:"
+ " x = 0.0;"
+ " if (x < 1) break;"
+ " case 1:"
+ " x = 1.0;"
+ " }"
+ " sk_FragColor = vec4(x);"
+ "}",
+ *SkSL::ShaderCapsFactory::Default(),
+ "#version 400\n"
+ "out vec4 sk_FragColor;\n"
+ "void main() {\n"
+ " sk_FragColor = vec4(0.0);\n"
+ "}\n");
+ // static test w/ non-static conditional break
test(r,
"void main() {"
" float x = 0.0;"
- " switch (3) {"
+ " switch (0) {"
" case 0:"
" x = 0.0;"
+ " if (x < sqrt(1)) break;"
" case 1:"
" x = 1.0;"
" }"
@@ -1142,9 +1245,10 @@ DEF_TEST(SkSLSwitch, r) {
"out vec4 sk_FragColor;\n"
"void main() {\n"
" float x = 0.0;\n"
- " switch (3) {\n"
+ " switch (0) {\n"
" case 0:\n"
" x = 0.0;\n"
+ " if (0.0 < sqrt(1.0)) break;\n"
" case 1:\n"
" x = 1.0;\n"
" }\n"