• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 instructions propagated to predecessors
21
22# The test passes because both shaders render the same image.
23
24SHADER vertex reference_vertex_shader PASSTHROUGH
25
26SHADER 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: 653
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 %12 "gl_FragCoord"
40               OpName %15 "buf0"
41               OpMemberName %15 0 "resolution"
42               OpName %17 ""
43               OpName %55 "map"
44               OpName %435 "_GLF_color"
45               OpDecorate %12 BuiltIn FragCoord
46               OpMemberDecorate %15 0 Offset 0
47               OpDecorate %15 Block
48               OpDecorate %17 DescriptorSet 0
49               OpDecorate %17 Binding 0
50               OpDecorate %435 Location 0
51          %2 = OpTypeVoid
52          %3 = OpTypeFunction %2
53          %6 = OpTypeFloat 32
54          %7 = OpTypeVector %6 2
55         %10 = OpTypeVector %6 4
56         %11 = OpTypePointer Input %10
57         %12 = OpVariable %11 Input
58         %15 = OpTypeStruct %7
59         %16 = OpTypePointer Uniform %15
60         %17 = OpVariable %16 Uniform
61         %18 = OpTypeInt 32 1
62         %19 = OpConstant %18 0
63         %20 = OpTypePointer Uniform %7
64         %24 = OpTypeVector %18 2
65         %27 = OpTypeInt 32 0
66         %28 = OpConstant %27 0
67         %32 = OpConstant %6 16
68         %41 = OpTypePointer Function %18
69         %49 = OpConstant %18 256
70         %50 = OpTypeBool
71         %52 = OpConstant %27 256
72         %53 = OpTypeArray %18 %52
73         %60 = OpConstant %18 1
74         %63 = OpConstantComposite %24 %19 %19
75         %66 = OpConstantTrue %50
76         %82 = OpConstant %18 2
77         %86 = OpConstant %18 16
78        %119 = OpConstant %18 14
79        %162 = OpConstantFalse %50
80        %169 = OpConstant %18 8
81        %434 = OpTypePointer Output %10
82        %435 = OpVariable %434 Output
83        %436 = OpConstant %6 1
84        %437 = OpConstantComposite %10 %436 %436 %436 %436
85        %440 = OpConstant %6 0
86        %441 = OpConstantComposite %10 %440 %440 %440 %436
87        %447 = OpTypePointer Function %53
88        %648 = OpConstant %18 32
89        %649 = OpUndef %24
90          %4 = OpFunction %2 None %3
91          %5 = OpLabel
92         %55 = OpVariable %447 Function
93               OpSelectionMerge %442 None
94               OpSwitch %28 %443
95        %443 = OpLabel
96         %13 = OpLoad %10 %12
97         %14 = OpVectorShuffle %7 %13 %13 0 1
98         %21 = OpAccessChain %20 %17 %19
99         %22 = OpLoad %7 %21
100         %23 = OpFDiv %7 %14 %22
101         %31 = OpCompositeExtract %6 %23 0
102         %33 = OpFMul %6 %31 %32
103         %34 = OpConvertFToS %18 %33
104         %37 = OpCompositeExtract %6 %23 1
105         %38 = OpFMul %6 %37 %32
106         %39 = OpConvertFToS %18 %38
107               OpBranch %43
108         %43 = OpLabel
109        %518 = OpPhi %18 %19 %443 %61 %44
110         %51 = OpSLessThan %50 %518 %49
111               OpLoopMerge %45 %44 None
112               OpBranchConditional %51 %44 %45
113         %44 = OpLabel
114         %58 = OpAccessChain %41 %55 %518
115               OpStore %58 %19
116         %61 = OpIAdd %18 %518 %60
117               OpBranch %43
118         %45 = OpLabel
119               OpBranch %68
120         %68 = OpLabel
121        %591 = OpPhi %50 %66 %45 %569 %71
122        %520 = OpPhi %24 %63 %45 %637 %71
123        %519 = OpPhi %18 %19 %45 %621 %71
124               OpLoopMerge %70 %71 None
125               OpBranch %69
126         %69 = OpLabel
127         %73 = OpIAdd %18 %519 %60
128         %76 = OpCompositeExtract %18 %520 0
129         %77 = OpSGreaterThan %50 %76 %19
130               OpSelectionMerge %79 None
131               OpBranchConditional %77 %78 %79
132         %78 = OpLabel
133         %83 = OpISub %18 %76 %82
134         %85 = OpCompositeExtract %18 %520 1
135         %87 = OpIMul %18 %85 %86
136         %88 = OpIAdd %18 %83 %87
137         %89 = OpAccessChain %41 %55 %88
138         %90 = OpLoad %18 %89
139         %91 = OpIEqual %50 %90 %19
140               OpBranch %79
141         %79 = OpLabel
142         %92 = OpPhi %50 %77 %69 %91 %78
143        %650 = OpSelect %18 %92 %60 %19
144         %98 = OpCompositeExtract %18 %520 1
145         %99 = OpSGreaterThan %50 %98 %19
146               OpSelectionMerge %101 None
147               OpBranchConditional %99 %100 %101
148        %100 = OpLabel
149        %106 = OpISub %18 %98 %82
150        %107 = OpIMul %18 %106 %86
151        %108 = OpIAdd %18 %76 %107
152        %109 = OpAccessChain %41 %55 %108
153        %110 = OpLoad %18 %109
154        %111 = OpIEqual %50 %110 %19
155               OpBranch %101
156        %101 = OpLabel
157        %112 = OpPhi %50 %99 %79 %111 %100
158               OpSelectionMerge %114 None
159               OpBranchConditional %112 %113 %114
160        %113 = OpLabel
161        %116 = OpIAdd %18 %650 %60
162               OpBranch %114
163        %114 = OpLabel
164        %529 = OpPhi %18 %650 %101 %116 %113
165        %120 = OpSLessThan %50 %76 %119
166               OpSelectionMerge %122 None
167               OpBranchConditional %120 %121 %122
168        %121 = OpLabel
169        %125 = OpIAdd %18 %76 %82
170        %128 = OpIMul %18 %98 %86
171        %129 = OpIAdd %18 %125 %128
172        %130 = OpAccessChain %41 %55 %129
173        %131 = OpLoad %18 %130
174        %132 = OpIEqual %50 %131 %19
175               OpBranch %122
176        %122 = OpLabel
177        %133 = OpPhi %50 %120 %114 %132 %121
178               OpSelectionMerge %135 None
179               OpBranchConditional %133 %134 %135
180        %134 = OpLabel
181        %137 = OpIAdd %18 %529 %60
182               OpBranch %135
183        %135 = OpLabel
184        %533 = OpPhi %18 %529 %122 %137 %134
185        %140 = OpSLessThan %50 %98 %119
186               OpSelectionMerge %142 None
187               OpBranchConditional %140 %141 %142
188        %141 = OpLabel
189        %147 = OpIAdd %18 %98 %82
190        %148 = OpIMul %18 %147 %86
191        %149 = OpIAdd %18 %76 %148
192        %150 = OpAccessChain %41 %55 %149
193        %151 = OpLoad %18 %150
194        %152 = OpIEqual %50 %151 %19
195               OpBranch %142
196        %142 = OpLabel
197        %153 = OpPhi %50 %140 %135 %152 %141
198               OpSelectionMerge %155 None
199               OpBranchConditional %153 %154 %155
200        %154 = OpLabel
201        %157 = OpIAdd %18 %533 %60
202               OpBranch %155
203        %155 = OpLabel
204        %534 = OpPhi %18 %533 %142 %157 %154
205        %159 = OpIEqual %50 %534 %19
206               OpSelectionMerge %161 None
207               OpBranchConditional %159 %160 %207
208        %160 = OpLabel
209               OpBranch %163
210        %163 = OpLabel
211        %570 = OpPhi %50 %162 %160 %639 %166
212        %568 = OpPhi %24 %520 %160 %619 %166
213        %567 = OpPhi %18 %19 %160 %199 %166
214        %170 = OpSLessThan %50 %567 %169
215               OpLoopMerge %165 %166 None
216               OpBranchConditional %170 %164 %165
217        %164 = OpLabel
218               OpBranch %172
219        %172 = OpLabel
220        %619 = OpPhi %24 %568 %164 %644 %175
221        %617 = OpPhi %18 %19 %164 %197 %175
222        %639 = OpPhi %50 %570 %164 %651 %175
223        %178 = OpSLessThan %50 %617 %169
224               OpLoopMerge %174 %175 None
225               OpBranchConditional %178 %173 %174
226        %173 = OpLabel
227        %180 = OpIMul %18 %617 %82
228        %182 = OpIMul %18 %567 %82
229        %183 = OpIMul %18 %567 %648
230        %184 = OpIAdd %18 %180 %183
231        %185 = OpAccessChain %41 %55 %184
232        %186 = OpLoad %18 %185
233        %187 = OpIEqual %50 %186 %19
234               OpSelectionMerge %189 None
235               OpBranchConditional %187 %188 %189
236        %188 = OpLabel
237        %463 = OpCompositeInsert %24 %180 %649 0
238        %465 = OpCompositeInsert %24 %182 %463 1
239               OpBranch %189
240        %189 = OpLabel
241        %644 = OpPhi %24 %619 %173 %465 %188
242        %651 = OpSelect %50 %187 %66 %639
243               OpBranch %175
244        %175 = OpLabel
245        %197 = OpIAdd %18 %617 %60
246               OpBranch %172
247        %174 = OpLabel
248               OpBranch %166
249        %166 = OpLabel
250        %199 = OpIAdd %18 %567 %60
251               OpBranch %163
252        %165 = OpLabel
253        %201 = OpCompositeExtract %18 %568 0
254        %203 = OpCompositeExtract %18 %568 1
255        %204 = OpIMul %18 %203 %86
256        %205 = OpIAdd %18 %201 %204
257        %206 = OpAccessChain %41 %55 %205
258               OpStore %206 %60
259               OpBranch %161
260        %207 = OpLabel
261        %211 = OpSMod %18 %73 %534
262        %214 = OpIAdd %18 %73 %534
263        %216 = OpSGreaterThanEqual %50 %211 %19
264        %652 = OpSelect %50 %216 %77 %216
265               OpSelectionMerge %224 None
266               OpBranchConditional %652 %223 %224
267        %223 = OpLabel
268        %227 = OpISub %18 %76 %82
269        %230 = OpIMul %18 %98 %86
270        %231 = OpIAdd %18 %227 %230
271        %232 = OpAccessChain %41 %55 %231
272        %233 = OpLoad %18 %232
273        %234 = OpIEqual %50 %233 %19
274               OpBranch %224
275        %224 = OpLabel
276        %235 = OpPhi %50 %652 %207 %234 %223
277               OpSelectionMerge %237 None
278               OpBranchConditional %235 %236 %237
279        %236 = OpLabel
280        %239 = OpISub %18 %211 %60
281        %244 = OpIMul %18 %98 %86
282        %245 = OpIAdd %18 %76 %244
283        %246 = OpAccessChain %41 %55 %245
284               OpStore %246 %60
285        %249 = OpISub %18 %76 %60
286        %253 = OpIAdd %18 %249 %244
287        %254 = OpAccessChain %41 %55 %253
288               OpStore %254 %60
289        %257 = OpISub %18 %76 %82
290        %261 = OpIAdd %18 %257 %244
291        %262 = OpAccessChain %41 %55 %261
292               OpStore %262 %60
293        %479 = OpCompositeInsert %24 %257 %520 0
294               OpBranch %237
295        %237 = OpLabel
296        %550 = OpPhi %24 %520 %224 %479 %236
297        %549 = OpPhi %18 %211 %224 %239 %236
298        %268 = OpSGreaterThanEqual %50 %549 %19
299               OpSelectionMerge %270 None
300               OpBranchConditional %268 %269 %270
301        %269 = OpLabel
302        %272 = OpCompositeExtract %18 %550 1
303        %273 = OpSGreaterThan %50 %272 %19
304               OpBranch %270
305        %270 = OpLabel
306        %274 = OpPhi %50 %268 %237 %273 %269
307               OpSelectionMerge %276 None
308               OpBranchConditional %274 %275 %276
309        %275 = OpLabel
310        %278 = OpCompositeExtract %18 %550 0
311        %280 = OpCompositeExtract %18 %550 1
312        %281 = OpISub %18 %280 %82
313        %282 = OpIMul %18 %281 %86
314        %283 = OpIAdd %18 %278 %282
315        %284 = OpAccessChain %41 %55 %283
316        %285 = OpLoad %18 %284
317        %286 = OpIEqual %50 %285 %19
318               OpBranch %276
319        %276 = OpLabel
320        %287 = OpPhi %50 %274 %270 %286 %275
321               OpSelectionMerge %289 None
322               OpBranchConditional %287 %288 %289
323        %288 = OpLabel
324        %291 = OpISub %18 %549 %60
325        %293 = OpCompositeExtract %18 %550 0
326        %295 = OpCompositeExtract %18 %550 1
327        %296 = OpIMul %18 %295 %86
328        %297 = OpIAdd %18 %293 %296
329        %298 = OpAccessChain %41 %55 %297
330               OpStore %298 %60
331        %303 = OpISub %18 %295 %60
332        %304 = OpIMul %18 %303 %86
333        %305 = OpIAdd %18 %293 %304
334        %306 = OpAccessChain %41 %55 %305
335               OpStore %306 %60
336        %311 = OpISub %18 %295 %82
337        %312 = OpIMul %18 %311 %86
338        %313 = OpIAdd %18 %293 %312
339        %314 = OpAccessChain %41 %55 %313
340               OpStore %314 %60
341        %491 = OpCompositeInsert %24 %311 %550 1
342               OpBranch %289
343        %289 = OpLabel
344        %556 = OpPhi %24 %550 %276 %491 %288
345        %555 = OpPhi %18 %549 %276 %291 %288
346        %320 = OpSGreaterThanEqual %50 %555 %19
347               OpSelectionMerge %322 None
348               OpBranchConditional %320 %321 %322
349        %321 = OpLabel
350        %324 = OpCompositeExtract %18 %556 0
351        %325 = OpSLessThan %50 %324 %119
352               OpBranch %322
353        %322 = OpLabel
354        %326 = OpPhi %50 %320 %289 %325 %321
355               OpSelectionMerge %328 None
356               OpBranchConditional %326 %327 %328
357        %327 = OpLabel
358        %330 = OpCompositeExtract %18 %556 0
359        %331 = OpIAdd %18 %330 %82
360        %333 = OpCompositeExtract %18 %556 1
361        %334 = OpIMul %18 %333 %86
362        %335 = OpIAdd %18 %331 %334
363        %336 = OpAccessChain %41 %55 %335
364        %337 = OpLoad %18 %336
365        %338 = OpIEqual %50 %337 %19
366               OpBranch %328
367        %328 = OpLabel
368        %339 = OpPhi %50 %326 %322 %338 %327
369               OpSelectionMerge %341 None
370               OpBranchConditional %339 %340 %341
371        %340 = OpLabel
372        %343 = OpISub %18 %555 %60
373        %345 = OpCompositeExtract %18 %556 0
374        %347 = OpCompositeExtract %18 %556 1
375        %348 = OpIMul %18 %347 %86
376        %349 = OpIAdd %18 %345 %348
377        %350 = OpAccessChain %41 %55 %349
378               OpStore %350 %60
379        %353 = OpIAdd %18 %345 %60
380        %357 = OpIAdd %18 %353 %348
381        %358 = OpAccessChain %41 %55 %357
382               OpStore %358 %60
383        %361 = OpIAdd %18 %345 %82
384        %365 = OpIAdd %18 %361 %348
385        %366 = OpAccessChain %41 %55 %365
386               OpStore %366 %60
387        %503 = OpCompositeInsert %24 %361 %556 0
388               OpBranch %341
389        %341 = OpLabel
390        %562 = OpPhi %24 %556 %328 %503 %340
391        %561 = OpPhi %18 %555 %328 %343 %340
392        %372 = OpSGreaterThanEqual %50 %561 %19
393               OpSelectionMerge %374 None
394               OpBranchConditional %372 %373 %374
395        %373 = OpLabel
396        %376 = OpCompositeExtract %18 %562 1
397        %377 = OpSLessThan %50 %376 %119
398               OpBranch %374
399        %374 = OpLabel
400        %378 = OpPhi %50 %372 %341 %377 %373
401               OpSelectionMerge %380 None
402               OpBranchConditional %378 %379 %380
403        %379 = OpLabel
404        %382 = OpCompositeExtract %18 %562 0
405        %384 = OpCompositeExtract %18 %562 1
406        %385 = OpIAdd %18 %384 %82
407        %386 = OpIMul %18 %385 %86
408        %387 = OpIAdd %18 %382 %386
409        %388 = OpAccessChain %41 %55 %387
410        %389 = OpLoad %18 %388
411        %390 = OpIEqual %50 %389 %19
412               OpBranch %380
413        %380 = OpLabel
414        %391 = OpPhi %50 %378 %374 %390 %379
415               OpSelectionMerge %393 None
416               OpBranchConditional %391 %392 %393
417        %392 = OpLabel
418        %397 = OpCompositeExtract %18 %562 0
419        %399 = OpCompositeExtract %18 %562 1
420        %400 = OpIMul %18 %399 %86
421        %401 = OpIAdd %18 %397 %400
422        %402 = OpAccessChain %41 %55 %401
423               OpStore %402 %60
424        %407 = OpIAdd %18 %399 %60
425        %408 = OpIMul %18 %407 %86
426        %409 = OpIAdd %18 %397 %408
427        %410 = OpAccessChain %41 %55 %409
428               OpStore %410 %60
429        %415 = OpIAdd %18 %399 %82
430        %416 = OpIMul %18 %415 %86
431        %417 = OpIAdd %18 %397 %416
432        %418 = OpAccessChain %41 %55 %417
433               OpStore %418 %60
434        %515 = OpCompositeInsert %24 %415 %562 1
435               OpBranch %393
436        %393 = OpLabel
437        %638 = OpPhi %24 %562 %380 %515 %392
438               OpBranch %161
439        %161 = OpLabel
440        %637 = OpPhi %24 %568 %165 %638 %393
441        %621 = OpPhi %18 %73 %165 %214 %393
442        %569 = OpPhi %50 %570 %165 %591 %393
443        %425 = OpIMul %18 %39 %86
444        %428 = OpIAdd %18 %425 %34
445        %429 = OpAccessChain %41 %55 %428
446        %430 = OpLoad %18 %429
447        %431 = OpIEqual %50 %430 %60
448               OpSelectionMerge %433 None
449               OpBranchConditional %431 %432 %433
450        %432 = OpLabel
451               OpStore %435 %437
452               OpBranch %70
453        %433 = OpLabel
454               OpBranch %71
455         %71 = OpLabel
456               OpBranchConditional %569 %68 %70
457         %70 = OpLabel
458        %592 = OpPhi %50 %66 %432 %162 %71
459               OpSelectionMerge %445 None
460               OpBranchConditional %592 %442 %445
461        %445 = OpLabel
462               OpStore %435 %441
463               OpBranch %442
464        %442 = OpLabel
465               OpReturn
466               OpFunctionEnd
467END
468
469# uniforms for reference
470
471# resolution
472BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA
473 32.0 32.0
474END
475
476BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
477
478PIPELINE graphics reference_pipeline
479  ATTACH reference_vertex_shader
480  ATTACH reference_fragment_shader
481  FRAMEBUFFER_SIZE 32 32
482  BIND BUFFER reference_framebuffer AS color LOCATION 0
483  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
484END
485CLEAR_COLOR reference_pipeline 0 0 0 255
486
487CLEAR reference_pipeline
488RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 32 32
489
490
491SHADER vertex variant_vertex_shader PASSTHROUGH
492
493SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
494; SPIR-V
495; Version: 1.0
496; Generator: Khronos Glslang Reference Front End; 7
497; Bound: 865
498; Schema: 0
499               OpCapability Shader
500          %1 = OpExtInstImport "GLSL.std.450"
501               OpMemoryModel Logical GLSL450
502               OpEntryPoint Fragment %4 "main" %12 %435
503               OpExecutionMode %4 OriginUpperLeft
504               OpSource ESSL 320
505               OpName %4 "main"
506               OpName %12 "gl_FragCoord"
507               OpName %15 "buf0"
508               OpMemberName %15 0 "resolution"
509               OpName %17 ""
510               OpName %55 "map"
511               OpName %435 "_GLF_color"
512               OpDecorate %12 BuiltIn FragCoord
513               OpMemberDecorate %15 0 Offset 0
514               OpDecorate %15 Block
515               OpDecorate %17 DescriptorSet 0
516               OpDecorate %17 Binding 0
517               OpDecorate %435 Location 0
518          %2 = OpTypeVoid
519          %3 = OpTypeFunction %2
520          %6 = OpTypeFloat 32
521          %7 = OpTypeVector %6 2
522         %10 = OpTypeVector %6 4
523         %11 = OpTypePointer Input %10
524         %12 = OpVariable %11 Input
525         %15 = OpTypeStruct %7
526         %16 = OpTypePointer Uniform %15
527         %17 = OpVariable %16 Uniform
528         %18 = OpTypeInt 32 1
529         %19 = OpConstant %18 0
530         %20 = OpTypePointer Uniform %7
531         %24 = OpTypeVector %18 2
532         %27 = OpTypeInt 32 0
533         %28 = OpConstant %27 0
534         %32 = OpConstant %6 16
535         %41 = OpTypePointer Function %18
536         %49 = OpConstant %18 256
537         %50 = OpTypeBool
538         %52 = OpConstant %27 256
539         %53 = OpTypeArray %18 %52
540         %60 = OpConstant %18 1
541         %63 = OpConstantComposite %24 %19 %19
542         %66 = OpConstantTrue %50
543         %82 = OpConstant %18 2
544         %86 = OpConstant %18 16
545        %119 = OpConstant %18 14
546        %162 = OpConstantFalse %50
547        %169 = OpConstant %18 8
548        %434 = OpTypePointer Output %10
549        %435 = OpVariable %434 Output
550        %436 = OpConstant %6 1
551        %437 = OpConstantComposite %10 %436 %436 %436 %436
552        %440 = OpConstant %6 0
553        %441 = OpConstantComposite %10 %440 %440 %440 %436
554        %447 = OpTypePointer Function %53
555        %648 = OpConstant %18 32
556        %649 = OpUndef %24
557          %4 = OpFunction %2 None %3
558          %5 = OpLabel
559         %55 = OpVariable %447 Function
560               OpSelectionMerge %442 None
561               OpSwitch %28 %443
562        %443 = OpLabel
563         %13 = OpLoad %10 %12
564         %14 = OpVectorShuffle %7 %13 %13 0 1
565         %21 = OpAccessChain %20 %17 %19
566         %22 = OpLoad %7 %21
567         %23 = OpFDiv %7 %14 %22
568         %31 = OpCompositeExtract %6 %23 0
569         %33 = OpFMul %6 %31 %32
570         %34 = OpConvertFToS %18 %33
571         %37 = OpCompositeExtract %6 %23 1
572         %38 = OpFMul %6 %37 %32
573         %39 = OpConvertFToS %18 %38
574        %753 = OpSLessThan %50 %19 %49
575        %827 = OpIAdd %18 %19 %60
576        %863 = OpSLessThan %50 %827 %49
577               OpBranch %43
578         %43 = OpLabel
579        %829 = OpPhi %50 %863 %443 %864 %44
580        %755 = OpPhi %18 %827 %443 %828 %44
581         %51 = OpPhi %50 %753 %443 %754 %44
582        %518 = OpPhi %18 %19 %443 %61 %44
583               OpLoopMerge %45 %44 None
584               OpBranchConditional %51 %44 %45
585         %44 = OpLabel
586        %754 = OpPhi %50 %829 %43
587         %61 = OpPhi %18 %755 %43
588         %58 = OpAccessChain %41 %55 %518
589               OpStore %58 %19
590        %828 = OpIAdd %18 %61 %60
591        %864 = OpSLessThan %50 %828 %49
592               OpBranch %43
593         %45 = OpLabel
594               OpBranch %68
595         %68 = OpLabel
596        %591 = OpPhi %50 %66 %45 %569 %71
597        %520 = OpPhi %24 %63 %45 %637 %71
598        %519 = OpPhi %18 %19 %45 %621 %71
599               OpLoopMerge %70 %71 None
600               OpBranch %69
601         %69 = OpLabel
602         %73 = OpIAdd %18 %519 %60
603         %76 = OpCompositeExtract %18 %520 0
604         %77 = OpSGreaterThan %50 %76 %19
605               OpSelectionMerge %79 None
606               OpBranchConditional %77 %78 %79
607         %78 = OpLabel
608         %83 = OpISub %18 %76 %82
609         %85 = OpCompositeExtract %18 %520 1
610         %87 = OpIMul %18 %85 %86
611         %88 = OpIAdd %18 %83 %87
612         %89 = OpAccessChain %41 %55 %88
613         %90 = OpLoad %18 %89
614         %91 = OpIEqual %50 %90 %19
615               OpBranch %79
616         %79 = OpLabel
617         %92 = OpPhi %50 %77 %69 %91 %78
618        %650 = OpSelect %18 %92 %60 %19
619         %98 = OpCompositeExtract %18 %520 1
620         %99 = OpSGreaterThan %50 %98 %19
621               OpSelectionMerge %101 None
622               OpBranchConditional %99 %100 %101
623        %100 = OpLabel
624        %106 = OpISub %18 %98 %82
625        %107 = OpIMul %18 %106 %86
626        %108 = OpIAdd %18 %76 %107
627        %109 = OpAccessChain %41 %55 %108
628        %110 = OpLoad %18 %109
629        %111 = OpIEqual %50 %110 %19
630               OpBranch %101
631        %101 = OpLabel
632        %112 = OpPhi %50 %99 %79 %111 %100
633               OpSelectionMerge %114 None
634               OpBranchConditional %112 %113 %114
635        %113 = OpLabel
636        %116 = OpIAdd %18 %650 %60
637               OpBranch %114
638        %114 = OpLabel
639        %529 = OpPhi %18 %650 %101 %116 %113
640        %120 = OpSLessThan %50 %76 %119
641               OpSelectionMerge %122 None
642               OpBranchConditional %120 %121 %122
643        %121 = OpLabel
644        %125 = OpIAdd %18 %76 %82
645        %128 = OpIMul %18 %98 %86
646        %129 = OpIAdd %18 %125 %128
647        %130 = OpAccessChain %41 %55 %129
648        %131 = OpLoad %18 %130
649        %132 = OpIEqual %50 %131 %19
650               OpBranch %122
651        %122 = OpLabel
652        %133 = OpPhi %50 %120 %114 %132 %121
653               OpSelectionMerge %135 None
654               OpBranchConditional %133 %134 %135
655        %134 = OpLabel
656        %137 = OpIAdd %18 %529 %60
657               OpBranch %135
658        %135 = OpLabel
659        %533 = OpPhi %18 %529 %122 %137 %134
660        %140 = OpSLessThan %50 %98 %119
661               OpSelectionMerge %142 None
662               OpBranchConditional %140 %141 %142
663        %141 = OpLabel
664        %147 = OpIAdd %18 %98 %82
665        %148 = OpIMul %18 %147 %86
666        %149 = OpIAdd %18 %76 %148
667        %150 = OpAccessChain %41 %55 %149
668        %151 = OpLoad %18 %150
669        %152 = OpIEqual %50 %151 %19
670               OpBranch %142
671        %142 = OpLabel
672        %153 = OpPhi %50 %140 %135 %152 %141
673               OpSelectionMerge %155 None
674               OpBranchConditional %153 %154 %155
675        %154 = OpLabel
676        %157 = OpIAdd %18 %533 %60
677               OpBranch %155
678        %155 = OpLabel
679        %534 = OpPhi %18 %533 %142 %157 %154
680        %159 = OpIEqual %50 %534 %19
681               OpSelectionMerge %161 None
682               OpBranchConditional %159 %160 %207
683        %160 = OpLabel
684               OpBranch %163
685        %163 = OpLabel
686        %570 = OpPhi %50 %162 %160 %639 %166
687        %568 = OpPhi %24 %520 %160 %619 %166
688        %567 = OpPhi %18 %19 %160 %199 %166
689        %170 = OpSLessThan %50 %567 %169
690               OpLoopMerge %165 %166 None
691               OpBranchConditional %170 %164 %165
692        %164 = OpLabel
693               OpBranch %172
694        %172 = OpLabel
695        %619 = OpPhi %24 %568 %164 %644 %175
696        %617 = OpPhi %18 %19 %164 %197 %175
697        %639 = OpPhi %50 %570 %164 %651 %175
698        %178 = OpSLessThan %50 %617 %169
699               OpLoopMerge %174 %175 None
700               OpBranchConditional %178 %173 %174
701        %173 = OpLabel
702        %180 = OpIMul %18 %617 %82
703        %182 = OpIMul %18 %567 %82
704        %183 = OpIMul %18 %567 %648
705        %184 = OpIAdd %18 %180 %183
706        %185 = OpAccessChain %41 %55 %184
707        %186 = OpLoad %18 %185
708        %187 = OpIEqual %50 %186 %19
709               OpSelectionMerge %189 None
710               OpBranchConditional %187 %188 %189
711        %188 = OpLabel
712        %463 = OpCompositeInsert %24 %180 %649 0
713        %465 = OpCompositeInsert %24 %182 %463 1
714               OpBranch %189
715        %189 = OpLabel
716        %644 = OpPhi %24 %619 %173 %465 %188
717        %651 = OpSelect %50 %187 %66 %639
718               OpBranch %175
719        %175 = OpLabel
720        %197 = OpIAdd %18 %617 %60
721               OpBranch %172
722        %174 = OpLabel
723               OpBranch %166
724        %166 = OpLabel
725        %199 = OpIAdd %18 %567 %60
726               OpBranch %163
727        %165 = OpLabel
728        %201 = OpCompositeExtract %18 %568 0
729        %203 = OpCompositeExtract %18 %568 1
730        %204 = OpIMul %18 %203 %86
731        %205 = OpIAdd %18 %201 %204
732        %206 = OpAccessChain %41 %55 %205
733               OpStore %206 %60
734               OpBranch %161
735        %207 = OpLabel
736        %211 = OpSMod %18 %73 %534
737        %214 = OpIAdd %18 %73 %534
738        %216 = OpSGreaterThanEqual %50 %211 %19
739        %652 = OpSelect %50 %216 %77 %216
740               OpSelectionMerge %224 None
741               OpBranchConditional %652 %223 %224
742        %223 = OpLabel
743        %227 = OpISub %18 %76 %82
744        %230 = OpIMul %18 %98 %86
745        %231 = OpIAdd %18 %227 %230
746        %232 = OpAccessChain %41 %55 %231
747        %233 = OpLoad %18 %232
748        %234 = OpIEqual %50 %233 %19
749               OpBranch %224
750        %224 = OpLabel
751        %235 = OpPhi %50 %652 %207 %234 %223
752               OpSelectionMerge %237 None
753               OpBranchConditional %235 %236 %237
754        %236 = OpLabel
755        %239 = OpISub %18 %211 %60
756        %244 = OpIMul %18 %98 %86
757        %245 = OpIAdd %18 %76 %244
758        %246 = OpAccessChain %41 %55 %245
759               OpStore %246 %60
760        %249 = OpISub %18 %76 %60
761        %253 = OpIAdd %18 %249 %244
762        %254 = OpAccessChain %41 %55 %253
763               OpStore %254 %60
764        %257 = OpISub %18 %76 %82
765        %261 = OpIAdd %18 %257 %244
766        %262 = OpAccessChain %41 %55 %261
767               OpStore %262 %60
768        %479 = OpCompositeInsert %24 %257 %520 0
769               OpBranch %237
770        %237 = OpLabel
771        %550 = OpPhi %24 %520 %224 %479 %236
772        %549 = OpPhi %18 %211 %224 %239 %236
773        %268 = OpSGreaterThanEqual %50 %549 %19
774               OpSelectionMerge %270 None
775               OpBranchConditional %268 %269 %270
776        %269 = OpLabel
777        %272 = OpCompositeExtract %18 %550 1
778        %273 = OpSGreaterThan %50 %272 %19
779               OpBranch %270
780        %270 = OpLabel
781        %274 = OpPhi %50 %268 %237 %273 %269
782               OpSelectionMerge %276 None
783               OpBranchConditional %274 %275 %276
784        %275 = OpLabel
785        %278 = OpCompositeExtract %18 %550 0
786        %280 = OpCompositeExtract %18 %550 1
787        %281 = OpISub %18 %280 %82
788        %282 = OpIMul %18 %281 %86
789        %283 = OpIAdd %18 %278 %282
790        %284 = OpAccessChain %41 %55 %283
791        %285 = OpLoad %18 %284
792        %286 = OpIEqual %50 %285 %19
793               OpBranch %276
794        %276 = OpLabel
795        %287 = OpPhi %50 %274 %270 %286 %275
796               OpSelectionMerge %289 None
797               OpBranchConditional %287 %288 %289
798        %288 = OpLabel
799        %291 = OpISub %18 %549 %60
800        %293 = OpCompositeExtract %18 %550 0
801        %295 = OpCompositeExtract %18 %550 1
802        %296 = OpIMul %18 %295 %86
803        %297 = OpIAdd %18 %293 %296
804        %298 = OpAccessChain %41 %55 %297
805               OpStore %298 %60
806        %303 = OpISub %18 %295 %60
807        %304 = OpIMul %18 %303 %86
808        %305 = OpIAdd %18 %293 %304
809        %306 = OpAccessChain %41 %55 %305
810               OpStore %306 %60
811        %311 = OpISub %18 %295 %82
812        %312 = OpIMul %18 %311 %86
813        %313 = OpIAdd %18 %293 %312
814        %314 = OpAccessChain %41 %55 %313
815               OpStore %314 %60
816        %491 = OpCompositeInsert %24 %311 %550 1
817               OpBranch %289
818        %289 = OpLabel
819        %556 = OpPhi %24 %550 %276 %491 %288
820        %555 = OpPhi %18 %549 %276 %291 %288
821        %320 = OpSGreaterThanEqual %50 %555 %19
822               OpSelectionMerge %322 None
823               OpBranchConditional %320 %321 %322
824        %321 = OpLabel
825        %324 = OpCompositeExtract %18 %556 0
826        %325 = OpSLessThan %50 %324 %119
827               OpBranch %322
828        %322 = OpLabel
829        %326 = OpPhi %50 %320 %289 %325 %321
830               OpSelectionMerge %328 None
831               OpBranchConditional %326 %327 %328
832        %327 = OpLabel
833        %330 = OpCompositeExtract %18 %556 0
834        %331 = OpIAdd %18 %330 %82
835        %333 = OpCompositeExtract %18 %556 1
836        %334 = OpIMul %18 %333 %86
837        %335 = OpIAdd %18 %331 %334
838        %336 = OpAccessChain %41 %55 %335
839        %337 = OpLoad %18 %336
840        %338 = OpIEqual %50 %337 %19
841               OpBranch %328
842        %328 = OpLabel
843        %339 = OpPhi %50 %326 %322 %338 %327
844               OpSelectionMerge %341 None
845               OpBranchConditional %339 %340 %341
846        %340 = OpLabel
847        %343 = OpISub %18 %555 %60
848        %345 = OpCompositeExtract %18 %556 0
849        %347 = OpCompositeExtract %18 %556 1
850        %348 = OpIMul %18 %347 %86
851        %349 = OpIAdd %18 %345 %348
852        %350 = OpAccessChain %41 %55 %349
853               OpStore %350 %60
854        %353 = OpIAdd %18 %345 %60
855        %357 = OpIAdd %18 %353 %348
856        %358 = OpAccessChain %41 %55 %357
857               OpStore %358 %60
858        %361 = OpIAdd %18 %345 %82
859        %365 = OpIAdd %18 %361 %348
860        %366 = OpAccessChain %41 %55 %365
861               OpStore %366 %60
862        %503 = OpCompositeInsert %24 %361 %556 0
863               OpBranch %341
864        %341 = OpLabel
865        %562 = OpPhi %24 %556 %328 %503 %340
866        %561 = OpPhi %18 %555 %328 %343 %340
867        %372 = OpSGreaterThanEqual %50 %561 %19
868               OpSelectionMerge %374 None
869               OpBranchConditional %372 %373 %374
870        %373 = OpLabel
871        %376 = OpCompositeExtract %18 %562 1
872        %377 = OpSLessThan %50 %376 %119
873               OpBranch %374
874        %374 = OpLabel
875        %378 = OpPhi %50 %372 %341 %377 %373
876               OpSelectionMerge %380 None
877               OpBranchConditional %378 %379 %380
878        %379 = OpLabel
879        %382 = OpCompositeExtract %18 %562 0
880        %384 = OpCompositeExtract %18 %562 1
881        %385 = OpIAdd %18 %384 %82
882        %386 = OpIMul %18 %385 %86
883        %387 = OpIAdd %18 %382 %386
884        %388 = OpAccessChain %41 %55 %387
885        %389 = OpLoad %18 %388
886        %390 = OpIEqual %50 %389 %19
887               OpBranch %380
888        %380 = OpLabel
889        %391 = OpPhi %50 %378 %374 %390 %379
890               OpSelectionMerge %393 None
891               OpBranchConditional %391 %392 %393
892        %392 = OpLabel
893        %397 = OpCompositeExtract %18 %562 0
894        %399 = OpCompositeExtract %18 %562 1
895        %400 = OpIMul %18 %399 %86
896        %401 = OpIAdd %18 %397 %400
897        %402 = OpAccessChain %41 %55 %401
898               OpStore %402 %60
899        %407 = OpIAdd %18 %399 %60
900        %408 = OpIMul %18 %407 %86
901        %409 = OpIAdd %18 %397 %408
902        %410 = OpAccessChain %41 %55 %409
903               OpStore %410 %60
904        %415 = OpIAdd %18 %399 %82
905        %416 = OpIMul %18 %415 %86
906        %417 = OpIAdd %18 %397 %416
907        %418 = OpAccessChain %41 %55 %417
908               OpStore %418 %60
909        %515 = OpCompositeInsert %24 %415 %562 1
910               OpBranch %393
911        %393 = OpLabel
912        %638 = OpPhi %24 %562 %380 %515 %392
913               OpBranch %161
914        %161 = OpLabel
915        %637 = OpPhi %24 %568 %165 %638 %393
916        %621 = OpPhi %18 %73 %165 %214 %393
917        %569 = OpPhi %50 %570 %165 %591 %393
918        %425 = OpIMul %18 %39 %86
919        %428 = OpIAdd %18 %425 %34
920        %429 = OpAccessChain %41 %55 %428
921        %430 = OpLoad %18 %429
922        %431 = OpIEqual %50 %430 %60
923               OpSelectionMerge %433 None
924               OpBranchConditional %431 %432 %433
925        %432 = OpLabel
926               OpStore %435 %437
927               OpBranch %70
928        %433 = OpLabel
929               OpBranch %71
930         %71 = OpLabel
931               OpBranchConditional %569 %68 %70
932         %70 = OpLabel
933        %592 = OpPhi %50 %66 %432 %162 %71
934               OpSelectionMerge %445 None
935               OpBranchConditional %592 %442 %445
936        %445 = OpLabel
937               OpStore %435 %441
938               OpBranch %442
939        %442 = OpLabel
940               OpReturn
941               OpFunctionEnd
942END
943
944# uniforms for variant
945
946# resolution
947BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA
948 32.0 32.0
949END
950
951BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
952
953PIPELINE graphics variant_pipeline
954  ATTACH variant_vertex_shader
955  ATTACH variant_fragment_shader
956  FRAMEBUFFER_SIZE 32 32
957  BIND BUFFER variant_framebuffer AS color LOCATION 0
958  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
959END
960CLEAR_COLOR variant_pipeline 0 0 0 255
961
962CLEAR variant_pipeline
963RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32
964
965EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
966