Fix missing dependency on sparse binds
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / data / vulkan / amber / graphicsfuzz / spv-access-chains.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 extra access chains
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: 742
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           %4 = OpFunction %2 None %3
746           %5 = OpLabel
747           %9 = OpVariable %8 Function
748          %26 = OpVariable %25 Function
749          %42 = OpVariable %41 Function
750          %62 = OpVariable %25 Function
751          %65 = OpVariable %64 Function
752          %67 = OpVariable %41 Function
753          %74 = OpVariable %41 Function
754         %171 = OpVariable %41 Function
755         %208 = OpVariable %41 Function
756          %13 = OpLoad %10 %12
757          %14 = OpVectorShuffle %7 %13 %13 0 1
758          %21 = OpAccessChain %20 %17 %19
759          %22 = OpLoad %7 %21
760          %23 = OpFDiv %7 %14 %22
761                OpStore %9 %23
762          %30 = OpAccessChain %29 %9 %28
763          %31 = OpLoad %6 %30
764          %33 = OpFMul %6 %31 %32
765          %34 = OpConvertFToS %18 %33
766          %36 = OpAccessChain %29 %9 %35
767          %37 = OpLoad %6 %36
768          %38 = OpFMul %6 %37 %32
769          %39 = OpConvertFToS %18 %38
770          %40 = OpCompositeConstruct %24 %34 %39
771                OpStore %26 %40
772                OpStore %42 %19
773                OpBranch %43
774          %43 = OpLabel
775                OpLoopMerge %45 %46 None
776                OpBranch %47
777          %47 = OpLabel
778          %48 = OpLoad %18 %42
779          %51 = OpSLessThan %50 %48 %49
780                OpBranchConditional %51 %44 %45
781          %44 = OpLabel
782          %56 = OpLoad %18 %42
783          %58 = OpAccessChain %57 %55 %56
784                OpStore %58 %19
785                OpBranch %46
786          %46 = OpLabel
787          %59 = OpLoad %18 %42
788          %61 = OpIAdd %18 %59 %60
789                OpStore %42 %61
790                OpBranch %43
791          %45 = OpLabel
792                OpStore %62 %63
793                OpStore %65 %66
794                OpStore %67 %19
795                OpBranch %68
796          %68 = OpLabel
797                OpLoopMerge %70 %71 None
798                OpBranch %69
799          %69 = OpLabel
800          %72 = OpLoad %18 %67
801          %73 = OpIAdd %18 %72 %60
802                OpStore %67 %73
803                OpStore %74 %19
804          %75 = OpAccessChain %41 %62 %28
805          %76 = OpLoad %18 %75
806          %77 = OpSGreaterThan %50 %76 %19
807                OpSelectionMerge %79 None
808                OpBranchConditional %77 %78 %79
809          %78 = OpLabel
810          %80 = OpAccessChain %41 %62 %28
811          %81 = OpLoad %18 %80
812          %83 = OpISub %18 %81 %82
813          %84 = OpAccessChain %41 %62 %35
814          %85 = OpLoad %18 %84
815          %87 = OpIMul %18 %85 %86
816          %88 = OpIAdd %18 %83 %87
817          %89 = OpAccessChain %57 %55 %88
818          %90 = OpLoad %18 %89
819          %91 = OpIEqual %50 %90 %19
820                OpBranch %79
821          %79 = OpLabel
822          %92 = OpPhi %50 %77 %69 %91 %78
823                OpSelectionMerge %94 None
824                OpBranchConditional %92 %93 %94
825          %93 = OpLabel
826          %95 = OpLoad %18 %74
827          %96 = OpIAdd %18 %95 %60
828                OpStore %74 %96
829                OpBranch %94
830          %94 = OpLabel
831          %97 = OpAccessChain %41 %62 %35
832          %98 = OpLoad %18 %97
833          %99 = OpSGreaterThan %50 %98 %19
834                OpSelectionMerge %101 None
835                OpBranchConditional %99 %100 %101
836         %100 = OpLabel
837         %102 = OpAccessChain %41 %62 %28
838         %103 = OpLoad %18 %102
839         %104 = OpAccessChain %41 %62 %35
840         %105 = OpLoad %18 %104
841         %106 = OpISub %18 %105 %82
842         %107 = OpIMul %18 %106 %86
843         %108 = OpIAdd %18 %103 %107
844         %109 = OpAccessChain %57 %55 %108
845         %110 = OpLoad %18 %109
846         %111 = OpIEqual %50 %110 %19
847                OpBranch %101
848         %101 = OpLabel
849         %112 = OpPhi %50 %99 %94 %111 %100
850                OpSelectionMerge %114 None
851                OpBranchConditional %112 %113 %114
852         %113 = OpLabel
853         %115 = OpLoad %18 %74
854         %116 = OpIAdd %18 %115 %60
855                OpStore %74 %116
856                OpBranch %114
857         %114 = OpLabel
858         %117 = OpAccessChain %41 %62 %28
859         %118 = OpLoad %18 %117
860         %120 = OpSLessThan %50 %118 %119
861                OpSelectionMerge %122 None
862                OpBranchConditional %120 %121 %122
863         %121 = OpLabel
864         %123 = OpAccessChain %41 %62 %28
865         %124 = OpLoad %18 %123
866         %125 = OpIAdd %18 %124 %82
867         %126 = OpAccessChain %41 %62 %35
868         %127 = OpLoad %18 %126
869         %128 = OpIMul %18 %127 %86
870         %129 = OpIAdd %18 %125 %128
871         %130 = OpAccessChain %57 %55 %129
872         %131 = OpLoad %18 %130
873         %132 = OpIEqual %50 %131 %19
874                OpBranch %122
875         %122 = OpLabel
876         %133 = OpPhi %50 %120 %114 %132 %121
877                OpSelectionMerge %135 None
878                OpBranchConditional %133 %134 %135
879         %134 = OpLabel
880         %136 = OpLoad %18 %74
881         %137 = OpIAdd %18 %136 %60
882                OpStore %74 %137
883                OpBranch %135
884         %135 = OpLabel
885         %138 = OpAccessChain %41 %62 %35
886         %139 = OpLoad %18 %138
887         %140 = OpSLessThan %50 %139 %119
888                OpSelectionMerge %142 None
889                OpBranchConditional %140 %141 %142
890         %141 = OpLabel
891         %143 = OpAccessChain %41 %62 %28
892         %144 = OpLoad %18 %143
893         %145 = OpAccessChain %41 %62 %35
894         %146 = OpLoad %18 %145
895         %147 = OpIAdd %18 %146 %82
896         %148 = OpIMul %18 %147 %86
897         %149 = OpIAdd %18 %144 %148
898         %150 = OpAccessChain %57 %55 %149
899         %151 = OpLoad %18 %150
900         %152 = OpIEqual %50 %151 %19
901                OpBranch %142
902         %142 = OpLabel
903         %153 = OpPhi %50 %140 %135 %152 %141
904                OpSelectionMerge %155 None
905                OpBranchConditional %153 %154 %155
906         %154 = OpLabel
907         %156 = OpLoad %18 %74
908         %157 = OpIAdd %18 %156 %60
909                OpStore %74 %157
910                OpBranch %155
911         %155 = OpLabel
912         %158 = OpLoad %18 %74
913         %159 = OpIEqual %50 %158 %19
914                OpSelectionMerge %161 None
915                OpBranchConditional %159 %160 %207
916         %160 = OpLabel
917                OpStore %65 %162
918                OpStore %42 %19
919                OpBranch %163
920         %163 = OpLabel
921                OpLoopMerge %165 %166 None
922                OpBranch %167
923         %167 = OpLabel
924         %168 = OpLoad %18 %42
925         %170 = OpSLessThan %50 %168 %169
926                OpBranchConditional %170 %164 %165
927         %164 = OpLabel
928                OpStore %171 %19
929                OpBranch %172
930         %172 = OpLabel
931                OpLoopMerge %174 %175 None
932                OpBranch %176
933         %176 = OpLabel
934         %177 = OpLoad %18 %171
935         %178 = OpSLessThan %50 %177 %169
936                OpBranchConditional %178 %173 %174
937         %173 = OpLabel
938         %179 = OpLoad %18 %171
939         %180 = OpIMul %18 %179 %82
940         %181 = OpLoad %18 %42
941         %182 = OpIMul %18 %181 %82
942         %183 = OpIMul %18 %182 %86
943         %184 = OpIAdd %18 %180 %183
944         %185 = OpAccessChain %57 %55 %184
945         %186 = OpLoad %18 %185
946         %187 = OpIEqual %50 %186 %19
947                OpSelectionMerge %189 None
948                OpBranchConditional %187 %188 %189
949         %188 = OpLabel
950         %190 = OpLoad %18 %171
951         %191 = OpIMul %18 %190 %82
952         %192 = OpAccessChain %41 %62 %28
953                OpStore %192 %191
954         %193 = OpLoad %18 %42
955         %194 = OpIMul %18 %193 %82
956         %195 = OpAccessChain %41 %62 %35
957                OpStore %195 %194
958                OpStore %65 %66
959                OpBranch %189
960         %189 = OpLabel
961                OpBranch %175
962         %175 = OpLabel
963         %196 = OpLoad %18 %171
964         %197 = OpIAdd %18 %196 %60
965                OpStore %171 %197
966                OpBranch %172
967         %174 = OpLabel
968                OpBranch %166
969         %166 = OpLabel
970         %198 = OpLoad %18 %42
971         %199 = OpIAdd %18 %198 %60
972                OpStore %42 %199
973                OpBranch %163
974         %165 = OpLabel
975         %200 = OpAccessChain %41 %62 %28
976         %201 = OpLoad %18 %200
977         %202 = OpAccessChain %41 %62 %35
978         %203 = OpLoad %18 %202
979         %204 = OpIMul %18 %203 %86
980         %205 = OpIAdd %18 %201 %204
981         %206 = OpAccessChain %57 %55 %205
982                OpStore %206 %60
983                OpBranch %161
984         %207 = OpLabel
985         %209 = OpLoad %18 %67
986         %210 = OpLoad %18 %74
987         %211 = OpSMod %18 %209 %210
988                OpStore %208 %211
989         %212 = OpLoad %18 %74
990         %213 = OpLoad %18 %67
991         %214 = OpIAdd %18 %213 %212
992                OpStore %67 %214
993         %215 = OpLoad %18 %208
994         %216 = OpSGreaterThanEqual %50 %215 %19
995                OpSelectionMerge %218 None
996                OpBranchConditional %216 %217 %218
997         %217 = OpLabel
998         %219 = OpAccessChain %41 %62 %28
999         %220 = OpLoad %18 %219
1000         %221 = OpSGreaterThan %50 %220 %19
1001                OpBranch %218
1002         %218 = OpLabel
1003         %222 = OpPhi %50 %216 %207 %221 %217
1004                OpSelectionMerge %224 None
1005                OpBranchConditional %222 %223 %224
1006         %223 = OpLabel
1007         %225 = OpAccessChain %41 %62 %28
1008         %226 = OpLoad %18 %225
1009         %227 = OpISub %18 %226 %82
1010         %228 = OpAccessChain %41 %62 %35
1011         %229 = OpLoad %18 %228
1012         %230 = OpIMul %18 %229 %86
1013         %231 = OpIAdd %18 %227 %230
1014         %232 = OpAccessChain %57 %55 %231
1015         %233 = OpLoad %18 %232
1016         %234 = OpIEqual %50 %233 %19
1017                OpBranch %224
1018         %224 = OpLabel
1019         %235 = OpPhi %50 %222 %218 %234 %223
1020                OpSelectionMerge %237 None
1021                OpBranchConditional %235 %236 %237
1022         %236 = OpLabel
1023         %238 = OpLoad %18 %208
1024         %239 = OpISub %18 %238 %60
1025                OpStore %208 %239
1026         %240 = OpAccessChain %41 %62 %28
1027         %241 = OpLoad %18 %240
1028         %242 = OpAccessChain %41 %62 %35
1029         %243 = OpLoad %18 %242
1030         %244 = OpIMul %18 %243 %86
1031         %245 = OpIAdd %18 %241 %244
1032         %246 = OpAccessChain %57 %55 %245
1033                OpStore %246 %60
1034         %247 = OpAccessChain %41 %62 %28
1035         %248 = OpLoad %18 %247
1036         %249 = OpISub %18 %248 %60
1037         %250 = OpAccessChain %41 %62 %35
1038         %251 = OpLoad %18 %250
1039         %252 = OpIMul %18 %251 %86
1040         %253 = OpIAdd %18 %249 %252
1041         %254 = OpAccessChain %57 %55 %253
1042                OpStore %254 %60
1043         %255 = OpAccessChain %41 %62 %28
1044         %256 = OpLoad %18 %255
1045         %257 = OpISub %18 %256 %82
1046         %258 = OpAccessChain %41 %62 %35
1047         %259 = OpLoad %18 %258
1048         %260 = OpIMul %18 %259 %86
1049         %261 = OpIAdd %18 %257 %260
1050         %262 = OpAccessChain %57 %55 %261
1051                OpStore %262 %60
1052         %263 = OpAccessChain %41 %62 %28
1053         %264 = OpLoad %18 %263
1054         %265 = OpISub %18 %264 %82
1055         %266 = OpAccessChain %41 %62 %28
1056                OpStore %266 %265
1057                OpBranch %237
1058         %237 = OpLabel
1059         %267 = OpLoad %18 %208
1060         %268 = OpSGreaterThanEqual %50 %267 %19
1061                OpSelectionMerge %270 None
1062                OpBranchConditional %268 %269 %270
1063         %269 = OpLabel
1064         %271 = OpAccessChain %41 %62 %35
1065         %272 = OpLoad %18 %271
1066         %273 = OpSGreaterThan %50 %272 %19
1067                OpBranch %270
1068         %270 = OpLabel
1069         %274 = OpPhi %50 %268 %237 %273 %269
1070                OpSelectionMerge %276 None
1071                OpBranchConditional %274 %275 %276
1072         %275 = OpLabel
1073         %277 = OpAccessChain %41 %62 %28
1074         %278 = OpLoad %18 %277
1075         %279 = OpAccessChain %41 %62 %35
1076         %280 = OpLoad %18 %279
1077         %281 = OpISub %18 %280 %82
1078         %282 = OpIMul %18 %281 %86
1079         %283 = OpIAdd %18 %278 %282
1080         %284 = OpAccessChain %57 %55 %283
1081         %285 = OpLoad %18 %284
1082         %286 = OpIEqual %50 %285 %19
1083                OpBranch %276
1084         %276 = OpLabel
1085         %287 = OpPhi %50 %274 %270 %286 %275
1086                OpSelectionMerge %289 None
1087                OpBranchConditional %287 %288 %289
1088         %288 = OpLabel
1089         %290 = OpLoad %18 %208
1090         %291 = OpISub %18 %290 %60
1091                OpStore %208 %291
1092         %292 = OpAccessChain %41 %62 %28
1093         %293 = OpLoad %18 %292
1094         %294 = OpAccessChain %41 %62 %35
1095         %295 = OpLoad %18 %294
1096         %296 = OpIMul %18 %295 %86
1097         %297 = OpIAdd %18 %293 %296
1098         %298 = OpAccessChain %57 %55 %297
1099                OpStore %298 %60
1100         %299 = OpAccessChain %41 %62 %28
1101         %300 = OpLoad %18 %299
1102         %301 = OpAccessChain %41 %62 %35
1103         %302 = OpLoad %18 %301
1104         %303 = OpISub %18 %302 %60
1105         %304 = OpIMul %18 %303 %86
1106         %305 = OpIAdd %18 %300 %304
1107         %306 = OpAccessChain %57 %55 %305
1108                OpStore %306 %60
1109         %307 = OpAccessChain %41 %62 %28
1110         %308 = OpLoad %18 %307
1111         %309 = OpAccessChain %41 %62 %35
1112         %310 = OpLoad %18 %309
1113         %311 = OpISub %18 %310 %82
1114         %312 = OpIMul %18 %311 %86
1115         %313 = OpIAdd %18 %308 %312
1116         %314 = OpAccessChain %57 %55 %313
1117                OpStore %314 %60
1118         %315 = OpAccessChain %41 %62 %35
1119         %316 = OpLoad %18 %315
1120         %317 = OpISub %18 %316 %82
1121         %318 = OpAccessChain %41 %62 %35
1122                OpStore %318 %317
1123                OpBranch %289
1124         %289 = OpLabel
1125         %319 = OpLoad %18 %208
1126         %320 = OpSGreaterThanEqual %50 %319 %19
1127                OpSelectionMerge %322 None
1128                OpBranchConditional %320 %321 %322
1129         %321 = OpLabel
1130         %323 = OpAccessChain %41 %62 %28
1131         %324 = OpLoad %18 %323
1132         %325 = OpSLessThan %50 %324 %119
1133                OpBranch %322
1134         %322 = OpLabel
1135         %326 = OpPhi %50 %320 %289 %325 %321
1136                OpSelectionMerge %328 None
1137                OpBranchConditional %326 %327 %328
1138         %327 = OpLabel
1139         %329 = OpAccessChain %41 %62 %28
1140         %330 = OpLoad %18 %329
1141         %331 = OpIAdd %18 %330 %82
1142         %332 = OpAccessChain %41 %62 %35
1143         %333 = OpLoad %18 %332
1144         %334 = OpIMul %18 %333 %86
1145         %335 = OpIAdd %18 %331 %334
1146         %336 = OpAccessChain %57 %55 %335
1147         %337 = OpLoad %18 %336
1148         %338 = OpIEqual %50 %337 %19
1149                OpBranch %328
1150         %328 = OpLabel
1151         %339 = OpPhi %50 %326 %322 %338 %327
1152                OpSelectionMerge %341 None
1153                OpBranchConditional %339 %340 %341
1154         %340 = OpLabel
1155         %342 = OpLoad %18 %208
1156         %343 = OpISub %18 %342 %60
1157                OpStore %208 %343
1158         %344 = OpAccessChain %41 %62 %28
1159         %345 = OpLoad %18 %344
1160         %346 = OpAccessChain %41 %62 %35
1161         %347 = OpLoad %18 %346
1162         %348 = OpIMul %18 %347 %86
1163         %349 = OpIAdd %18 %345 %348
1164         %350 = OpAccessChain %57 %55 %349
1165                OpStore %350 %60
1166         %351 = OpAccessChain %41 %62 %28
1167         %352 = OpLoad %18 %351
1168         %353 = OpIAdd %18 %352 %60
1169         %354 = OpAccessChain %41 %62 %35
1170         %355 = OpLoad %18 %354
1171         %356 = OpIMul %18 %355 %86
1172         %357 = OpIAdd %18 %353 %356
1173         %358 = OpAccessChain %57 %55 %357
1174                OpStore %358 %60
1175         %359 = OpAccessChain %41 %62 %28
1176         %360 = OpLoad %18 %359
1177         %361 = OpIAdd %18 %360 %82
1178         %362 = OpAccessChain %41 %62 %35
1179         %363 = OpLoad %18 %362
1180         %364 = OpIMul %18 %363 %86
1181         %365 = OpIAdd %18 %361 %364
1182         %366 = OpAccessChain %57 %55 %365
1183                OpStore %366 %60
1184         %367 = OpAccessChain %41 %62 %28
1185         %368 = OpLoad %18 %367
1186         %369 = OpIAdd %18 %368 %82
1187         %370 = OpAccessChain %41 %62 %28
1188                OpStore %370 %369
1189                OpBranch %341
1190         %341 = OpLabel
1191         %371 = OpLoad %18 %208
1192         %372 = OpSGreaterThanEqual %50 %371 %19
1193                OpSelectionMerge %374 None
1194                OpBranchConditional %372 %373 %374
1195         %373 = OpLabel
1196         %375 = OpAccessChain %41 %62 %35
1197         %376 = OpLoad %18 %375
1198         %377 = OpSLessThan %50 %376 %119
1199                OpBranch %374
1200         %374 = OpLabel
1201         %378 = OpPhi %50 %372 %341 %377 %373
1202                OpSelectionMerge %380 None
1203                OpBranchConditional %378 %379 %380
1204         %379 = OpLabel
1205         %381 = OpAccessChain %41 %62 %28
1206         %382 = OpLoad %18 %381
1207         %383 = OpAccessChain %41 %62 %35
1208         %384 = OpLoad %18 %383
1209         %385 = OpIAdd %18 %384 %82
1210         %386 = OpIMul %18 %385 %86
1211         %387 = OpIAdd %18 %382 %386
1212         %388 = OpAccessChain %57 %55 %387
1213         %389 = OpLoad %18 %388
1214         %390 = OpIEqual %50 %389 %19
1215                OpBranch %380
1216         %380 = OpLabel
1217         %391 = OpPhi %50 %378 %374 %390 %379
1218                OpSelectionMerge %393 None
1219                OpBranchConditional %391 %392 %393
1220         %392 = OpLabel
1221         %394 = OpLoad %18 %208
1222         %395 = OpISub %18 %394 %60
1223                OpStore %208 %395
1224         %396 = OpAccessChain %41 %62 %28
1225         %397 = OpLoad %18 %396
1226         %398 = OpAccessChain %41 %62 %35
1227         %399 = OpLoad %18 %398
1228         %400 = OpIMul %18 %399 %86
1229         %401 = OpIAdd %18 %397 %400
1230         %402 = OpAccessChain %57 %55 %401
1231                OpStore %402 %60
1232         %403 = OpAccessChain %41 %62 %28
1233         %404 = OpLoad %18 %403
1234         %405 = OpAccessChain %41 %62 %35
1235         %406 = OpLoad %18 %405
1236         %407 = OpIAdd %18 %406 %60
1237         %408 = OpIMul %18 %407 %86
1238         %409 = OpIAdd %18 %404 %408
1239         %410 = OpAccessChain %57 %55 %409
1240                OpStore %410 %60
1241         %411 = OpAccessChain %41 %62 %28
1242         %412 = OpLoad %18 %411
1243         %413 = OpAccessChain %41 %62 %35
1244         %414 = OpLoad %18 %413
1245         %415 = OpIAdd %18 %414 %82
1246         %416 = OpIMul %18 %415 %86
1247         %417 = OpIAdd %18 %412 %416
1248         %418 = OpAccessChain %57 %55 %417
1249                OpStore %418 %60
1250         %419 = OpAccessChain %41 %62 %35
1251         %420 = OpLoad %18 %419
1252         %421 = OpIAdd %18 %420 %82
1253         %422 = OpAccessChain %41 %62 %35
1254                OpStore %422 %421
1255                OpBranch %393
1256         %393 = OpLabel
1257                OpBranch %161
1258         %161 = OpLabel
1259         %423 = OpAccessChain %41 %26 %35
1260         %424 = OpLoad %18 %423
1261         %425 = OpIMul %18 %424 %86
1262         %426 = OpAccessChain %41 %26 %28
1263         %427 = OpLoad %18 %426
1264         %428 = OpIAdd %18 %425 %427
1265         %429 = OpAccessChain %57 %55 %428
1266         %430 = OpLoad %18 %429
1267         %431 = OpIEqual %50 %430 %60
1268                OpSelectionMerge %433 None
1269                OpBranchConditional %431 %432 %433
1270         %432 = OpLabel
1271                OpStore %435 %437
1272                OpReturn
1273         %433 = OpLabel
1274                OpBranch %71
1275          %71 = OpLabel
1276         %439 = OpLoad %50 %65
1277         %740 = OpAccessChain %41 %208
1278                OpBranchConditional %439 %68 %70
1279          %70 = OpLabel
1280         %741 = OpAccessChain %41 %740
1281                OpStore %435 %441
1282                OpReturn
1283                OpFunctionEnd
1284 END
1285
1286 # uniforms for variant
1287
1288 # resolution
1289 BUFFER variant_resolution DATA_TYPE vec2<float> DATA
1290  64.0 64.0
1291 END
1292
1293 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
1294
1295 PIPELINE graphics variant_pipeline
1296   ATTACH variant_vertex_shader
1297   ATTACH variant_fragment_shader
1298   FRAMEBUFFER_SIZE 64 64
1299   BIND BUFFER variant_framebuffer AS color LOCATION 0
1300   BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
1301 END
1302 CLEAR_COLOR variant_pipeline 0 0 0 255
1303
1304 CLEAR variant_pipeline
1305 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 64 64
1306
1307 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005