Merge pull request #3031 from rg3igalia/sub-group-size-arb-flat-fix
[platform/upstream/glslang.git] / Test / spv.loops.frag
1 #version 140\r
2 in vec4 bigColor;\r
3 in vec4 bigColor1_1;\r
4 in vec4 bigColor1_2;\r
5 in vec4 bigColor1_3;\r
6 in vec4 bigColor2;\r
7 in vec4 bigColor3;\r
8 in vec4 bigColor4;\r
9 in vec4 bigColor5;\r
10 in vec4 bigColor6;\r
11 in vec4 bigColor7;\r
12 in vec4 bigColor8;\r
13 \r
14 in vec4 BaseColor;\r
15 \r
16 in float d;\r
17 in float d2;\r
18 in float d3;\r
19 in float d4;\r
20 in float d5;\r
21 in float d6;\r
22 in float d7;\r
23 in float d8;\r
24 in float d9;\r
25 in float d10;\r
26 in float d11;\r
27 in float d12;\r
28 in float d14;\r
29 in float d15;\r
30 in float d16;\r
31 in float d17;\r
32 in float d18;\r
33 flat in int Count;\r
34 \r
35 void main()\r
36 {\r
37     vec4 color = BaseColor;\r
38 \r
39     // Not a real loop\r
40     while (true) {\r
41         if (color.x < 0.33) {\r
42             color += vec4(0.33);\r
43             break;\r
44         }\r
45         if (color.x < 0.66) {\r
46             color += vec4(0.66);\r
47             break;\r
48         }\r
49 \r
50         color += vec4(0.33);\r
51         break;\r
52     }\r
53 \r
54     // While\r
55     while (color.x < d) {\r
56         color += bigColor;\r
57     }\r
58 \r
59     // While (latchy)\r
60     while (color.z < d) {\r
61         color += bigColor1_1;\r
62         if (color.w < d)\r
63             continue;\r
64 \r
65         color += bigColor1_1;\r
66     }\r
67 \r
68     // While (constant)\r
69     while (color.x < 42.0) {\r
70         ++color;\r
71     }\r
72 \r
73     // While (complicated-conditional)\r
74     while (color.w < d2 && color.y < d3) {\r
75         color += bigColor1_2;\r
76     }\r
77 \r
78     // While (multi-exit)\r
79     while (color.z < d3) {\r
80         color += bigColor1_3;\r
81         if (color.y < d4)\r
82             break;\r
83         color += bigColor1_3;\r
84     }\r
85 \r
86     // For (dynamic)\r
87     for (int i = 0; i < Count; ++i) {\r
88         color += bigColor2;\r
89     }\r
90 \r
91     // Do while\r
92     do {\r
93         color += bigColor3;\r
94     } while (color.x < d2);\r
95 \r
96     // For (static)\r
97     for (int i = 0; i < 42; ++i) {\r
98         color.z += d3;\r
99     }\r
100 \r
101     // For (static) flow-control\r
102     for (int i = 0; i < 100; ++i) {\r
103         if (color.z < 20.0)\r
104             color.x++;\r
105         else\r
106             color.y++;\r
107         if (color.w < 20.0)\r
108             if (color.z > color.y)\r
109                 0;              // do nothing\r
110     }\r
111 \r
112     // For (static) flow-control with latch merge\r
113     for (int i = 0; i < 120; ++i) {\r
114         if (color.z < 20.0)\r
115             color.x++;\r
116         else\r
117             color.y++;\r
118     }\r
119 \r
120     // For (static) latchy\r
121     for (int i = 0; i < 42; ++i) {\r
122         color.z += d3;\r
123         if (color.x < d4)\r
124             continue;\r
125         ++color.w;\r
126     }\r
127 \r
128     // For (static) multi-exit\r
129     for (int i = 0; i < 42; ++i) {\r
130         color.z += d3;\r
131         if (color.x < d4)\r
132             break;\r
133         ++color.w;\r
134     }\r
135 \r
136     // Latchy\r
137     do {\r
138         color += bigColor4;\r
139         if (color.x < d4)\r
140             continue;\r
141         if (color.y < d4)\r
142             color.y += d4;\r
143         else\r
144             color.x += d4;\r
145     } while (color.z < d4);\r
146 \r
147     // Do while flow control\r
148     do {\r
149         color += bigColor5;\r
150         if (color.y < d5)\r
151             color.y += d5;\r
152     } while (color.x < d5);\r
153 \r
154     // If then loop\r
155     if (color.x < d6) {\r
156         while (color.y < d6)\r
157             color += bigColor6;\r
158     } else {\r
159         while (color.z < d6)\r
160             color.z += bigColor6.z;\r
161     }\r
162 \r
163     // If then multi-exit\r
164     if (color.x < d6) {\r
165         while (color.y < d6) {\r
166             color += bigColor6;\r
167             if (d7 < 1.0)\r
168                 break;\r
169         }\r
170 \r
171     } else {\r
172         while (color.z < d6)\r
173             color.z += bigColor6.z;\r
174     }\r
175 \r
176 \r
177     // Multi-exit\r
178     do {\r
179        if (d7 < 0.0)\r
180            break;\r
181 \r
182        color += bigColor7;\r
183 \r
184        if (d7 < 1.0) {\r
185            color.z++;\r
186            break;\r
187        }\r
188 \r
189        color += BaseColor;\r
190 \r
191     } while (true);\r
192 \r
193 \r
194     // Multi-exit2\r
195     do {\r
196         // invariant conditional break at the top of the loop. This could be a\r
197         // situation where unswitching the loop has no real increases in code\r
198         // size.\r
199        if (d8 < 0.0)\r
200            break;\r
201 \r
202        color += bigColor7;\r
203 \r
204        if (d8 < 1.0) {\r
205            color.z++;\r
206            if (d8 < 2.0) {\r
207                color.y++;\r
208            } else {\r
209                color.x++;\r
210            }\r
211            break;\r
212        }\r
213 \r
214        color += BaseColor;\r
215 \r
216     } while (color.z < d8);\r
217 \r
218     // Deep exit\r
219     while (color.w < d9) {\r
220         if (d9 > d8) {\r
221             if (color.x <= d7) {\r
222                 if (color.z == 5.0)\r
223                     color.w++;\r
224                 else\r
225                     break;\r
226             }\r
227         }\r
228 \r
229     }\r
230 \r
231     // No end loop-back.\r
232     while (color.z < d10) {\r
233         color.y++;\r
234         if (color.y < d11) {\r
235             color.z++;\r
236             if (color.w < d12)\r
237                 color.w++;\r
238             else\r
239                 color.x++;\r
240             continue;\r
241         }\r
242 \r
243         color++;\r
244         break;\r
245     }\r
246 \r
247     // Multi-continue\r
248     while (color.x < 10.0) {\r
249         color += bigColor8;\r
250 \r
251         if (color.z < d8)\r
252             if (color.w < d6)\r
253                 continue;\r
254 \r
255         color.y += bigColor8.x;\r
256     }\r
257 \r
258     color++;\r
259     gl_FragColor = color;\r
260 \r
261     // Early Return\r
262     while (color.x < d14) {\r
263         if (color.y < d15) {\r
264             return;\r
265         }\r
266         else\r
267             color++;\r
268     }\r
269 \r
270     color++;\r
271 \r
272     while (color.w < d16) {\r
273         color.w++;\r
274     }\r
275 \r
276 \r
277     // While (complicated-conditional)\r
278     while (color.w < d2 && color.y < d3) {\r
279         color += bigColor1_2;\r
280         if (color.z < d3)\r
281             return;\r
282     }\r
283 \r
284 \r
285     do {\r
286         if (color.y < d18)\r
287             return;\r
288         color++;\r
289     } while (color.x < d17);\r
290 \r
291     // Early Discard\r
292     while (color.y < d16) {\r
293         if (color.w < d16) {\r
294             discard;\r
295         } else\r
296             color++;\r
297     }\r
298 \r
299     color++;\r
300 \r
301     gl_FragColor = color;\r
302 }\r