• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!amber
2
3# Copyright 2021 Google LLC
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#     http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17
18# A test for a coverage-gap found by the GraphicsFuzz project.
19
20# Short description: A fragment shader that covers specific BRW code paths
21
22# The test passes because the shader always writes red.
23
24# Optimized using spirv-opt with the following arguments:
25# '-O'
26# spirv-opt commit hash: a0370efd589be33d5d9a85cfde2f85841b3755af
27
28
29
30SHADER vertex variant_vertex_shader PASSTHROUGH
31
32# variant_fragment_shader is derived from the following GLSL:
33# #version 320 es
34#
35# #define _GLF_MAKE_IN_BOUNDS_INT(IDX, SZ)  clamp(IDX, 0, SZ - 1)
36# #define LOOP for (int i = 0; i < 1; i++)
37#
38# precision highp float;
39# precision highp int;
40#
41# const int _GLF_global_loop_bound = 100;
42# int _GLF_global_loop_count = 0;
43#
44# layout(location = 0) out vec4 _GLF_color;
45#
46# void main()
47# {
48#     float arr[10] = float[10](1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0);
49#     int index = 0;
50#
51#     while(_GLF_global_loop_count < _GLF_global_loop_bound)
52#     {
53#         // The inner loop will be iterated just once.
54#         LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP {
55#         LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP {
56#         LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP { LOOP {
57#         LOOP { LOOP { LOOP { LOOP { LOOP
58#         {
59#             _GLF_global_loop_count ++;
60#         }
61#         } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } }
62#
63#         // In the end all elemenst of arr have a value of 2.0.
64#         arr[_GLF_MAKE_IN_BOUNDS_INT(index, 10)] = float[10](2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0)[_GLF_MAKE_IN_BOUNDS_INT(index, 10)];
65#         index++;
66#     }
67#
68#     // The selected indices don't matter as all have the same data of 2.0.
69#     vec2 v = vec2(arr[_GLF_MAKE_IN_BOUNDS_INT(int(gl_FragCoord.x), 10)], arr[_GLF_MAKE_IN_BOUNDS_INT(int(gl_FragCoord.y), 10)]);
70#
71#     // Always true.
72#     if (v.x == 2.0 && v.y == 2.0)
73#         _GLF_color = vec4(1, 0, 0, 1);
74#     else
75#         _GLF_color = vec4(0);
76#
77# }
78SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
79; SPIR-V
80; Version: 1.0
81; Generator: Khronos Glslang Reference Front End; 10
82; Bound: 583
83; Schema: 0
84               OpCapability Shader
85          %1 = OpExtInstImport "GLSL.std.450"
86               OpMemoryModel Logical GLSL450
87               OpEntryPoint Fragment %4 "main" %431 %460
88               OpExecutionMode %4 OriginUpperLeft
89               OpSource ESSL 320
90               OpName %4 "main"
91               OpName %15 "arr"
92               OpName %419 "indexable"
93               OpName %431 "gl_FragCoord"
94               OpName %460 "_GLF_color"
95               OpDecorate %431 BuiltIn FragCoord
96               OpDecorate %460 Location 0
97          %2 = OpTypeVoid
98          %3 = OpTypeFunction %2
99          %6 = OpTypeInt 32 1
100          %9 = OpConstant %6 0
101         %10 = OpTypeFloat 32
102         %11 = OpTypeInt 32 0
103         %12 = OpConstant %11 10
104         %13 = OpTypeArray %10 %12
105         %14 = OpTypePointer Function %13
106         %16 = OpConstant %10 1
107         %17 = OpConstantComposite %13 %16 %16 %16 %16 %16 %16 %16 %16 %16 %16
108         %26 = OpConstant %6 100
109         %27 = OpTypeBool
110         %36 = OpConstant %6 1
111        %413 = OpConstant %6 9
112        %415 = OpConstant %10 2
113        %416 = OpConstantComposite %13 %415 %415 %415 %415 %415 %415 %415 %415 %415 %415
114        %420 = OpTypePointer Function %10
115        %429 = OpTypeVector %10 4
116        %430 = OpTypePointer Input %429
117        %431 = OpVariable %430 Input
118        %432 = OpConstant %11 0
119        %433 = OpTypePointer Input %10
120        %440 = OpConstant %11 1
121        %459 = OpTypePointer Output %429
122        %460 = OpVariable %459 Output
123        %461 = OpConstant %10 0
124        %462 = OpConstantComposite %429 %16 %461 %461 %16
125        %464 = OpConstantComposite %429 %461 %461 %461 %461
126          %4 = OpFunction %2 None %3
127          %5 = OpLabel
128         %15 = OpVariable %14 Function
129        %419 = OpVariable %14 Function
130               OpStore %15 %17
131               OpBranch %20
132         %20 = OpLabel
133        %470 = OpPhi %6 %9 %5 %425 %23
134        %467 = OpPhi %6 %9 %5 %582 %23
135         %28 = OpSLessThan %27 %467 %26
136               OpLoopMerge %22 %23 None
137               OpBranchConditional %28 %21 %22
138         %21 = OpLabel
139               OpBranch %30
140         %30 = OpLabel
141        %468 = OpPhi %6 %9 %21 %411 %33
142        %582 = OpPhi %6 %467 %21 %581 %33
143         %37 = OpSLessThan %27 %468 %36
144               OpLoopMerge %32 %33 None
145               OpBranchConditional %37 %31 %32
146         %31 = OpLabel
147               OpBranch %39
148         %39 = OpLabel
149        %471 = OpPhi %6 %9 %31 %409 %42
150        %581 = OpPhi %6 %582 %31 %580 %42
151         %45 = OpSLessThan %27 %471 %36
152               OpLoopMerge %41 %42 None
153               OpBranchConditional %45 %40 %41
154         %40 = OpLabel
155               OpBranch %47
156         %47 = OpLabel
157        %473 = OpPhi %6 %9 %40 %407 %50
158        %580 = OpPhi %6 %581 %40 %579 %50
159         %53 = OpSLessThan %27 %473 %36
160               OpLoopMerge %49 %50 None
161               OpBranchConditional %53 %48 %49
162         %48 = OpLabel
163               OpBranch %55
164         %55 = OpLabel
165        %475 = OpPhi %6 %9 %48 %405 %58
166        %579 = OpPhi %6 %580 %48 %578 %58
167         %61 = OpSLessThan %27 %475 %36
168               OpLoopMerge %57 %58 None
169               OpBranchConditional %61 %56 %57
170         %56 = OpLabel
171               OpBranch %63
172         %63 = OpLabel
173        %477 = OpPhi %6 %9 %56 %403 %66
174        %578 = OpPhi %6 %579 %56 %577 %66
175         %69 = OpSLessThan %27 %477 %36
176               OpLoopMerge %65 %66 None
177               OpBranchConditional %69 %64 %65
178         %64 = OpLabel
179               OpBranch %71
180         %71 = OpLabel
181        %479 = OpPhi %6 %9 %64 %401 %74
182        %577 = OpPhi %6 %578 %64 %576 %74
183         %77 = OpSLessThan %27 %479 %36
184               OpLoopMerge %73 %74 None
185               OpBranchConditional %77 %72 %73
186         %72 = OpLabel
187               OpBranch %79
188         %79 = OpLabel
189        %481 = OpPhi %6 %9 %72 %399 %82
190        %576 = OpPhi %6 %577 %72 %575 %82
191         %85 = OpSLessThan %27 %481 %36
192               OpLoopMerge %81 %82 None
193               OpBranchConditional %85 %80 %81
194         %80 = OpLabel
195               OpBranch %87
196         %87 = OpLabel
197        %483 = OpPhi %6 %9 %80 %397 %90
198        %575 = OpPhi %6 %576 %80 %574 %90
199         %93 = OpSLessThan %27 %483 %36
200               OpLoopMerge %89 %90 None
201               OpBranchConditional %93 %88 %89
202         %88 = OpLabel
203               OpBranch %95
204         %95 = OpLabel
205        %485 = OpPhi %6 %9 %88 %395 %98
206        %574 = OpPhi %6 %575 %88 %573 %98
207        %101 = OpSLessThan %27 %485 %36
208               OpLoopMerge %97 %98 None
209               OpBranchConditional %101 %96 %97
210         %96 = OpLabel
211               OpBranch %103
212        %103 = OpLabel
213        %487 = OpPhi %6 %9 %96 %393 %106
214        %573 = OpPhi %6 %574 %96 %572 %106
215        %109 = OpSLessThan %27 %487 %36
216               OpLoopMerge %105 %106 None
217               OpBranchConditional %109 %104 %105
218        %104 = OpLabel
219               OpBranch %111
220        %111 = OpLabel
221        %489 = OpPhi %6 %9 %104 %391 %114
222        %572 = OpPhi %6 %573 %104 %571 %114
223        %117 = OpSLessThan %27 %489 %36
224               OpLoopMerge %113 %114 None
225               OpBranchConditional %117 %112 %113
226        %112 = OpLabel
227               OpBranch %119
228        %119 = OpLabel
229        %491 = OpPhi %6 %9 %112 %389 %122
230        %571 = OpPhi %6 %572 %112 %570 %122
231        %125 = OpSLessThan %27 %491 %36
232               OpLoopMerge %121 %122 None
233               OpBranchConditional %125 %120 %121
234        %120 = OpLabel
235               OpBranch %127
236        %127 = OpLabel
237        %493 = OpPhi %6 %9 %120 %387 %130
238        %570 = OpPhi %6 %571 %120 %569 %130
239        %133 = OpSLessThan %27 %493 %36
240               OpLoopMerge %129 %130 None
241               OpBranchConditional %133 %128 %129
242        %128 = OpLabel
243               OpBranch %135
244        %135 = OpLabel
245        %495 = OpPhi %6 %9 %128 %385 %138
246        %569 = OpPhi %6 %570 %128 %568 %138
247        %141 = OpSLessThan %27 %495 %36
248               OpLoopMerge %137 %138 None
249               OpBranchConditional %141 %136 %137
250        %136 = OpLabel
251               OpBranch %143
252        %143 = OpLabel
253        %497 = OpPhi %6 %9 %136 %383 %146
254        %568 = OpPhi %6 %569 %136 %567 %146
255        %149 = OpSLessThan %27 %497 %36
256               OpLoopMerge %145 %146 None
257               OpBranchConditional %149 %144 %145
258        %144 = OpLabel
259               OpBranch %151
260        %151 = OpLabel
261        %499 = OpPhi %6 %9 %144 %381 %154
262        %567 = OpPhi %6 %568 %144 %566 %154
263        %157 = OpSLessThan %27 %499 %36
264               OpLoopMerge %153 %154 None
265               OpBranchConditional %157 %152 %153
266        %152 = OpLabel
267               OpBranch %159
268        %159 = OpLabel
269        %501 = OpPhi %6 %9 %152 %379 %162
270        %566 = OpPhi %6 %567 %152 %565 %162
271        %165 = OpSLessThan %27 %501 %36
272               OpLoopMerge %161 %162 None
273               OpBranchConditional %165 %160 %161
274        %160 = OpLabel
275               OpBranch %167
276        %167 = OpLabel
277        %503 = OpPhi %6 %9 %160 %377 %170
278        %565 = OpPhi %6 %566 %160 %564 %170
279        %173 = OpSLessThan %27 %503 %36
280               OpLoopMerge %169 %170 None
281               OpBranchConditional %173 %168 %169
282        %168 = OpLabel
283               OpBranch %175
284        %175 = OpLabel
285        %505 = OpPhi %6 %9 %168 %375 %178
286        %564 = OpPhi %6 %565 %168 %563 %178
287        %181 = OpSLessThan %27 %505 %36
288               OpLoopMerge %177 %178 None
289               OpBranchConditional %181 %176 %177
290        %176 = OpLabel
291               OpBranch %183
292        %183 = OpLabel
293        %507 = OpPhi %6 %9 %176 %373 %186
294        %563 = OpPhi %6 %564 %176 %562 %186
295        %189 = OpSLessThan %27 %507 %36
296               OpLoopMerge %185 %186 None
297               OpBranchConditional %189 %184 %185
298        %184 = OpLabel
299               OpBranch %191
300        %191 = OpLabel
301        %509 = OpPhi %6 %9 %184 %371 %194
302        %562 = OpPhi %6 %563 %184 %561 %194
303        %197 = OpSLessThan %27 %509 %36
304               OpLoopMerge %193 %194 None
305               OpBranchConditional %197 %192 %193
306        %192 = OpLabel
307               OpBranch %199
308        %199 = OpLabel
309        %511 = OpPhi %6 %9 %192 %369 %202
310        %561 = OpPhi %6 %562 %192 %560 %202
311        %205 = OpSLessThan %27 %511 %36
312               OpLoopMerge %201 %202 None
313               OpBranchConditional %205 %200 %201
314        %200 = OpLabel
315               OpBranch %207
316        %207 = OpLabel
317        %513 = OpPhi %6 %9 %200 %367 %210
318        %560 = OpPhi %6 %561 %200 %559 %210
319        %213 = OpSLessThan %27 %513 %36
320               OpLoopMerge %209 %210 None
321               OpBranchConditional %213 %208 %209
322        %208 = OpLabel
323               OpBranch %215
324        %215 = OpLabel
325        %515 = OpPhi %6 %9 %208 %365 %218
326        %559 = OpPhi %6 %560 %208 %558 %218
327        %221 = OpSLessThan %27 %515 %36
328               OpLoopMerge %217 %218 None
329               OpBranchConditional %221 %216 %217
330        %216 = OpLabel
331               OpBranch %223
332        %223 = OpLabel
333        %517 = OpPhi %6 %9 %216 %363 %226
334        %558 = OpPhi %6 %559 %216 %557 %226
335        %229 = OpSLessThan %27 %517 %36
336               OpLoopMerge %225 %226 None
337               OpBranchConditional %229 %224 %225
338        %224 = OpLabel
339               OpBranch %231
340        %231 = OpLabel
341        %519 = OpPhi %6 %9 %224 %361 %234
342        %557 = OpPhi %6 %558 %224 %556 %234
343        %237 = OpSLessThan %27 %519 %36
344               OpLoopMerge %233 %234 None
345               OpBranchConditional %237 %232 %233
346        %232 = OpLabel
347               OpBranch %239
348        %239 = OpLabel
349        %521 = OpPhi %6 %9 %232 %359 %242
350        %556 = OpPhi %6 %557 %232 %555 %242
351        %245 = OpSLessThan %27 %521 %36
352               OpLoopMerge %241 %242 None
353               OpBranchConditional %245 %240 %241
354        %240 = OpLabel
355               OpBranch %247
356        %247 = OpLabel
357        %523 = OpPhi %6 %9 %240 %357 %250
358        %555 = OpPhi %6 %556 %240 %554 %250
359        %253 = OpSLessThan %27 %523 %36
360               OpLoopMerge %249 %250 None
361               OpBranchConditional %253 %248 %249
362        %248 = OpLabel
363               OpBranch %255
364        %255 = OpLabel
365        %525 = OpPhi %6 %9 %248 %355 %258
366        %554 = OpPhi %6 %555 %248 %553 %258
367        %261 = OpSLessThan %27 %525 %36
368               OpLoopMerge %257 %258 None
369               OpBranchConditional %261 %256 %257
370        %256 = OpLabel
371               OpBranch %263
372        %263 = OpLabel
373        %527 = OpPhi %6 %9 %256 %353 %266
374        %553 = OpPhi %6 %554 %256 %552 %266
375        %269 = OpSLessThan %27 %527 %36
376               OpLoopMerge %265 %266 None
377               OpBranchConditional %269 %264 %265
378        %264 = OpLabel
379               OpBranch %271
380        %271 = OpLabel
381        %529 = OpPhi %6 %9 %264 %351 %274
382        %552 = OpPhi %6 %553 %264 %551 %274
383        %277 = OpSLessThan %27 %529 %36
384               OpLoopMerge %273 %274 None
385               OpBranchConditional %277 %272 %273
386        %272 = OpLabel
387               OpBranch %279
388        %279 = OpLabel
389        %531 = OpPhi %6 %9 %272 %349 %282
390        %551 = OpPhi %6 %552 %272 %550 %282
391        %285 = OpSLessThan %27 %531 %36
392               OpLoopMerge %281 %282 None
393               OpBranchConditional %285 %280 %281
394        %280 = OpLabel
395               OpBranch %287
396        %287 = OpLabel
397        %533 = OpPhi %6 %9 %280 %347 %290
398        %550 = OpPhi %6 %551 %280 %549 %290
399        %293 = OpSLessThan %27 %533 %36
400               OpLoopMerge %289 %290 None
401               OpBranchConditional %293 %288 %289
402        %288 = OpLabel
403               OpBranch %295
404        %295 = OpLabel
405        %535 = OpPhi %6 %9 %288 %345 %298
406        %549 = OpPhi %6 %550 %288 %548 %298
407        %301 = OpSLessThan %27 %535 %36
408               OpLoopMerge %297 %298 None
409               OpBranchConditional %301 %296 %297
410        %296 = OpLabel
411               OpBranch %303
412        %303 = OpLabel
413        %537 = OpPhi %6 %9 %296 %343 %306
414        %548 = OpPhi %6 %549 %296 %547 %306
415        %309 = OpSLessThan %27 %537 %36
416               OpLoopMerge %305 %306 None
417               OpBranchConditional %309 %304 %305
418        %304 = OpLabel
419               OpBranch %311
420        %311 = OpLabel
421        %539 = OpPhi %6 %9 %304 %341 %314
422        %547 = OpPhi %6 %548 %304 %546 %314
423        %317 = OpSLessThan %27 %539 %36
424               OpLoopMerge %313 %314 None
425               OpBranchConditional %317 %312 %313
426        %312 = OpLabel
427               OpBranch %319
428        %319 = OpLabel
429        %541 = OpPhi %6 %9 %312 %339 %322
430        %546 = OpPhi %6 %547 %312 %545 %322
431        %325 = OpSLessThan %27 %541 %36
432               OpLoopMerge %321 %322 None
433               OpBranchConditional %325 %320 %321
434        %320 = OpLabel
435               OpBranch %327
436        %327 = OpLabel
437        %545 = OpPhi %6 %546 %320 %335 %328
438        %543 = OpPhi %6 %9 %320 %337 %328
439        %333 = OpSLessThan %27 %543 %36
440               OpLoopMerge %329 %328 None
441               OpBranchConditional %333 %328 %329
442        %328 = OpLabel
443        %335 = OpIAdd %6 %545 %36
444        %337 = OpIAdd %6 %543 %36
445               OpBranch %327
446        %329 = OpLabel
447               OpBranch %322
448        %322 = OpLabel
449        %339 = OpIAdd %6 %541 %36
450               OpBranch %319
451        %321 = OpLabel
452               OpBranch %314
453        %314 = OpLabel
454        %341 = OpIAdd %6 %539 %36
455               OpBranch %311
456        %313 = OpLabel
457               OpBranch %306
458        %306 = OpLabel
459        %343 = OpIAdd %6 %537 %36
460               OpBranch %303
461        %305 = OpLabel
462               OpBranch %298
463        %298 = OpLabel
464        %345 = OpIAdd %6 %535 %36
465               OpBranch %295
466        %297 = OpLabel
467               OpBranch %290
468        %290 = OpLabel
469        %347 = OpIAdd %6 %533 %36
470               OpBranch %287
471        %289 = OpLabel
472               OpBranch %282
473        %282 = OpLabel
474        %349 = OpIAdd %6 %531 %36
475               OpBranch %279
476        %281 = OpLabel
477               OpBranch %274
478        %274 = OpLabel
479        %351 = OpIAdd %6 %529 %36
480               OpBranch %271
481        %273 = OpLabel
482               OpBranch %266
483        %266 = OpLabel
484        %353 = OpIAdd %6 %527 %36
485               OpBranch %263
486        %265 = OpLabel
487               OpBranch %258
488        %258 = OpLabel
489        %355 = OpIAdd %6 %525 %36
490               OpBranch %255
491        %257 = OpLabel
492               OpBranch %250
493        %250 = OpLabel
494        %357 = OpIAdd %6 %523 %36
495               OpBranch %247
496        %249 = OpLabel
497               OpBranch %242
498        %242 = OpLabel
499        %359 = OpIAdd %6 %521 %36
500               OpBranch %239
501        %241 = OpLabel
502               OpBranch %234
503        %234 = OpLabel
504        %361 = OpIAdd %6 %519 %36
505               OpBranch %231
506        %233 = OpLabel
507               OpBranch %226
508        %226 = OpLabel
509        %363 = OpIAdd %6 %517 %36
510               OpBranch %223
511        %225 = OpLabel
512               OpBranch %218
513        %218 = OpLabel
514        %365 = OpIAdd %6 %515 %36
515               OpBranch %215
516        %217 = OpLabel
517               OpBranch %210
518        %210 = OpLabel
519        %367 = OpIAdd %6 %513 %36
520               OpBranch %207
521        %209 = OpLabel
522               OpBranch %202
523        %202 = OpLabel
524        %369 = OpIAdd %6 %511 %36
525               OpBranch %199
526        %201 = OpLabel
527               OpBranch %194
528        %194 = OpLabel
529        %371 = OpIAdd %6 %509 %36
530               OpBranch %191
531        %193 = OpLabel
532               OpBranch %186
533        %186 = OpLabel
534        %373 = OpIAdd %6 %507 %36
535               OpBranch %183
536        %185 = OpLabel
537               OpBranch %178
538        %178 = OpLabel
539        %375 = OpIAdd %6 %505 %36
540               OpBranch %175
541        %177 = OpLabel
542               OpBranch %170
543        %170 = OpLabel
544        %377 = OpIAdd %6 %503 %36
545               OpBranch %167
546        %169 = OpLabel
547               OpBranch %162
548        %162 = OpLabel
549        %379 = OpIAdd %6 %501 %36
550               OpBranch %159
551        %161 = OpLabel
552               OpBranch %154
553        %154 = OpLabel
554        %381 = OpIAdd %6 %499 %36
555               OpBranch %151
556        %153 = OpLabel
557               OpBranch %146
558        %146 = OpLabel
559        %383 = OpIAdd %6 %497 %36
560               OpBranch %143
561        %145 = OpLabel
562               OpBranch %138
563        %138 = OpLabel
564        %385 = OpIAdd %6 %495 %36
565               OpBranch %135
566        %137 = OpLabel
567               OpBranch %130
568        %130 = OpLabel
569        %387 = OpIAdd %6 %493 %36
570               OpBranch %127
571        %129 = OpLabel
572               OpBranch %122
573        %122 = OpLabel
574        %389 = OpIAdd %6 %491 %36
575               OpBranch %119
576        %121 = OpLabel
577               OpBranch %114
578        %114 = OpLabel
579        %391 = OpIAdd %6 %489 %36
580               OpBranch %111
581        %113 = OpLabel
582               OpBranch %106
583        %106 = OpLabel
584        %393 = OpIAdd %6 %487 %36
585               OpBranch %103
586        %105 = OpLabel
587               OpBranch %98
588         %98 = OpLabel
589        %395 = OpIAdd %6 %485 %36
590               OpBranch %95
591         %97 = OpLabel
592               OpBranch %90
593         %90 = OpLabel
594        %397 = OpIAdd %6 %483 %36
595               OpBranch %87
596         %89 = OpLabel
597               OpBranch %82
598         %82 = OpLabel
599        %399 = OpIAdd %6 %481 %36
600               OpBranch %79
601         %81 = OpLabel
602               OpBranch %74
603         %74 = OpLabel
604        %401 = OpIAdd %6 %479 %36
605               OpBranch %71
606         %73 = OpLabel
607               OpBranch %66
608         %66 = OpLabel
609        %403 = OpIAdd %6 %477 %36
610               OpBranch %63
611         %65 = OpLabel
612               OpBranch %58
613         %58 = OpLabel
614        %405 = OpIAdd %6 %475 %36
615               OpBranch %55
616         %57 = OpLabel
617               OpBranch %50
618         %50 = OpLabel
619        %407 = OpIAdd %6 %473 %36
620               OpBranch %47
621         %49 = OpLabel
622               OpBranch %42
623         %42 = OpLabel
624        %409 = OpIAdd %6 %471 %36
625               OpBranch %39
626         %41 = OpLabel
627               OpBranch %33
628         %33 = OpLabel
629        %411 = OpIAdd %6 %468 %36
630               OpBranch %30
631         %32 = OpLabel
632        %414 = OpExtInst %6 %1 SClamp %470 %9 %413
633               OpStore %419 %416
634        %421 = OpAccessChain %420 %419 %414
635        %422 = OpLoad %10 %421
636        %423 = OpAccessChain %420 %15 %414
637               OpStore %423 %422
638        %425 = OpIAdd %6 %470 %36
639               OpBranch %23
640         %23 = OpLabel
641               OpBranch %20
642         %22 = OpLabel
643        %434 = OpAccessChain %433 %431 %432
644        %435 = OpLoad %10 %434
645        %436 = OpConvertFToS %6 %435
646        %437 = OpExtInst %6 %1 SClamp %436 %9 %413
647        %438 = OpAccessChain %420 %15 %437
648        %439 = OpLoad %10 %438
649        %441 = OpAccessChain %433 %431 %440
650        %442 = OpLoad %10 %441
651        %443 = OpConvertFToS %6 %442
652        %444 = OpExtInst %6 %1 SClamp %443 %9 %413
653        %445 = OpAccessChain %420 %15 %444
654        %446 = OpLoad %10 %445
655        %450 = OpFOrdEqual %27 %439 %415
656               OpSelectionMerge %452 None
657               OpBranchConditional %450 %451 %452
658        %451 = OpLabel
659        %455 = OpFOrdEqual %27 %446 %415
660               OpBranch %452
661        %452 = OpLabel
662        %456 = OpPhi %27 %450 %22 %455 %451
663               OpSelectionMerge %458 None
664               OpBranchConditional %456 %457 %463
665        %457 = OpLabel
666               OpStore %460 %462
667               OpBranch %458
668        %463 = OpLabel
669               OpStore %460 %464
670               OpBranch %458
671        %458 = OpLabel
672               OpReturn
673               OpFunctionEnd
674END
675
676
677BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
678
679PIPELINE graphics variant_pipeline
680  ATTACH variant_vertex_shader
681  ATTACH variant_fragment_shader
682  FRAMEBUFFER_SIZE 256 256
683  BIND BUFFER variant_framebuffer AS color LOCATION 0
684END
685CLEAR_COLOR variant_pipeline 0 0 0 255
686
687CLEAR variant_pipeline
688RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
689
690EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
691