ARB_ubo/referenced-by-shader: pass if shader compiler moves UBOs between shaders
[piglit.git] / tests / spec / glsl-1.10 / execution / vs-loop-complex-unroll-with-else-break.shader_test
blobd543c3fc98482fe095b47335cbd2d1f11380f0f8
1 # This tests unrolling of a loop with two exit point where the trip count
2 # of one of the exits is known and the other unknown (loop_count uniform).
4 # Here we test all possible outcomes for the loop and also add some
5 # unreachable code to make sure it is not accessible after unrolling.
6 [require]
7 GLSL >= 1.10
9 [vertex shader]
10 uniform int loop_count;
12 void main()
14   gl_Position = gl_Vertex;
16   vec4 colour = vec4(1.0, 1.0, 1.0, 1.0);
17   vec4 colour2 = vec4(0.0, 0.0, 0.0, 1.0);
18   for (int i = 0; i < loop_count; i++) {
20      if (i > 1) {
21         colour = vec4(1.0, 0.0, 0.0, 1.0);
22      }
24      if (i <= 1) {
25         colour = vec4(0.0, 1.0, 0.0, 1.0);
26      } else {
27         break;
28      }
30      /* Unreachable break */
31      if (i > 2) {
32         break;
33      }
35      /* This should be unreachable */
36      if (i >= 2) {
37         colour2 = vec4(0.0, 1.0, 0.0, 1.0);
38      }
39   }
41   gl_FrontColor = colour + colour2;
44 [fragment shader]
45 void main()
47   gl_FragColor = gl_Color;
50 [test]
51 clear color 0.5 0.5 0.5 0.5
53 uniform int loop_count 4
54 draw rect -1 -1 2 2
55 probe all rgba 1.0 0.0 0.0 1.0
57 uniform int loop_count 3
58 draw rect -1 -1 2 2
59 probe all rgba 1.0 0.0 0.0 1.0
61 uniform int loop_count 2
62 draw rect -1 -1 2 2
63 probe all rgba 0.0 1.0 0.0 1.0
65 uniform int loop_count 1
66 draw rect -1 -1 2 2
67 probe all rgba 0.0 1.0 0.0 1.0
69 uniform int loop_count 0
70 draw rect -1 -1 2 2
71 probe all rgba 1.0 1.0 1.0 1.0