Fix missing dependency on sparse binds
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / data / vulkan / amber / graphicsfuzz / spv-dead-break-and-unroll.amber
1 #!amber
2
3 # Copyright 2020 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 the GraphicsFuzz project.
19
20 # Short description: Equivalent shaders, one with a dead break and an Unroll annotation
21
22 # The test passes because both shaders render the same image.
23
24 SHADER vertex reference_vertex_shader PASSTHROUGH
25
26 SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
27 ; SPIR-V
28 ; Version: 1.0
29 ; Generator: Khronos Glslang Reference Front End; 7
30 ; Bound: 442
31 ; Schema: 0
32                OpCapability Shader
33           %1 = OpExtInstImport "GLSL.std.450"
34                OpMemoryModel Logical GLSL450
35                OpEntryPoint Fragment %4 "main" %12 %435
36                OpExecutionMode %4 OriginUpperLeft
37                OpSource ESSL 320
38                OpName %4 "main"
39                OpName %9 "pos"
40                OpName %12 "gl_FragCoord"
41                OpName %15 "buf0"
42                OpMemberName %15 0 "resolution"
43                OpName %17 ""
44                OpName %26 "ipos"
45                OpName %42 "i"
46                OpName %55 "map"
47                OpName %62 "p"
48                OpName %65 "canwalk"
49                OpName %67 "v"
50                OpName %74 "directions"
51                OpName %171 "j"
52                OpName %208 "d"
53                OpName %435 "_GLF_color"
54                OpDecorate %12 BuiltIn FragCoord
55                OpMemberDecorate %15 0 Offset 0
56                OpDecorate %15 Block
57                OpDecorate %17 DescriptorSet 0
58                OpDecorate %17 Binding 0
59                OpDecorate %435 Location 0
60           %2 = OpTypeVoid
61           %3 = OpTypeFunction %2
62           %6 = OpTypeFloat 32
63           %7 = OpTypeVector %6 2
64           %8 = OpTypePointer Function %7
65          %10 = OpTypeVector %6 4
66          %11 = OpTypePointer Input %10
67          %12 = OpVariable %11 Input
68          %15 = OpTypeStruct %7
69          %16 = OpTypePointer Uniform %15
70          %17 = OpVariable %16 Uniform
71          %18 = OpTypeInt 32 1
72          %19 = OpConstant %18 0
73          %20 = OpTypePointer Uniform %7
74          %24 = OpTypeVector %18 2
75          %25 = OpTypePointer Function %24
76          %27 = OpTypeInt 32 0
77          %28 = OpConstant %27 0
78          %29 = OpTypePointer Function %6
79          %32 = OpConstant %6 16
80          %35 = OpConstant %27 1
81          %41 = OpTypePointer Function %18
82          %49 = OpConstant %18 256
83          %50 = OpTypeBool
84          %52 = OpConstant %27 256
85          %53 = OpTypeArray %18 %52
86          %54 = OpTypePointer Private %53
87          %55 = OpVariable %54 Private
88          %57 = OpTypePointer Private %18
89          %60 = OpConstant %18 1
90          %63 = OpConstantComposite %24 %19 %19
91          %64 = OpTypePointer Function %50
92          %66 = OpConstantTrue %50
93          %82 = OpConstant %18 2
94          %86 = OpConstant %18 16
95         %119 = OpConstant %18 14
96         %162 = OpConstantFalse %50
97         %169 = OpConstant %18 8
98         %434 = OpTypePointer Output %10
99         %435 = OpVariable %434 Output
100         %436 = OpConstant %6 1
101         %437 = OpConstantComposite %10 %436 %436 %436 %436
102         %440 = OpConstant %6 0
103         %441 = OpConstantComposite %10 %440 %440 %440 %436
104           %4 = OpFunction %2 None %3
105           %5 = OpLabel
106           %9 = OpVariable %8 Function
107          %26 = OpVariable %25 Function
108          %42 = OpVariable %41 Function
109          %62 = OpVariable %25 Function
110          %65 = OpVariable %64 Function
111          %67 = OpVariable %41 Function
112          %74 = OpVariable %41 Function
113         %171 = OpVariable %41 Function
114         %208 = OpVariable %41 Function
115          %13 = OpLoad %10 %12
116          %14 = OpVectorShuffle %7 %13 %13 0 1
117          %21 = OpAccessChain %20 %17 %19
118          %22 = OpLoad %7 %21
119          %23 = OpFDiv %7 %14 %22
120                OpStore %9 %23
121          %30 = OpAccessChain %29 %9 %28
122          %31 = OpLoad %6 %30
123          %33 = OpFMul %6 %31 %32
124          %34 = OpConvertFToS %18 %33
125          %36 = OpAccessChain %29 %9 %35
126          %37 = OpLoad %6 %36
127          %38 = OpFMul %6 %37 %32
128          %39 = OpConvertFToS %18 %38
129          %40 = OpCompositeConstruct %24 %34 %39
130                OpStore %26 %40
131                OpStore %42 %19
132                OpBranch %43
133          %43 = OpLabel
134                OpLoopMerge %45 %46 None
135                OpBranch %47
136          %47 = OpLabel
137          %48 = OpLoad %18 %42
138          %51 = OpSLessThan %50 %48 %49
139                OpBranchConditional %51 %44 %45
140          %44 = OpLabel
141          %56 = OpLoad %18 %42
142          %58 = OpAccessChain %57 %55 %56
143                OpStore %58 %19
144                OpBranch %46
145          %46 = OpLabel
146          %59 = OpLoad %18 %42
147          %61 = OpIAdd %18 %59 %60
148                OpStore %42 %61
149                OpBranch %43
150          %45 = OpLabel
151                OpStore %62 %63
152                OpStore %65 %66
153                OpStore %67 %19
154                OpBranch %68
155          %68 = OpLabel
156                OpLoopMerge %70 %71 None
157                OpBranch %69
158          %69 = OpLabel
159          %72 = OpLoad %18 %67
160          %73 = OpIAdd %18 %72 %60
161                OpStore %67 %73
162                OpStore %74 %19
163          %75 = OpAccessChain %41 %62 %28
164          %76 = OpLoad %18 %75
165          %77 = OpSGreaterThan %50 %76 %19
166                OpSelectionMerge %79 None
167                OpBranchConditional %77 %78 %79
168          %78 = OpLabel
169          %80 = OpAccessChain %41 %62 %28
170          %81 = OpLoad %18 %80
171          %83 = OpISub %18 %81 %82
172          %84 = OpAccessChain %41 %62 %35
173          %85 = OpLoad %18 %84
174          %87 = OpIMul %18 %85 %86
175          %88 = OpIAdd %18 %83 %87
176          %89 = OpAccessChain %57 %55 %88
177          %90 = OpLoad %18 %89
178          %91 = OpIEqual %50 %90 %19
179                OpBranch %79
180          %79 = OpLabel
181          %92 = OpPhi %50 %77 %69 %91 %78
182                OpSelectionMerge %94 None
183                OpBranchConditional %92 %93 %94
184          %93 = OpLabel
185          %95 = OpLoad %18 %74
186          %96 = OpIAdd %18 %95 %60
187                OpStore %74 %96
188                OpBranch %94
189          %94 = OpLabel
190          %97 = OpAccessChain %41 %62 %35
191          %98 = OpLoad %18 %97
192          %99 = OpSGreaterThan %50 %98 %19
193                OpSelectionMerge %101 None
194                OpBranchConditional %99 %100 %101
195         %100 = OpLabel
196         %102 = OpAccessChain %41 %62 %28
197         %103 = OpLoad %18 %102
198         %104 = OpAccessChain %41 %62 %35
199         %105 = OpLoad %18 %104
200         %106 = OpISub %18 %105 %82
201         %107 = OpIMul %18 %106 %86
202         %108 = OpIAdd %18 %103 %107
203         %109 = OpAccessChain %57 %55 %108
204         %110 = OpLoad %18 %109
205         %111 = OpIEqual %50 %110 %19
206                OpBranch %101
207         %101 = OpLabel
208         %112 = OpPhi %50 %99 %94 %111 %100
209                OpSelectionMerge %114 None
210                OpBranchConditional %112 %113 %114
211         %113 = OpLabel
212         %115 = OpLoad %18 %74
213         %116 = OpIAdd %18 %115 %60
214                OpStore %74 %116
215                OpBranch %114
216         %114 = OpLabel
217         %117 = OpAccessChain %41 %62 %28
218         %118 = OpLoad %18 %117
219         %120 = OpSLessThan %50 %118 %119
220                OpSelectionMerge %122 None
221                OpBranchConditional %120 %121 %122
222         %121 = OpLabel
223         %123 = OpAccessChain %41 %62 %28
224         %124 = OpLoad %18 %123
225         %125 = OpIAdd %18 %124 %82
226         %126 = OpAccessChain %41 %62 %35
227         %127 = OpLoad %18 %126
228         %128 = OpIMul %18 %127 %86
229         %129 = OpIAdd %18 %125 %128
230         %130 = OpAccessChain %57 %55 %129
231         %131 = OpLoad %18 %130
232         %132 = OpIEqual %50 %131 %19
233                OpBranch %122
234         %122 = OpLabel
235         %133 = OpPhi %50 %120 %114 %132 %121
236                OpSelectionMerge %135 None
237                OpBranchConditional %133 %134 %135
238         %134 = OpLabel
239         %136 = OpLoad %18 %74
240         %137 = OpIAdd %18 %136 %60
241                OpStore %74 %137
242                OpBranch %135
243         %135 = OpLabel
244         %138 = OpAccessChain %41 %62 %35
245         %139 = OpLoad %18 %138
246         %140 = OpSLessThan %50 %139 %119
247                OpSelectionMerge %142 None
248                OpBranchConditional %140 %141 %142
249         %141 = OpLabel
250         %143 = OpAccessChain %41 %62 %28
251         %144 = OpLoad %18 %143
252         %145 = OpAccessChain %41 %62 %35
253         %146 = OpLoad %18 %145
254         %147 = OpIAdd %18 %146 %82
255         %148 = OpIMul %18 %147 %86
256         %149 = OpIAdd %18 %144 %148
257         %150 = OpAccessChain %57 %55 %149
258         %151 = OpLoad %18 %150
259         %152 = OpIEqual %50 %151 %19
260                OpBranch %142
261         %142 = OpLabel
262         %153 = OpPhi %50 %140 %135 %152 %141
263                OpSelectionMerge %155 None
264                OpBranchConditional %153 %154 %155
265         %154 = OpLabel
266         %156 = OpLoad %18 %74
267         %157 = OpIAdd %18 %156 %60
268                OpStore %74 %157
269                OpBranch %155
270         %155 = OpLabel
271         %158 = OpLoad %18 %74
272         %159 = OpIEqual %50 %158 %19
273                OpSelectionMerge %161 None
274                OpBranchConditional %159 %160 %207
275         %160 = OpLabel
276                OpStore %65 %162
277                OpStore %42 %19
278                OpBranch %163
279         %163 = OpLabel
280                OpLoopMerge %165 %166 None
281                OpBranch %167
282         %167 = OpLabel
283         %168 = OpLoad %18 %42
284         %170 = OpSLessThan %50 %168 %169
285                OpBranchConditional %170 %164 %165
286         %164 = OpLabel
287                OpStore %171 %19
288                OpBranch %172
289         %172 = OpLabel
290                OpLoopMerge %174 %175 None
291                OpBranch %176
292         %176 = OpLabel
293         %177 = OpLoad %18 %171
294         %178 = OpSLessThan %50 %177 %169
295                OpBranchConditional %178 %173 %174
296         %173 = OpLabel
297         %179 = OpLoad %18 %171
298         %180 = OpIMul %18 %179 %82
299         %181 = OpLoad %18 %42
300         %182 = OpIMul %18 %181 %82
301         %183 = OpIMul %18 %182 %86
302         %184 = OpIAdd %18 %180 %183
303         %185 = OpAccessChain %57 %55 %184
304         %186 = OpLoad %18 %185
305         %187 = OpIEqual %50 %186 %19
306                OpSelectionMerge %189 None
307                OpBranchConditional %187 %188 %189
308         %188 = OpLabel
309         %190 = OpLoad %18 %171
310         %191 = OpIMul %18 %190 %82
311         %192 = OpAccessChain %41 %62 %28
312                OpStore %192 %191
313         %193 = OpLoad %18 %42
314         %194 = OpIMul %18 %193 %82
315         %195 = OpAccessChain %41 %62 %35
316                OpStore %195 %194
317                OpStore %65 %66
318                OpBranch %189
319         %189 = OpLabel
320                OpBranch %175
321         %175 = OpLabel
322         %196 = OpLoad %18 %171
323         %197 = OpIAdd %18 %196 %60
324                OpStore %171 %197
325                OpBranch %172
326         %174 = OpLabel
327                OpBranch %166
328         %166 = OpLabel
329         %198 = OpLoad %18 %42
330         %199 = OpIAdd %18 %198 %60
331                OpStore %42 %199
332                OpBranch %163
333         %165 = OpLabel
334         %200 = OpAccessChain %41 %62 %28
335         %201 = OpLoad %18 %200
336         %202 = OpAccessChain %41 %62 %35
337         %203 = OpLoad %18 %202
338         %204 = OpIMul %18 %203 %86
339         %205 = OpIAdd %18 %201 %204
340         %206 = OpAccessChain %57 %55 %205
341                OpStore %206 %60
342                OpBranch %161
343         %207 = OpLabel
344         %209 = OpLoad %18 %67
345         %210 = OpLoad %18 %74
346         %211 = OpSMod %18 %209 %210
347                OpStore %208 %211
348         %212 = OpLoad %18 %74
349         %213 = OpLoad %18 %67
350         %214 = OpIAdd %18 %213 %212
351                OpStore %67 %214
352         %215 = OpLoad %18 %208
353         %216 = OpSGreaterThanEqual %50 %215 %19
354                OpSelectionMerge %218 None
355                OpBranchConditional %216 %217 %218
356         %217 = OpLabel
357         %219 = OpAccessChain %41 %62 %28
358         %220 = OpLoad %18 %219
359         %221 = OpSGreaterThan %50 %220 %19
360                OpBranch %218
361         %218 = OpLabel
362         %222 = OpPhi %50 %216 %207 %221 %217
363                OpSelectionMerge %224 None
364                OpBranchConditional %222 %223 %224
365         %223 = OpLabel
366         %225 = OpAccessChain %41 %62 %28
367         %226 = OpLoad %18 %225
368         %227 = OpISub %18 %226 %82
369         %228 = OpAccessChain %41 %62 %35
370         %229 = OpLoad %18 %228
371         %230 = OpIMul %18 %229 %86
372         %231 = OpIAdd %18 %227 %230
373         %232 = OpAccessChain %57 %55 %231
374         %233 = OpLoad %18 %232
375         %234 = OpIEqual %50 %233 %19
376                OpBranch %224
377         %224 = OpLabel
378         %235 = OpPhi %50 %222 %218 %234 %223
379                OpSelectionMerge %237 None
380                OpBranchConditional %235 %236 %237
381         %236 = OpLabel
382         %238 = OpLoad %18 %208
383         %239 = OpISub %18 %238 %60
384                OpStore %208 %239
385         %240 = OpAccessChain %41 %62 %28
386         %241 = OpLoad %18 %240
387         %242 = OpAccessChain %41 %62 %35
388         %243 = OpLoad %18 %242
389         %244 = OpIMul %18 %243 %86
390         %245 = OpIAdd %18 %241 %244
391         %246 = OpAccessChain %57 %55 %245
392                OpStore %246 %60
393         %247 = OpAccessChain %41 %62 %28
394         %248 = OpLoad %18 %247
395         %249 = OpISub %18 %248 %60
396         %250 = OpAccessChain %41 %62 %35
397         %251 = OpLoad %18 %250
398         %252 = OpIMul %18 %251 %86
399         %253 = OpIAdd %18 %249 %252
400         %254 = OpAccessChain %57 %55 %253
401                OpStore %254 %60
402         %255 = OpAccessChain %41 %62 %28
403         %256 = OpLoad %18 %255
404         %257 = OpISub %18 %256 %82
405         %258 = OpAccessChain %41 %62 %35
406         %259 = OpLoad %18 %258
407         %260 = OpIMul %18 %259 %86
408         %261 = OpIAdd %18 %257 %260
409         %262 = OpAccessChain %57 %55 %261
410                OpStore %262 %60
411         %263 = OpAccessChain %41 %62 %28
412         %264 = OpLoad %18 %263
413         %265 = OpISub %18 %264 %82
414         %266 = OpAccessChain %41 %62 %28
415                OpStore %266 %265
416                OpBranch %237
417         %237 = OpLabel
418         %267 = OpLoad %18 %208
419         %268 = OpSGreaterThanEqual %50 %267 %19
420                OpSelectionMerge %270 None
421                OpBranchConditional %268 %269 %270
422         %269 = OpLabel
423         %271 = OpAccessChain %41 %62 %35
424         %272 = OpLoad %18 %271
425         %273 = OpSGreaterThan %50 %272 %19
426                OpBranch %270
427         %270 = OpLabel
428         %274 = OpPhi %50 %268 %237 %273 %269
429                OpSelectionMerge %276 None
430                OpBranchConditional %274 %275 %276
431         %275 = OpLabel
432         %277 = OpAccessChain %41 %62 %28
433         %278 = OpLoad %18 %277
434         %279 = OpAccessChain %41 %62 %35
435         %280 = OpLoad %18 %279
436         %281 = OpISub %18 %280 %82
437         %282 = OpIMul %18 %281 %86
438         %283 = OpIAdd %18 %278 %282
439         %284 = OpAccessChain %57 %55 %283
440         %285 = OpLoad %18 %284
441         %286 = OpIEqual %50 %285 %19
442                OpBranch %276
443         %276 = OpLabel
444         %287 = OpPhi %50 %274 %270 %286 %275
445                OpSelectionMerge %289 None
446                OpBranchConditional %287 %288 %289
447         %288 = OpLabel
448         %290 = OpLoad %18 %208
449         %291 = OpISub %18 %290 %60
450                OpStore %208 %291
451         %292 = OpAccessChain %41 %62 %28
452         %293 = OpLoad %18 %292
453         %294 = OpAccessChain %41 %62 %35
454         %295 = OpLoad %18 %294
455         %296 = OpIMul %18 %295 %86
456         %297 = OpIAdd %18 %293 %296
457         %298 = OpAccessChain %57 %55 %297
458                OpStore %298 %60
459         %299 = OpAccessChain %41 %62 %28
460         %300 = OpLoad %18 %299
461         %301 = OpAccessChain %41 %62 %35
462         %302 = OpLoad %18 %301
463         %303 = OpISub %18 %302 %60
464         %304 = OpIMul %18 %303 %86
465         %305 = OpIAdd %18 %300 %304
466         %306 = OpAccessChain %57 %55 %305
467                OpStore %306 %60
468         %307 = OpAccessChain %41 %62 %28
469         %308 = OpLoad %18 %307
470         %309 = OpAccessChain %41 %62 %35
471         %310 = OpLoad %18 %309
472         %311 = OpISub %18 %310 %82
473         %312 = OpIMul %18 %311 %86
474         %313 = OpIAdd %18 %308 %312
475         %314 = OpAccessChain %57 %55 %313
476                OpStore %314 %60
477         %315 = OpAccessChain %41 %62 %35
478         %316 = OpLoad %18 %315
479         %317 = OpISub %18 %316 %82
480         %318 = OpAccessChain %41 %62 %35
481                OpStore %318 %317
482                OpBranch %289
483         %289 = OpLabel
484         %319 = OpLoad %18 %208
485         %320 = OpSGreaterThanEqual %50 %319 %19
486                OpSelectionMerge %322 None
487                OpBranchConditional %320 %321 %322
488         %321 = OpLabel
489         %323 = OpAccessChain %41 %62 %28
490         %324 = OpLoad %18 %323
491         %325 = OpSLessThan %50 %324 %119
492                OpBranch %322
493         %322 = OpLabel
494         %326 = OpPhi %50 %320 %289 %325 %321
495                OpSelectionMerge %328 None
496                OpBranchConditional %326 %327 %328
497         %327 = OpLabel
498         %329 = OpAccessChain %41 %62 %28
499         %330 = OpLoad %18 %329
500         %331 = OpIAdd %18 %330 %82
501         %332 = OpAccessChain %41 %62 %35
502         %333 = OpLoad %18 %332
503         %334 = OpIMul %18 %333 %86
504         %335 = OpIAdd %18 %331 %334
505         %336 = OpAccessChain %57 %55 %335
506         %337 = OpLoad %18 %336
507         %338 = OpIEqual %50 %337 %19
508                OpBranch %328
509         %328 = OpLabel
510         %339 = OpPhi %50 %326 %322 %338 %327
511                OpSelectionMerge %341 None
512                OpBranchConditional %339 %340 %341
513         %340 = OpLabel
514         %342 = OpLoad %18 %208
515         %343 = OpISub %18 %342 %60
516                OpStore %208 %343
517         %344 = OpAccessChain %41 %62 %28
518         %345 = OpLoad %18 %344
519         %346 = OpAccessChain %41 %62 %35
520         %347 = OpLoad %18 %346
521         %348 = OpIMul %18 %347 %86
522         %349 = OpIAdd %18 %345 %348
523         %350 = OpAccessChain %57 %55 %349
524                OpStore %350 %60
525         %351 = OpAccessChain %41 %62 %28
526         %352 = OpLoad %18 %351
527         %353 = OpIAdd %18 %352 %60
528         %354 = OpAccessChain %41 %62 %35
529         %355 = OpLoad %18 %354
530         %356 = OpIMul %18 %355 %86
531         %357 = OpIAdd %18 %353 %356
532         %358 = OpAccessChain %57 %55 %357
533                OpStore %358 %60
534         %359 = OpAccessChain %41 %62 %28
535         %360 = OpLoad %18 %359
536         %361 = OpIAdd %18 %360 %82
537         %362 = OpAccessChain %41 %62 %35
538         %363 = OpLoad %18 %362
539         %364 = OpIMul %18 %363 %86
540         %365 = OpIAdd %18 %361 %364
541         %366 = OpAccessChain %57 %55 %365
542                OpStore %366 %60
543         %367 = OpAccessChain %41 %62 %28
544         %368 = OpLoad %18 %367
545         %369 = OpIAdd %18 %368 %82
546         %370 = OpAccessChain %41 %62 %28
547                OpStore %370 %369
548                OpBranch %341
549         %341 = OpLabel
550         %371 = OpLoad %18 %208
551         %372 = OpSGreaterThanEqual %50 %371 %19
552                OpSelectionMerge %374 None
553                OpBranchConditional %372 %373 %374
554         %373 = OpLabel
555         %375 = OpAccessChain %41 %62 %35
556         %376 = OpLoad %18 %375
557         %377 = OpSLessThan %50 %376 %119
558                OpBranch %374
559         %374 = OpLabel
560         %378 = OpPhi %50 %372 %341 %377 %373
561                OpSelectionMerge %380 None
562                OpBranchConditional %378 %379 %380
563         %379 = OpLabel
564         %381 = OpAccessChain %41 %62 %28
565         %382 = OpLoad %18 %381
566         %383 = OpAccessChain %41 %62 %35
567         %384 = OpLoad %18 %383
568         %385 = OpIAdd %18 %384 %82
569         %386 = OpIMul %18 %385 %86
570         %387 = OpIAdd %18 %382 %386
571         %388 = OpAccessChain %57 %55 %387
572         %389 = OpLoad %18 %388
573         %390 = OpIEqual %50 %389 %19
574                OpBranch %380
575         %380 = OpLabel
576         %391 = OpPhi %50 %378 %374 %390 %379
577                OpSelectionMerge %393 None
578                OpBranchConditional %391 %392 %393
579         %392 = OpLabel
580         %394 = OpLoad %18 %208
581         %395 = OpISub %18 %394 %60
582                OpStore %208 %395
583         %396 = OpAccessChain %41 %62 %28
584         %397 = OpLoad %18 %396
585         %398 = OpAccessChain %41 %62 %35
586         %399 = OpLoad %18 %398
587         %400 = OpIMul %18 %399 %86
588         %401 = OpIAdd %18 %397 %400
589         %402 = OpAccessChain %57 %55 %401
590                OpStore %402 %60
591         %403 = OpAccessChain %41 %62 %28
592         %404 = OpLoad %18 %403
593         %405 = OpAccessChain %41 %62 %35
594         %406 = OpLoad %18 %405
595         %407 = OpIAdd %18 %406 %60
596         %408 = OpIMul %18 %407 %86
597         %409 = OpIAdd %18 %404 %408
598         %410 = OpAccessChain %57 %55 %409
599                OpStore %410 %60
600         %411 = OpAccessChain %41 %62 %28
601         %412 = OpLoad %18 %411
602         %413 = OpAccessChain %41 %62 %35
603         %414 = OpLoad %18 %413
604         %415 = OpIAdd %18 %414 %82
605         %416 = OpIMul %18 %415 %86
606         %417 = OpIAdd %18 %412 %416
607         %418 = OpAccessChain %57 %55 %417
608                OpStore %418 %60
609         %419 = OpAccessChain %41 %62 %35
610         %420 = OpLoad %18 %419
611         %421 = OpIAdd %18 %420 %82
612         %422 = OpAccessChain %41 %62 %35
613                OpStore %422 %421
614                OpBranch %393
615         %393 = OpLabel
616                OpBranch %161
617         %161 = OpLabel
618         %423 = OpAccessChain %41 %26 %35
619         %424 = OpLoad %18 %423
620         %425 = OpIMul %18 %424 %86
621         %426 = OpAccessChain %41 %26 %28
622         %427 = OpLoad %18 %426
623         %428 = OpIAdd %18 %425 %427
624         %429 = OpAccessChain %57 %55 %428
625         %430 = OpLoad %18 %429
626         %431 = OpIEqual %50 %430 %60
627                OpSelectionMerge %433 None
628                OpBranchConditional %431 %432 %433
629         %432 = OpLabel
630                OpStore %435 %437
631                OpReturn
632         %433 = OpLabel
633                OpBranch %71
634          %71 = OpLabel
635         %439 = OpLoad %50 %65
636                OpBranchConditional %439 %68 %70
637          %70 = OpLabel
638                OpStore %435 %441
639                OpReturn
640                OpFunctionEnd
641 END
642
643 # uniforms for reference
644
645 # resolution
646 BUFFER reference_resolution DATA_TYPE vec2<float> DATA
647  64.0 64.0
648 END
649
650 BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
651
652 PIPELINE graphics reference_pipeline
653   ATTACH reference_vertex_shader
654   ATTACH reference_fragment_shader
655   FRAMEBUFFER_SIZE 64 64
656   BIND BUFFER reference_framebuffer AS color LOCATION 0
657   BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
658 END
659 CLEAR_COLOR reference_pipeline 0 0 0 255
660
661 CLEAR reference_pipeline
662 RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 64 64
663
664
665 SHADER vertex variant_vertex_shader PASSTHROUGH
666
667 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
668 ; SPIR-V
669 ; Version: 1.0
670 ; Generator: Khronos Glslang Reference Front End; 7
671 ; Bound: 761
672 ; Schema: 0
673                OpCapability Shader
674           %1 = OpExtInstImport "GLSL.std.450"
675                OpMemoryModel Logical GLSL450
676                OpEntryPoint Fragment %4 "main" %12 %435
677                OpExecutionMode %4 OriginUpperLeft
678                OpSource ESSL 320
679                OpName %4 "main"
680                OpName %9 "pos"
681                OpName %12 "gl_FragCoord"
682                OpName %15 "buf0"
683                OpMemberName %15 0 "resolution"
684                OpName %17 ""
685                OpName %26 "ipos"
686                OpName %42 "i"
687                OpName %55 "map"
688                OpName %62 "p"
689                OpName %65 "canwalk"
690                OpName %67 "v"
691                OpName %74 "directions"
692                OpName %171 "j"
693                OpName %208 "d"
694                OpName %435 "_GLF_color"
695                OpDecorate %12 BuiltIn FragCoord
696                OpMemberDecorate %15 0 Offset 0
697                OpDecorate %15 Block
698                OpDecorate %17 DescriptorSet 0
699                OpDecorate %17 Binding 0
700                OpDecorate %435 Location 0
701           %2 = OpTypeVoid
702           %3 = OpTypeFunction %2
703           %6 = OpTypeFloat 32
704           %7 = OpTypeVector %6 2
705           %8 = OpTypePointer Function %7
706          %10 = OpTypeVector %6 4
707          %11 = OpTypePointer Input %10
708          %12 = OpVariable %11 Input
709          %15 = OpTypeStruct %7
710          %16 = OpTypePointer Uniform %15
711          %17 = OpVariable %16 Uniform
712          %18 = OpTypeInt 32 1
713          %19 = OpConstant %18 0
714          %20 = OpTypePointer Uniform %7
715          %24 = OpTypeVector %18 2
716          %25 = OpTypePointer Function %24
717          %27 = OpTypeInt 32 0
718          %28 = OpConstant %27 0
719          %29 = OpTypePointer Function %6
720          %32 = OpConstant %6 16
721          %35 = OpConstant %27 1
722          %41 = OpTypePointer Function %18
723          %49 = OpConstant %18 256
724          %50 = OpTypeBool
725          %52 = OpConstant %27 256
726          %53 = OpTypeArray %18 %52
727          %54 = OpTypePointer Private %53
728          %55 = OpVariable %54 Private
729          %57 = OpTypePointer Private %18
730          %60 = OpConstant %18 1
731          %63 = OpConstantComposite %24 %19 %19
732          %64 = OpTypePointer Function %50
733          %66 = OpConstantTrue %50
734          %82 = OpConstant %18 2
735          %86 = OpConstant %18 16
736         %119 = OpConstant %18 14
737         %162 = OpConstantFalse %50
738         %169 = OpConstant %18 8
739         %434 = OpTypePointer Output %10
740         %435 = OpVariable %434 Output
741         %436 = OpConstant %6 1
742         %437 = OpConstantComposite %10 %436 %436 %436 %436
743         %440 = OpConstant %6 0
744         %441 = OpConstantComposite %10 %440 %440 %440 %436
745         %551 = OpTypeMatrix %10 2
746         %555 = OpTypePointer Private %551
747         %556 = OpConstantComposite %10 %440 %440 %440 %440
748         %557 = OpConstantComposite %551 %556 %556
749         %558 = OpVariable %555 Private %557
750         %760 = OpConstantNull %50
751           %4 = OpFunction %2 None %3
752           %5 = OpLabel
753           %9 = OpVariable %8 Function
754          %26 = OpVariable %25 Function
755          %42 = OpVariable %41 Function
756          %62 = OpVariable %25 Function
757          %65 = OpVariable %64 Function
758          %67 = OpVariable %41 Function
759          %74 = OpVariable %41 Function
760         %171 = OpVariable %41 Function
761         %208 = OpVariable %41 Function
762          %13 = OpLoad %10 %12
763          %14 = OpVectorShuffle %7 %13 %13 0 1
764         %564 = OpISub %18 %49 %119
765          %21 = OpAccessChain %20 %17 %19
766          %22 = OpLoad %7 %21
767         %566 = OpSNegate %18 %564
768          %23 = OpFDiv %7 %14 %22
769                OpStore %9 %23
770          %30 = OpAccessChain %29 %9 %28
771          %31 = OpLoad %6 %30
772          %33 = OpFMul %6 %31 %32
773          %34 = OpConvertFToS %18 %33
774          %36 = OpAccessChain %29 %9 %35
775          %37 = OpLoad %6 %36
776          %38 = OpFMul %6 %37 %32
777          %39 = OpConvertFToS %18 %38
778          %40 = OpCompositeConstruct %24 %34 %39
779                OpStore %26 %40
780                OpStore %42 %19
781                OpBranch %43
782          %43 = OpLabel
783                OpLoopMerge %45 %46 None
784                OpBranch %47
785          %47 = OpLabel
786          %48 = OpLoad %18 %42
787          %51 = OpSLessThan %50 %48 %49
788                OpBranchConditional %51 %44 %45
789          %44 = OpLabel
790          %56 = OpLoad %18 %42
791          %58 = OpAccessChain %57 %55 %56
792                OpStore %58 %19
793                OpBranch %46
794          %46 = OpLabel
795          %59 = OpLoad %18 %42
796          %61 = OpIAdd %18 %59 %60
797                OpStore %42 %61
798                OpBranch %43
799          %45 = OpLabel
800                OpStore %62 %63
801                OpStore %65 %66
802                OpStore %67 %19
803                OpBranch %68
804          %68 = OpLabel
805                OpLoopMerge %70 %71 None
806                OpBranch %69
807          %69 = OpLabel
808          %72 = OpLoad %18 %67
809          %73 = OpIAdd %18 %72 %60
810                OpStore %67 %73
811                OpStore %74 %19
812          %75 = OpAccessChain %41 %62 %28
813          %76 = OpLoad %18 %75
814          %77 = OpSGreaterThan %50 %76 %19
815                OpSelectionMerge %79 None
816                OpBranchConditional %77 %78 %79
817          %78 = OpLabel
818          %80 = OpAccessChain %41 %62 %28
819          %81 = OpLoad %18 %80
820          %83 = OpISub %18 %81 %82
821          %84 = OpAccessChain %41 %62 %35
822          %85 = OpLoad %18 %84
823          %87 = OpIMul %18 %85 %86
824          %88 = OpIAdd %18 %83 %87
825          %89 = OpAccessChain %57 %55 %88
826          %90 = OpLoad %18 %89
827          %91 = OpIEqual %50 %90 %19
828                OpBranch %79
829          %79 = OpLabel
830          %92 = OpPhi %50 %77 %69 %91 %78
831                OpSelectionMerge %94 None
832                OpBranchConditional %92 %93 %94
833          %93 = OpLabel
834          %95 = OpLoad %18 %74
835          %96 = OpIAdd %18 %95 %60
836                OpStore %74 %96
837                OpBranch %94
838          %94 = OpLabel
839          %97 = OpAccessChain %41 %62 %35
840          %98 = OpLoad %18 %97
841          %99 = OpSGreaterThan %50 %98 %19
842                OpSelectionMerge %101 None
843                OpBranchConditional %99 %100 %101
844         %100 = OpLabel
845         %102 = OpAccessChain %41 %62 %28
846         %103 = OpLoad %18 %102
847         %104 = OpAccessChain %41 %62 %35
848         %105 = OpLoad %18 %104
849         %106 = OpISub %18 %105 %82
850         %107 = OpIMul %18 %106 %86
851         %108 = OpIAdd %18 %103 %107
852         %109 = OpAccessChain %57 %55 %108
853         %110 = OpLoad %18 %109
854         %111 = OpIEqual %50 %110 %19
855                OpBranch %101
856         %101 = OpLabel
857         %112 = OpPhi %50 %99 %94 %111 %100
858                OpSelectionMerge %114 None
859                OpBranchConditional %112 %113 %114
860         %113 = OpLabel
861         %115 = OpLoad %18 %74
862         %116 = OpIAdd %18 %115 %60
863                OpStore %74 %116
864                OpBranch %114
865         %114 = OpLabel
866         %117 = OpAccessChain %41 %62 %28
867         %118 = OpLoad %18 %117
868         %120 = OpSLessThan %50 %118 %119
869                OpSelectionMerge %122 None
870                OpBranchConditional %120 %121 %122
871         %121 = OpLabel
872         %123 = OpAccessChain %41 %62 %28
873         %124 = OpLoad %18 %123
874         %125 = OpIAdd %18 %124 %82
875         %126 = OpAccessChain %41 %62 %35
876         %127 = OpLoad %18 %126
877         %128 = OpIMul %18 %127 %86
878         %129 = OpIAdd %18 %125 %128
879         %130 = OpAccessChain %57 %55 %129
880         %131 = OpLoad %18 %130
881         %132 = OpIEqual %50 %131 %19
882                OpBranch %122
883         %122 = OpLabel
884         %133 = OpPhi %50 %120 %114 %132 %121
885                OpSelectionMerge %135 None
886                OpBranchConditional %133 %134 %135
887         %134 = OpLabel
888         %136 = OpLoad %18 %74
889         %137 = OpIAdd %18 %136 %60
890                OpStore %74 %137
891                OpBranch %135
892         %135 = OpLabel
893         %594 = OpISub %18 %49 %566
894         %138 = OpAccessChain %41 %62 %35
895         %139 = OpLoad %18 %138
896         %140 = OpSLessThan %50 %139 %119
897                OpSelectionMerge %142 None
898                OpBranchConditional %140 %141 %142
899         %141 = OpLabel
900         %143 = OpAccessChain %41 %62 %28
901         %144 = OpLoad %18 %143
902         %145 = OpAccessChain %41 %62 %35
903         %146 = OpLoad %18 %145
904         %147 = OpIAdd %18 %146 %82
905         %148 = OpIMul %18 %147 %86
906         %149 = OpIAdd %18 %144 %148
907         %150 = OpAccessChain %57 %55 %149
908         %151 = OpLoad %18 %150
909         %152 = OpIEqual %50 %151 %19
910                OpBranch %142
911         %142 = OpLabel
912         %153 = OpPhi %50 %140 %135 %152 %141
913                OpSelectionMerge %155 None
914                OpBranchConditional %153 %154 %155
915         %154 = OpLabel
916         %156 = OpLoad %18 %74
917         %157 = OpIAdd %18 %156 %60
918                OpStore %74 %157
919                OpBranch %155
920         %155 = OpLabel
921         %158 = OpLoad %18 %74
922         %159 = OpIEqual %50 %158 %19
923                OpSelectionMerge %161 None
924                OpBranchConditional %159 %160 %207
925         %160 = OpLabel
926                OpStore %65 %162
927                OpStore %42 %19
928                OpBranch %163
929         %163 = OpLabel
930                OpLoopMerge %165 %166 None
931                OpBranch %167
932         %167 = OpLabel
933         %168 = OpLoad %18 %42
934         %170 = OpSLessThan %50 %168 %169
935                OpBranchConditional %170 %164 %165
936         %164 = OpLabel
937                OpStore %171 %19
938         %609 = OpISub %18 %594 %168
939                OpStore %558 %557
940                OpBranchConditional %760 %166 %172
941         %172 = OpLabel
942                OpLoopMerge %174 %175 Unroll
943                OpBranch %176
944         %176 = OpLabel
945         %177 = OpLoad %18 %171
946         %178 = OpSLessThan %50 %177 %169
947                OpBranchConditional %178 %173 %174
948         %173 = OpLabel
949         %179 = OpLoad %18 %171
950         %180 = OpIMul %18 %179 %82
951         %181 = OpLoad %18 %42
952         %182 = OpIMul %18 %181 %82
953         %183 = OpIMul %18 %182 %86
954         %184 = OpIAdd %18 %180 %183
955         %185 = OpAccessChain %57 %55 %184
956         %186 = OpLoad %18 %185
957         %187 = OpIEqual %50 %186 %19
958                OpSelectionMerge %189 None
959                OpBranchConditional %187 %188 %189
960         %188 = OpLabel
961         %190 = OpLoad %18 %171
962         %191 = OpIMul %18 %190 %82
963         %192 = OpAccessChain %41 %62 %28
964                OpStore %192 %191
965         %193 = OpLoad %18 %42
966         %194 = OpIMul %18 %193 %82
967         %195 = OpAccessChain %41 %62 %35
968                OpStore %195 %194
969                OpStore %65 %66
970                OpBranch %189
971         %189 = OpLabel
972                OpBranch %175
973         %175 = OpLabel
974         %196 = OpLoad %18 %171
975         %197 = OpIAdd %18 %196 %60
976                OpStore %171 %197
977                OpBranch %172
978         %174 = OpLabel
979                OpBranch %166
980         %166 = OpLabel
981         %198 = OpLoad %18 %42
982         %199 = OpIAdd %18 %198 %60
983                OpStore %42 %199
984                OpBranch %163
985         %165 = OpLabel
986         %200 = OpAccessChain %41 %62 %28
987         %201 = OpLoad %18 %200
988         %202 = OpAccessChain %41 %62 %35
989         %203 = OpLoad %18 %202
990         %204 = OpIMul %18 %203 %86
991         %205 = OpIAdd %18 %201 %204
992         %206 = OpAccessChain %57 %55 %205
993                OpStore %206 %60
994                OpBranch %161
995         %207 = OpLabel
996         %209 = OpLoad %18 %67
997         %210 = OpLoad %18 %74
998         %211 = OpSMod %18 %209 %210
999                OpStore %208 %211
1000         %212 = OpLoad %18 %74
1001         %213 = OpLoad %18 %67
1002         %214 = OpIAdd %18 %213 %212
1003                OpStore %67 %214
1004         %215 = OpLoad %18 %208
1005         %216 = OpSGreaterThanEqual %50 %215 %19
1006                OpSelectionMerge %218 None
1007                OpBranchConditional %216 %217 %218
1008         %217 = OpLabel
1009         %219 = OpAccessChain %41 %62 %28
1010         %220 = OpLoad %18 %219
1011         %221 = OpSGreaterThan %50 %220 %19
1012                OpBranch %218
1013         %218 = OpLabel
1014         %222 = OpPhi %50 %216 %207 %221 %217
1015                OpSelectionMerge %224 None
1016                OpBranchConditional %222 %223 %224
1017         %223 = OpLabel
1018         %225 = OpAccessChain %41 %62 %28
1019         %226 = OpLoad %18 %225
1020         %227 = OpISub %18 %226 %82
1021         %228 = OpAccessChain %41 %62 %35
1022         %229 = OpLoad %18 %228
1023         %230 = OpIMul %18 %229 %86
1024         %231 = OpIAdd %18 %227 %230
1025         %232 = OpAccessChain %57 %55 %231
1026         %233 = OpLoad %18 %232
1027         %234 = OpIEqual %50 %233 %19
1028                OpBranch %224
1029         %224 = OpLabel
1030         %235 = OpPhi %50 %222 %218 %234 %223
1031                OpSelectionMerge %237 None
1032                OpBranchConditional %235 %236 %237
1033         %236 = OpLabel
1034         %238 = OpLoad %18 %208
1035         %239 = OpISub %18 %238 %60
1036                OpStore %208 %239
1037         %240 = OpAccessChain %41 %62 %28
1038         %241 = OpLoad %18 %240
1039         %242 = OpAccessChain %41 %62 %35
1040         %243 = OpLoad %18 %242
1041         %244 = OpIMul %18 %243 %86
1042         %245 = OpIAdd %18 %241 %244
1043         %246 = OpAccessChain %57 %55 %245
1044                OpStore %246 %60
1045         %247 = OpAccessChain %41 %62 %28
1046         %248 = OpLoad %18 %247
1047         %249 = OpISub %18 %248 %60
1048         %250 = OpAccessChain %41 %62 %35
1049         %251 = OpLoad %18 %250
1050         %252 = OpIMul %18 %251 %86
1051         %253 = OpIAdd %18 %249 %252
1052         %254 = OpAccessChain %57 %55 %253
1053                OpStore %254 %60
1054         %255 = OpAccessChain %41 %62 %28
1055         %256 = OpLoad %18 %255
1056         %257 = OpISub %18 %256 %82
1057         %258 = OpAccessChain %41 %62 %35
1058         %259 = OpLoad %18 %258
1059         %260 = OpIMul %18 %259 %86
1060         %261 = OpIAdd %18 %257 %260
1061         %262 = OpAccessChain %57 %55 %261
1062                OpStore %262 %60
1063         %263 = OpAccessChain %41 %62 %28
1064         %264 = OpLoad %18 %263
1065         %265 = OpISub %18 %264 %82
1066         %266 = OpAccessChain %41 %62 %28
1067                OpStore %266 %265
1068                OpBranch %237
1069         %237 = OpLabel
1070         %267 = OpLoad %18 %208
1071         %268 = OpSGreaterThanEqual %50 %267 %19
1072                OpSelectionMerge %270 None
1073                OpBranchConditional %268 %269 %270
1074         %269 = OpLabel
1075         %271 = OpAccessChain %41 %62 %35
1076         %272 = OpLoad %18 %271
1077         %273 = OpSGreaterThan %50 %272 %19
1078                OpBranch %270
1079         %270 = OpLabel
1080         %274 = OpPhi %50 %268 %237 %273 %269
1081                OpSelectionMerge %276 None
1082                OpBranchConditional %274 %275 %276
1083         %275 = OpLabel
1084         %277 = OpAccessChain %41 %62 %28
1085         %278 = OpLoad %18 %277
1086         %279 = OpAccessChain %41 %62 %35
1087         %280 = OpLoad %18 %279
1088         %281 = OpISub %18 %280 %82
1089         %282 = OpIMul %18 %281 %86
1090         %283 = OpIAdd %18 %278 %282
1091         %284 = OpAccessChain %57 %55 %283
1092         %285 = OpLoad %18 %284
1093         %286 = OpIEqual %50 %285 %19
1094                OpBranch %276
1095         %276 = OpLabel
1096         %287 = OpPhi %50 %274 %270 %286 %275
1097                OpSelectionMerge %289 None
1098                OpBranchConditional %287 %288 %289
1099         %288 = OpLabel
1100         %290 = OpLoad %18 %208
1101         %291 = OpISub %18 %290 %60
1102                OpStore %208 %291
1103         %292 = OpAccessChain %41 %62 %28
1104         %293 = OpLoad %18 %292
1105         %294 = OpAccessChain %41 %62 %35
1106         %295 = OpLoad %18 %294
1107         %296 = OpIMul %18 %295 %86
1108         %297 = OpIAdd %18 %293 %296
1109         %298 = OpAccessChain %57 %55 %297
1110                OpStore %298 %60
1111         %299 = OpAccessChain %41 %62 %28
1112         %300 = OpLoad %18 %299
1113         %301 = OpAccessChain %41 %62 %35
1114         %302 = OpLoad %18 %301
1115         %303 = OpISub %18 %302 %60
1116         %304 = OpIMul %18 %303 %86
1117         %305 = OpIAdd %18 %300 %304
1118         %306 = OpAccessChain %57 %55 %305
1119                OpStore %306 %60
1120         %307 = OpAccessChain %41 %62 %28
1121         %308 = OpLoad %18 %307
1122         %309 = OpAccessChain %41 %62 %35
1123         %310 = OpLoad %18 %309
1124         %311 = OpISub %18 %310 %82
1125         %312 = OpIMul %18 %311 %86
1126         %313 = OpIAdd %18 %308 %312
1127         %314 = OpAccessChain %57 %55 %313
1128                OpStore %314 %60
1129         %315 = OpAccessChain %41 %62 %35
1130         %316 = OpLoad %18 %315
1131         %317 = OpISub %18 %316 %82
1132         %318 = OpAccessChain %41 %62 %35
1133                OpStore %318 %317
1134                OpBranch %289
1135         %289 = OpLabel
1136         %319 = OpLoad %18 %208
1137         %320 = OpSGreaterThanEqual %50 %319 %19
1138                OpSelectionMerge %322 None
1139                OpBranchConditional %320 %321 %322
1140         %321 = OpLabel
1141         %323 = OpAccessChain %41 %62 %28
1142         %324 = OpLoad %18 %323
1143         %325 = OpSLessThan %50 %324 %119
1144                OpBranch %322
1145         %322 = OpLabel
1146         %326 = OpPhi %50 %320 %289 %325 %321
1147                OpSelectionMerge %328 None
1148                OpBranchConditional %326 %327 %328
1149         %327 = OpLabel
1150         %329 = OpAccessChain %41 %62 %28
1151         %330 = OpLoad %18 %329
1152         %331 = OpIAdd %18 %330 %82
1153         %332 = OpAccessChain %41 %62 %35
1154         %333 = OpLoad %18 %332
1155         %334 = OpIMul %18 %333 %86
1156         %335 = OpIAdd %18 %331 %334
1157         %336 = OpAccessChain %57 %55 %335
1158         %337 = OpLoad %18 %336
1159         %338 = OpIEqual %50 %337 %19
1160                OpBranch %328
1161         %328 = OpLabel
1162         %339 = OpPhi %50 %326 %322 %338 %327
1163                OpSelectionMerge %341 None
1164                OpBranchConditional %339 %340 %341
1165         %340 = OpLabel
1166         %342 = OpLoad %18 %208
1167         %343 = OpISub %18 %342 %60
1168                OpStore %208 %343
1169         %344 = OpAccessChain %41 %62 %28
1170         %345 = OpLoad %18 %344
1171         %346 = OpAccessChain %41 %62 %35
1172         %347 = OpLoad %18 %346
1173         %348 = OpIMul %18 %347 %86
1174         %349 = OpIAdd %18 %345 %348
1175         %350 = OpAccessChain %57 %55 %349
1176                OpStore %350 %60
1177         %351 = OpAccessChain %41 %62 %28
1178         %352 = OpLoad %18 %351
1179         %353 = OpIAdd %18 %352 %60
1180         %354 = OpAccessChain %41 %62 %35
1181         %355 = OpLoad %18 %354
1182         %356 = OpIMul %18 %355 %86
1183         %357 = OpIAdd %18 %353 %356
1184         %358 = OpAccessChain %57 %55 %357
1185                OpStore %358 %60
1186         %359 = OpAccessChain %41 %62 %28
1187         %360 = OpLoad %18 %359
1188         %361 = OpIAdd %18 %360 %82
1189         %362 = OpAccessChain %41 %62 %35
1190         %363 = OpLoad %18 %362
1191         %364 = OpIMul %18 %363 %86
1192         %365 = OpIAdd %18 %361 %364
1193         %366 = OpAccessChain %57 %55 %365
1194                OpStore %366 %60
1195         %367 = OpAccessChain %41 %62 %28
1196         %368 = OpLoad %18 %367
1197         %369 = OpIAdd %18 %368 %82
1198         %370 = OpAccessChain %41 %62 %28
1199                OpStore %370 %369
1200                OpBranch %341
1201         %341 = OpLabel
1202         %371 = OpLoad %18 %208
1203         %372 = OpSGreaterThanEqual %50 %371 %19
1204                OpSelectionMerge %374 None
1205                OpBranchConditional %372 %373 %374
1206         %373 = OpLabel
1207         %375 = OpAccessChain %41 %62 %35
1208         %376 = OpLoad %18 %375
1209         %377 = OpSLessThan %50 %376 %119
1210                OpBranch %374
1211         %374 = OpLabel
1212         %378 = OpPhi %50 %372 %341 %377 %373
1213                OpSelectionMerge %380 None
1214                OpBranchConditional %378 %379 %380
1215         %379 = OpLabel
1216         %381 = OpAccessChain %41 %62 %28
1217         %382 = OpLoad %18 %381
1218         %383 = OpAccessChain %41 %62 %35
1219         %384 = OpLoad %18 %383
1220         %385 = OpIAdd %18 %384 %82
1221         %386 = OpIMul %18 %385 %86
1222         %387 = OpIAdd %18 %382 %386
1223         %388 = OpAccessChain %57 %55 %387
1224         %389 = OpLoad %18 %388
1225         %390 = OpIEqual %50 %389 %19
1226                OpBranch %380
1227         %380 = OpLabel
1228         %391 = OpPhi %50 %378 %374 %390 %379
1229                OpSelectionMerge %393 None
1230                OpBranchConditional %391 %392 %393
1231         %392 = OpLabel
1232         %394 = OpLoad %18 %208
1233         %395 = OpISub %18 %394 %60
1234                OpStore %208 %395
1235         %396 = OpAccessChain %41 %62 %28
1236         %397 = OpLoad %18 %396
1237         %398 = OpAccessChain %41 %62 %35
1238         %399 = OpLoad %18 %398
1239         %400 = OpIMul %18 %399 %86
1240         %401 = OpIAdd %18 %397 %400
1241         %402 = OpAccessChain %57 %55 %401
1242                OpStore %402 %60
1243         %403 = OpAccessChain %41 %62 %28
1244         %404 = OpLoad %18 %403
1245         %405 = OpAccessChain %41 %62 %35
1246         %406 = OpLoad %18 %405
1247         %407 = OpIAdd %18 %406 %60
1248         %408 = OpIMul %18 %407 %86
1249         %409 = OpIAdd %18 %404 %408
1250         %410 = OpAccessChain %57 %55 %409
1251                OpStore %410 %60
1252         %411 = OpAccessChain %41 %62 %28
1253         %412 = OpLoad %18 %411
1254         %413 = OpAccessChain %41 %62 %35
1255         %414 = OpLoad %18 %413
1256         %415 = OpIAdd %18 %414 %82
1257         %416 = OpIMul %18 %415 %86
1258         %417 = OpIAdd %18 %412 %416
1259         %418 = OpAccessChain %57 %55 %417
1260                OpStore %418 %60
1261         %419 = OpAccessChain %41 %62 %35
1262         %420 = OpLoad %18 %419
1263         %421 = OpIAdd %18 %420 %82
1264         %422 = OpAccessChain %41 %62 %35
1265                OpStore %422 %421
1266                OpBranch %393
1267         %393 = OpLabel
1268                OpBranch %161
1269         %161 = OpLabel
1270         %423 = OpAccessChain %41 %26 %35
1271         %424 = OpLoad %18 %423
1272         %425 = OpIMul %18 %424 %86
1273         %426 = OpAccessChain %41 %26 %28
1274         %427 = OpLoad %18 %426
1275         %428 = OpIAdd %18 %425 %427
1276         %429 = OpAccessChain %57 %55 %428
1277         %430 = OpLoad %18 %429
1278         %431 = OpIEqual %50 %430 %60
1279                OpSelectionMerge %433 None
1280                OpBranchConditional %431 %432 %433
1281         %432 = OpLabel
1282                OpStore %435 %437
1283                OpReturn
1284         %433 = OpLabel
1285                OpBranch %71
1286          %71 = OpLabel
1287         %439 = OpLoad %50 %65
1288                OpBranchConditional %439 %68 %70
1289          %70 = OpLabel
1290                OpStore %435 %441
1291                OpReturn
1292                OpFunctionEnd
1293 END
1294
1295 # uniforms for variant
1296
1297 # resolution
1298 BUFFER variant_resolution DATA_TYPE vec2<float> DATA
1299  64.0 64.0
1300 END
1301
1302 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
1303
1304 PIPELINE graphics variant_pipeline
1305   ATTACH variant_vertex_shader
1306   ATTACH variant_fragment_shader
1307   FRAMEBUFFER_SIZE 64 64
1308   BIND BUFFER variant_framebuffer AS color LOCATION 0
1309   BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
1310 END
1311 CLEAR_COLOR variant_pipeline 0 0 0 255
1312
1313 CLEAR variant_pipeline
1314 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 64 64
1315
1316 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005