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