3 # Copyright 2020 Google LLC
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
9 # http://www.apache.org/licenses/LICENSE-2.0
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.
18 # A test for a bug found by the GraphicsFuzz project.
20 # Short description: Shaders diff: selection %25 flattened; dead continues
22 # The test renders three images using semantically equivalent shaders, and then
23 # checks that the images are similar.
24 # The test passes because the shaders have the same semantics and so the images
27 SHADER vertex reference_vertex_shader PASSTHROUGH
29 SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
32 ; Generator: Khronos Glslang Reference Front End; 7
36 %1 = OpExtInstImport "GLSL.std.450"
37 OpMemoryModel Logical GLSL450
38 OpEntryPoint Fragment %4 "main" %243 %369
39 OpExecutionMode %4 OriginUpperLeft
42 OpName %12 "merge(i1;i1;i1;"
46 OpName %14 "mergeSort("
65 OpMemberName %159 0 "injectionSwitch"
68 OpName %243 "gl_FragCoord"
70 OpName %369 "_GLF_color"
71 OpMemberDecorate %159 0 Offset 0
73 OpDecorate %161 DescriptorSet 0
74 OpDecorate %161 Binding 0
75 OpDecorate %243 BuiltIn FragCoord
76 OpDecorate %369 Location 0
78 %3 = OpTypeFunction %2
80 %7 = OpTypePointer Function %6
81 %8 = OpTypeFunction %2 %7 %7 %7
85 %38 = OpConstant %37 10
86 %39 = OpTypeArray %6 %38
87 %40 = OpTypePointer Private %39
88 %41 = OpVariable %40 Private
89 %43 = OpTypePointer Private %6
90 %52 = OpVariable %40 Private
91 %74 = OpConstant %6 10
92 %105 = OpConstant %6 0
93 %107 = OpConstant %6 9
94 %136 = OpConstant %6 2
96 %158 = OpTypeVector %157 2
97 %159 = OpTypeStruct %158
98 %160 = OpTypePointer Uniform %159
99 %161 = OpVariable %160 Uniform
100 %162 = OpConstant %37 0
101 %163 = OpTypePointer Uniform %157
102 %184 = OpConstant %6 4
103 %188 = OpConstant %6 3
104 %201 = OpConstant %6 -1
105 %205 = OpConstant %6 -2
106 %209 = OpConstant %6 -3
107 %213 = OpConstant %6 -4
108 %217 = OpConstant %6 -5
109 %241 = OpTypeVector %157 4
110 %242 = OpTypePointer Input %241
111 %243 = OpVariable %242 Input
112 %244 = OpConstant %37 1
113 %245 = OpTypePointer Input %157
114 %249 = OpConstant %6 30
115 %253 = OpTypePointer Function %157
116 %255 = OpConstant %157 0.5
117 %259 = OpConstant %157 10
118 %266 = OpConstant %6 60
119 %279 = OpConstant %6 90
120 %292 = OpConstant %6 120
121 %305 = OpConstant %6 150
122 %314 = OpConstant %6 180
123 %318 = OpConstant %6 5
124 %328 = OpConstant %6 210
125 %332 = OpConstant %6 6
126 %342 = OpConstant %6 240
127 %346 = OpConstant %6 7
128 %356 = OpConstant %6 270
129 %360 = OpConstant %6 8
130 %368 = OpTypePointer Output %241
131 %369 = OpVariable %368 Output
132 %371 = OpTypeVector %157 3
133 %373 = OpConstant %157 1
134 %4 = OpFunction %2 None %3
136 %156 = OpVariable %7 Function
137 %225 = OpVariable %7 Function
138 %254 = OpVariable %253 Function
139 %164 = OpAccessChain %163 %161 %105 %162
140 %165 = OpLoad %157 %164
141 %166 = OpConvertFToS %6 %165
145 OpLoopMerge %169 %170 None
148 %171 = OpLoad %6 %156
149 OpSelectionMerge %182 None
150 OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
152 %183 = OpLoad %6 %156
153 %185 = OpAccessChain %43 %41 %183
157 %187 = OpLoad %6 %156
158 %189 = OpAccessChain %43 %41 %187
162 %191 = OpLoad %6 %156
163 %192 = OpAccessChain %43 %41 %191
167 %194 = OpLoad %6 %156
168 %195 = OpAccessChain %43 %41 %194
172 %197 = OpLoad %6 %156
173 %198 = OpAccessChain %43 %41 %197
177 %200 = OpLoad %6 %156
178 %202 = OpAccessChain %43 %41 %200
182 %204 = OpLoad %6 %156
183 %206 = OpAccessChain %43 %41 %204
187 %208 = OpLoad %6 %156
188 %210 = OpAccessChain %43 %41 %208
192 %212 = OpLoad %6 %156
193 %214 = OpAccessChain %43 %41 %212
197 %216 = OpLoad %6 %156
198 %218 = OpAccessChain %43 %41 %216
202 %221 = OpLoad %6 %156
203 %222 = OpIAdd %6 %221 %22
207 %223 = OpLoad %6 %156
208 %224 = OpSLessThan %31 %223 %74
209 OpBranchConditional %224 %167 %169
214 OpLoopMerge %228 %229 None
217 %231 = OpLoad %6 %225
218 %232 = OpSLessThan %31 %231 %74
219 OpBranchConditional %232 %227 %228
221 %233 = OpLoad %6 %225
222 %234 = OpLoad %6 %225
223 %235 = OpAccessChain %43 %41 %234
224 %236 = OpLoad %6 %235
225 %237 = OpAccessChain %43 %52 %233
229 %238 = OpLoad %6 %225
230 %239 = OpIAdd %6 %238 %22
234 %240 = OpFunctionCall %2 %14
235 %246 = OpAccessChain %245 %243 %244
236 %247 = OpLoad %157 %246
237 %248 = OpConvertFToS %6 %247
238 %250 = OpSLessThan %31 %248 %249
239 OpSelectionMerge %252 None
240 OpBranchConditional %250 %251 %262
242 %256 = OpAccessChain %43 %41 %105
243 %257 = OpLoad %6 %256
244 %258 = OpConvertSToF %157 %257
245 %260 = OpFDiv %157 %258 %259
246 %261 = OpFAdd %157 %255 %260
250 %263 = OpAccessChain %245 %243 %244
251 %264 = OpLoad %157 %263
252 %265 = OpConvertFToS %6 %264
253 %267 = OpSLessThan %31 %265 %266
254 OpSelectionMerge %269 None
255 OpBranchConditional %267 %268 %275
257 %270 = OpAccessChain %43 %41 %22
258 %271 = OpLoad %6 %270
259 %272 = OpConvertSToF %157 %271
260 %273 = OpFDiv %157 %272 %259
261 %274 = OpFAdd %157 %255 %273
265 %276 = OpAccessChain %245 %243 %244
266 %277 = OpLoad %157 %276
267 %278 = OpConvertFToS %6 %277
268 %280 = OpSLessThan %31 %278 %279
269 OpSelectionMerge %282 None
270 OpBranchConditional %280 %281 %288
272 %283 = OpAccessChain %43 %41 %136
273 %284 = OpLoad %6 %283
274 %285 = OpConvertSToF %157 %284
275 %286 = OpFDiv %157 %285 %259
276 %287 = OpFAdd %157 %255 %286
280 %289 = OpAccessChain %245 %243 %244
281 %290 = OpLoad %157 %289
282 %291 = OpConvertFToS %6 %290
283 %293 = OpSLessThan %31 %291 %292
284 OpSelectionMerge %295 None
285 OpBranchConditional %293 %294 %301
287 %296 = OpAccessChain %43 %41 %188
288 %297 = OpLoad %6 %296
289 %298 = OpConvertSToF %157 %297
290 %299 = OpFDiv %157 %298 %259
291 %300 = OpFAdd %157 %255 %299
295 %302 = OpAccessChain %245 %243 %244
296 %303 = OpLoad %157 %302
297 %304 = OpConvertFToS %6 %303
298 %306 = OpSLessThan %31 %304 %305
299 OpSelectionMerge %308 None
300 OpBranchConditional %306 %307 %310
304 %311 = OpAccessChain %245 %243 %244
305 %312 = OpLoad %157 %311
306 %313 = OpConvertFToS %6 %312
307 %315 = OpSLessThan %31 %313 %314
308 OpSelectionMerge %317 None
309 OpBranchConditional %315 %316 %324
311 %319 = OpAccessChain %43 %41 %318
312 %320 = OpLoad %6 %319
313 %321 = OpConvertSToF %157 %320
314 %322 = OpFDiv %157 %321 %259
315 %323 = OpFAdd %157 %255 %322
319 %325 = OpAccessChain %245 %243 %244
320 %326 = OpLoad %157 %325
321 %327 = OpConvertFToS %6 %326
322 %329 = OpSLessThan %31 %327 %328
323 OpSelectionMerge %331 None
324 OpBranchConditional %329 %330 %338
326 %333 = OpAccessChain %43 %41 %332
327 %334 = OpLoad %6 %333
328 %335 = OpConvertSToF %157 %334
329 %336 = OpFDiv %157 %335 %259
330 %337 = OpFAdd %157 %255 %336
334 %339 = OpAccessChain %245 %243 %244
335 %340 = OpLoad %157 %339
336 %341 = OpConvertFToS %6 %340
337 %343 = OpSLessThan %31 %341 %342
338 OpSelectionMerge %345 None
339 OpBranchConditional %343 %344 %352
341 %347 = OpAccessChain %43 %41 %346
342 %348 = OpLoad %6 %347
343 %349 = OpConvertSToF %157 %348
344 %350 = OpFDiv %157 %349 %259
345 %351 = OpFAdd %157 %255 %350
349 %353 = OpAccessChain %245 %243 %244
350 %354 = OpLoad %157 %353
351 %355 = OpConvertFToS %6 %354
352 %357 = OpSLessThan %31 %355 %356
353 OpSelectionMerge %359 None
354 OpBranchConditional %357 %358 %366
356 %361 = OpAccessChain %43 %41 %360
357 %362 = OpLoad %6 %361
358 %363 = OpConvertSToF %157 %362
359 %364 = OpFDiv %157 %363 %259
360 %365 = OpFAdd %157 %255 %364
382 %370 = OpLoad %157 %254
383 %372 = OpCompositeConstruct %371 %370 %370 %370
384 %374 = OpCompositeExtract %157 %372 0
385 %375 = OpCompositeExtract %157 %372 1
386 %376 = OpCompositeExtract %157 %372 2
387 %377 = OpCompositeConstruct %241 %374 %375 %376 %373
391 %12 = OpFunction %2 None %8
392 %9 = OpFunctionParameter %7
393 %10 = OpFunctionParameter %7
394 %11 = OpFunctionParameter %7
396 %16 = OpVariable %7 Function
397 %18 = OpVariable %7 Function
398 %20 = OpVariable %7 Function
399 %87 = OpVariable %7 Function
405 %23 = OpIAdd %6 %21 %22
409 OpLoopMerge %26 %27 None
414 %32 = OpSLessThanEqual %31 %29 %30
417 %35 = OpSLessThanEqual %31 %33 %34
418 %36 = OpLogicalAnd %31 %32 %35
419 OpBranchConditional %36 %25 %26
422 %44 = OpAccessChain %43 %41 %42
425 %47 = OpAccessChain %43 %41 %46
427 %49 = OpSLessThan %31 %45 %48
428 OpSelectionMerge %51 None
429 OpBranchConditional %49 %50 %60
432 %54 = OpIAdd %6 %53 %22
435 %56 = OpIAdd %6 %55 %22
437 %57 = OpAccessChain %43 %41 %55
439 %59 = OpAccessChain %43 %52 %53
444 %62 = OpIAdd %6 %61 %22
447 %64 = OpIAdd %6 %63 %22
449 %65 = OpAccessChain %43 %41 %63
451 %67 = OpAccessChain %43 %52 %61
461 OpLoopMerge %70 %71 None
465 %75 = OpSLessThan %31 %73 %74
468 %78 = OpSLessThanEqual %31 %76 %77
469 %79 = OpLogicalAnd %31 %75 %78
470 OpBranchConditional %79 %69 %70
473 %81 = OpIAdd %6 %80 %22
476 %83 = OpIAdd %6 %82 %22
478 %84 = OpAccessChain %43 %41 %82
480 %86 = OpAccessChain %43 %52 %80
490 OpLoopMerge %91 %92 None
495 %96 = OpSLessThanEqual %31 %94 %95
496 OpBranchConditional %96 %90 %91
500 %99 = OpAccessChain %43 %52 %98
502 %101 = OpAccessChain %43 %41 %97
507 %103 = OpIAdd %6 %102 %22
513 %14 = OpFunction %2 None %3
515 %104 = OpVariable %7 Function
516 %106 = OpVariable %7 Function
517 %108 = OpVariable %7 Function
518 %117 = OpVariable %7 Function
519 %127 = OpVariable %7 Function
520 %129 = OpVariable %7 Function
521 %134 = OpVariable %7 Function
522 %143 = OpVariable %7 Function
523 %145 = OpVariable %7 Function
524 %147 = OpVariable %7 Function
530 OpLoopMerge %111 %112 None
533 %114 = OpLoad %6 %108
534 %115 = OpLoad %6 %106
535 %116 = OpSLessThanEqual %31 %114 %115
536 OpBranchConditional %116 %110 %111
538 %118 = OpLoad %6 %104
542 OpLoopMerge %121 %122 None
545 %124 = OpLoad %6 %117
546 %125 = OpLoad %6 %106
547 %126 = OpSLessThan %31 %124 %125
548 OpBranchConditional %126 %120 %121
550 %128 = OpLoad %6 %117
552 %130 = OpLoad %6 %117
553 %131 = OpLoad %6 %108
554 %132 = OpIAdd %6 %130 %131
555 %133 = OpISub %6 %132 %22
557 %135 = OpLoad %6 %117
558 %137 = OpLoad %6 %108
559 %138 = OpIMul %6 %136 %137
560 %139 = OpIAdd %6 %135 %138
561 %140 = OpISub %6 %139 %22
562 %141 = OpLoad %6 %106
563 %142 = OpExtInst %6 %1 SMin %140 %141
565 %144 = OpLoad %6 %127
567 %146 = OpLoad %6 %129
569 %148 = OpLoad %6 %134
571 %149 = OpFunctionCall %2 %12 %143 %145 %147
574 %150 = OpLoad %6 %108
575 %151 = OpIMul %6 %136 %150
576 %152 = OpLoad %6 %117
577 %153 = OpIAdd %6 %152 %151
583 %154 = OpLoad %6 %108
584 %155 = OpIMul %6 %136 %154
592 # uniforms for reference
595 BUFFER reference_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
599 BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
601 PIPELINE graphics reference_pipeline
602 ATTACH reference_vertex_shader
603 ATTACH reference_fragment_shader
604 FRAMEBUFFER_SIZE 256 256
605 BIND BUFFER reference_framebuffer AS color LOCATION 0
606 BIND BUFFER reference_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
608 CLEAR_COLOR reference_pipeline 0 0 0 255
610 CLEAR reference_pipeline
611 RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
614 SHADER vertex variant_vertex_shader PASSTHROUGH
616 SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
619 ; Generator: Khronos Glslang Reference Front End; 7
623 %1 = OpExtInstImport "GLSL.std.450"
624 OpMemoryModel Logical GLSL450
625 OpEntryPoint Fragment %4 "main" %243 %369
626 OpExecutionMode %4 OriginUpperLeft
629 OpName %12 "merge(i1;i1;i1;"
633 OpName %14 "mergeSort("
652 OpMemberName %159 0 "injectionSwitch"
655 OpName %243 "gl_FragCoord"
657 OpName %369 "_GLF_color"
658 OpMemberDecorate %159 0 Offset 0
659 OpDecorate %159 Block
660 OpDecorate %161 DescriptorSet 0
661 OpDecorate %161 Binding 0
662 OpDecorate %243 BuiltIn FragCoord
663 OpDecorate %369 Location 0
665 %3 = OpTypeFunction %2
667 %7 = OpTypePointer Function %6
668 %8 = OpTypeFunction %2 %7 %7 %7
669 %22 = OpConstant %6 1
672 %38 = OpConstant %37 10
673 %39 = OpTypeArray %6 %38
674 %40 = OpTypePointer Private %39
675 %41 = OpVariable %40 Private
676 %43 = OpTypePointer Private %6
677 %52 = OpVariable %40 Private
678 %74 = OpConstant %6 10
679 %105 = OpConstant %6 0
680 %107 = OpConstant %6 9
681 %136 = OpConstant %6 2
682 %157 = OpTypeFloat 32
683 %158 = OpTypeVector %157 2
684 %159 = OpTypeStruct %158
685 %160 = OpTypePointer Uniform %159
686 %161 = OpVariable %160 Uniform
687 %162 = OpConstant %37 0
688 %163 = OpTypePointer Uniform %157
689 %184 = OpConstant %6 4
690 %188 = OpConstant %6 3
691 %201 = OpConstant %6 -1
692 %205 = OpConstant %6 -2
693 %209 = OpConstant %6 -3
694 %213 = OpConstant %6 -4
695 %217 = OpConstant %6 -5
696 %241 = OpTypeVector %157 4
697 %242 = OpTypePointer Input %241
698 %243 = OpVariable %242 Input
699 %244 = OpConstant %37 1
700 %245 = OpTypePointer Input %157
701 %249 = OpConstant %6 30
702 %253 = OpTypePointer Function %157
703 %255 = OpConstant %157 0.5
704 %259 = OpConstant %157 10
705 %266 = OpConstant %6 60
706 %279 = OpConstant %6 90
707 %292 = OpConstant %6 120
708 %305 = OpConstant %6 150
709 %314 = OpConstant %6 180
710 %318 = OpConstant %6 5
711 %328 = OpConstant %6 210
712 %332 = OpConstant %6 6
713 %342 = OpConstant %6 240
714 %346 = OpConstant %6 7
715 %356 = OpConstant %6 270
716 %360 = OpConstant %6 8
717 %368 = OpTypePointer Output %241
718 %369 = OpVariable %368 Output
719 %371 = OpTypeVector %157 3
720 %373 = OpConstant %157 1
721 %484 = OpConstant %6 0
722 %573 = OpConstantTrue %31
723 %574 = OpConstantFalse %31
724 %575 = OpConstant %157 0
725 %4 = OpFunction %2 None %3
727 %156 = OpVariable %7 Function
728 %225 = OpVariable %7 Function
729 %254 = OpVariable %253 Function
730 %164 = OpAccessChain %163 %161 %105 %162
731 %165 = OpLoad %157 %164
732 %166 = OpConvertFToS %6 %165
736 OpLoopMerge %169 %170 None
739 %171 = OpLoad %6 %156
740 OpSelectionMerge %182 None
741 OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
743 %183 = OpLoad %6 %156
744 %185 = OpAccessChain %43 %41 %183
748 %187 = OpLoad %6 %156
749 %189 = OpAccessChain %43 %41 %187
753 %191 = OpLoad %6 %156
754 %192 = OpAccessChain %43 %41 %191
758 %194 = OpLoad %6 %156
759 %195 = OpAccessChain %43 %41 %194
763 %197 = OpLoad %6 %156
764 %198 = OpAccessChain %43 %41 %197
768 %200 = OpLoad %6 %156
769 %202 = OpAccessChain %43 %41 %200
773 %204 = OpLoad %6 %156
774 %206 = OpAccessChain %43 %41 %204
778 %208 = OpLoad %6 %156
779 %210 = OpAccessChain %43 %41 %208
783 %212 = OpLoad %6 %156
784 %214 = OpAccessChain %43 %41 %212
788 %216 = OpLoad %6 %156
789 %218 = OpAccessChain %43 %41 %216
793 %221 = OpLoad %6 %156
794 %222 = OpIAdd %6 %221 %22
798 %223 = OpLoad %6 %156
799 %224 = OpSLessThan %31 %223 %74
800 OpBranchConditional %224 %167 %169
805 OpLoopMerge %228 %229 None
808 %231 = OpLoad %6 %225
809 %232 = OpSLessThan %31 %231 %74
810 OpBranchConditional %232 %227 %228
812 %233 = OpLoad %6 %225
813 %234 = OpLoad %6 %225
814 %235 = OpAccessChain %43 %41 %234
815 %236 = OpLoad %6 %235
816 %237 = OpAccessChain %43 %52 %233
820 %238 = OpLoad %6 %225
821 %239 = OpIAdd %6 %238 %22
825 %240 = OpFunctionCall %2 %14
826 %246 = OpAccessChain %245 %243 %244
827 %247 = OpLoad %157 %246
828 %248 = OpConvertFToS %6 %247
829 %250 = OpSLessThan %31 %248 %249
830 OpSelectionMerge %252 None
831 OpBranchConditional %250 %251 %262
833 %256 = OpAccessChain %43 %41 %105
834 %257 = OpLoad %6 %256
835 %258 = OpConvertSToF %157 %257
836 %260 = OpFDiv %157 %258 %259
837 %261 = OpFAdd %157 %255 %260
841 %263 = OpAccessChain %245 %243 %244
842 %264 = OpLoad %157 %263
843 %265 = OpConvertFToS %6 %264
844 %267 = OpSLessThan %31 %265 %266
845 OpSelectionMerge %269 None
846 OpBranchConditional %267 %268 %275
848 %270 = OpAccessChain %43 %41 %22
849 %271 = OpLoad %6 %270
850 %272 = OpConvertSToF %157 %271
851 %273 = OpFDiv %157 %272 %259
852 %274 = OpFAdd %157 %255 %273
856 %276 = OpAccessChain %245 %243 %244
857 %277 = OpLoad %157 %276
858 %278 = OpConvertFToS %6 %277
859 %280 = OpSLessThan %31 %278 %279
860 OpSelectionMerge %282 None
861 OpBranchConditional %280 %281 %288
863 %283 = OpAccessChain %43 %41 %136
864 %284 = OpLoad %6 %283
865 %285 = OpConvertSToF %157 %284
866 %286 = OpFDiv %157 %285 %259
867 %287 = OpFAdd %157 %255 %286
871 %289 = OpAccessChain %245 %243 %244
872 %290 = OpLoad %157 %289
873 %291 = OpConvertFToS %6 %290
874 %293 = OpSLessThan %31 %291 %292
875 OpSelectionMerge %295 None
876 OpBranchConditional %293 %294 %301
878 %296 = OpAccessChain %43 %41 %188
879 %297 = OpLoad %6 %296
880 %298 = OpConvertSToF %157 %297
881 %299 = OpFDiv %157 %298 %259
882 %300 = OpFAdd %157 %255 %299
886 %302 = OpAccessChain %245 %243 %244
887 %303 = OpLoad %157 %302
888 %304 = OpConvertFToS %6 %303
889 %306 = OpSLessThan %31 %304 %305
890 OpSelectionMerge %308 None
891 OpBranchConditional %306 %307 %310
895 %311 = OpAccessChain %245 %243 %244
896 %312 = OpLoad %157 %311
897 %313 = OpConvertFToS %6 %312
898 %315 = OpSLessThan %31 %313 %314
899 OpSelectionMerge %317 None
900 OpBranchConditional %315 %316 %324
902 %319 = OpAccessChain %43 %41 %318
903 %320 = OpLoad %6 %319
904 %321 = OpConvertSToF %157 %320
905 %322 = OpFDiv %157 %321 %259
906 %323 = OpFAdd %157 %255 %322
910 %325 = OpAccessChain %245 %243 %244
911 %326 = OpLoad %157 %325
912 %327 = OpConvertFToS %6 %326
913 %329 = OpSLessThan %31 %327 %328
914 OpSelectionMerge %331 None
915 OpBranchConditional %329 %330 %338
917 %333 = OpAccessChain %43 %41 %332
918 %334 = OpLoad %6 %333
919 %335 = OpConvertSToF %157 %334
920 %336 = OpFDiv %157 %335 %259
921 %337 = OpFAdd %157 %255 %336
925 %339 = OpAccessChain %245 %243 %244
926 %340 = OpLoad %157 %339
927 %341 = OpConvertFToS %6 %340
928 %343 = OpSLessThan %31 %341 %342
929 OpSelectionMerge %345 None
930 OpBranchConditional %343 %344 %352
932 %347 = OpAccessChain %43 %41 %346
933 %348 = OpLoad %6 %347
934 %349 = OpConvertSToF %157 %348
935 %350 = OpFDiv %157 %349 %259
936 %351 = OpFAdd %157 %255 %350
940 %353 = OpAccessChain %245 %243 %244
941 %354 = OpLoad %157 %353
942 %355 = OpConvertFToS %6 %354
943 %357 = OpSLessThan %31 %355 %356
944 OpSelectionMerge %359 None
945 OpBranchConditional %357 %358 %366
947 %361 = OpAccessChain %43 %41 %360
948 %362 = OpLoad %6 %361
949 %363 = OpConvertSToF %157 %362
950 %364 = OpFDiv %157 %363 %259
951 %365 = OpFAdd %157 %255 %364
973 %370 = OpLoad %157 %254
974 %372 = OpCompositeConstruct %371 %370 %370 %370
975 %374 = OpCompositeExtract %157 %372 0
976 %375 = OpCompositeExtract %157 %372 1
977 %376 = OpCompositeExtract %157 %372 2
978 %377 = OpCompositeConstruct %241 %374 %375 %376 %373
982 %12 = OpFunction %2 None %8
983 %9 = OpFunctionParameter %7
984 %10 = OpFunctionParameter %7
985 %11 = OpFunctionParameter %7
987 %16 = OpVariable %7 Function
988 %18 = OpVariable %7 Function
989 %20 = OpVariable %7 Function
990 %87 = OpVariable %7 Function
996 %23 = OpIAdd %6 %21 %22
1000 %646 = OpAccessChain %163 %161 %105 %105
1001 %647 = OpLoad %157 %646
1002 %643 = OpFOrdGreaterThanEqual %31 %373 %647
1003 OpLoopMerge %26 %27 None
1004 OpBranchConditional %643 %28 %27
1008 %32 = OpSLessThanEqual %31 %29 %30
1011 %35 = OpSLessThanEqual %31 %33 %34
1012 %36 = OpLogicalAnd %31 %32 %35
1013 OpBranchConditional %36 %25 %26
1016 %44 = OpAccessChain %43 %41 %42
1019 %47 = OpAccessChain %43 %41 %46
1021 %49 = OpSLessThan %31 %45 %48
1024 OpSelectionMerge %479 None
1025 OpBranchConditional %49 %480 %482
1027 %481 = OpLoad %6 %16
1030 %483 = OpCopyObject %6 %484
1033 %53 = OpPhi %6 %481 %480 %483 %482
1034 %54 = OpIAdd %6 %53 %22
1037 OpSelectionMerge %536 None
1038 OpBranchConditional %49 %537 %536
1041 %622 = OpAccessChain %163 %161 %105 %105
1042 %623 = OpLoad %157 %622
1043 %621 = OpFUnordGreaterThan %31 %373 %623
1044 OpBranchConditional %621 %536 %27
1048 %595 = OpAccessChain %163 %161 %105 %22
1049 %596 = OpLoad %157 %595
1050 %594 = OpFOrdGreaterThanEqual %31 %596 %575
1051 OpBranchConditional %594 %490 %27
1053 %491 = OpCopyObject %6 %484
1056 OpSelectionMerge %538 None
1057 OpBranchConditional %49 %539 %541
1059 %540 = OpLoad %6 %18
1062 %542 = OpCopyObject %6 %484
1065 %489 = OpPhi %6 %540 %539 %542 %541
1068 %55 = OpSelect %6 %49 %489 %491
1069 %56 = OpIAdd %6 %55 %22
1070 OpSelectionMerge %492 None
1071 OpBranchConditional %49 %493 %492
1076 %57 = OpAccessChain %43 %41 %55
1079 %498 = OpCopyObject %6 %484
1082 OpSelectionMerge %545 None
1083 OpBranchConditional %49 %546 %548
1085 %547 = OpLoad %6 %57
1086 %598 = OpAccessChain %163 %161 %105 %22
1087 %599 = OpLoad %157 %598
1088 %597 = OpFUnordGreaterThan %31 %575 %599
1089 OpBranchConditional %597 %27 %545
1091 %549 = OpCopyObject %6 %484
1092 %619 = OpAccessChain %163 %161 %105 %22
1093 %620 = OpLoad %157 %619
1094 %618 = OpFUnordGreaterThanEqual %31 %620 %575
1095 OpBranchConditional %618 %545 %27
1097 %496 = OpPhi %6 %547 %546 %549 %548
1100 %58 = OpSelect %6 %49 %496 %498
1101 %59 = OpAccessChain %43 %52 %53
1102 OpSelectionMerge %499 None
1103 OpBranchConditional %49 %500 %499
1110 OpSelectionMerge %501 None
1111 OpBranchConditional %49 %504 %502
1113 %503 = OpLoad %6 %16
1116 %505 = OpCopyObject %6 %484
1119 %61 = OpPhi %6 %503 %502 %505 %504
1120 %62 = OpIAdd %6 %61 %22
1121 OpSelectionMerge %506 None
1122 OpBranchConditional %49 %506 %507
1127 %602 = OpAccessChain %163 %161 %105 %105
1128 %603 = OpLoad %157 %602
1129 %601 = OpFUnordGreaterThan %31 %373 %603
1130 OpBranchConditional %601 %509 %27
1132 OpSelectionMerge %559 None
1133 OpBranchConditional %49 %562 %560
1135 %561 = OpLoad %6 %20
1138 %563 = OpCopyObject %6 %484
1141 %510 = OpPhi %6 %561 %560 %563 %562
1144 %512 = OpCopyObject %6 %484
1147 %63 = OpSelect %6 %49 %512 %510
1148 %64 = OpIAdd %6 %63 %22
1149 OpSelectionMerge %513 None
1150 OpBranchConditional %49 %513 %514
1155 %65 = OpAccessChain %43 %41 %63
1156 OpSelectionMerge %515 None
1157 OpBranchConditional %49 %518 %516
1159 %517 = OpLoad %6 %65
1162 %519 = OpCopyObject %6 %484
1165 %66 = OpPhi %6 %517 %516 %519 %518
1166 %67 = OpAccessChain %43 %52 %61
1167 OpSelectionMerge %520 None
1168 OpBranchConditional %49 %520 %521
1181 OpLoopMerge %70 %71 None
1185 %75 = OpSLessThan %31 %73 %74
1188 %78 = OpSLessThanEqual %31 %76 %77
1189 %79 = OpLogicalAnd %31 %75 %78
1190 OpBranchConditional %79 %69 %70
1193 %81 = OpIAdd %6 %80 %22
1196 %83 = OpIAdd %6 %82 %22
1198 %84 = OpAccessChain %43 %41 %82
1200 %86 = OpAccessChain %43 %52 %80
1210 OpLoopMerge %91 %92 None
1215 %96 = OpSLessThanEqual %31 %94 %95
1216 OpBranchConditional %96 %90 %91
1220 %99 = OpAccessChain %43 %52 %98
1221 %100 = OpLoad %6 %99
1222 %101 = OpAccessChain %43 %41 %97
1226 %102 = OpLoad %6 %87
1227 %103 = OpIAdd %6 %102 %22
1233 %14 = OpFunction %2 None %3
1235 %104 = OpVariable %7 Function
1236 %106 = OpVariable %7 Function
1237 %108 = OpVariable %7 Function
1238 %117 = OpVariable %7 Function
1239 %127 = OpVariable %7 Function
1240 %129 = OpVariable %7 Function
1241 %134 = OpVariable %7 Function
1242 %143 = OpVariable %7 Function
1243 %145 = OpVariable %7 Function
1244 %147 = OpVariable %7 Function
1250 OpLoopMerge %111 %112 None
1253 %114 = OpLoad %6 %108
1254 %115 = OpLoad %6 %106
1255 %116 = OpSLessThanEqual %31 %114 %115
1256 OpBranchConditional %116 %110 %111
1258 %118 = OpLoad %6 %104
1262 OpLoopMerge %121 %122 None
1265 %124 = OpLoad %6 %117
1266 %125 = OpLoad %6 %106
1267 %126 = OpSLessThan %31 %124 %125
1268 OpBranchConditional %126 %120 %121
1270 %128 = OpLoad %6 %117
1272 %130 = OpLoad %6 %117
1273 %131 = OpLoad %6 %108
1274 %132 = OpIAdd %6 %130 %131
1275 %133 = OpISub %6 %132 %22
1277 %135 = OpLoad %6 %117
1278 %137 = OpLoad %6 %108
1279 %138 = OpIMul %6 %136 %137
1280 %139 = OpIAdd %6 %135 %138
1281 %140 = OpISub %6 %139 %22
1282 %141 = OpLoad %6 %106
1283 %142 = OpExtInst %6 %1 SMin %140 %141
1285 %144 = OpLoad %6 %127
1287 %146 = OpLoad %6 %129
1289 %148 = OpLoad %6 %134
1291 %149 = OpFunctionCall %2 %12 %143 %145 %147
1294 %150 = OpLoad %6 %108
1295 %151 = OpIMul %6 %136 %150
1296 %152 = OpLoad %6 %117
1297 %153 = OpIAdd %6 %152 %151
1303 %154 = OpLoad %6 %108
1304 %155 = OpIMul %6 %136 %154
1312 # uniforms for variant
1315 BUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
1319 BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
1321 PIPELINE graphics variant_pipeline
1322 ATTACH variant_vertex_shader
1323 ATTACH variant_fragment_shader
1324 FRAMEBUFFER_SIZE 256 256
1325 BIND BUFFER variant_framebuffer AS color LOCATION 0
1326 BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
1328 CLEAR_COLOR variant_pipeline 0 0 0 255
1330 CLEAR variant_pipeline
1331 RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
1334 SHADER vertex variant_2_vertex_shader PASSTHROUGH
1336 SHADER fragment variant_2_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
1339 ; Generator: Khronos Glslang Reference Front End; 7
1343 %1 = OpExtInstImport "GLSL.std.450"
1344 OpMemoryModel Logical GLSL450
1345 OpEntryPoint Fragment %4 "main" %243 %369
1346 OpExecutionMode %4 OriginUpperLeft
1349 OpName %12 "merge(i1;i1;i1;"
1353 OpName %14 "mergeSort("
1372 OpMemberName %159 0 "injectionSwitch"
1375 OpName %243 "gl_FragCoord"
1377 OpName %369 "_GLF_color"
1378 OpMemberDecorate %159 0 Offset 0
1379 OpDecorate %159 Block
1380 OpDecorate %161 DescriptorSet 0
1381 OpDecorate %161 Binding 0
1382 OpDecorate %243 BuiltIn FragCoord
1383 OpDecorate %369 Location 0
1385 %3 = OpTypeFunction %2
1387 %7 = OpTypePointer Function %6
1388 %8 = OpTypeFunction %2 %7 %7 %7
1389 %22 = OpConstant %6 1
1391 %37 = OpTypeInt 32 0
1392 %38 = OpConstant %37 10
1393 %39 = OpTypeArray %6 %38
1394 %40 = OpTypePointer Private %39
1395 %41 = OpVariable %40 Private
1396 %43 = OpTypePointer Private %6
1397 %52 = OpVariable %40 Private
1398 %74 = OpConstant %6 10
1399 %105 = OpConstant %6 0
1400 %107 = OpConstant %6 9
1401 %136 = OpConstant %6 2
1402 %157 = OpTypeFloat 32
1403 %158 = OpTypeVector %157 2
1404 %159 = OpTypeStruct %158
1405 %160 = OpTypePointer Uniform %159
1406 %161 = OpVariable %160 Uniform
1407 %162 = OpConstant %37 0
1408 %163 = OpTypePointer Uniform %157
1409 %184 = OpConstant %6 4
1410 %188 = OpConstant %6 3
1411 %201 = OpConstant %6 -1
1412 %205 = OpConstant %6 -2
1413 %209 = OpConstant %6 -3
1414 %213 = OpConstant %6 -4
1415 %217 = OpConstant %6 -5
1416 %241 = OpTypeVector %157 4
1417 %242 = OpTypePointer Input %241
1418 %243 = OpVariable %242 Input
1419 %244 = OpConstant %37 1
1420 %245 = OpTypePointer Input %157
1421 %249 = OpConstant %6 30
1422 %253 = OpTypePointer Function %157
1423 %255 = OpConstant %157 0.5
1424 %259 = OpConstant %157 10
1425 %266 = OpConstant %6 60
1426 %279 = OpConstant %6 90
1427 %292 = OpConstant %6 120
1428 %305 = OpConstant %6 150
1429 %314 = OpConstant %6 180
1430 %318 = OpConstant %6 5
1431 %328 = OpConstant %6 210
1432 %332 = OpConstant %6 6
1433 %342 = OpConstant %6 240
1434 %346 = OpConstant %6 7
1435 %356 = OpConstant %6 270
1436 %360 = OpConstant %6 8
1437 %368 = OpTypePointer Output %241
1438 %369 = OpVariable %368 Output
1439 %371 = OpTypeVector %157 3
1440 %373 = OpConstant %157 1
1441 %484 = OpConstant %6 0
1442 %573 = OpConstantTrue %31
1443 %574 = OpConstantFalse %31
1444 %575 = OpConstant %157 0
1445 %4 = OpFunction %2 None %3
1447 %156 = OpVariable %7 Function
1448 %225 = OpVariable %7 Function
1449 %254 = OpVariable %253 Function
1450 %164 = OpAccessChain %163 %161 %105 %162
1451 %165 = OpLoad %157 %164
1452 %166 = OpConvertFToS %6 %165
1456 OpLoopMerge %169 %170 None
1459 %171 = OpLoad %6 %156
1460 OpSelectionMerge %182 None
1461 OpSwitch %171 %182 0 %172 1 %173 2 %174 3 %175 4 %176 5 %177 6 %178 7 %179 8 %180 9 %181
1463 %183 = OpLoad %6 %156
1464 %185 = OpAccessChain %43 %41 %183
1468 %187 = OpLoad %6 %156
1469 %189 = OpAccessChain %43 %41 %187
1473 %191 = OpLoad %6 %156
1474 %192 = OpAccessChain %43 %41 %191
1478 %194 = OpLoad %6 %156
1479 %195 = OpAccessChain %43 %41 %194
1483 %197 = OpLoad %6 %156
1484 %198 = OpAccessChain %43 %41 %197
1488 %200 = OpLoad %6 %156
1489 %202 = OpAccessChain %43 %41 %200
1493 %204 = OpLoad %6 %156
1494 %206 = OpAccessChain %43 %41 %204
1498 %208 = OpLoad %6 %156
1499 %210 = OpAccessChain %43 %41 %208
1503 %212 = OpLoad %6 %156
1504 %214 = OpAccessChain %43 %41 %212
1508 %216 = OpLoad %6 %156
1509 %218 = OpAccessChain %43 %41 %216
1513 %221 = OpLoad %6 %156
1514 %222 = OpIAdd %6 %221 %22
1518 %223 = OpLoad %6 %156
1519 %224 = OpSLessThan %31 %223 %74
1520 OpBranchConditional %224 %167 %169
1525 OpLoopMerge %228 %229 None
1528 %231 = OpLoad %6 %225
1529 %232 = OpSLessThan %31 %231 %74
1530 OpBranchConditional %232 %227 %228
1532 %233 = OpLoad %6 %225
1533 %234 = OpLoad %6 %225
1534 %235 = OpAccessChain %43 %41 %234
1535 %236 = OpLoad %6 %235
1536 %237 = OpAccessChain %43 %52 %233
1540 %238 = OpLoad %6 %225
1541 %239 = OpIAdd %6 %238 %22
1545 %240 = OpFunctionCall %2 %14
1546 %246 = OpAccessChain %245 %243 %244
1547 %247 = OpLoad %157 %246
1548 %248 = OpConvertFToS %6 %247
1549 %250 = OpSLessThan %31 %248 %249
1550 OpSelectionMerge %252 None
1551 OpBranchConditional %250 %251 %262
1553 %256 = OpAccessChain %43 %41 %105
1554 %257 = OpLoad %6 %256
1555 %258 = OpConvertSToF %157 %257
1556 %260 = OpFDiv %157 %258 %259
1557 %261 = OpFAdd %157 %255 %260
1561 %263 = OpAccessChain %245 %243 %244
1562 %264 = OpLoad %157 %263
1563 %265 = OpConvertFToS %6 %264
1564 %267 = OpSLessThan %31 %265 %266
1565 OpSelectionMerge %269 None
1566 OpBranchConditional %267 %268 %275
1568 %270 = OpAccessChain %43 %41 %22
1569 %271 = OpLoad %6 %270
1570 %272 = OpConvertSToF %157 %271
1571 %273 = OpFDiv %157 %272 %259
1572 %274 = OpFAdd %157 %255 %273
1576 %276 = OpAccessChain %245 %243 %244
1577 %277 = OpLoad %157 %276
1578 %278 = OpConvertFToS %6 %277
1579 %280 = OpSLessThan %31 %278 %279
1580 OpSelectionMerge %282 None
1581 OpBranchConditional %280 %281 %288
1583 %283 = OpAccessChain %43 %41 %136
1584 %284 = OpLoad %6 %283
1585 %285 = OpConvertSToF %157 %284
1586 %286 = OpFDiv %157 %285 %259
1587 %287 = OpFAdd %157 %255 %286
1591 %289 = OpAccessChain %245 %243 %244
1592 %290 = OpLoad %157 %289
1593 %291 = OpConvertFToS %6 %290
1594 %293 = OpSLessThan %31 %291 %292
1595 OpSelectionMerge %295 None
1596 OpBranchConditional %293 %294 %301
1598 %296 = OpAccessChain %43 %41 %188
1599 %297 = OpLoad %6 %296
1600 %298 = OpConvertSToF %157 %297
1601 %299 = OpFDiv %157 %298 %259
1602 %300 = OpFAdd %157 %255 %299
1606 %302 = OpAccessChain %245 %243 %244
1607 %303 = OpLoad %157 %302
1608 %304 = OpConvertFToS %6 %303
1609 %306 = OpSLessThan %31 %304 %305
1610 OpSelectionMerge %308 None
1611 OpBranchConditional %306 %307 %310
1615 %311 = OpAccessChain %245 %243 %244
1616 %312 = OpLoad %157 %311
1617 %313 = OpConvertFToS %6 %312
1618 %315 = OpSLessThan %31 %313 %314
1619 OpSelectionMerge %317 None
1620 OpBranchConditional %315 %316 %324
1622 %319 = OpAccessChain %43 %41 %318
1623 %320 = OpLoad %6 %319
1624 %321 = OpConvertSToF %157 %320
1625 %322 = OpFDiv %157 %321 %259
1626 %323 = OpFAdd %157 %255 %322
1630 %325 = OpAccessChain %245 %243 %244
1631 %326 = OpLoad %157 %325
1632 %327 = OpConvertFToS %6 %326
1633 %329 = OpSLessThan %31 %327 %328
1634 OpSelectionMerge %331 None
1635 OpBranchConditional %329 %330 %338
1637 %333 = OpAccessChain %43 %41 %332
1638 %334 = OpLoad %6 %333
1639 %335 = OpConvertSToF %157 %334
1640 %336 = OpFDiv %157 %335 %259
1641 %337 = OpFAdd %157 %255 %336
1645 %339 = OpAccessChain %245 %243 %244
1646 %340 = OpLoad %157 %339
1647 %341 = OpConvertFToS %6 %340
1648 %343 = OpSLessThan %31 %341 %342
1649 OpSelectionMerge %345 None
1650 OpBranchConditional %343 %344 %352
1652 %347 = OpAccessChain %43 %41 %346
1653 %348 = OpLoad %6 %347
1654 %349 = OpConvertSToF %157 %348
1655 %350 = OpFDiv %157 %349 %259
1656 %351 = OpFAdd %157 %255 %350
1660 %353 = OpAccessChain %245 %243 %244
1661 %354 = OpLoad %157 %353
1662 %355 = OpConvertFToS %6 %354
1663 %357 = OpSLessThan %31 %355 %356
1664 OpSelectionMerge %359 None
1665 OpBranchConditional %357 %358 %366
1667 %361 = OpAccessChain %43 %41 %360
1668 %362 = OpLoad %6 %361
1669 %363 = OpConvertSToF %157 %362
1670 %364 = OpFDiv %157 %363 %259
1671 %365 = OpFAdd %157 %255 %364
1693 %370 = OpLoad %157 %254
1694 %372 = OpCompositeConstruct %371 %370 %370 %370
1695 %374 = OpCompositeExtract %157 %372 0
1696 %375 = OpCompositeExtract %157 %372 1
1697 %376 = OpCompositeExtract %157 %372 2
1698 %377 = OpCompositeConstruct %241 %374 %375 %376 %373
1702 %12 = OpFunction %2 None %8
1703 %9 = OpFunctionParameter %7
1704 %10 = OpFunctionParameter %7
1705 %11 = OpFunctionParameter %7
1707 %16 = OpVariable %7 Function
1708 %18 = OpVariable %7 Function
1709 %20 = OpVariable %7 Function
1710 %87 = OpVariable %7 Function
1716 %23 = OpIAdd %6 %21 %22
1720 %643 = OpFOrdGreaterThanEqual %31 %373 %575
1721 OpLoopMerge %26 %27 None
1722 OpBranchConditional %643 %28 %27
1726 %32 = OpSLessThanEqual %31 %29 %30
1729 %35 = OpSLessThanEqual %31 %33 %34
1730 %36 = OpLogicalAnd %31 %32 %35
1731 OpBranchConditional %36 %25 %26
1734 %44 = OpAccessChain %43 %41 %42
1737 %47 = OpAccessChain %43 %41 %46
1739 %49 = OpSLessThan %31 %45 %48
1742 OpSelectionMerge %479 None
1743 OpBranchConditional %49 %480 %482
1745 %481 = OpLoad %6 %16
1748 %483 = OpCopyObject %6 %484
1751 %53 = OpPhi %6 %481 %480 %483 %482
1752 %54 = OpIAdd %6 %53 %22
1755 OpSelectionMerge %536 None
1756 OpBranchConditional %49 %537 %536
1759 %622 = OpAccessChain %163 %161 %105 %105
1760 %623 = OpLoad %157 %622
1761 %621 = OpFUnordGreaterThan %31 %373 %623
1762 OpBranchConditional %621 %536 %27
1766 %595 = OpAccessChain %163 %161 %105 %22
1767 %596 = OpLoad %157 %595
1768 %594 = OpFOrdGreaterThanEqual %31 %596 %575
1769 OpBranchConditional %594 %490 %27
1771 %491 = OpCopyObject %6 %484
1774 OpSelectionMerge %538 None
1775 OpBranchConditional %49 %539 %541
1777 %540 = OpLoad %6 %18
1780 %542 = OpCopyObject %6 %484
1783 %489 = OpPhi %6 %540 %539 %542 %541
1786 %55 = OpSelect %6 %49 %489 %491
1787 %56 = OpIAdd %6 %55 %22
1788 OpSelectionMerge %492 None
1789 OpBranchConditional %49 %493 %492
1794 %57 = OpAccessChain %43 %41 %55
1797 %498 = OpCopyObject %6 %484
1800 OpSelectionMerge %545 None
1801 OpBranchConditional %49 %546 %548
1803 %547 = OpLoad %6 %57
1804 %598 = OpAccessChain %163 %161 %105 %22
1805 %599 = OpLoad %157 %598
1806 %597 = OpFUnordGreaterThan %31 %575 %599
1807 OpBranchConditional %597 %27 %545
1809 %549 = OpCopyObject %6 %484
1810 %619 = OpAccessChain %163 %161 %105 %22
1811 %620 = OpLoad %157 %619
1812 %618 = OpFUnordGreaterThanEqual %31 %620 %575
1813 OpBranchConditional %618 %545 %27
1815 %496 = OpPhi %6 %547 %546 %549 %548
1818 %58 = OpSelect %6 %49 %496 %498
1819 %59 = OpAccessChain %43 %52 %53
1820 OpSelectionMerge %499 None
1821 OpBranchConditional %49 %500 %499
1828 OpSelectionMerge %501 None
1829 OpBranchConditional %49 %504 %502
1831 %503 = OpLoad %6 %16
1834 %505 = OpCopyObject %6 %484
1837 %61 = OpPhi %6 %503 %502 %505 %504
1838 %62 = OpIAdd %6 %61 %22
1839 OpSelectionMerge %506 None
1840 OpBranchConditional %49 %506 %507
1845 %602 = OpAccessChain %163 %161 %105 %105
1846 %603 = OpLoad %157 %602
1847 %601 = OpFUnordGreaterThan %31 %373 %603
1848 OpBranchConditional %601 %509 %27
1850 OpSelectionMerge %559 None
1851 OpBranchConditional %49 %562 %560
1853 %561 = OpLoad %6 %20
1856 %563 = OpCopyObject %6 %484
1859 %510 = OpPhi %6 %561 %560 %563 %562
1862 %512 = OpCopyObject %6 %484
1865 %63 = OpSelect %6 %49 %512 %510
1866 %64 = OpIAdd %6 %63 %22
1867 OpSelectionMerge %513 None
1868 OpBranchConditional %49 %513 %514
1873 %65 = OpAccessChain %43 %41 %63
1874 OpSelectionMerge %515 None
1875 OpBranchConditional %49 %518 %516
1877 %517 = OpLoad %6 %65
1880 %519 = OpCopyObject %6 %484
1883 %66 = OpPhi %6 %517 %516 %519 %518
1884 %67 = OpAccessChain %43 %52 %61
1885 OpSelectionMerge %520 None
1886 OpBranchConditional %49 %520 %521
1899 OpLoopMerge %70 %71 None
1903 %75 = OpSLessThan %31 %73 %74
1906 %78 = OpSLessThanEqual %31 %76 %77
1907 %79 = OpLogicalAnd %31 %75 %78
1908 OpBranchConditional %79 %69 %70
1911 %81 = OpIAdd %6 %80 %22
1914 %83 = OpIAdd %6 %82 %22
1916 %84 = OpAccessChain %43 %41 %82
1918 %86 = OpAccessChain %43 %52 %80
1928 OpLoopMerge %91 %92 None
1933 %96 = OpSLessThanEqual %31 %94 %95
1934 OpBranchConditional %96 %90 %91
1938 %99 = OpAccessChain %43 %52 %98
1939 %100 = OpLoad %6 %99
1940 %101 = OpAccessChain %43 %41 %97
1944 %102 = OpLoad %6 %87
1945 %103 = OpIAdd %6 %102 %22
1951 %14 = OpFunction %2 None %3
1953 %104 = OpVariable %7 Function
1954 %106 = OpVariable %7 Function
1955 %108 = OpVariable %7 Function
1956 %117 = OpVariable %7 Function
1957 %127 = OpVariable %7 Function
1958 %129 = OpVariable %7 Function
1959 %134 = OpVariable %7 Function
1960 %143 = OpVariable %7 Function
1961 %145 = OpVariable %7 Function
1962 %147 = OpVariable %7 Function
1968 OpLoopMerge %111 %112 None
1971 %114 = OpLoad %6 %108
1972 %115 = OpLoad %6 %106
1973 %116 = OpSLessThanEqual %31 %114 %115
1974 OpBranchConditional %116 %110 %111
1976 %118 = OpLoad %6 %104
1980 OpLoopMerge %121 %122 None
1983 %124 = OpLoad %6 %117
1984 %125 = OpLoad %6 %106
1985 %126 = OpSLessThan %31 %124 %125
1986 OpBranchConditional %126 %120 %121
1988 %128 = OpLoad %6 %117
1990 %130 = OpLoad %6 %117
1991 %131 = OpLoad %6 %108
1992 %132 = OpIAdd %6 %130 %131
1993 %133 = OpISub %6 %132 %22
1995 %135 = OpLoad %6 %117
1996 %137 = OpLoad %6 %108
1997 %138 = OpIMul %6 %136 %137
1998 %139 = OpIAdd %6 %135 %138
1999 %140 = OpISub %6 %139 %22
2000 %141 = OpLoad %6 %106
2001 %142 = OpExtInst %6 %1 SMin %140 %141
2003 %144 = OpLoad %6 %127
2005 %146 = OpLoad %6 %129
2007 %148 = OpLoad %6 %134
2009 %149 = OpFunctionCall %2 %12 %143 %145 %147
2012 %150 = OpLoad %6 %108
2013 %151 = OpIMul %6 %136 %150
2014 %152 = OpLoad %6 %117
2015 %153 = OpIAdd %6 %152 %151
2021 %154 = OpLoad %6 %108
2022 %155 = OpIMul %6 %136 %154
2030 # uniforms for variant_2
2033 BUFFER variant_2_injectionSwitch DATA_TYPE vec2<float> STD140 DATA
2037 BUFFER variant_2_framebuffer FORMAT B8G8R8A8_UNORM
2039 PIPELINE graphics variant_2_pipeline
2040 ATTACH variant_2_vertex_shader
2041 ATTACH variant_2_fragment_shader
2042 FRAMEBUFFER_SIZE 256 256
2043 BIND BUFFER variant_2_framebuffer AS color LOCATION 0
2044 BIND BUFFER variant_2_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
2046 CLEAR_COLOR variant_2_pipeline 0 0 0 255
2048 CLEAR variant_2_pipeline
2049 RUN variant_2_pipeline DRAW_RECT POS 0 0 SIZE 256 256
2051 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
2052 EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_2_framebuffer TOLERANCE 0.005