Fix missing dependency on sparse binds
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / data / vulkan / amber / graphicsfuzz / control-flow-in-function.amber
1 #!amber
2
3 # Copyright 2019 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 bug found by GraphicsFuzz.
19
20 # Short description: A fragment shader with a lot of control flow
21
22 # The test passes because the fragment shader does not enter the first if statement, then writes
23 # the color red.
24
25 SHADER vertex variant_vertex_shader PASSTHROUGH
26
27 # variant_fragment_shader is derived from the following GLSL:
28 # #version 310 es
29 # precision highp float;
30 #
31 # layout(set = 0, binding = 0) uniform buf0
32 # {
33 #     vec2 injectionSwitch;
34 # };
35 # layout(location = 0) out vec4 _GLF_color;
36 #
37 # vec3 drawShape(vec2 pos)
38 # {
39 #     bool c2;
40 #     c2 = pos.x > 1.0;
41 #     if (c2)
42 #     {
43 #         return vec3(1.0);
44 #     }
45 #     bool c3;
46 #     c3 = pos.y < 1.0;
47 #     if (c3)
48 #     {
49 #         return vec3(1.0);
50 #     }
51 #     bool c4;
52 #     c4 = pos.y > 1.0;
53 #     if (c4)
54 #     {
55 #         return vec3(1.0);
56 #     }
57 #     bool c5;
58 #     c5 = pos.x < 1.0;
59 #     if (c5)
60 #     {
61 #         return vec3(1.0);
62 #     }
63 #     bool c6;
64 #     c6 = pos.x + 1.0 > 1.0;
65 #     if (c6)
66 #     {
67 #         return vec3(1.0);
68 #     }
69 #     int GLF_live4_looplimiter5;
70 #     for (
71 #         int GLF_live4i = 0;
72 #         GLF_live4i < 4;
73 #         ++GLF_live4i)
74 #     {
75 #         if (GLF_live4_looplimiter5 >= 7)
76 #         {
77 #             break;
78 #         }
79 #         GLF_live4_looplimiter5++;
80 #         mat4x2 GLF_live7m42;
81 #         GLF_live7m42 = mat4x2(1.0);
82 #         mat3 GLF_live7m33;
83 #         GLF_live7m33 = mat3(1.0);
84 #         int GLF_live7_looplimiter3;
85 #         for (
86 #             int GLF_live7cols = 2;
87 #             GLF_live7cols < 4;
88 #             ++GLF_live7cols)
89 #         {
90 #             if (GLF_live7_looplimiter3 >= 7)
91 #             {
92 #                 break;
93 #             }
94 #             GLF_live7_looplimiter3++;
95 #             int GLF_live7_looplimiter2;
96 #             for (
97 #                 int GLF_live7rows = 2;
98 #                 GLF_live7rows < 4;
99 #                 ++GLF_live7rows)
100 #             {
101 #                 if (GLF_live7_looplimiter2 >= 7)
102 #                 {
103 #                     break;
104 #                 }
105 #                 GLF_live7_looplimiter2++;
106 #                 int GLF_live7_looplimiter1;
107 #                 GLF_live7_looplimiter1 = 0;
108 #                 for (
109 #                     int GLF_live7c = 0;
110 #                     GLF_live7c < 3;
111 #                     GLF_live7c++)
112 #                 {
113 #                     if (GLF_live7_looplimiter1 >= 7)
114 #                     {
115 #                         break;
116 #                     }
117 #                     GLF_live7_looplimiter1++;
118 #                     int GLF_live7_looplimiter0;
119 #                     for (
120 #                         int GLF_live7r = 0;
121 #                         GLF_live7r < 2;
122 #                         ++GLF_live7r)
123 #                     {
124 #                         if (GLF_live7_looplimiter0 >= 7)
125 #                         {
126 #                             break;
127 #                         }
128 #                         GLF_live7_looplimiter0++;
129 #                         GLF_live7m33[GLF_live7c >= 0 && GLF_live7c < 3 ? GLF_live7c : 0][GLF_live7r >= 0 && GLF_live7r < 3 ? GLF_live7r : 0] = 1.0;
130 #                         if (0.0 > injectionSwitch.y)
131 #                         {
132 #                         }
133 #                         else
134 #                         {
135 #                             GLF_live7m42[GLF_live7c >= 0 && GLF_live7c < 4 ? GLF_live7c : 0][GLF_live7r >= 0 && GLF_live7r < 2 ? GLF_live7r : 0] = 1.0;
136 #                         }
137 #                     }
138 #                 }
139 #             }
140 #         }
141 #         float GLF_live7sums[9];
142 #         int GLF_live7sum_index;
143 #         GLF_live7sum_index = 0;
144 #         int GLF_live7_looplimiter7;
145 #         GLF_live7_looplimiter7 = 0;
146 #         for (
147 #             int GLF_live7cols = 2;
148 #             GLF_live7cols < 4;
149 #             ++GLF_live7cols)
150 #         {
151 #             if (GLF_live7_looplimiter7 >= 7)
152 #             {
153 #                 break;
154 #             }
155 #             GLF_live7_looplimiter7++;
156 #             int GLF_live7rows;
157 #             GLF_live7rows = 2;
158 #             GLF_live7sums[GLF_live7sum_index >= 0 && GLF_live7sum_index < 9 ? GLF_live7sum_index : 0] = 0.0;
159 #             for (
160 #                 int GLF_live7c = 0;
161 #                 GLF_live7c < 1;
162 #                 GLF_live7c++)
163 #             {
164 #                 for (
165 #                     int GLF_live7r = 0;
166 #                     GLF_live7r < GLF_live7rows;
167 #                     GLF_live7r++)
168 #                 {
169 #                     GLF_live7sums[GLF_live7sum_index >= 0 && GLF_live7sum_index < 9 ? GLF_live7sum_index : 0] += transpose(GLF_live7m33)[GLF_live7c < 3 ? 1 : int(injectionSwitch.x)][GLF_live7r < 3 ? 1 : 0];
170 #                     GLF_live7sums[GLF_live7sum_index >= 0 && GLF_live7sum_index < 9 ? GLF_live7sum_index : 0] += GLF_live7m42[1][GLF_live7r];
171 #                 }
172 #             }
173 #             GLF_live7sum_index++;
174 #         }
175 #     }
176 #     return vec3(1.0);
177 # }
178 # void main()
179 # {
180 #     if (injectionSwitch.x >= 2.0) // always false
181 #     {
182 #         vec2 position = gl_FragCoord.xy;
183 #         drawShape(position);
184 #         drawShape(position);
185 #
186 #         for (
187 #             int i = 25;
188 #             i > 0;
189 #             --i)
190 #         {
191 #             drawShape(position);
192 #         }
193 #     }
194 #     _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
195 # }
196 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
197 ; SPIR-V
198 ; Version: 1.0
199 ; Generator: Khronos Glslang Reference Front End; 7
200 ; Bound: 352
201 ; Schema: 0
202                OpCapability Shader
203           %1 = OpExtInstImport "GLSL.std.450"
204                OpMemoryModel Logical GLSL450
205                OpEntryPoint Fragment %4 "main" %326 %350
206                OpExecutionMode %4 OriginUpperLeft
207                OpSource ESSL 310
208                OpName %4 "main"
209                OpName %12 "drawShape(vf2;"
210                OpName %11 "pos"
211                OpName %16 "c2"
212                OpName %29 "c3"
213                OpName %38 "c4"
214                OpName %46 "c5"
215                OpName %54 "c6"
216                OpName %65 "GLF_live4i"
217                OpName %75 "GLF_live4_looplimiter5"
218                OpName %87 "GLF_live7m42"
219                OpName %95 "GLF_live7m33"
220                OpName %100 "GLF_live7cols"
221                OpName %109 "GLF_live7_looplimiter3"
222                OpName %117 "GLF_live7rows"
223                OpName %125 "GLF_live7_looplimiter2"
224                OpName %133 "GLF_live7_looplimiter1"
225                OpName %134 "GLF_live7c"
226                OpName %150 "GLF_live7r"
227                OpName %158 "GLF_live7_looplimiter0"
228                OpName %181 "buf0"
229                OpMemberName %181 0 "injectionSwitch"
230                OpName %183 ""
231                OpName %214 "GLF_live7sum_index"
232                OpName %215 "GLF_live7_looplimiter7"
233                OpName %216 "GLF_live7cols"
234                OpName %231 "GLF_live7rows"
235                OpName %235 "GLF_live7sums"
236                OpName %245 "GLF_live7c"
237                OpName %253 "GLF_live7r"
238                OpName %284 "indexable"
239                OpName %323 "position"
240                OpName %326 "gl_FragCoord"
241                OpName %329 "param"
242                OpName %332 "param"
243                OpName %335 "i"
244                OpName %344 "param"
245                OpName %350 "_GLF_color"
246                OpDecorate %65 RelaxedPrecision
247                OpDecorate %72 RelaxedPrecision
248                OpDecorate %75 RelaxedPrecision
249                OpDecorate %76 RelaxedPrecision
250                OpDecorate %82 RelaxedPrecision
251                OpDecorate %84 RelaxedPrecision
252                OpDecorate %100 RelaxedPrecision
253                OpDecorate %107 RelaxedPrecision
254                OpDecorate %109 RelaxedPrecision
255                OpDecorate %110 RelaxedPrecision
256                OpDecorate %115 RelaxedPrecision
257                OpDecorate %116 RelaxedPrecision
258                OpDecorate %117 RelaxedPrecision
259                OpDecorate %123 RelaxedPrecision
260                OpDecorate %125 RelaxedPrecision
261                OpDecorate %126 RelaxedPrecision
262                OpDecorate %131 RelaxedPrecision
263                OpDecorate %132 RelaxedPrecision
264                OpDecorate %133 RelaxedPrecision
265                OpDecorate %134 RelaxedPrecision
266                OpDecorate %140 RelaxedPrecision
267                OpDecorate %143 RelaxedPrecision
268                OpDecorate %148 RelaxedPrecision
269                OpDecorate %149 RelaxedPrecision
270                OpDecorate %150 RelaxedPrecision
271                OpDecorate %156 RelaxedPrecision
272                OpDecorate %158 RelaxedPrecision
273                OpDecorate %159 RelaxedPrecision
274                OpDecorate %164 RelaxedPrecision
275                OpDecorate %165 RelaxedPrecision
276                OpDecorate %166 RelaxedPrecision
277                OpDecorate %168 RelaxedPrecision
278                OpDecorate %171 RelaxedPrecision
279                OpDecorate %173 RelaxedPrecision
280                OpDecorate %175 RelaxedPrecision
281                OpDecorate %178 RelaxedPrecision
282                OpMemberDecorate %181 0 Offset 0
283                OpDecorate %181 Block
284                OpDecorate %183 DescriptorSet 0
285                OpDecorate %183 Binding 0
286                OpDecorate %191 RelaxedPrecision
287                OpDecorate %193 RelaxedPrecision
288                OpDecorate %196 RelaxedPrecision
289                OpDecorate %198 RelaxedPrecision
290                OpDecorate %200 RelaxedPrecision
291                OpDecorate %203 RelaxedPrecision
292                OpDecorate %206 RelaxedPrecision
293                OpDecorate %207 RelaxedPrecision
294                OpDecorate %208 RelaxedPrecision
295                OpDecorate %209 RelaxedPrecision
296                OpDecorate %210 RelaxedPrecision
297                OpDecorate %211 RelaxedPrecision
298                OpDecorate %212 RelaxedPrecision
299                OpDecorate %213 RelaxedPrecision
300                OpDecorate %214 RelaxedPrecision
301                OpDecorate %215 RelaxedPrecision
302                OpDecorate %216 RelaxedPrecision
303                OpDecorate %222 RelaxedPrecision
304                OpDecorate %224 RelaxedPrecision
305                OpDecorate %229 RelaxedPrecision
306                OpDecorate %230 RelaxedPrecision
307                OpDecorate %231 RelaxedPrecision
308                OpDecorate %236 RelaxedPrecision
309                OpDecorate %238 RelaxedPrecision
310                OpDecorate %242 RelaxedPrecision
311                OpDecorate %245 RelaxedPrecision
312                OpDecorate %251 RelaxedPrecision
313                OpDecorate %253 RelaxedPrecision
314                OpDecorate %259 RelaxedPrecision
315                OpDecorate %260 RelaxedPrecision
316                OpDecorate %262 RelaxedPrecision
317                OpDecorate %264 RelaxedPrecision
318                OpDecorate %267 RelaxedPrecision
319                OpDecorate %271 RelaxedPrecision
320                OpDecorate %281 RelaxedPrecision
321                OpDecorate %291 RelaxedPrecision
322                OpDecorate %293 RelaxedPrecision
323                OpDecorate %296 RelaxedPrecision
324                OpDecorate %298 RelaxedPrecision
325                OpDecorate %305 RelaxedPrecision
326                OpDecorate %306 RelaxedPrecision
327                OpDecorate %307 RelaxedPrecision
328                OpDecorate %308 RelaxedPrecision
329                OpDecorate %309 RelaxedPrecision
330                OpDecorate %310 RelaxedPrecision
331                OpDecorate %311 RelaxedPrecision
332                OpDecorate %312 RelaxedPrecision
333                OpDecorate %313 RelaxedPrecision
334                OpDecorate %314 RelaxedPrecision
335                OpDecorate %326 BuiltIn FragCoord
336                OpDecorate %335 RelaxedPrecision
337                OpDecorate %342 RelaxedPrecision
338                OpDecorate %347 RelaxedPrecision
339                OpDecorate %348 RelaxedPrecision
340                OpDecorate %350 Location 0
341           %2 = OpTypeVoid
342           %3 = OpTypeFunction %2
343           %6 = OpTypeFloat 32
344           %7 = OpTypeVector %6 2
345           %8 = OpTypePointer Function %7
346           %9 = OpTypeVector %6 3
347          %10 = OpTypeFunction %9 %8
348          %14 = OpTypeBool
349          %15 = OpTypePointer Function %14
350          %17 = OpTypeInt 32 0
351          %18 = OpConstant %17 0
352          %19 = OpTypePointer Function %6
353          %22 = OpConstant %6 1
354          %27 = OpConstantComposite %9 %22 %22 %22
355          %30 = OpConstant %17 1
356          %63 = OpTypeInt 32 1
357          %64 = OpTypePointer Function %63
358          %66 = OpConstant %63 0
359          %73 = OpConstant %63 4
360          %77 = OpConstant %63 7
361          %83 = OpConstant %63 1
362          %85 = OpTypeMatrix %7 4
363          %86 = OpTypePointer Function %85
364          %88 = OpConstant %6 0
365          %89 = OpConstantComposite %7 %22 %88
366          %90 = OpConstantComposite %7 %88 %22
367          %91 = OpConstantComposite %7 %88 %88
368          %92 = OpConstantComposite %85 %89 %90 %91 %89
369          %93 = OpTypeMatrix %9 3
370          %94 = OpTypePointer Function %93
371          %96 = OpConstantComposite %9 %22 %88 %88
372          %97 = OpConstantComposite %9 %88 %22 %88
373          %98 = OpConstantComposite %9 %88 %88 %22
374          %99 = OpConstantComposite %93 %96 %97 %98
375         %101 = OpConstant %63 2
376         %141 = OpConstant %63 3
377         %181 = OpTypeStruct %7
378         %182 = OpTypePointer Uniform %181
379         %183 = OpVariable %182 Uniform
380         %184 = OpTypePointer Uniform %6
381         %232 = OpConstant %17 9
382         %233 = OpTypeArray %6 %232
383         %234 = OpTypePointer Function %233
384         %239 = OpConstant %63 9
385         %319 = OpConstant %6 2
386         %324 = OpTypeVector %6 4
387         %325 = OpTypePointer Input %324
388         %326 = OpVariable %325 Input
389         %336 = OpConstant %63 25
390         %349 = OpTypePointer Output %324
391         %350 = OpVariable %349 Output
392         %351 = OpConstantComposite %324 %22 %88 %88 %22
393           %4 = OpFunction %2 None %3
394           %5 = OpLabel
395         %323 = OpVariable %8 Function
396         %329 = OpVariable %8 Function
397         %332 = OpVariable %8 Function
398         %335 = OpVariable %64 Function
399         %344 = OpVariable %8 Function
400         %317 = OpAccessChain %184 %183 %66 %18
401         %318 = OpLoad %6 %317
402         %320 = OpFOrdGreaterThanEqual %14 %318 %319
403                OpSelectionMerge %322 None
404                OpBranchConditional %320 %321 %322
405         %321 = OpLabel
406         %327 = OpLoad %324 %326
407         %328 = OpVectorShuffle %7 %327 %327 0 1
408                OpStore %323 %328
409         %330 = OpLoad %7 %323
410                OpStore %329 %330
411         %331 = OpFunctionCall %9 %12 %329
412         %333 = OpLoad %7 %323
413                OpStore %332 %333
414         %334 = OpFunctionCall %9 %12 %332
415                OpStore %335 %336
416                OpBranch %337
417         %337 = OpLabel
418                OpLoopMerge %339 %340 None
419                OpBranch %341
420         %341 = OpLabel
421         %342 = OpLoad %63 %335
422         %343 = OpSGreaterThan %14 %342 %66
423                OpBranchConditional %343 %338 %339
424         %338 = OpLabel
425         %345 = OpLoad %7 %323
426                OpStore %344 %345
427         %346 = OpFunctionCall %9 %12 %344
428                OpBranch %340
429         %340 = OpLabel
430         %347 = OpLoad %63 %335
431         %348 = OpISub %63 %347 %83
432                OpStore %335 %348
433                OpBranch %337
434         %339 = OpLabel
435                OpBranch %322
436         %322 = OpLabel
437                OpStore %350 %351
438                OpReturn
439                OpFunctionEnd
440          %12 = OpFunction %9 None %10
441          %11 = OpFunctionParameter %8
442          %13 = OpLabel
443          %16 = OpVariable %15 Function
444          %29 = OpVariable %15 Function
445          %38 = OpVariable %15 Function
446          %46 = OpVariable %15 Function
447          %54 = OpVariable %15 Function
448          %65 = OpVariable %64 Function
449          %75 = OpVariable %64 Function
450          %87 = OpVariable %86 Function
451          %95 = OpVariable %94 Function
452         %100 = OpVariable %64 Function
453         %109 = OpVariable %64 Function
454         %117 = OpVariable %64 Function
455         %125 = OpVariable %64 Function
456         %133 = OpVariable %64 Function
457         %134 = OpVariable %64 Function
458         %150 = OpVariable %64 Function
459         %158 = OpVariable %64 Function
460         %214 = OpVariable %64 Function
461         %215 = OpVariable %64 Function
462         %216 = OpVariable %64 Function
463         %231 = OpVariable %64 Function
464         %235 = OpVariable %234 Function
465         %245 = OpVariable %64 Function
466         %253 = OpVariable %64 Function
467         %273 = OpVariable %64 Function
468         %284 = OpVariable %94 Function
469          %20 = OpAccessChain %19 %11 %18
470          %21 = OpLoad %6 %20
471          %23 = OpFOrdGreaterThan %14 %21 %22
472                OpStore %16 %23
473          %24 = OpLoad %14 %16
474                OpSelectionMerge %26 None
475                OpBranchConditional %24 %25 %26
476          %25 = OpLabel
477                OpReturnValue %27
478          %26 = OpLabel
479          %31 = OpAccessChain %19 %11 %30
480          %32 = OpLoad %6 %31
481          %33 = OpFOrdLessThan %14 %32 %22
482                OpStore %29 %33
483          %34 = OpLoad %14 %29
484                OpSelectionMerge %36 None
485                OpBranchConditional %34 %35 %36
486          %35 = OpLabel
487                OpReturnValue %27
488          %36 = OpLabel
489          %39 = OpAccessChain %19 %11 %30
490          %40 = OpLoad %6 %39
491          %41 = OpFOrdGreaterThan %14 %40 %22
492                OpStore %38 %41
493          %42 = OpLoad %14 %38
494                OpSelectionMerge %44 None
495                OpBranchConditional %42 %43 %44
496          %43 = OpLabel
497                OpReturnValue %27
498          %44 = OpLabel
499          %47 = OpAccessChain %19 %11 %18
500          %48 = OpLoad %6 %47
501          %49 = OpFOrdLessThan %14 %48 %22
502                OpStore %46 %49
503          %50 = OpLoad %14 %46
504                OpSelectionMerge %52 None
505                OpBranchConditional %50 %51 %52
506          %51 = OpLabel
507                OpReturnValue %27
508          %52 = OpLabel
509          %55 = OpAccessChain %19 %11 %18
510          %56 = OpLoad %6 %55
511          %57 = OpFAdd %6 %56 %22
512          %58 = OpFOrdGreaterThan %14 %57 %22
513                OpStore %54 %58
514          %59 = OpLoad %14 %54
515                OpSelectionMerge %61 None
516                OpBranchConditional %59 %60 %61
517          %60 = OpLabel
518                OpReturnValue %27
519          %61 = OpLabel
520                OpStore %65 %66
521                OpBranch %67
522          %67 = OpLabel
523                OpLoopMerge %69 %70 None
524                OpBranch %71
525          %71 = OpLabel
526          %72 = OpLoad %63 %65
527          %74 = OpSLessThan %14 %72 %73
528                OpBranchConditional %74 %68 %69
529          %68 = OpLabel
530          %76 = OpLoad %63 %75
531          %78 = OpSGreaterThanEqual %14 %76 %77
532                OpSelectionMerge %80 None
533                OpBranchConditional %78 %79 %80
534          %79 = OpLabel
535                OpBranch %69
536          %80 = OpLabel
537          %82 = OpLoad %63 %75
538          %84 = OpIAdd %63 %82 %83
539                OpStore %75 %84
540                OpStore %87 %92
541                OpStore %95 %99
542                OpStore %100 %101
543                OpBranch %102
544         %102 = OpLabel
545                OpLoopMerge %104 %105 None
546                OpBranch %106
547         %106 = OpLabel
548         %107 = OpLoad %63 %100
549         %108 = OpSLessThan %14 %107 %73
550                OpBranchConditional %108 %103 %104
551         %103 = OpLabel
552         %110 = OpLoad %63 %109
553         %111 = OpSGreaterThanEqual %14 %110 %77
554                OpSelectionMerge %113 None
555                OpBranchConditional %111 %112 %113
556         %112 = OpLabel
557                OpBranch %104
558         %113 = OpLabel
559         %115 = OpLoad %63 %109
560         %116 = OpIAdd %63 %115 %83
561                OpStore %109 %116
562                OpStore %117 %101
563                OpBranch %118
564         %118 = OpLabel
565                OpLoopMerge %120 %121 None
566                OpBranch %122
567         %122 = OpLabel
568         %123 = OpLoad %63 %117
569         %124 = OpSLessThan %14 %123 %73
570                OpBranchConditional %124 %119 %120
571         %119 = OpLabel
572         %126 = OpLoad %63 %125
573         %127 = OpSGreaterThanEqual %14 %126 %77
574                OpSelectionMerge %129 None
575                OpBranchConditional %127 %128 %129
576         %128 = OpLabel
577                OpBranch %120
578         %129 = OpLabel
579         %131 = OpLoad %63 %125
580         %132 = OpIAdd %63 %131 %83
581                OpStore %125 %132
582                OpStore %133 %66
583                OpStore %134 %66
584                OpBranch %135
585         %135 = OpLabel
586                OpLoopMerge %137 %138 None
587                OpBranch %139
588         %139 = OpLabel
589         %140 = OpLoad %63 %134
590         %142 = OpSLessThan %14 %140 %141
591                OpBranchConditional %142 %136 %137
592         %136 = OpLabel
593         %143 = OpLoad %63 %133
594         %144 = OpSGreaterThanEqual %14 %143 %77
595                OpSelectionMerge %146 None
596                OpBranchConditional %144 %145 %146
597         %145 = OpLabel
598                OpBranch %137
599         %146 = OpLabel
600         %148 = OpLoad %63 %133
601         %149 = OpIAdd %63 %148 %83
602                OpStore %133 %149
603                OpStore %150 %66
604                OpBranch %151
605         %151 = OpLabel
606                OpLoopMerge %153 %154 None
607                OpBranch %155
608         %155 = OpLabel
609         %156 = OpLoad %63 %150
610         %157 = OpSLessThan %14 %156 %101
611                OpBranchConditional %157 %152 %153
612         %152 = OpLabel
613         %159 = OpLoad %63 %158
614         %160 = OpSGreaterThanEqual %14 %159 %77
615                OpSelectionMerge %162 None
616                OpBranchConditional %160 %161 %162
617         %161 = OpLabel
618                OpBranch %153
619         %162 = OpLabel
620         %164 = OpLoad %63 %158
621         %165 = OpIAdd %63 %164 %83
622                OpStore %158 %165
623         %166 = OpLoad %63 %134
624         %167 = OpSGreaterThanEqual %14 %166 %66
625         %168 = OpLoad %63 %134
626         %169 = OpSLessThan %14 %168 %141
627         %170 = OpLogicalAnd %14 %167 %169
628         %171 = OpLoad %63 %134
629         %172 = OpSelect %63 %170 %171 %66
630         %173 = OpLoad %63 %150
631         %174 = OpSGreaterThanEqual %14 %173 %66
632         %175 = OpLoad %63 %150
633         %176 = OpSLessThan %14 %175 %141
634         %177 = OpLogicalAnd %14 %174 %176
635         %178 = OpLoad %63 %150
636         %179 = OpSelect %63 %177 %178 %66
637         %180 = OpAccessChain %19 %95 %172 %179
638                OpStore %180 %22
639         %185 = OpAccessChain %184 %183 %66 %30
640         %186 = OpLoad %6 %185
641         %187 = OpFOrdGreaterThan %14 %88 %186
642                OpSelectionMerge %189 None
643                OpBranchConditional %187 %188 %190
644         %188 = OpLabel
645                OpBranch %189
646         %190 = OpLabel
647         %191 = OpLoad %63 %134
648         %192 = OpSGreaterThanEqual %14 %191 %66
649         %193 = OpLoad %63 %134
650         %194 = OpSLessThan %14 %193 %73
651         %195 = OpLogicalAnd %14 %192 %194
652         %196 = OpLoad %63 %134
653         %197 = OpSelect %63 %195 %196 %66
654         %198 = OpLoad %63 %150
655         %199 = OpSGreaterThanEqual %14 %198 %66
656         %200 = OpLoad %63 %150
657         %201 = OpSLessThan %14 %200 %101
658         %202 = OpLogicalAnd %14 %199 %201
659         %203 = OpLoad %63 %150
660         %204 = OpSelect %63 %202 %203 %66
661         %205 = OpAccessChain %19 %87 %197 %204
662                OpStore %205 %22
663                OpBranch %189
664         %189 = OpLabel
665                OpBranch %154
666         %154 = OpLabel
667         %206 = OpLoad %63 %150
668         %207 = OpIAdd %63 %206 %83
669                OpStore %150 %207
670                OpBranch %151
671         %153 = OpLabel
672                OpBranch %138
673         %138 = OpLabel
674         %208 = OpLoad %63 %134
675         %209 = OpIAdd %63 %208 %83
676                OpStore %134 %209
677                OpBranch %135
678         %137 = OpLabel
679                OpBranch %121
680         %121 = OpLabel
681         %210 = OpLoad %63 %117
682         %211 = OpIAdd %63 %210 %83
683                OpStore %117 %211
684                OpBranch %118
685         %120 = OpLabel
686                OpBranch %105
687         %105 = OpLabel
688         %212 = OpLoad %63 %100
689         %213 = OpIAdd %63 %212 %83
690                OpStore %100 %213
691                OpBranch %102
692         %104 = OpLabel
693                OpStore %214 %66
694                OpStore %215 %66
695                OpStore %216 %101
696                OpBranch %217
697         %217 = OpLabel
698                OpLoopMerge %219 %220 None
699                OpBranch %221
700         %221 = OpLabel
701         %222 = OpLoad %63 %216
702         %223 = OpSLessThan %14 %222 %73
703                OpBranchConditional %223 %218 %219
704         %218 = OpLabel
705         %224 = OpLoad %63 %215
706         %225 = OpSGreaterThanEqual %14 %224 %77
707                OpSelectionMerge %227 None
708                OpBranchConditional %225 %226 %227
709         %226 = OpLabel
710                OpBranch %219
711         %227 = OpLabel
712         %229 = OpLoad %63 %215
713         %230 = OpIAdd %63 %229 %83
714                OpStore %215 %230
715                OpStore %231 %101
716         %236 = OpLoad %63 %214
717         %237 = OpSGreaterThanEqual %14 %236 %66
718         %238 = OpLoad %63 %214
719         %240 = OpSLessThan %14 %238 %239
720         %241 = OpLogicalAnd %14 %237 %240
721         %242 = OpLoad %63 %214
722         %243 = OpSelect %63 %241 %242 %66
723         %244 = OpAccessChain %19 %235 %243
724                OpStore %244 %88
725                OpStore %245 %66
726                OpBranch %246
727         %246 = OpLabel
728                OpLoopMerge %248 %249 None
729                OpBranch %250
730         %250 = OpLabel
731         %251 = OpLoad %63 %245
732         %252 = OpSLessThan %14 %251 %83
733                OpBranchConditional %252 %247 %248
734         %247 = OpLabel
735                OpStore %253 %66
736                OpBranch %254
737         %254 = OpLabel
738                OpLoopMerge %256 %257 None
739                OpBranch %258
740         %258 = OpLabel
741         %259 = OpLoad %63 %253
742         %260 = OpLoad %63 %231
743         %261 = OpSLessThan %14 %259 %260
744                OpBranchConditional %261 %255 %256
745         %255 = OpLabel
746         %262 = OpLoad %63 %214
747         %263 = OpSGreaterThanEqual %14 %262 %66
748         %264 = OpLoad %63 %214
749         %265 = OpSLessThan %14 %264 %239
750         %266 = OpLogicalAnd %14 %263 %265
751         %267 = OpLoad %63 %214
752         %268 = OpSelect %63 %266 %267 %66
753         %269 = OpLoad %93 %95
754         %270 = OpTranspose %93 %269
755         %271 = OpLoad %63 %245
756         %272 = OpSLessThan %14 %271 %141
757                OpSelectionMerge %275 None
758                OpBranchConditional %272 %274 %276
759         %274 = OpLabel
760                OpStore %273 %83
761                OpBranch %275
762         %276 = OpLabel
763         %277 = OpAccessChain %184 %183 %66 %18
764         %278 = OpLoad %6 %277
765         %279 = OpConvertFToS %63 %278
766                OpStore %273 %279
767                OpBranch %275
768         %275 = OpLabel
769         %280 = OpLoad %63 %273
770         %281 = OpLoad %63 %253
771         %282 = OpSLessThan %14 %281 %141
772         %283 = OpSelect %63 %282 %83 %66
773                OpStore %284 %270
774         %285 = OpAccessChain %19 %284 %280 %283
775         %286 = OpLoad %6 %285
776         %287 = OpAccessChain %19 %235 %268
777         %288 = OpLoad %6 %287
778         %289 = OpFAdd %6 %288 %286
779         %290 = OpAccessChain %19 %235 %268
780                OpStore %290 %289
781         %291 = OpLoad %63 %214
782         %292 = OpSGreaterThanEqual %14 %291 %66
783         %293 = OpLoad %63 %214
784         %294 = OpSLessThan %14 %293 %239
785         %295 = OpLogicalAnd %14 %292 %294
786         %296 = OpLoad %63 %214
787         %297 = OpSelect %63 %295 %296 %66
788         %298 = OpLoad %63 %253
789         %299 = OpAccessChain %19 %87 %83 %298
790         %300 = OpLoad %6 %299
791         %301 = OpAccessChain %19 %235 %297
792         %302 = OpLoad %6 %301
793         %303 = OpFAdd %6 %302 %300
794         %304 = OpAccessChain %19 %235 %297
795                OpStore %304 %303
796                OpBranch %257
797         %257 = OpLabel
798         %305 = OpLoad %63 %253
799         %306 = OpIAdd %63 %305 %83
800                OpStore %253 %306
801                OpBranch %254
802         %256 = OpLabel
803                OpBranch %249
804         %249 = OpLabel
805         %307 = OpLoad %63 %245
806         %308 = OpIAdd %63 %307 %83
807                OpStore %245 %308
808                OpBranch %246
809         %248 = OpLabel
810         %309 = OpLoad %63 %214
811         %310 = OpIAdd %63 %309 %83
812                OpStore %214 %310
813                OpBranch %220
814         %220 = OpLabel
815         %311 = OpLoad %63 %216
816         %312 = OpIAdd %63 %311 %83
817                OpStore %216 %312
818                OpBranch %217
819         %219 = OpLabel
820                OpBranch %70
821          %70 = OpLabel
822         %313 = OpLoad %63 %65
823         %314 = OpIAdd %63 %313 %83
824                OpStore %65 %314
825                OpBranch %67
826          %69 = OpLabel
827                OpReturnValue %27
828                OpFunctionEnd
829 END
830
831 # uniforms for variant
832
833 # injectionSwitch
834 BUFFER variant_injectionSwitch DATA_TYPE vec2<float> DATA
835  0.0 1.0
836 END
837
838 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
839
840 PIPELINE graphics variant_pipeline
841   ATTACH variant_vertex_shader
842   ATTACH variant_fragment_shader
843   FRAMEBUFFER_SIZE 256 256
844   BIND BUFFER variant_framebuffer AS color LOCATION 0
845   BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
846 END
847 CLEAR_COLOR variant_pipeline 0 0 0 255
848
849 CLEAR variant_pipeline
850 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
851
852 EXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255