aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Berry <stereotype441@gmail.com>2013-04-23 09:48:05 -0700
committerPaul Berry <stereotype441@gmail.com>2013-04-24 09:39:12 -0700
commit4517da53fc31cd18d81436ef4970dc60969a3755 (patch)
tree6ff5657ffe892edeedad528a0bc791793b45b62a
parent511bf97924e1488d2c0896a12532242d9caab20b (diff)
Test interaction of dead code elimination with "break" statements.HEADmaster
Test written by Vadim Girlin <vadimgirlin@gmail.com>. I added explanatory comments. Reviewed-by: Matt Turner <mattst88@gmail.com>
-rw-r--r--tests/shaders/dead-code-break-interaction.shader_test33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/shaders/dead-code-break-interaction.shader_test b/tests/shaders/dead-code-break-interaction.shader_test
new file mode 100644
index 00000000..a2c5b6af
--- /dev/null
+++ b/tests/shaders/dead-code-break-interaction.shader_test
@@ -0,0 +1,33 @@
+# This test verifies that dead code elimination correctly accounts for
+# the flow control effects of the "break" statement. In the while
+# loop below, the first assignment to f is not dead code, even though
+# it is followed by another assignment to f, because the intervening
+# break causes the second assignment to be skipped.
+
+[require]
+GLSL >= 1.20
+
+[vertex shader]
+void main()
+{
+ gl_Position = gl_Vertex;
+}
+
+[fragment shader]
+void main()
+{
+ float f = 0.0;
+ while (true) {
+ f = 1.0; // Should not be dead code eliminated
+ break;
+ f = 0.5;
+ }
+ gl_FragColor = vec4(1.0 - f, f, 0.0, 1.0);
+}
+
+[test]
+clear color 0.0 0.0 0.0 0.0
+clear
+
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0