From 4517da53fc31cd18d81436ef4970dc60969a3755 Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Tue, 23 Apr 2013 09:48:05 -0700 Subject: Test interaction of dead code elimination with "break" statements. Test written by Vadim Girlin . I added explanatory comments. Reviewed-by: Matt Turner --- .../dead-code-break-interaction.shader_test | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 tests/shaders/dead-code-break-interaction.shader_test 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 -- cgit v1.2.3