xref: /aosp_15_r20/external/angle/third_party/glslang/src/Test/spv.controlFlowAttributes.frag (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1#version 450
2
3#extension GL_EXT_control_flow_attributes : enable
4
5bool cond;
6
7void f0() {
8        [[loop]]                   for (;;) { }
9}
10
11void f1() {
12        [[dont_unroll]]            while(true) {  }
13}
14
15void main()
16{
17        [[unroll]]                 for (int i = 0; i < 8; ++i) { }
18	f0();
19        [[dependency_infinite]]    do {  } while(true);
20        [[dependency_length(1+3)]] for (int i = 0; i < 8; ++i) { }
21        [[flatten]]                if (cond) { } else { }
22        [[branch]]                 if (cond) cond = false;
23        [[dont_flatten]]           switch(3) {  }                      // dropped
24        [[dont_flatten]]           switch(3) { case 3: break; }
25
26        // warnings on all these
27        [[unroll(2)]]              for (int i = 0; i < 8; ++i) { }
28        [[dont_unroll(-2)]]        while(true) {  }
29        [[dependency_infinite(3)]] do {  } while(true);
30        [[dependency_length]]      for (int i = 0; i < 8; ++i) { }
31        [[flatten(3)]]             if (cond) { } else { }
32        [[branch(5.2)]]            if (cond) cond = false;
33        [[dont_flatten(3 + 7)]]    switch(3) { case 3: break; }
34
35        // other valid uses
36        [[ unroll, dont_unroll, dependency_length(2) ]]  while(cond) {  }
37        [ [ dont_flatten , branch ] ]                    switch(3) { case 3: break; }
38        [
39            // attribute
40            [
41                // here
42                flatten
43            ]
44        ]                       if (cond) { } else { }
45        [[ dependency_length(2), dependency_infinite ]]  while(cond) {  }
46}
47