xref: /aosp_15_r20/external/angle/third_party/glslang/src/Test/spv.switch.frag (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1#version 310 es
2precision mediump float;
3flat in int c, d;
4in float x;
5out float color;
6in vec4 v;
7
8vec4 foo1(vec4 v1, vec4 v2, int i1)
9{
10    switch (i1)
11    {
12    case 0:
13        return v1;
14    case 2:
15    case 1:
16        return v2;
17    case 3:
18        return v1 * v2;
19    }
20
21    return vec4(0.0);
22}
23
24vec4 foo2(vec4 v1, vec4 v2, int i1)
25{
26    switch (i1)
27    {
28    case 0:
29        return v1;
30    case 2:
31        return vec4(1.0);
32    case 1:
33        return v2;
34    case 3:
35        return v1 * v2;
36    }
37
38    return vec4(0.0);
39}
40
41void main()
42{
43    float f;
44    int a[2];
45    int local = c;
46
47    switch(++local)
48    {
49    }
50
51    switch (c) {
52    case 1:
53        f = sin(x);
54        break;
55    case 2:
56        f = cos(x);
57        break;
58    default:
59        f = tan(x);
60    }
61
62    switch (c) {
63    case 1:
64        f += sin(x);
65    case 2:
66        f += cos(x);
67        break;
68    default:
69        f += tan(x);
70    }
71
72    switch (c) {
73    case 1:
74        f += sin(x);
75        break;
76    case 2:
77        f += cos(x);
78        break;
79    }
80
81    switch (c) {
82    case 1:
83        f += sin(x);
84        break;
85    case 2:
86        switch (d) {
87        case 1:
88            f += x * x * x;
89            break;
90        case 2:
91            f += x * x;
92            break;
93        }
94        break;
95    default:
96        f += tan(x);
97    }
98
99    for (int i = 0; i < 10; ++i) {
100        switch (c) {
101        case 1:
102            f += sin(x);
103            for (int j = 20; j < 30; ++j) {
104                ++f;
105                if (f < 100.2)
106                    break;
107            }
108            break;
109        case 2:
110            f += cos(x);
111            break;
112            break;
113        default:
114            f += tan(x);
115        }
116
117        if (f < 3.43)
118            break;
119    }
120
121    switch (c) {
122    case 1:
123        f += sin(x);
124        break;
125    case 2:
126        // test no statements at end
127    }
128
129    color = f + float(local);
130
131    color += foo1(v,v,c).y;
132    color += foo2(v,v,c).z;
133
134    switch (c) {
135    case 0: break;
136    default:
137    }
138
139    switch (c) {
140    default:
141    }
142}
143