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