blob: ff157f13dbf5716751cea765f9d0233794d4e737 [file] [log] [blame]
#!amber
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# A test for a bug found by GraphicsFuzz.
# Short description: A fragment shader with always false if with discard loop
# The test passes because both shaders render the same image.
# Optimized using spirv-opt with the following arguments:
# '-O'
# spirv-opt commit hash: 230f363e6da32791f640b02205e0645cc67c3f1d
SHADER vertex reference_vertex_shader PASSTHROUGH
# reference_fragment_shader is derived from the following GLSL:
# #version 320 es
# precision highp float;
#
# precision highp int;
#
# layout(location = 0) out vec4 _GLF_color;
#
# struct BST
# {
# int data;
# int leftIndex;
# int rightIndex;
# };
#
# BST tree[10];
#
# void makeTreeNode(inout BST tree, int data)
# {
# tree.data = data;
# tree.leftIndex = -1;
# tree.rightIndex = -1;
# }
# void insert(int treeIndex, int data)
# {
# int baseIndex = 0;
# while (baseIndex <= treeIndex)
# {
# if (data <= tree[baseIndex].data)
# {
# if (tree[baseIndex].leftIndex == -1)
# {
# tree[baseIndex].leftIndex = treeIndex;
# makeTreeNode(tree[treeIndex], data);
# return;
# }
# else
# {
# baseIndex = tree[baseIndex].leftIndex;
# continue;
# }
# }
# else
# {
# if (tree[baseIndex].rightIndex == -1)
# {
# tree[baseIndex].rightIndex = treeIndex;
# makeTreeNode(tree[treeIndex], data);
# return;
# }
# else
# {
# baseIndex = tree[baseIndex].rightIndex;
# continue;
# }
# }
# }
# }
# int search(int target)
# {
# BST currentNode;
# int index = 0;
# while (index != -1)
# {
# currentNode = tree[index];
# if (currentNode.data == target)
# {
# return target;
# }
# index = target > currentNode.data ? currentNode.rightIndex : currentNode.leftIndex;
# }
# return -1;
# }
# void main()
# {
# int treeIndex = 0;
# makeTreeNode(tree[0], 9);
# treeIndex++;
# insert(treeIndex, 5);
# treeIndex++;
# insert(treeIndex, 12);
# treeIndex++;
# insert(treeIndex, 15);
# treeIndex++;
# insert(treeIndex, 7);
# treeIndex++;
# insert(treeIndex, 8);
# treeIndex++;
# insert(treeIndex, 2);
# treeIndex++;
# insert(treeIndex, 6);
# treeIndex++;
# insert(treeIndex, 17);
# treeIndex++;
# insert(treeIndex, 13);
# int count = 0;
# for (int i = 0; i < 20; i++)
# {
# int result = search(i);
# switch (i)
# {
# case 9:
# case 5:
# case 12:
# case 15:
# case 7:
# case 8:
# case 2:
# case 6:
# case 17:
# case 13:
# if (result == i)
# {
# count++;
# }
# break;
# default:
# if (result == -1)
# {
# count++;
# }
# break;
# }
# }
# if (count == 20)
# {
# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
# }
# else
# {
# _GLF_color = vec4(0.0, 0.0, 1.0, 1.0);
# }
# }
SHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 10
; Bound: 1372
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %4 "main" %254
OpExecutionMode %4 OriginUpperLeft
OpSource ESSL 320
OpName %4 "main"
OpName %7 "BST"
OpMemberName %7 0 "data"
OpMemberName %7 1 "leftIndex"
OpMemberName %7 2 "rightIndex"
OpName %47 "tree"
OpName %254 "_GLF_color"
OpDecorate %254 Location 0
%2 = OpTypeVoid
%3 = OpTypeFunction %2
%6 = OpTypeInt 32 1
%7 = OpTypeStruct %6 %6 %6
%8 = OpTypePointer Function %7
%9 = OpTypePointer Function %6
%24 = OpConstant %6 0
%27 = OpConstant %6 1
%28 = OpConstant %6 -1
%30 = OpConstant %6 2
%40 = OpTypeBool
%43 = OpTypeInt 32 0
%44 = OpConstant %43 10
%45 = OpTypeArray %7 %44
%141 = OpConstant %6 9
%151 = OpConstant %6 5
%158 = OpConstant %6 12
%165 = OpConstant %6 15
%172 = OpConstant %6 7
%179 = OpConstant %6 8
%192 = OpConstant %6 6
%199 = OpConstant %6 17
%206 = OpConstant %6 13
%219 = OpConstant %6 20
%251 = OpTypeFloat 32
%252 = OpTypeVector %251 4
%253 = OpTypePointer Output %252
%254 = OpVariable %253 Output
%255 = OpConstant %251 1
%256 = OpConstant %251 0
%257 = OpConstantComposite %252 %255 %256 %256 %255
%259 = OpConstantComposite %252 %256 %256 %255 %255
%262 = OpConstant %43 0
%263 = OpConstantFalse %40
%266 = OpConstantTrue %40
%1015 = OpTypePointer Function %45
%1318 = OpUndef %6
%1359 = OpConstantComposite %7 %141 %28 %28
%1360 = OpConstantComposite %7 %151 %28 %28
%1361 = OpConstantComposite %7 %158 %28 %28
%1362 = OpConstant %6 3
%1363 = OpConstantComposite %7 %165 %28 %28
%1364 = OpConstant %6 4
%1365 = OpConstantComposite %7 %172 %28 %28
%1366 = OpConstantComposite %7 %179 %28 %28
%1367 = OpConstantComposite %7 %30 %28 %28
%1368 = OpConstantComposite %7 %192 %28 %28
%1369 = OpConstantComposite %7 %199 %28 %28
%1370 = OpConstantComposite %7 %206 %28 %28
%4 = OpFunction %2 None %3
%5 = OpLabel
%47 = OpVariable %1015 Function
%148 = OpAccessChain %8 %47 %24
OpStore %148 %1359
OpSelectionMerge %347 None
OpSwitch %262 %288
%288 = OpLabel
OpBranch %289
%289 = OpLabel
%1212 = OpPhi %6 %24 %288 %1342 %343
%293 = OpSLessThanEqual %40 %1212 %27
OpLoopMerge %344 %343 None
OpBranchConditional %293 %294 %344
%294 = OpLabel
%297 = OpAccessChain %9 %47 %1212 %24
%298 = OpLoad %6 %297
%299 = OpSLessThanEqual %40 %151 %298
OpSelectionMerge %342 None
OpBranchConditional %299 %300 %321
%321 = OpLabel
%323 = OpAccessChain %9 %47 %1212 %30
%324 = OpLoad %6 %323
%325 = OpIEqual %40 %324 %28
OpSelectionMerge %341 None
OpBranchConditional %325 %326 %337
%337 = OpLabel
%340 = OpLoad %6 %323
OpBranch %343
%326 = OpLabel
OpStore %323 %27
%336 = OpAccessChain %8 %47 %27
OpStore %336 %1360
OpBranch %344
%341 = OpLabel
OpUnreachable
%300 = OpLabel
%302 = OpAccessChain %9 %47 %1212 %27
%303 = OpLoad %6 %302
%304 = OpIEqual %40 %303 %28
OpSelectionMerge %320 None
OpBranchConditional %304 %305 %316
%316 = OpLabel
%319 = OpLoad %6 %302
OpBranch %343
%305 = OpLabel
OpStore %302 %27
%315 = OpAccessChain %8 %47 %27
OpStore %315 %1360
OpBranch %344
%320 = OpLabel
OpUnreachable
%342 = OpLabel
OpUnreachable
%343 = OpLabel
%1342 = OpPhi %6 %319 %316 %340 %337
OpBranch %289
%344 = OpLabel
%1213 = OpPhi %40 %263 %289 %266 %305 %266 %326
OpSelectionMerge %346 None
OpBranchConditional %1213 %347 %346
%346 = OpLabel
OpBranch %347
%347 = OpLabel
OpSelectionMerge %424 None
OpSwitch %262 %365
%365 = OpLabel
OpBranch %366
%366 = OpLabel
%1220 = OpPhi %6 %24 %365 %1344 %420
%370 = OpSLessThanEqual %40 %1220 %30
OpLoopMerge %421 %420 None
OpBranchConditional %370 %371 %421
%371 = OpLabel
%374 = OpAccessChain %9 %47 %1220 %24
%375 = OpLoad %6 %374
%376 = OpSLessThanEqual %40 %158 %375
OpSelectionMerge %419 None
OpBranchConditional %376 %377 %398
%398 = OpLabel
%400 = OpAccessChain %9 %47 %1220 %30
%401 = OpLoad %6 %400
%402 = OpIEqual %40 %401 %28
OpSelectionMerge %418 None
OpBranchConditional %402 %403 %414
%414 = OpLabel
%417 = OpLoad %6 %400
OpBranch %420
%403 = OpLabel
OpStore %400 %30
%413 = OpAccessChain %8 %47 %30
OpStore %413 %1361
OpBranch %421
%418 = OpLabel
OpUnreachable
%377 = OpLabel
%379 = OpAccessChain %9 %47 %1220 %27
%380 = OpLoad %6 %379
%381 = OpIEqual %40 %380 %28
OpSelectionMerge %397 None
OpBranchConditional %381 %382 %393
%393 = OpLabel
%396 = OpLoad %6 %379
OpBranch %420
%382 = OpLabel
OpStore %379 %30
%392 = OpAccessChain %8 %47 %30
OpStore %392 %1361
OpBranch %421
%397 = OpLabel
OpUnreachable
%419 = OpLabel
OpUnreachable
%420 = OpLabel
%1344 = OpPhi %6 %396 %393 %417 %414
OpBranch %366
%421 = OpLabel
%1221 = OpPhi %40 %263 %366 %266 %382 %266 %403
OpSelectionMerge %423 None
OpBranchConditional %1221 %424 %423
%423 = OpLabel
OpBranch %424
%424 = OpLabel
OpSelectionMerge %501 None
OpSwitch %262 %442
%442 = OpLabel
OpBranch %443
%443 = OpLabel
%1228 = OpPhi %6 %24 %442 %1345 %497
%447 = OpSLessThanEqual %40 %1228 %1362
OpLoopMerge %498 %497 None
OpBranchConditional %447 %448 %498
%448 = OpLabel
%451 = OpAccessChain %9 %47 %1228 %24
%452 = OpLoad %6 %451
%453 = OpSLessThanEqual %40 %165 %452
OpSelectionMerge %496 None
OpBranchConditional %453 %454 %475
%475 = OpLabel
%477 = OpAccessChain %9 %47 %1228 %30
%478 = OpLoad %6 %477
%479 = OpIEqual %40 %478 %28
OpSelectionMerge %495 None
OpBranchConditional %479 %480 %491
%491 = OpLabel
%494 = OpLoad %6 %477
OpBranch %497
%480 = OpLabel
OpStore %477 %1362
%490 = OpAccessChain %8 %47 %1362
OpStore %490 %1363
OpBranch %498
%495 = OpLabel
OpUnreachable
%454 = OpLabel
%456 = OpAccessChain %9 %47 %1228 %27
%457 = OpLoad %6 %456
%458 = OpIEqual %40 %457 %28
OpSelectionMerge %474 None
OpBranchConditional %458 %459 %470
%470 = OpLabel
%473 = OpLoad %6 %456
OpBranch %497
%459 = OpLabel
OpStore %456 %1362
%469 = OpAccessChain %8 %47 %1362
OpStore %469 %1363
OpBranch %498
%474 = OpLabel
OpUnreachable
%496 = OpLabel
OpUnreachable
%497 = OpLabel
%1345 = OpPhi %6 %473 %470 %494 %491
OpBranch %443
%498 = OpLabel
%1229 = OpPhi %40 %263 %443 %266 %459 %266 %480
OpSelectionMerge %500 None
OpBranchConditional %1229 %501 %500
%500 = OpLabel
OpBranch %501
%501 = OpLabel
OpSelectionMerge %578 None
OpSwitch %262 %519
%519 = OpLabel
OpBranch %520
%520 = OpLabel
%1236 = OpPhi %6 %24 %519 %1346 %574
%524 = OpSLessThanEqual %40 %1236 %1364
OpLoopMerge %575 %574 None
OpBranchConditional %524 %525 %575
%525 = OpLabel
%528 = OpAccessChain %9 %47 %1236 %24
%529 = OpLoad %6 %528
%530 = OpSLessThanEqual %40 %172 %529
OpSelectionMerge %573 None
OpBranchConditional %530 %531 %552
%552 = OpLabel
%554 = OpAccessChain %9 %47 %1236 %30
%555 = OpLoad %6 %554
%556 = OpIEqual %40 %555 %28
OpSelectionMerge %572 None
OpBranchConditional %556 %557 %568
%568 = OpLabel
%571 = OpLoad %6 %554
OpBranch %574
%557 = OpLabel
OpStore %554 %1364
%567 = OpAccessChain %8 %47 %1364
OpStore %567 %1365
OpBranch %575
%572 = OpLabel
OpUnreachable
%531 = OpLabel
%533 = OpAccessChain %9 %47 %1236 %27
%534 = OpLoad %6 %533
%535 = OpIEqual %40 %534 %28
OpSelectionMerge %551 None
OpBranchConditional %535 %536 %547
%547 = OpLabel
%550 = OpLoad %6 %533
OpBranch %574
%536 = OpLabel
OpStore %533 %1364
%546 = OpAccessChain %8 %47 %1364
OpStore %546 %1365
OpBranch %575
%551 = OpLabel
OpUnreachable
%573 = OpLabel
OpUnreachable
%574 = OpLabel
%1346 = OpPhi %6 %550 %547 %571 %568
OpBranch %520
%575 = OpLabel
%1237 = OpPhi %40 %263 %520 %266 %536 %266 %557
OpSelectionMerge %577 None
OpBranchConditional %1237 %578 %577
%577 = OpLabel
OpBranch %578
%578 = OpLabel
OpSelectionMerge %655 None
OpSwitch %262 %596
%596 = OpLabel
OpBranch %597
%597 = OpLabel
%1244 = OpPhi %6 %24 %596 %1347 %651
%601 = OpSLessThanEqual %40 %1244 %151
OpLoopMerge %652 %651 None
OpBranchConditional %601 %602 %652
%602 = OpLabel
%605 = OpAccessChain %9 %47 %1244 %24
%606 = OpLoad %6 %605
%607 = OpSLessThanEqual %40 %179 %606
OpSelectionMerge %650 None
OpBranchConditional %607 %608 %629
%629 = OpLabel
%631 = OpAccessChain %9 %47 %1244 %30
%632 = OpLoad %6 %631
%633 = OpIEqual %40 %632 %28
OpSelectionMerge %649 None
OpBranchConditional %633 %634 %645
%645 = OpLabel
%648 = OpLoad %6 %631
OpBranch %651
%634 = OpLabel
OpStore %631 %151
%644 = OpAccessChain %8 %47 %151
OpStore %644 %1366
OpBranch %652
%649 = OpLabel
OpUnreachable
%608 = OpLabel
%610 = OpAccessChain %9 %47 %1244 %27
%611 = OpLoad %6 %610
%612 = OpIEqual %40 %611 %28
OpSelectionMerge %628 None
OpBranchConditional %612 %613 %624
%624 = OpLabel
%627 = OpLoad %6 %610
OpBranch %651
%613 = OpLabel
OpStore %610 %151
%623 = OpAccessChain %8 %47 %151
OpStore %623 %1366
OpBranch %652
%628 = OpLabel
OpUnreachable
%650 = OpLabel
OpUnreachable
%651 = OpLabel
%1347 = OpPhi %6 %627 %624 %648 %645
OpBranch %597
%652 = OpLabel
%1245 = OpPhi %40 %263 %597 %266 %613 %266 %634
OpSelectionMerge %654 None
OpBranchConditional %1245 %655 %654
%654 = OpLabel
OpBranch %655
%655 = OpLabel
OpSelectionMerge %732 None
OpSwitch %262 %673
%673 = OpLabel
OpBranch %674
%674 = OpLabel
%1252 = OpPhi %6 %24 %673 %1348 %728
%678 = OpSLessThanEqual %40 %1252 %192
OpLoopMerge %729 %728 None
OpBranchConditional %678 %679 %729
%679 = OpLabel
%682 = OpAccessChain %9 %47 %1252 %24
%683 = OpLoad %6 %682
%684 = OpSLessThanEqual %40 %30 %683
OpSelectionMerge %727 None
OpBranchConditional %684 %685 %706
%706 = OpLabel
%708 = OpAccessChain %9 %47 %1252 %30
%709 = OpLoad %6 %708
%710 = OpIEqual %40 %709 %28
OpSelectionMerge %726 None
OpBranchConditional %710 %711 %722
%722 = OpLabel
%725 = OpLoad %6 %708
OpBranch %728
%711 = OpLabel
OpStore %708 %192
%721 = OpAccessChain %8 %47 %192
OpStore %721 %1367
OpBranch %729
%726 = OpLabel
OpUnreachable
%685 = OpLabel
%687 = OpAccessChain %9 %47 %1252 %27
%688 = OpLoad %6 %687
%689 = OpIEqual %40 %688 %28
OpSelectionMerge %705 None
OpBranchConditional %689 %690 %701
%701 = OpLabel
%704 = OpLoad %6 %687
OpBranch %728
%690 = OpLabel
OpStore %687 %192
%700 = OpAccessChain %8 %47 %192
OpStore %700 %1367
OpBranch %729
%705 = OpLabel
OpUnreachable
%727 = OpLabel
OpUnreachable
%728 = OpLabel
%1348 = OpPhi %6 %704 %701 %725 %722
OpBranch %674
%729 = OpLabel
%1253 = OpPhi %40 %263 %674 %266 %690 %266 %711
OpSelectionMerge %731 None
OpBranchConditional %1253 %732 %731
%731 = OpLabel
OpBranch %732
%732 = OpLabel
OpSelectionMerge %809 None
OpSwitch %262 %750
%750 = OpLabel
OpBranch %751
%751 = OpLabel
%1260 = OpPhi %6 %24 %750 %1349 %805
%755 = OpSLessThanEqual %40 %1260 %172
OpLoopMerge %806 %805 None
OpBranchConditional %755 %756 %806
%756 = OpLabel
%759 = OpAccessChain %9 %47 %1260 %24
%760 = OpLoad %6 %759
%761 = OpSLessThanEqual %40 %192 %760
OpSelectionMerge %804 None
OpBranchConditional %761 %762 %783
%783 = OpLabel
%785 = OpAccessChain %9 %47 %1260 %30
%786 = OpLoad %6 %785
%787 = OpIEqual %40 %786 %28
OpSelectionMerge %803 None
OpBranchConditional %787 %788 %799
%799 = OpLabel
%802 = OpLoad %6 %785
OpBranch %805
%788 = OpLabel
OpStore %785 %172
%798 = OpAccessChain %8 %47 %172
OpStore %798 %1368
OpBranch %806
%803 = OpLabel
OpUnreachable
%762 = OpLabel
%764 = OpAccessChain %9 %47 %1260 %27
%765 = OpLoad %6 %764
%766 = OpIEqual %40 %765 %28
OpSelectionMerge %782 None
OpBranchConditional %766 %767 %778
%778 = OpLabel
%781 = OpLoad %6 %764
OpBranch %805
%767 = OpLabel
OpStore %764 %172
%777 = OpAccessChain %8 %47 %172
OpStore %777 %1368
OpBranch %806
%782 = OpLabel
OpUnreachable
%804 = OpLabel
OpUnreachable
%805 = OpLabel
%1349 = OpPhi %6 %781 %778 %802 %799
OpBranch %751
%806 = OpLabel
%1261 = OpPhi %40 %263 %751 %266 %767 %266 %788
OpSelectionMerge %808 None
OpBranchConditional %1261 %809 %808
%808 = OpLabel
OpBranch %809
%809 = OpLabel
OpSelectionMerge %886 None
OpSwitch %262 %827
%827 = OpLabel
OpBranch %828
%828 = OpLabel
%1268 = OpPhi %6 %24 %827 %1350 %882
%832 = OpSLessThanEqual %40 %1268 %179
OpLoopMerge %883 %882 None
OpBranchConditional %832 %833 %883
%833 = OpLabel
%836 = OpAccessChain %9 %47 %1268 %24
%837 = OpLoad %6 %836
%838 = OpSLessThanEqual %40 %199 %837
OpSelectionMerge %881 None
OpBranchConditional %838 %839 %860
%860 = OpLabel
%862 = OpAccessChain %9 %47 %1268 %30
%863 = OpLoad %6 %862
%864 = OpIEqual %40 %863 %28
OpSelectionMerge %880 None
OpBranchConditional %864 %865 %876
%876 = OpLabel
%879 = OpLoad %6 %862
OpBranch %882
%865 = OpLabel
OpStore %862 %179
%875 = OpAccessChain %8 %47 %179
OpStore %875 %1369
OpBranch %883
%880 = OpLabel
OpUnreachable
%839 = OpLabel
%841 = OpAccessChain %9 %47 %1268 %27
%842 = OpLoad %6 %841
%843 = OpIEqual %40 %842 %28
OpSelectionMerge %859 None
OpBranchConditional %843 %844 %855
%855 = OpLabel
%858 = OpLoad %6 %841
OpBranch %882
%844 = OpLabel
OpStore %841 %179
%854 = OpAccessChain %8 %47 %179
OpStore %854 %1369
OpBranch %883
%859 = OpLabel
OpUnreachable
%881 = OpLabel
OpUnreachable
%882 = OpLabel
%1350 = OpPhi %6 %858 %855 %879 %876
OpBranch %828
%883 = OpLabel
%1269 = OpPhi %40 %263 %828 %266 %844 %266 %865
OpSelectionMerge %885 None
OpBranchConditional %1269 %886 %885
%885 = OpLabel
OpBranch %886
%886 = OpLabel
OpSelectionMerge %963 None
OpSwitch %262 %904
%904 = OpLabel
OpBranch %905
%905 = OpLabel
%1276 = OpPhi %6 %24 %904 %1351 %959
%909 = OpSLessThanEqual %40 %1276 %141
OpLoopMerge %960 %959 None
OpBranchConditional %909 %910 %960
%910 = OpLabel
%913 = OpAccessChain %9 %47 %1276 %24
%914 = OpLoad %6 %913
%915 = OpSLessThanEqual %40 %206 %914
OpSelectionMerge %958 None
OpBranchConditional %915 %916 %937
%937 = OpLabel
%939 = OpAccessChain %9 %47 %1276 %30
%940 = OpLoad %6 %939
%941 = OpIEqual %40 %940 %28
OpSelectionMerge %957 None
OpBranchConditional %941 %942 %953
%953 = OpLabel
%956 = OpLoad %6 %939
OpBranch %959
%942 = OpLabel
OpStore %939 %141
%952 = OpAccessChain %8 %47 %141
OpStore %952 %1370
OpBranch %960
%957 = OpLabel
OpUnreachable
%916 = OpLabel
%918 = OpAccessChain %9 %47 %1276 %27
%919 = OpLoad %6 %918
%920 = OpIEqual %40 %919 %28
OpSelectionMerge %936 None
OpBranchConditional %920 %921 %932
%932 = OpLabel
%935 = OpLoad %6 %918
OpBranch %959
%921 = OpLabel
OpStore %918 %141
%931 = OpAccessChain %8 %47 %141
OpStore %931 %1370
OpBranch %960
%936 = OpLabel
OpUnreachable
%958 = OpLabel
OpUnreachable
%959 = OpLabel
%1351 = OpPhi %6 %935 %932 %956 %953
OpBranch %905
%960 = OpLabel
%1277 = OpPhi %40 %263 %905 %266 %921 %266 %942
OpSelectionMerge %962 None
OpBranchConditional %1277 %963 %962
%962 = OpLabel
OpBranch %963
%963 = OpLabel
OpBranch %213
%213 = OpLabel
%1290 = OpPhi %6 %1318 %963 %1287 %216
%1281 = OpPhi %6 %24 %963 %1352 %216
%1280 = OpPhi %6 %24 %963 %246 %216
%220 = OpSLessThan %40 %1280 %219
OpLoopMerge %215 %216 None
OpBranchConditional %220 %214 %215
%214 = OpLabel
OpSelectionMerge %1013 None
OpSwitch %262 %981
%981 = OpLabel
OpBranch %982
%982 = OpLabel
%1282 = OpPhi %6 %24 %981 %1371 %1009
%985 = OpINotEqual %40 %1282 %28
OpLoopMerge %1010 %1009 None
OpBranchConditional %985 %986 %1010
%986 = OpLabel
%988 = OpAccessChain %8 %47 %1282
%989 = OpLoad %7 %988
%1019 = OpCompositeExtract %6 %989 0
%1020 = OpCompositeExtract %6 %989 1
%1021 = OpCompositeExtract %6 %989 2
%993 = OpIEqual %40 %1019 %1280
OpSelectionMerge %996 None
OpBranchConditional %993 %994 %996
%994 = OpLabel
OpBranch %1010
%996 = OpLabel
%1000 = OpSGreaterThan %40 %1280 %1019
%1371 = OpSelect %6 %1000 %1021 %1020
OpBranch %1009
%1009 = OpLabel
OpBranch %982
%1010 = OpLabel
%1288 = OpPhi %6 %1290 %982 %1280 %994
%1284 = OpPhi %40 %263 %982 %266 %994
OpSelectionMerge %1012 None
OpBranchConditional %1284 %1013 %1012
%1012 = OpLabel
OpBranch %1013
%1013 = OpLabel
%1287 = OpPhi %6 %1288 %1010 %28 %1012
OpSelectionMerge %228 None
OpSwitch %1280 %227 9 %226 5 %226 12 %226 15 %226 7 %226 8 %226 2 %226 6 %226 17 %226 13 %226
%226 = OpLabel
%231 = OpIEqual %40 %1287 %1280
OpSelectionMerge %233 None
OpBranchConditional %231 %232 %233
%232 = OpLabel
%235 = OpIAdd %6 %1281 %27
OpBranch %233
%233 = OpLabel
%1354 = OpPhi %6 %1281 %226 %235 %232
OpBranch %228
%227 = OpLabel
%238 = OpIEqual %40 %1287 %28
OpSelectionMerge %240 None
OpBranchConditional %238 %239 %240
%239 = OpLabel
%242 = OpIAdd %6 %1281 %27
OpBranch %240
%240 = OpLabel
%1353 = OpPhi %6 %1281 %227 %242 %239
OpBranch %228
%228 = OpLabel
%1352 = OpPhi %6 %1353 %240 %1354 %233
OpBranch %216
%216 = OpLabel
%246 = OpIAdd %6 %1280 %27
OpBranch %213
%215 = OpLabel
%248 = OpIEqual %40 %1281 %219
OpSelectionMerge %250 None
OpBranchConditional %248 %249 %258
%258 = OpLabel
OpStore %254 %259
OpBranch %250
%249 = OpLabel
OpStore %254 %257
OpBranch %250
%250 = OpLabel
OpReturn
OpFunctionEnd
END
BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
PIPELINE graphics reference_pipeline
ATTACH reference_vertex_shader
ATTACH reference_fragment_shader
FRAMEBUFFER_SIZE 256 256
BIND BUFFER reference_framebuffer AS color LOCATION 0
END
CLEAR_COLOR reference_pipeline 0 0 0 255
CLEAR reference_pipeline
RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
SHADER vertex variant_vertex_shader PASSTHROUGH
# variant_fragment_shader is derived from the following GLSL:
# #version 320 es
# precision highp float;
#
# precision highp int;
#
# layout(set = 0, binding = 0) uniform buf0
# {
# vec2 injectionSwitch;
# };
# layout(location = 0) out vec4 _GLF_color;
#
# struct BST
# {
# int data;
# int leftIndex;
# int rightIndex;
# };
#
# BST tree[10];
#
# void makeTreeNode(inout BST tree, int data)
# {
# tree.data = data;
# tree.leftIndex = -1;
# tree.rightIndex = -1;
# }
# void insert(int treeIndex, int data)
# {
# int baseIndex = 0;
# while (baseIndex <= treeIndex)
# {
# if (data <= tree[baseIndex].data)
# {
# if (tree[baseIndex].leftIndex == -1)
# {
# // Always false.
# if ((injectionSwitch.y < injectionSwitch.x))
# {
# do
# {
# // This is never reached.
# discard;
# }
# // Always false.
# while (injectionSwitch.y < injectionSwitch.x);
# }
# tree[baseIndex].leftIndex = treeIndex;
# makeTreeNode(tree[treeIndex], data);
# // Iterates once.
# for (int int_i = 0; int_i < int((injectionSwitch.y)); int_i++)
# {
# return;
# }
# }
# else
# {
# baseIndex = tree[baseIndex].leftIndex;
# continue;
# }
# }
# else
# {
# if (tree[baseIndex].rightIndex == -1)
# {
# tree[baseIndex].rightIndex = treeIndex;
# makeTreeNode(tree[treeIndex], data);
# return;
# }
# else
# {
# baseIndex = tree[baseIndex].rightIndex;
# continue;
# }
# }
# }
# }
# int search(int target)
# {
# BST currentNode;
# int index = 0;
# while (index != -1)
# {
# currentNode = tree[index];
# if (currentNode.data == target)
# {
# return target;
# }
# index = target > currentNode.data ? currentNode.rightIndex : currentNode.leftIndex;
# }
# return -1;
# }
# void main()
# {
# int treeIndex = 0;
# makeTreeNode(tree[0], 9);
# treeIndex++;
# insert(treeIndex, 5);
# treeIndex++;
# // gl_FragCoord.y < 0.0 == false
# // Iterates once,
# for (int int_i = 0; (gl_FragCoord.y < 0.0) || (int_i != int(injectionSwitch.y)); int_i++)
# {
# insert(treeIndex, 12);
# }
# treeIndex++;
# insert(treeIndex, 15);
# treeIndex++;
# insert(treeIndex, 7);
# treeIndex++;
# insert(treeIndex, 8);
# treeIndex++;
# insert(treeIndex, 2);
# treeIndex++;
# insert(treeIndex, 6);
# treeIndex++;
# insert(treeIndex, 17);
# treeIndex++;
# insert(treeIndex, 13);
# int count = 0;
# for (int i = 0; i < 20; i++)
# {
# int result = search(i);
# switch (i)
# {
# case 9:
# case 5:
# case 12:
# case 15:
# case 7:
# case 8:
# case 2:
# case 6:
# case 17:
# case 13:
# if (result == i)
# {
# count++;
# }
# break;
# default:
# if (result == -1)
# {
# count++;
# }
# break;
# }
# }
# if (count == 20)
# {
# _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
# }
# else
# {
# _GLF_color = vec4(0.0, 0.0, 1.0, 1.0);
# }
# }
SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 10
; Bound: 1740
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %4 "main" %204 %315
OpExecutionMode %4 OriginUpperLeft
OpSource ESSL 320
OpName %4 "main"
OpName %7 "BST"
OpMemberName %7 0 "data"
OpMemberName %7 1 "leftIndex"
OpMemberName %7 2 "rightIndex"
OpName %47 "tree"
OpName %63 "buf0"
OpMemberName %63 0 "injectionSwitch"
OpName %65 ""
OpName %204 "gl_FragCoord"
OpName %315 "_GLF_color"
OpMemberDecorate %63 0 Offset 0
OpDecorate %63 Block
OpDecorate %65 DescriptorSet 0
OpDecorate %65 Binding 0
OpDecorate %204 BuiltIn FragCoord
OpDecorate %315 Location 0
%2 = OpTypeVoid
%3 = OpTypeFunction %2
%6 = OpTypeInt 32 1
%7 = OpTypeStruct %6 %6 %6
%8 = OpTypePointer Function %7
%9 = OpTypePointer Function %6
%24 = OpConstant %6 0
%27 = OpConstant %6 1
%28 = OpConstant %6 -1
%30 = OpConstant %6 2
%40 = OpTypeBool
%43 = OpTypeInt 32 0
%44 = OpConstant %43 10
%45 = OpTypeArray %7 %44
%61 = OpTypeFloat 32
%62 = OpTypeVector %61 2
%63 = OpTypeStruct %62
%64 = OpTypePointer Uniform %63
%65 = OpVariable %64 Uniform
%66 = OpConstant %43 1
%67 = OpTypePointer Uniform %61
%70 = OpConstant %43 0
%179 = OpConstant %6 9
%189 = OpConstant %6 5
%202 = OpTypeVector %61 4
%203 = OpTypePointer Input %202
%204 = OpVariable %203 Input
%205 = OpTypePointer Input %61
%208 = OpConstant %61 0
%219 = OpConstant %6 12
%228 = OpConstant %6 15
%235 = OpConstant %6 7
%242 = OpConstant %6 8
%255 = OpConstant %6 6
%262 = OpConstant %6 17
%269 = OpConstant %6 13
%282 = OpConstant %6 20
%314 = OpTypePointer Output %202
%315 = OpVariable %314 Output
%316 = OpConstant %61 1
%317 = OpConstantComposite %202 %316 %208 %208 %316
%319 = OpConstantComposite %202 %208 %208 %316 %316
%322 = OpConstantFalse %40
%325 = OpConstantTrue %40
%1301 = OpTypePointer Function %45
%1620 = OpUndef %6
%1727 = OpConstantComposite %7 %179 %28 %28
%1728 = OpConstantComposite %7 %189 %28 %28
%1729 = OpConstant %6 3
%1730 = OpConstantComposite %7 %219 %28 %28
%1731 = OpConstantComposite %7 %228 %28 %28
%1732 = OpConstant %6 4
%1733 = OpConstantComposite %7 %235 %28 %28
%1734 = OpConstantComposite %7 %242 %28 %28
%1735 = OpConstantComposite %7 %30 %28 %28
%1736 = OpConstantComposite %7 %255 %28 %28
%1737 = OpConstantComposite %7 %262 %28 %28
%1738 = OpConstantComposite %7 %269 %28 %28
%4 = OpFunction %2 None %3
%5 = OpLabel
%47 = OpVariable %1301 Function
%186 = OpAccessChain %8 %47 %24
OpStore %186 %1727
OpSelectionMerge %432 None
OpSwitch %70 %350
%350 = OpLabel
OpBranch %351
%351 = OpLabel
%1501 = OpPhi %40 %322 %350 %1674 %428
%1498 = OpPhi %6 %24 %350 %1671 %428
%355 = OpSLessThanEqual %40 %1498 %27
OpLoopMerge %429 %428 None
OpBranchConditional %355 %356 %429
%356 = OpLabel
%359 = OpAccessChain %9 %47 %1498 %24
%360 = OpLoad %6 %359
%361 = OpSLessThanEqual %40 %189 %360
OpSelectionMerge %427 None
OpBranchConditional %361 %362 %406
%406 = OpLabel
%408 = OpAccessChain %9 %47 %1498 %30
%409 = OpLoad %6 %408
%410 = OpIEqual %40 %409 %28
OpSelectionMerge %426 None
OpBranchConditional %410 %411 %422
%422 = OpLabel
%425 = OpLoad %6 %408
OpBranch %428
%411 = OpLabel
OpStore %408 %27
%421 = OpAccessChain %8 %47 %27
OpStore %421 %1728
OpBranch %429
%426 = OpLabel
OpUnreachable
%362 = OpLabel
%364 = OpAccessChain %9 %47 %1498 %27
%365 = OpLoad %6 %364
%366 = OpIEqual %40 %365 %28
OpSelectionMerge %405 None
OpBranchConditional %366 %367 %401
%401 = OpLabel
%404 = OpLoad %6 %364
OpBranch %428
%367 = OpLabel
%368 = OpAccessChain %67 %65 %24 %66
%369 = OpLoad %61 %368
%370 = OpAccessChain %67 %65 %24 %70
%371 = OpLoad %61 %370
%372 = OpFOrdLessThan %40 %369 %371
OpSelectionMerge %378 None
OpBranchConditional %372 %373 %378
%373 = OpLabel
OpBranch %374
%374 = OpLabel
OpLoopMerge %377 %376 None
OpBranch %375
%375 = OpLabel
OpKill
%376 = OpLabel
OpBranch %374
%377 = OpLabel
OpUnreachable
%378 = OpLabel
OpStore %364 %27
%388 = OpAccessChain %8 %47 %27
OpStore %388 %1728
OpBranch %389
%389 = OpLabel
%394 = OpConvertFToS %6 %369
%395 = OpSLessThan %40 %24 %394
OpLoopMerge %398 %397 None
OpBranchConditional %395 %396 %398
%396 = OpLabel
OpBranch %398
%397 = OpLabel
OpBranch %389
%398 = OpLabel
%1499 = OpPhi %40 %1501 %389 %325 %396
OpSelectionMerge %400 None
OpBranchConditional %1499 %429 %400
%400 = OpLabel
OpBranch %405
%405 = OpLabel
OpBranch %427
%427 = OpLabel
OpBranch %428
%428 = OpLabel
%1674 = OpPhi %40 %1501 %401 %1501 %422 %1499 %427
%1671 = OpPhi %6 %404 %401 %425 %422 %1498 %427
OpBranch %351
%429 = OpLabel
%1502 = OpPhi %40 %1501 %351 %1499 %398 %325 %411
OpSelectionMerge %431 None
OpBranchConditional %1502 %432 %431
%431 = OpLabel
OpBranch %432
%432 = OpLabel
OpBranch %197
%197 = OpLabel
%1509 = OpPhi %6 %24 %432 %225 %200
OpLoopMerge %199 %200 None
OpBranch %201
%201 = OpLabel
%206 = OpAccessChain %205 %204 %66
%207 = OpLoad %61 %206
%209 = OpFOrdLessThan %40 %207 %208
%210 = OpLogicalNot %40 %209
OpSelectionMerge %212 None
OpBranchConditional %210 %211 %212
%211 = OpLabel
%214 = OpAccessChain %67 %65 %24 %66
%215 = OpLoad %61 %214
%216 = OpConvertFToS %6 %215
%217 = OpINotEqual %40 %1509 %216
OpBranch %212
%212 = OpLabel
%218 = OpPhi %40 %209 %201 %217 %211
OpBranchConditional %218 %198 %199
%198 = OpLabel
OpSelectionMerge %534 None
OpSwitch %70 %452
%452 = OpLabel
OpBranch %453
%453 = OpLabel
%1662 = OpPhi %40 %322 %452 %1726 %530
%1659 = OpPhi %6 %24 %452 %1723 %530
%457 = OpSLessThanEqual %40 %1659 %30
OpLoopMerge %531 %530 None
OpBranchConditional %457 %458 %531
%458 = OpLabel
%461 = OpAccessChain %9 %47 %1659 %24
%462 = OpLoad %6 %461
%463 = OpSLessThanEqual %40 %219 %462
OpSelectionMerge %529 None
OpBranchConditional %463 %464 %508
%508 = OpLabel
%510 = OpAccessChain %9 %47 %1659 %30
%511 = OpLoad %6 %510
%512 = OpIEqual %40 %511 %28
OpSelectionMerge %528 None
OpBranchConditional %512 %513 %524
%524 = OpLabel
%527 = OpLoad %6 %510
OpBranch %530
%513 = OpLabel
OpStore %510 %30
%523 = OpAccessChain %8 %47 %30
OpStore %523 %1730
OpBranch %531
%528 = OpLabel
OpUnreachable
%464 = OpLabel
%466 = OpAccessChain %9 %47 %1659 %27
%467 = OpLoad %6 %466
%468 = OpIEqual %40 %467 %28
OpSelectionMerge %507 None
OpBranchConditional %468 %469 %503
%503 = OpLabel
%506 = OpLoad %6 %466
OpBranch %530
%469 = OpLabel
%470 = OpAccessChain %67 %65 %24 %66
%471 = OpLoad %61 %470
%472 = OpAccessChain %67 %65 %24 %70
%473 = OpLoad %61 %472
%474 = OpFOrdLessThan %40 %471 %473
OpSelectionMerge %480 None
OpBranchConditional %474 %475 %480
%475 = OpLabel
OpBranch %476
%476 = OpLabel
OpLoopMerge %479 %478 None
OpBranch %477
%477 = OpLabel
OpKill
%478 = OpLabel
OpBranch %476
%479 = OpLabel
OpUnreachable
%480 = OpLabel
OpStore %466 %30
%490 = OpAccessChain %8 %47 %30
OpStore %490 %1730
OpBranch %491
%491 = OpLabel
%496 = OpConvertFToS %6 %471
%497 = OpSLessThan %40 %24 %496
OpLoopMerge %500 %499 None
OpBranchConditional %497 %498 %500
%498 = OpLabel
OpBranch %500
%499 = OpLabel
OpBranch %491
%500 = OpLabel
%1660 = OpPhi %40 %1662 %491 %325 %498
OpSelectionMerge %502 None
OpBranchConditional %1660 %531 %502
%502 = OpLabel
OpBranch %507
%507 = OpLabel
OpBranch %529
%529 = OpLabel
OpBranch %530
%530 = OpLabel
%1726 = OpPhi %40 %1662 %503 %1662 %524 %1660 %529
%1723 = OpPhi %6 %506 %503 %527 %524 %1659 %529
OpBranch %453
%531 = OpLabel
%1663 = OpPhi %40 %1662 %453 %1660 %500 %325 %513
OpSelectionMerge %533 None
OpBranchConditional %1663 %534 %533
%533 = OpLabel
OpBranch %534
%534 = OpLabel
OpBranch %200
%200 = OpLabel
%225 = OpIAdd %6 %1509 %27
OpBranch %197
%199 = OpLabel
OpSelectionMerge %636 None
OpSwitch %70 %554
%554 = OpLabel
OpBranch %555
%555 = OpLabel
%1515 = OpPhi %40 %322 %554 %1685 %632
%1512 = OpPhi %6 %24 %554 %1682 %632
%559 = OpSLessThanEqual %40 %1512 %1729
OpLoopMerge %633 %632 None
OpBranchConditional %559 %560 %633
%560 = OpLabel
%563 = OpAccessChain %9 %47 %1512 %24
%564 = OpLoad %6 %563
%565 = OpSLessThanEqual %40 %228 %564
OpSelectionMerge %631 None
OpBranchConditional %565 %566 %610
%610 = OpLabel
%612 = OpAccessChain %9 %47 %1512 %30
%613 = OpLoad %6 %612
%614 = OpIEqual %40 %613 %28
OpSelectionMerge %630 None
OpBranchConditional %614 %615 %626
%626 = OpLabel
%629 = OpLoad %6 %612
OpBranch %632
%615 = OpLabel
OpStore %612 %1729
%625 = OpAccessChain %8 %47 %1729
OpStore %625 %1731
OpBranch %633
%630 = OpLabel
OpUnreachable
%566 = OpLabel
%568 = OpAccessChain %9 %47 %1512 %27
%569 = OpLoad %6 %568
%570 = OpIEqual %40 %569 %28
OpSelectionMerge %609 None
OpBranchConditional %570 %571 %605
%605 = OpLabel
%608 = OpLoad %6 %568
OpBranch %632
%571 = OpLabel
%572 = OpAccessChain %67 %65 %24 %66
%573 = OpLoad %61 %572
%574 = OpAccessChain %67 %65 %24 %70
%575 = OpLoad %61 %574
%576 = OpFOrdLessThan %40 %573 %575
OpSelectionMerge %582 None
OpBranchConditional %576 %577 %582
%577 = OpLabel
OpBranch %578
%578 = OpLabel
OpLoopMerge %581 %580 None
OpBranch %579
%579 = OpLabel
OpKill
%580 = OpLabel
OpBranch %578
%581 = OpLabel
OpUnreachable
%582 = OpLabel
OpStore %568 %1729
%592 = OpAccessChain %8 %47 %1729
OpStore %592 %1731
OpBranch %593
%593 = OpLabel
%598 = OpConvertFToS %6 %573
%599 = OpSLessThan %40 %24 %598
OpLoopMerge %602 %601 None
OpBranchConditional %599 %600 %602
%600 = OpLabel
OpBranch %602
%601 = OpLabel
OpBranch %593
%602 = OpLabel
%1513 = OpPhi %40 %1515 %593 %325 %600
OpSelectionMerge %604 None
OpBranchConditional %1513 %633 %604
%604 = OpLabel
OpBranch %609
%609 = OpLabel
OpBranch %631
%631 = OpLabel
OpBranch %632
%632 = OpLabel
%1685 = OpPhi %40 %1515 %605 %1515 %626 %1513 %631
%1682 = OpPhi %6 %608 %605 %629 %626 %1512 %631
OpBranch %555
%633 = OpLabel
%1516 = OpPhi %40 %1515 %555 %1513 %602 %325 %615
OpSelectionMerge %635 None
OpBranchConditional %1516 %636 %635
%635 = OpLabel
OpBranch %636
%636 = OpLabel
OpSelectionMerge %738 None
OpSwitch %70 %656
%656 = OpLabel
OpBranch %657
%657 = OpLabel
%1526 = OpPhi %40 %322 %656 %1689 %734
%1523 = OpPhi %6 %24 %656 %1686 %734
%661 = OpSLessThanEqual %40 %1523 %1732
OpLoopMerge %735 %734 None
OpBranchConditional %661 %662 %735
%662 = OpLabel
%665 = OpAccessChain %9 %47 %1523 %24
%666 = OpLoad %6 %665
%667 = OpSLessThanEqual %40 %235 %666
OpSelectionMerge %733 None
OpBranchConditional %667 %668 %712
%712 = OpLabel
%714 = OpAccessChain %9 %47 %1523 %30
%715 = OpLoad %6 %714
%716 = OpIEqual %40 %715 %28
OpSelectionMerge %732 None
OpBranchConditional %716 %717 %728
%728 = OpLabel
%731 = OpLoad %6 %714
OpBranch %734
%717 = OpLabel
OpStore %714 %1732
%727 = OpAccessChain %8 %47 %1732
OpStore %727 %1733
OpBranch %735
%732 = OpLabel
OpUnreachable
%668 = OpLabel
%670 = OpAccessChain %9 %47 %1523 %27
%671 = OpLoad %6 %670
%672 = OpIEqual %40 %671 %28
OpSelectionMerge %711 None
OpBranchConditional %672 %673 %707
%707 = OpLabel
%710 = OpLoad %6 %670
OpBranch %734
%673 = OpLabel
%674 = OpAccessChain %67 %65 %24 %66
%675 = OpLoad %61 %674
%676 = OpAccessChain %67 %65 %24 %70
%677 = OpLoad %61 %676
%678 = OpFOrdLessThan %40 %675 %677
OpSelectionMerge %684 None
OpBranchConditional %678 %679 %684
%679 = OpLabel
OpBranch %680
%680 = OpLabel
OpLoopMerge %683 %682 None
OpBranch %681
%681 = OpLabel
OpKill
%682 = OpLabel
OpBranch %680
%683 = OpLabel
OpUnreachable
%684 = OpLabel
OpStore %670 %1732
%694 = OpAccessChain %8 %47 %1732
OpStore %694 %1733
OpBranch %695
%695 = OpLabel
%700 = OpConvertFToS %6 %675
%701 = OpSLessThan %40 %24 %700
OpLoopMerge %704 %703 None
OpBranchConditional %701 %702 %704
%702 = OpLabel
OpBranch %704
%703 = OpLabel
OpBranch %695
%704 = OpLabel
%1524 = OpPhi %40 %1526 %695 %325 %702
OpSelectionMerge %706 None
OpBranchConditional %1524 %735 %706
%706 = OpLabel
OpBranch %711
%711 = OpLabel
OpBranch %733
%733 = OpLabel
OpBranch %734
%734 = OpLabel
%1689 = OpPhi %40 %1526 %707 %1526 %728 %1524 %733
%1686 = OpPhi %6 %710 %707 %731 %728 %1523 %733
OpBranch %657
%735 = OpLabel
%1527 = OpPhi %40 %1526 %657 %1524 %704 %325 %717
OpSelectionMerge %737 None
OpBranchConditional %1527 %738 %737
%737 = OpLabel
OpBranch %738
%738 = OpLabel
OpSelectionMerge %840 None
OpSwitch %70 %758
%758 = OpLabel
OpBranch %759
%759 = OpLabel
%1537 = OpPhi %40 %322 %758 %1693 %836
%1534 = OpPhi %6 %24 %758 %1690 %836
%763 = OpSLessThanEqual %40 %1534 %189
OpLoopMerge %837 %836 None
OpBranchConditional %763 %764 %837
%764 = OpLabel
%767 = OpAccessChain %9 %47 %1534 %24
%768 = OpLoad %6 %767
%769 = OpSLessThanEqual %40 %242 %768
OpSelectionMerge %835 None
OpBranchConditional %769 %770 %814
%814 = OpLabel
%816 = OpAccessChain %9 %47 %1534 %30
%817 = OpLoad %6 %816
%818 = OpIEqual %40 %817 %28
OpSelectionMerge %834 None
OpBranchConditional %818 %819 %830
%830 = OpLabel
%833 = OpLoad %6 %816
OpBranch %836
%819 = OpLabel
OpStore %816 %189
%829 = OpAccessChain %8 %47 %189
OpStore %829 %1734
OpBranch %837
%834 = OpLabel
OpUnreachable
%770 = OpLabel
%772 = OpAccessChain %9 %47 %1534 %27
%773 = OpLoad %6 %772
%774 = OpIEqual %40 %773 %28
OpSelectionMerge %813 None
OpBranchConditional %774 %775 %809
%809 = OpLabel
%812 = OpLoad %6 %772
OpBranch %836
%775 = OpLabel
%776 = OpAccessChain %67 %65 %24 %66
%777 = OpLoad %61 %776
%778 = OpAccessChain %67 %65 %24 %70
%779 = OpLoad %61 %778
%780 = OpFOrdLessThan %40 %777 %779
OpSelectionMerge %786 None
OpBranchConditional %780 %781 %786
%781 = OpLabel
OpBranch %782
%782 = OpLabel
OpLoopMerge %785 %784 None
OpBranch %783
%783 = OpLabel
OpKill
%784 = OpLabel
OpBranch %782
%785 = OpLabel
OpUnreachable
%786 = OpLabel
OpStore %772 %189
%796 = OpAccessChain %8 %47 %189
OpStore %796 %1734
OpBranch %797
%797 = OpLabel
%802 = OpConvertFToS %6 %777
%803 = OpSLessThan %40 %24 %802
OpLoopMerge %806 %805 None
OpBranchConditional %803 %804 %806
%804 = OpLabel
OpBranch %806
%805 = OpLabel
OpBranch %797
%806 = OpLabel
%1535 = OpPhi %40 %1537 %797 %325 %804
OpSelectionMerge %808 None
OpBranchConditional %1535 %837 %808
%808 = OpLabel
OpBranch %813
%813 = OpLabel
OpBranch %835
%835 = OpLabel
OpBranch %836
%836 = OpLabel
%1693 = OpPhi %40 %1537 %809 %1537 %830 %1535 %835
%1690 = OpPhi %6 %812 %809 %833 %830 %1534 %835
OpBranch %759
%837 = OpLabel
%1538 = OpPhi %40 %1537 %759 %1535 %806 %325 %819
OpSelectionMerge %839 None
OpBranchConditional %1538 %840 %839
%839 = OpLabel
OpBranch %840
%840 = OpLabel
OpSelectionMerge %942 None
OpSwitch %70 %860
%860 = OpLabel
OpBranch %861
%861 = OpLabel
%1548 = OpPhi %40 %322 %860 %1697 %938
%1545 = OpPhi %6 %24 %860 %1694 %938
%865 = OpSLessThanEqual %40 %1545 %255
OpLoopMerge %939 %938 None
OpBranchConditional %865 %866 %939
%866 = OpLabel
%869 = OpAccessChain %9 %47 %1545 %24
%870 = OpLoad %6 %869
%871 = OpSLessThanEqual %40 %30 %870
OpSelectionMerge %937 None
OpBranchConditional %871 %872 %916
%916 = OpLabel
%918 = OpAccessChain %9 %47 %1545 %30
%919 = OpLoad %6 %918
%920 = OpIEqual %40 %919 %28
OpSelectionMerge %936 None
OpBranchConditional %920 %921 %932
%932 = OpLabel
%935 = OpLoad %6 %918
OpBranch %938
%921 = OpLabel
OpStore %918 %255
%931 = OpAccessChain %8 %47 %255
OpStore %931 %1735
OpBranch %939
%936 = OpLabel
OpUnreachable
%872 = OpLabel
%874 = OpAccessChain %9 %47 %1545 %27
%875 = OpLoad %6 %874
%876 = OpIEqual %40 %875 %28
OpSelectionMerge %915 None
OpBranchConditional %876 %877 %911
%911 = OpLabel
%914 = OpLoad %6 %874
OpBranch %938
%877 = OpLabel
%878 = OpAccessChain %67 %65 %24 %66
%879 = OpLoad %61 %878
%880 = OpAccessChain %67 %65 %24 %70
%881 = OpLoad %61 %880
%882 = OpFOrdLessThan %40 %879 %881
OpSelectionMerge %888 None
OpBranchConditional %882 %883 %888
%883 = OpLabel
OpBranch %884
%884 = OpLabel
OpLoopMerge %887 %886 None
OpBranch %885
%885 = OpLabel
OpKill
%886 = OpLabel
OpBranch %884
%887 = OpLabel
OpUnreachable
%888 = OpLabel
OpStore %874 %255
%898 = OpAccessChain %8 %47 %255
OpStore %898 %1735
OpBranch %899
%899 = OpLabel
%904 = OpConvertFToS %6 %879
%905 = OpSLessThan %40 %24 %904
OpLoopMerge %908 %907 None
OpBranchConditional %905 %906 %908
%906 = OpLabel
OpBranch %908
%907 = OpLabel
OpBranch %899
%908 = OpLabel
%1546 = OpPhi %40 %1548 %899 %325 %906
OpSelectionMerge %910 None
OpBranchConditional %1546 %939 %910
%910 = OpLabel
OpBranch %915
%915 = OpLabel
OpBranch %937
%937 = OpLabel
OpBranch %938
%938 = OpLabel
%1697 = OpPhi %40 %1548 %911 %1548 %932 %1546 %937
%1694 = OpPhi %6 %914 %911 %935 %932 %1545 %937
OpBranch %861
%939 = OpLabel
%1549 = OpPhi %40 %1548 %861 %1546 %908 %325 %921
OpSelectionMerge %941 None
OpBranchConditional %1549 %942 %941
%941 = OpLabel
OpBranch %942
%942 = OpLabel
OpSelectionMerge %1044 None
OpSwitch %70 %962
%962 = OpLabel
OpBranch %963
%963 = OpLabel
%1559 = OpPhi %40 %322 %962 %1701 %1040
%1556 = OpPhi %6 %24 %962 %1698 %1040
%967 = OpSLessThanEqual %40 %1556 %235
OpLoopMerge %1041 %1040 None
OpBranchConditional %967 %968 %1041
%968 = OpLabel
%971 = OpAccessChain %9 %47 %1556 %24
%972 = OpLoad %6 %971
%973 = OpSLessThanEqual %40 %255 %972
OpSelectionMerge %1039 None
OpBranchConditional %973 %974 %1018
%1018 = OpLabel
%1020 = OpAccessChain %9 %47 %1556 %30
%1021 = OpLoad %6 %1020
%1022 = OpIEqual %40 %1021 %28
OpSelectionMerge %1038 None
OpBranchConditional %1022 %1023 %1034
%1034 = OpLabel
%1037 = OpLoad %6 %1020
OpBranch %1040
%1023 = OpLabel
OpStore %1020 %235
%1033 = OpAccessChain %8 %47 %235
OpStore %1033 %1736
OpBranch %1041
%1038 = OpLabel
OpUnreachable
%974 = OpLabel
%976 = OpAccessChain %9 %47 %1556 %27
%977 = OpLoad %6 %976
%978 = OpIEqual %40 %977 %28
OpSelectionMerge %1017 None
OpBranchConditional %978 %979 %1013
%1013 = OpLabel
%1016 = OpLoad %6 %976
OpBranch %1040
%979 = OpLabel
%980 = OpAccessChain %67 %65 %24 %66
%981 = OpLoad %61 %980
%982 = OpAccessChain %67 %65 %24 %70
%983 = OpLoad %61 %982
%984 = OpFOrdLessThan %40 %981 %983
OpSelectionMerge %990 None
OpBranchConditional %984 %985 %990
%985 = OpLabel
OpBranch %986
%986 = OpLabel
OpLoopMerge %989 %988 None
OpBranch %987
%987 = OpLabel
OpKill
%988 = OpLabel
OpBranch %986
%989 = OpLabel
OpUnreachable
%990 = OpLabel
OpStore %976 %235
%1000 = OpAccessChain %8 %47 %235
OpStore %1000 %1736
OpBranch %1001
%1001 = OpLabel
%1006 = OpConvertFToS %6 %981
%1007 = OpSLessThan %40 %24 %1006
OpLoopMerge %1010 %1009 None
OpBranchConditional %1007 %1008 %1010
%1008 = OpLabel
OpBranch %1010
%1009 = OpLabel
OpBranch %1001
%1010 = OpLabel
%1557 = OpPhi %40 %1559 %1001 %325 %1008
OpSelectionMerge %1012 None
OpBranchConditional %1557 %1041 %1012
%1012 = OpLabel
OpBranch %1017
%1017 = OpLabel
OpBranch %1039
%1039 = OpLabel
OpBranch %1040
%1040 = OpLabel
%1701 = OpPhi %40 %1559 %1013 %1559 %1034 %1557 %1039
%1698 = OpPhi %6 %1016 %1013 %1037 %1034 %1556 %1039
OpBranch %963
%1041 = OpLabel
%1560 = OpPhi %40 %1559 %963 %1557 %1010 %325 %1023
OpSelectionMerge %1043 None
OpBranchConditional %1560 %1044 %1043
%1043 = OpLabel
OpBranch %1044
%1044 = OpLabel
OpSelectionMerge %1146 None
OpSwitch %70 %1064
%1064 = OpLabel
OpBranch %1065
%1065 = OpLabel
%1570 = OpPhi %40 %322 %1064 %1705 %1142
%1567 = OpPhi %6 %24 %1064 %1702 %1142
%1069 = OpSLessThanEqual %40 %1567 %242
OpLoopMerge %1143 %1142 None
OpBranchConditional %1069 %1070 %1143
%1070 = OpLabel
%1073 = OpAccessChain %9 %47 %1567 %24
%1074 = OpLoad %6 %1073
%1075 = OpSLessThanEqual %40 %262 %1074
OpSelectionMerge %1141 None
OpBranchConditional %1075 %1076 %1120
%1120 = OpLabel
%1122 = OpAccessChain %9 %47 %1567 %30
%1123 = OpLoad %6 %1122
%1124 = OpIEqual %40 %1123 %28
OpSelectionMerge %1140 None
OpBranchConditional %1124 %1125 %1136
%1136 = OpLabel
%1139 = OpLoad %6 %1122
OpBranch %1142
%1125 = OpLabel
OpStore %1122 %242
%1135 = OpAccessChain %8 %47 %242
OpStore %1135 %1737
OpBranch %1143
%1140 = OpLabel
OpUnreachable
%1076 = OpLabel
%1078 = OpAccessChain %9 %47 %1567 %27
%1079 = OpLoad %6 %1078
%1080 = OpIEqual %40 %1079 %28
OpSelectionMerge %1119 None
OpBranchConditional %1080 %1081 %1115
%1115 = OpLabel
%1118 = OpLoad %6 %1078
OpBranch %1142
%1081 = OpLabel
%1082 = OpAccessChain %67 %65 %24 %66
%1083 = OpLoad %61 %1082
%1084 = OpAccessChain %67 %65 %24 %70
%1085 = OpLoad %61 %1084
%1086 = OpFOrdLessThan %40 %1083 %1085
OpSelectionMerge %1092 None
OpBranchConditional %1086 %1087 %1092
%1087 = OpLabel
OpBranch %1088
%1088 = OpLabel
OpLoopMerge %1091 %1090 None
OpBranch %1089
%1089 = OpLabel
OpKill
%1090 = OpLabel
OpBranch %1088
%1091 = OpLabel
OpUnreachable
%1092 = OpLabel
OpStore %1078 %242
%1102 = OpAccessChain %8 %47 %242
OpStore %1102 %1737
OpBranch %1103
%1103 = OpLabel
%1108 = OpConvertFToS %6 %1083
%1109 = OpSLessThan %40 %24 %1108
OpLoopMerge %1112 %1111 None
OpBranchConditional %1109 %1110 %1112
%1110 = OpLabel
OpBranch %1112
%1111 = OpLabel
OpBranch %1103
%1112 = OpLabel
%1568 = OpPhi %40 %1570 %1103 %325 %1110
OpSelectionMerge %1114 None
OpBranchConditional %1568 %1143 %1114
%1114 = OpLabel
OpBranch %1119
%1119 = OpLabel
OpBranch %1141
%1141 = OpLabel
OpBranch %1142
%1142 = OpLabel
%1705 = OpPhi %40 %1570 %1115 %1570 %1136 %1568 %1141
%1702 = OpPhi %6 %1118 %1115 %1139 %1136 %1567 %1141
OpBranch %1065
%1143 = OpLabel
%1571 = OpPhi %40 %1570 %1065 %1568 %1112 %325 %1125
OpSelectionMerge %1145 None
OpBranchConditional %1571 %1146 %1145
%1145 = OpLabel
OpBranch %1146
%1146 = OpLabel
OpSelectionMerge %1248 None
OpSwitch %70 %1166
%1166 = OpLabel
OpBranch %1167
%1167 = OpLabel
%1581 = OpPhi %40 %322 %1166 %1709 %1244
%1578 = OpPhi %6 %24 %1166 %1706 %1244
%1171 = OpSLessThanEqual %40 %1578 %179
OpLoopMerge %1245 %1244 None
OpBranchConditional %1171 %1172 %1245
%1172 = OpLabel
%1175 = OpAccessChain %9 %47 %1578 %24
%1176 = OpLoad %6 %1175
%1177 = OpSLessThanEqual %40 %269 %1176
OpSelectionMerge %1243 None
OpBranchConditional %1177 %1178 %1222
%1222 = OpLabel
%1224 = OpAccessChain %9 %47 %1578 %30
%1225 = OpLoad %6 %1224
%1226 = OpIEqual %40 %1225 %28
OpSelectionMerge %1242 None
OpBranchConditional %1226 %1227 %1238
%1238 = OpLabel
%1241 = OpLoad %6 %1224
OpBranch %1244
%1227 = OpLabel
OpStore %1224 %179
%1237 = OpAccessChain %8 %47 %179
OpStore %1237 %1738
OpBranch %1245
%1242 = OpLabel
OpUnreachable
%1178 = OpLabel
%1180 = OpAccessChain %9 %47 %1578 %27
%1181 = OpLoad %6 %1180
%1182 = OpIEqual %40 %1181 %28
OpSelectionMerge %1221 None
OpBranchConditional %1182 %1183 %1217
%1217 = OpLabel
%1220 = OpLoad %6 %1180
OpBranch %1244
%1183 = OpLabel
%1184 = OpAccessChain %67 %65 %24 %66
%1185 = OpLoad %61 %1184
%1186 = OpAccessChain %67 %65 %24 %70
%1187 = OpLoad %61 %1186
%1188 = OpFOrdLessThan %40 %1185 %1187
OpSelectionMerge %1194 None
OpBranchConditional %1188 %1189 %1194
%1189 = OpLabel
OpBranch %1190
%1190 = OpLabel
OpLoopMerge %1193 %1192 None
OpBranch %1191
%1191 = OpLabel
OpKill
%1192 = OpLabel
OpBranch %1190
%1193 = OpLabel
OpUnreachable
%1194 = OpLabel
OpStore %1180 %179
%1204 = OpAccessChain %8 %47 %179
OpStore %1204 %1738
OpBranch %1205
%1205 = OpLabel
%1210 = OpConvertFToS %6 %1185
%1211 = OpSLessThan %40 %24 %1210
OpLoopMerge %1214 %1213 None
OpBranchConditional %1211 %1212 %1214
%1212 = OpLabel
OpBranch %1214
%1213 = OpLabel
OpBranch %1205
%1214 = OpLabel
%1579 = OpPhi %40 %1581 %1205 %325 %1212
OpSelectionMerge %1216 None
OpBranchConditional %1579 %1245 %1216
%1216 = OpLabel
OpBranch %1221
%1221 = OpLabel
OpBranch %1243
%1243 = OpLabel
OpBranch %1244
%1244 = OpLabel
%1709 = OpPhi %40 %1581 %1217 %1581 %1238 %1579 %1243
%1706 = OpPhi %6 %1220 %1217 %1241 %1238 %1578 %1243
OpBranch %1167
%1245 = OpLabel
%1582 = OpPhi %40 %1581 %1167 %1579 %1214 %325 %1227
OpSelectionMerge %1247 None
OpBranchConditional %1582 %1248 %1247
%1247 = OpLabel
OpBranch %1248
%1248 = OpLabel
OpBranch %276
%276 = OpLabel
%1593 = OpPhi %6 %1620 %1248 %1590 %279
%1584 = OpPhi %6 %24 %1248 %1710 %279
%1583 = OpPhi %6 %24 %1248 %309 %279
%283 = OpSLessThan %40 %1583 %282
OpLoopMerge %278 %279 None
OpBranchConditional %283 %277 %278
%277 = OpLabel
OpSelectionMerge %1299 None
OpSwitch %70 %1267
%1267 = OpLabel
OpBranch %1268
%1268 = OpLabel
%1585 = OpPhi %6 %24 %1267 %1739 %1295
%1271 = OpINotEqual %40 %1585 %28
OpLoopMerge %1296 %1295 None
OpBranchConditional %1271 %1272 %1296
%1272 = OpLabel
%1274 = OpAccessChain %8 %47 %1585
%1275 = OpLoad %7 %1274
%1305 = OpCompositeExtract %6 %1275 0
%1306 = OpCompositeExtract %6 %1275 1
%1307 = OpCompositeExtract %6 %1275 2
%1279 = OpIEqual %40 %1305 %1583
OpSelectionMerge %1282 None
OpBranchConditional %1279 %1280 %1282
%1280 = OpLabel
OpBranch %1296
%1282 = OpLabel
%1286 = OpSGreaterThan %40 %1583 %1305
%1739 = OpSelect %6 %1286 %1307 %1306
OpBranch %1295
%1295 = OpLabel
OpBranch %1268
%1296 = OpLabel
%1591 = OpPhi %6 %1593 %1268 %1583 %1280
%1587 = OpPhi %40 %322 %1268 %325 %1280
OpSelectionMerge %1298 None
OpBranchConditional %1587 %1299 %1298
%1298 = OpLabel
OpBranch %1299
%1299 = OpLabel
%1590 = OpPhi %6 %1591 %1296 %28 %1298
OpSelectionMerge %291 None
OpSwitch %1583 %290 9 %289 5 %289 12 %289 15 %289 7 %289 8 %289 2 %289 6 %289 17 %289 13 %289
%289 = OpLabel
%294 = OpIEqual %40 %1590 %1583
OpSelectionMerge %296 None
OpBranchConditional %294 %295 %296
%295 = OpLabel
%298 = OpIAdd %6 %1584 %27
OpBranch %296
%296 = OpLabel
%1712 = OpPhi %6 %1584 %289 %298 %295
OpBranch %291
%290 = OpLabel
%301 = OpIEqual %40 %1590 %28
OpSelectionMerge %303 None
OpBranchConditional %301 %302 %303
%302 = OpLabel
%305 = OpIAdd %6 %1584 %27
OpBranch %303
%303 = OpLabel
%1711 = OpPhi %6 %1584 %290 %305 %302
OpBranch %291
%291 = OpLabel
%1710 = OpPhi %6 %1711 %303 %1712 %296
OpBranch %279
%279 = OpLabel
%309 = OpIAdd %6 %1583 %27
OpBranch %276
%278 = OpLabel
%311 = OpIEqual %40 %1584 %282
OpSelectionMerge %313 None
OpBranchConditional %311 %312 %318
%318 = OpLabel
OpStore %315 %319
OpBranch %313
%312 = OpLabel
OpStore %315 %317
OpBranch %313
%313 = OpLabel
OpReturn
OpFunctionEnd
END
# uniforms for variant
# injectionSwitch
BUFFER variant_injectionSwitch DATA_TYPE vec2<float> DATA
0.0 1.0
END
BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
PIPELINE graphics variant_pipeline
ATTACH variant_vertex_shader
ATTACH variant_fragment_shader
FRAMEBUFFER_SIZE 256 256
BIND BUFFER variant_framebuffer AS color LOCATION 0
BIND BUFFER variant_injectionSwitch AS uniform DESCRIPTOR_SET 0 BINDING 0
END
CLEAR_COLOR variant_pipeline 0 0 0 255
CLEAR variant_pipeline
RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005