diff options
author | Paul Berry <stereotype441@gmail.com> | 2013-04-23 09:48:05 -0700 |
---|---|---|
committer | Paul Berry <stereotype441@gmail.com> | 2013-04-24 09:39:12 -0700 |
commit | 4517da53fc31cd18d81436ef4970dc60969a3755 (patch) | |
tree | 6ff5657ffe892edeedad528a0bc791793b45b62a /tests/shaders/dead-code-break-interaction.shader_test | |
parent | 511bf97924e1488d2c0896a12532242d9caab20b (diff) |
Test written by Vadim Girlin <vadimgirlin@gmail.com>. I added
explanatory comments.
Reviewed-by: Matt Turner <mattst88@gmail.com>
Diffstat (limited to 'tests/shaders/dead-code-break-interaction.shader_test')
-rw-r--r-- | tests/shaders/dead-code-break-interaction.shader_test | 33 |
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 |