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