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