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 instructions propagated to predecessors 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: 653 31; Schema: 0 32 OpCapability Shader 33 %1 = OpExtInstImport "GLSL.std.450" 34 OpMemoryModel Logical GLSL450 35 OpEntryPoint Fragment %4 "main" %12 %435 36 OpExecutionMode %4 OriginUpperLeft 37 OpSource ESSL 320 38 OpName %4 "main" 39 OpName %12 "gl_FragCoord" 40 OpName %15 "buf0" 41 OpMemberName %15 0 "resolution" 42 OpName %17 "" 43 OpName %55 "map" 44 OpName %435 "_GLF_color" 45 OpDecorate %12 BuiltIn FragCoord 46 OpMemberDecorate %15 0 Offset 0 47 OpDecorate %15 Block 48 OpDecorate %17 DescriptorSet 0 49 OpDecorate %17 Binding 0 50 OpDecorate %435 Location 0 51 %2 = OpTypeVoid 52 %3 = OpTypeFunction %2 53 %6 = OpTypeFloat 32 54 %7 = OpTypeVector %6 2 55 %10 = OpTypeVector %6 4 56 %11 = OpTypePointer Input %10 57 %12 = OpVariable %11 Input 58 %15 = OpTypeStruct %7 59 %16 = OpTypePointer Uniform %15 60 %17 = OpVariable %16 Uniform 61 %18 = OpTypeInt 32 1 62 %19 = OpConstant %18 0 63 %20 = OpTypePointer Uniform %7 64 %24 = OpTypeVector %18 2 65 %27 = OpTypeInt 32 0 66 %28 = OpConstant %27 0 67 %32 = OpConstant %6 16 68 %41 = OpTypePointer Function %18 69 %49 = OpConstant %18 256 70 %50 = OpTypeBool 71 %52 = OpConstant %27 256 72 %53 = OpTypeArray %18 %52 73 %60 = OpConstant %18 1 74 %63 = OpConstantComposite %24 %19 %19 75 %66 = OpConstantTrue %50 76 %82 = OpConstant %18 2 77 %86 = OpConstant %18 16 78 %119 = OpConstant %18 14 79 %162 = OpConstantFalse %50 80 %169 = OpConstant %18 8 81 %434 = OpTypePointer Output %10 82 %435 = OpVariable %434 Output 83 %436 = OpConstant %6 1 84 %437 = OpConstantComposite %10 %436 %436 %436 %436 85 %440 = OpConstant %6 0 86 %441 = OpConstantComposite %10 %440 %440 %440 %436 87 %447 = OpTypePointer Function %53 88 %648 = OpConstant %18 32 89 %649 = OpUndef %24 90 %4 = OpFunction %2 None %3 91 %5 = OpLabel 92 %55 = OpVariable %447 Function 93 OpSelectionMerge %442 None 94 OpSwitch %28 %443 95 %443 = OpLabel 96 %13 = OpLoad %10 %12 97 %14 = OpVectorShuffle %7 %13 %13 0 1 98 %21 = OpAccessChain %20 %17 %19 99 %22 = OpLoad %7 %21 100 %23 = OpFDiv %7 %14 %22 101 %31 = OpCompositeExtract %6 %23 0 102 %33 = OpFMul %6 %31 %32 103 %34 = OpConvertFToS %18 %33 104 %37 = OpCompositeExtract %6 %23 1 105 %38 = OpFMul %6 %37 %32 106 %39 = OpConvertFToS %18 %38 107 OpBranch %43 108 %43 = OpLabel 109 %518 = OpPhi %18 %19 %443 %61 %44 110 %51 = OpSLessThan %50 %518 %49 111 OpLoopMerge %45 %44 None 112 OpBranchConditional %51 %44 %45 113 %44 = OpLabel 114 %58 = OpAccessChain %41 %55 %518 115 OpStore %58 %19 116 %61 = OpIAdd %18 %518 %60 117 OpBranch %43 118 %45 = OpLabel 119 OpBranch %68 120 %68 = OpLabel 121 %591 = OpPhi %50 %66 %45 %569 %71 122 %520 = OpPhi %24 %63 %45 %637 %71 123 %519 = OpPhi %18 %19 %45 %621 %71 124 OpLoopMerge %70 %71 None 125 OpBranch %69 126 %69 = OpLabel 127 %73 = OpIAdd %18 %519 %60 128 %76 = OpCompositeExtract %18 %520 0 129 %77 = OpSGreaterThan %50 %76 %19 130 OpSelectionMerge %79 None 131 OpBranchConditional %77 %78 %79 132 %78 = OpLabel 133 %83 = OpISub %18 %76 %82 134 %85 = OpCompositeExtract %18 %520 1 135 %87 = OpIMul %18 %85 %86 136 %88 = OpIAdd %18 %83 %87 137 %89 = OpAccessChain %41 %55 %88 138 %90 = OpLoad %18 %89 139 %91 = OpIEqual %50 %90 %19 140 OpBranch %79 141 %79 = OpLabel 142 %92 = OpPhi %50 %77 %69 %91 %78 143 %650 = OpSelect %18 %92 %60 %19 144 %98 = OpCompositeExtract %18 %520 1 145 %99 = OpSGreaterThan %50 %98 %19 146 OpSelectionMerge %101 None 147 OpBranchConditional %99 %100 %101 148 %100 = OpLabel 149 %106 = OpISub %18 %98 %82 150 %107 = OpIMul %18 %106 %86 151 %108 = OpIAdd %18 %76 %107 152 %109 = OpAccessChain %41 %55 %108 153 %110 = OpLoad %18 %109 154 %111 = OpIEqual %50 %110 %19 155 OpBranch %101 156 %101 = OpLabel 157 %112 = OpPhi %50 %99 %79 %111 %100 158 OpSelectionMerge %114 None 159 OpBranchConditional %112 %113 %114 160 %113 = OpLabel 161 %116 = OpIAdd %18 %650 %60 162 OpBranch %114 163 %114 = OpLabel 164 %529 = OpPhi %18 %650 %101 %116 %113 165 %120 = OpSLessThan %50 %76 %119 166 OpSelectionMerge %122 None 167 OpBranchConditional %120 %121 %122 168 %121 = OpLabel 169 %125 = OpIAdd %18 %76 %82 170 %128 = OpIMul %18 %98 %86 171 %129 = OpIAdd %18 %125 %128 172 %130 = OpAccessChain %41 %55 %129 173 %131 = OpLoad %18 %130 174 %132 = OpIEqual %50 %131 %19 175 OpBranch %122 176 %122 = OpLabel 177 %133 = OpPhi %50 %120 %114 %132 %121 178 OpSelectionMerge %135 None 179 OpBranchConditional %133 %134 %135 180 %134 = OpLabel 181 %137 = OpIAdd %18 %529 %60 182 OpBranch %135 183 %135 = OpLabel 184 %533 = OpPhi %18 %529 %122 %137 %134 185 %140 = OpSLessThan %50 %98 %119 186 OpSelectionMerge %142 None 187 OpBranchConditional %140 %141 %142 188 %141 = OpLabel 189 %147 = OpIAdd %18 %98 %82 190 %148 = OpIMul %18 %147 %86 191 %149 = OpIAdd %18 %76 %148 192 %150 = OpAccessChain %41 %55 %149 193 %151 = OpLoad %18 %150 194 %152 = OpIEqual %50 %151 %19 195 OpBranch %142 196 %142 = OpLabel 197 %153 = OpPhi %50 %140 %135 %152 %141 198 OpSelectionMerge %155 None 199 OpBranchConditional %153 %154 %155 200 %154 = OpLabel 201 %157 = OpIAdd %18 %533 %60 202 OpBranch %155 203 %155 = OpLabel 204 %534 = OpPhi %18 %533 %142 %157 %154 205 %159 = OpIEqual %50 %534 %19 206 OpSelectionMerge %161 None 207 OpBranchConditional %159 %160 %207 208 %160 = OpLabel 209 OpBranch %163 210 %163 = OpLabel 211 %570 = OpPhi %50 %162 %160 %639 %166 212 %568 = OpPhi %24 %520 %160 %619 %166 213 %567 = OpPhi %18 %19 %160 %199 %166 214 %170 = OpSLessThan %50 %567 %169 215 OpLoopMerge %165 %166 None 216 OpBranchConditional %170 %164 %165 217 %164 = OpLabel 218 OpBranch %172 219 %172 = OpLabel 220 %619 = OpPhi %24 %568 %164 %644 %175 221 %617 = OpPhi %18 %19 %164 %197 %175 222 %639 = OpPhi %50 %570 %164 %651 %175 223 %178 = OpSLessThan %50 %617 %169 224 OpLoopMerge %174 %175 None 225 OpBranchConditional %178 %173 %174 226 %173 = OpLabel 227 %180 = OpIMul %18 %617 %82 228 %182 = OpIMul %18 %567 %82 229 %183 = OpIMul %18 %567 %648 230 %184 = OpIAdd %18 %180 %183 231 %185 = OpAccessChain %41 %55 %184 232 %186 = OpLoad %18 %185 233 %187 = OpIEqual %50 %186 %19 234 OpSelectionMerge %189 None 235 OpBranchConditional %187 %188 %189 236 %188 = OpLabel 237 %463 = OpCompositeInsert %24 %180 %649 0 238 %465 = OpCompositeInsert %24 %182 %463 1 239 OpBranch %189 240 %189 = OpLabel 241 %644 = OpPhi %24 %619 %173 %465 %188 242 %651 = OpSelect %50 %187 %66 %639 243 OpBranch %175 244 %175 = OpLabel 245 %197 = OpIAdd %18 %617 %60 246 OpBranch %172 247 %174 = OpLabel 248 OpBranch %166 249 %166 = OpLabel 250 %199 = OpIAdd %18 %567 %60 251 OpBranch %163 252 %165 = OpLabel 253 %201 = OpCompositeExtract %18 %568 0 254 %203 = OpCompositeExtract %18 %568 1 255 %204 = OpIMul %18 %203 %86 256 %205 = OpIAdd %18 %201 %204 257 %206 = OpAccessChain %41 %55 %205 258 OpStore %206 %60 259 OpBranch %161 260 %207 = OpLabel 261 %211 = OpSMod %18 %73 %534 262 %214 = OpIAdd %18 %73 %534 263 %216 = OpSGreaterThanEqual %50 %211 %19 264 %652 = OpSelect %50 %216 %77 %216 265 OpSelectionMerge %224 None 266 OpBranchConditional %652 %223 %224 267 %223 = OpLabel 268 %227 = OpISub %18 %76 %82 269 %230 = OpIMul %18 %98 %86 270 %231 = OpIAdd %18 %227 %230 271 %232 = OpAccessChain %41 %55 %231 272 %233 = OpLoad %18 %232 273 %234 = OpIEqual %50 %233 %19 274 OpBranch %224 275 %224 = OpLabel 276 %235 = OpPhi %50 %652 %207 %234 %223 277 OpSelectionMerge %237 None 278 OpBranchConditional %235 %236 %237 279 %236 = OpLabel 280 %239 = OpISub %18 %211 %60 281 %244 = OpIMul %18 %98 %86 282 %245 = OpIAdd %18 %76 %244 283 %246 = OpAccessChain %41 %55 %245 284 OpStore %246 %60 285 %249 = OpISub %18 %76 %60 286 %253 = OpIAdd %18 %249 %244 287 %254 = OpAccessChain %41 %55 %253 288 OpStore %254 %60 289 %257 = OpISub %18 %76 %82 290 %261 = OpIAdd %18 %257 %244 291 %262 = OpAccessChain %41 %55 %261 292 OpStore %262 %60 293 %479 = OpCompositeInsert %24 %257 %520 0 294 OpBranch %237 295 %237 = OpLabel 296 %550 = OpPhi %24 %520 %224 %479 %236 297 %549 = OpPhi %18 %211 %224 %239 %236 298 %268 = OpSGreaterThanEqual %50 %549 %19 299 OpSelectionMerge %270 None 300 OpBranchConditional %268 %269 %270 301 %269 = OpLabel 302 %272 = OpCompositeExtract %18 %550 1 303 %273 = OpSGreaterThan %50 %272 %19 304 OpBranch %270 305 %270 = OpLabel 306 %274 = OpPhi %50 %268 %237 %273 %269 307 OpSelectionMerge %276 None 308 OpBranchConditional %274 %275 %276 309 %275 = OpLabel 310 %278 = OpCompositeExtract %18 %550 0 311 %280 = OpCompositeExtract %18 %550 1 312 %281 = OpISub %18 %280 %82 313 %282 = OpIMul %18 %281 %86 314 %283 = OpIAdd %18 %278 %282 315 %284 = OpAccessChain %41 %55 %283 316 %285 = OpLoad %18 %284 317 %286 = OpIEqual %50 %285 %19 318 OpBranch %276 319 %276 = OpLabel 320 %287 = OpPhi %50 %274 %270 %286 %275 321 OpSelectionMerge %289 None 322 OpBranchConditional %287 %288 %289 323 %288 = OpLabel 324 %291 = OpISub %18 %549 %60 325 %293 = OpCompositeExtract %18 %550 0 326 %295 = OpCompositeExtract %18 %550 1 327 %296 = OpIMul %18 %295 %86 328 %297 = OpIAdd %18 %293 %296 329 %298 = OpAccessChain %41 %55 %297 330 OpStore %298 %60 331 %303 = OpISub %18 %295 %60 332 %304 = OpIMul %18 %303 %86 333 %305 = OpIAdd %18 %293 %304 334 %306 = OpAccessChain %41 %55 %305 335 OpStore %306 %60 336 %311 = OpISub %18 %295 %82 337 %312 = OpIMul %18 %311 %86 338 %313 = OpIAdd %18 %293 %312 339 %314 = OpAccessChain %41 %55 %313 340 OpStore %314 %60 341 %491 = OpCompositeInsert %24 %311 %550 1 342 OpBranch %289 343 %289 = OpLabel 344 %556 = OpPhi %24 %550 %276 %491 %288 345 %555 = OpPhi %18 %549 %276 %291 %288 346 %320 = OpSGreaterThanEqual %50 %555 %19 347 OpSelectionMerge %322 None 348 OpBranchConditional %320 %321 %322 349 %321 = OpLabel 350 %324 = OpCompositeExtract %18 %556 0 351 %325 = OpSLessThan %50 %324 %119 352 OpBranch %322 353 %322 = OpLabel 354 %326 = OpPhi %50 %320 %289 %325 %321 355 OpSelectionMerge %328 None 356 OpBranchConditional %326 %327 %328 357 %327 = OpLabel 358 %330 = OpCompositeExtract %18 %556 0 359 %331 = OpIAdd %18 %330 %82 360 %333 = OpCompositeExtract %18 %556 1 361 %334 = OpIMul %18 %333 %86 362 %335 = OpIAdd %18 %331 %334 363 %336 = OpAccessChain %41 %55 %335 364 %337 = OpLoad %18 %336 365 %338 = OpIEqual %50 %337 %19 366 OpBranch %328 367 %328 = OpLabel 368 %339 = OpPhi %50 %326 %322 %338 %327 369 OpSelectionMerge %341 None 370 OpBranchConditional %339 %340 %341 371 %340 = OpLabel 372 %343 = OpISub %18 %555 %60 373 %345 = OpCompositeExtract %18 %556 0 374 %347 = OpCompositeExtract %18 %556 1 375 %348 = OpIMul %18 %347 %86 376 %349 = OpIAdd %18 %345 %348 377 %350 = OpAccessChain %41 %55 %349 378 OpStore %350 %60 379 %353 = OpIAdd %18 %345 %60 380 %357 = OpIAdd %18 %353 %348 381 %358 = OpAccessChain %41 %55 %357 382 OpStore %358 %60 383 %361 = OpIAdd %18 %345 %82 384 %365 = OpIAdd %18 %361 %348 385 %366 = OpAccessChain %41 %55 %365 386 OpStore %366 %60 387 %503 = OpCompositeInsert %24 %361 %556 0 388 OpBranch %341 389 %341 = OpLabel 390 %562 = OpPhi %24 %556 %328 %503 %340 391 %561 = OpPhi %18 %555 %328 %343 %340 392 %372 = OpSGreaterThanEqual %50 %561 %19 393 OpSelectionMerge %374 None 394 OpBranchConditional %372 %373 %374 395 %373 = OpLabel 396 %376 = OpCompositeExtract %18 %562 1 397 %377 = OpSLessThan %50 %376 %119 398 OpBranch %374 399 %374 = OpLabel 400 %378 = OpPhi %50 %372 %341 %377 %373 401 OpSelectionMerge %380 None 402 OpBranchConditional %378 %379 %380 403 %379 = OpLabel 404 %382 = OpCompositeExtract %18 %562 0 405 %384 = OpCompositeExtract %18 %562 1 406 %385 = OpIAdd %18 %384 %82 407 %386 = OpIMul %18 %385 %86 408 %387 = OpIAdd %18 %382 %386 409 %388 = OpAccessChain %41 %55 %387 410 %389 = OpLoad %18 %388 411 %390 = OpIEqual %50 %389 %19 412 OpBranch %380 413 %380 = OpLabel 414 %391 = OpPhi %50 %378 %374 %390 %379 415 OpSelectionMerge %393 None 416 OpBranchConditional %391 %392 %393 417 %392 = OpLabel 418 %397 = OpCompositeExtract %18 %562 0 419 %399 = OpCompositeExtract %18 %562 1 420 %400 = OpIMul %18 %399 %86 421 %401 = OpIAdd %18 %397 %400 422 %402 = OpAccessChain %41 %55 %401 423 OpStore %402 %60 424 %407 = OpIAdd %18 %399 %60 425 %408 = OpIMul %18 %407 %86 426 %409 = OpIAdd %18 %397 %408 427 %410 = OpAccessChain %41 %55 %409 428 OpStore %410 %60 429 %415 = OpIAdd %18 %399 %82 430 %416 = OpIMul %18 %415 %86 431 %417 = OpIAdd %18 %397 %416 432 %418 = OpAccessChain %41 %55 %417 433 OpStore %418 %60 434 %515 = OpCompositeInsert %24 %415 %562 1 435 OpBranch %393 436 %393 = OpLabel 437 %638 = OpPhi %24 %562 %380 %515 %392 438 OpBranch %161 439 %161 = OpLabel 440 %637 = OpPhi %24 %568 %165 %638 %393 441 %621 = OpPhi %18 %73 %165 %214 %393 442 %569 = OpPhi %50 %570 %165 %591 %393 443 %425 = OpIMul %18 %39 %86 444 %428 = OpIAdd %18 %425 %34 445 %429 = OpAccessChain %41 %55 %428 446 %430 = OpLoad %18 %429 447 %431 = OpIEqual %50 %430 %60 448 OpSelectionMerge %433 None 449 OpBranchConditional %431 %432 %433 450 %432 = OpLabel 451 OpStore %435 %437 452 OpBranch %70 453 %433 = OpLabel 454 OpBranch %71 455 %71 = OpLabel 456 OpBranchConditional %569 %68 %70 457 %70 = OpLabel 458 %592 = OpPhi %50 %66 %432 %162 %71 459 OpSelectionMerge %445 None 460 OpBranchConditional %592 %442 %445 461 %445 = OpLabel 462 OpStore %435 %441 463 OpBranch %442 464 %442 = OpLabel 465 OpReturn 466 OpFunctionEnd 467END 468 469# uniforms for reference 470 471# resolution 472BUFFER reference_resolution DATA_TYPE vec2<float> STD140 DATA 473 32.0 32.0 474END 475 476BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM 477 478PIPELINE graphics reference_pipeline 479 ATTACH reference_vertex_shader 480 ATTACH reference_fragment_shader 481 FRAMEBUFFER_SIZE 32 32 482 BIND BUFFER reference_framebuffer AS color LOCATION 0 483 BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 484END 485CLEAR_COLOR reference_pipeline 0 0 0 255 486 487CLEAR reference_pipeline 488RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 32 32 489 490 491SHADER vertex variant_vertex_shader PASSTHROUGH 492 493SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 494; SPIR-V 495; Version: 1.0 496; Generator: Khronos Glslang Reference Front End; 7 497; Bound: 865 498; Schema: 0 499 OpCapability Shader 500 %1 = OpExtInstImport "GLSL.std.450" 501 OpMemoryModel Logical GLSL450 502 OpEntryPoint Fragment %4 "main" %12 %435 503 OpExecutionMode %4 OriginUpperLeft 504 OpSource ESSL 320 505 OpName %4 "main" 506 OpName %12 "gl_FragCoord" 507 OpName %15 "buf0" 508 OpMemberName %15 0 "resolution" 509 OpName %17 "" 510 OpName %55 "map" 511 OpName %435 "_GLF_color" 512 OpDecorate %12 BuiltIn FragCoord 513 OpMemberDecorate %15 0 Offset 0 514 OpDecorate %15 Block 515 OpDecorate %17 DescriptorSet 0 516 OpDecorate %17 Binding 0 517 OpDecorate %435 Location 0 518 %2 = OpTypeVoid 519 %3 = OpTypeFunction %2 520 %6 = OpTypeFloat 32 521 %7 = OpTypeVector %6 2 522 %10 = OpTypeVector %6 4 523 %11 = OpTypePointer Input %10 524 %12 = OpVariable %11 Input 525 %15 = OpTypeStruct %7 526 %16 = OpTypePointer Uniform %15 527 %17 = OpVariable %16 Uniform 528 %18 = OpTypeInt 32 1 529 %19 = OpConstant %18 0 530 %20 = OpTypePointer Uniform %7 531 %24 = OpTypeVector %18 2 532 %27 = OpTypeInt 32 0 533 %28 = OpConstant %27 0 534 %32 = OpConstant %6 16 535 %41 = OpTypePointer Function %18 536 %49 = OpConstant %18 256 537 %50 = OpTypeBool 538 %52 = OpConstant %27 256 539 %53 = OpTypeArray %18 %52 540 %60 = OpConstant %18 1 541 %63 = OpConstantComposite %24 %19 %19 542 %66 = OpConstantTrue %50 543 %82 = OpConstant %18 2 544 %86 = OpConstant %18 16 545 %119 = OpConstant %18 14 546 %162 = OpConstantFalse %50 547 %169 = OpConstant %18 8 548 %434 = OpTypePointer Output %10 549 %435 = OpVariable %434 Output 550 %436 = OpConstant %6 1 551 %437 = OpConstantComposite %10 %436 %436 %436 %436 552 %440 = OpConstant %6 0 553 %441 = OpConstantComposite %10 %440 %440 %440 %436 554 %447 = OpTypePointer Function %53 555 %648 = OpConstant %18 32 556 %649 = OpUndef %24 557 %4 = OpFunction %2 None %3 558 %5 = OpLabel 559 %55 = OpVariable %447 Function 560 OpSelectionMerge %442 None 561 OpSwitch %28 %443 562 %443 = OpLabel 563 %13 = OpLoad %10 %12 564 %14 = OpVectorShuffle %7 %13 %13 0 1 565 %21 = OpAccessChain %20 %17 %19 566 %22 = OpLoad %7 %21 567 %23 = OpFDiv %7 %14 %22 568 %31 = OpCompositeExtract %6 %23 0 569 %33 = OpFMul %6 %31 %32 570 %34 = OpConvertFToS %18 %33 571 %37 = OpCompositeExtract %6 %23 1 572 %38 = OpFMul %6 %37 %32 573 %39 = OpConvertFToS %18 %38 574 %753 = OpSLessThan %50 %19 %49 575 %827 = OpIAdd %18 %19 %60 576 %863 = OpSLessThan %50 %827 %49 577 OpBranch %43 578 %43 = OpLabel 579 %829 = OpPhi %50 %863 %443 %864 %44 580 %755 = OpPhi %18 %827 %443 %828 %44 581 %51 = OpPhi %50 %753 %443 %754 %44 582 %518 = OpPhi %18 %19 %443 %61 %44 583 OpLoopMerge %45 %44 None 584 OpBranchConditional %51 %44 %45 585 %44 = OpLabel 586 %754 = OpPhi %50 %829 %43 587 %61 = OpPhi %18 %755 %43 588 %58 = OpAccessChain %41 %55 %518 589 OpStore %58 %19 590 %828 = OpIAdd %18 %61 %60 591 %864 = OpSLessThan %50 %828 %49 592 OpBranch %43 593 %45 = OpLabel 594 OpBranch %68 595 %68 = OpLabel 596 %591 = OpPhi %50 %66 %45 %569 %71 597 %520 = OpPhi %24 %63 %45 %637 %71 598 %519 = OpPhi %18 %19 %45 %621 %71 599 OpLoopMerge %70 %71 None 600 OpBranch %69 601 %69 = OpLabel 602 %73 = OpIAdd %18 %519 %60 603 %76 = OpCompositeExtract %18 %520 0 604 %77 = OpSGreaterThan %50 %76 %19 605 OpSelectionMerge %79 None 606 OpBranchConditional %77 %78 %79 607 %78 = OpLabel 608 %83 = OpISub %18 %76 %82 609 %85 = OpCompositeExtract %18 %520 1 610 %87 = OpIMul %18 %85 %86 611 %88 = OpIAdd %18 %83 %87 612 %89 = OpAccessChain %41 %55 %88 613 %90 = OpLoad %18 %89 614 %91 = OpIEqual %50 %90 %19 615 OpBranch %79 616 %79 = OpLabel 617 %92 = OpPhi %50 %77 %69 %91 %78 618 %650 = OpSelect %18 %92 %60 %19 619 %98 = OpCompositeExtract %18 %520 1 620 %99 = OpSGreaterThan %50 %98 %19 621 OpSelectionMerge %101 None 622 OpBranchConditional %99 %100 %101 623 %100 = OpLabel 624 %106 = OpISub %18 %98 %82 625 %107 = OpIMul %18 %106 %86 626 %108 = OpIAdd %18 %76 %107 627 %109 = OpAccessChain %41 %55 %108 628 %110 = OpLoad %18 %109 629 %111 = OpIEqual %50 %110 %19 630 OpBranch %101 631 %101 = OpLabel 632 %112 = OpPhi %50 %99 %79 %111 %100 633 OpSelectionMerge %114 None 634 OpBranchConditional %112 %113 %114 635 %113 = OpLabel 636 %116 = OpIAdd %18 %650 %60 637 OpBranch %114 638 %114 = OpLabel 639 %529 = OpPhi %18 %650 %101 %116 %113 640 %120 = OpSLessThan %50 %76 %119 641 OpSelectionMerge %122 None 642 OpBranchConditional %120 %121 %122 643 %121 = OpLabel 644 %125 = OpIAdd %18 %76 %82 645 %128 = OpIMul %18 %98 %86 646 %129 = OpIAdd %18 %125 %128 647 %130 = OpAccessChain %41 %55 %129 648 %131 = OpLoad %18 %130 649 %132 = OpIEqual %50 %131 %19 650 OpBranch %122 651 %122 = OpLabel 652 %133 = OpPhi %50 %120 %114 %132 %121 653 OpSelectionMerge %135 None 654 OpBranchConditional %133 %134 %135 655 %134 = OpLabel 656 %137 = OpIAdd %18 %529 %60 657 OpBranch %135 658 %135 = OpLabel 659 %533 = OpPhi %18 %529 %122 %137 %134 660 %140 = OpSLessThan %50 %98 %119 661 OpSelectionMerge %142 None 662 OpBranchConditional %140 %141 %142 663 %141 = OpLabel 664 %147 = OpIAdd %18 %98 %82 665 %148 = OpIMul %18 %147 %86 666 %149 = OpIAdd %18 %76 %148 667 %150 = OpAccessChain %41 %55 %149 668 %151 = OpLoad %18 %150 669 %152 = OpIEqual %50 %151 %19 670 OpBranch %142 671 %142 = OpLabel 672 %153 = OpPhi %50 %140 %135 %152 %141 673 OpSelectionMerge %155 None 674 OpBranchConditional %153 %154 %155 675 %154 = OpLabel 676 %157 = OpIAdd %18 %533 %60 677 OpBranch %155 678 %155 = OpLabel 679 %534 = OpPhi %18 %533 %142 %157 %154 680 %159 = OpIEqual %50 %534 %19 681 OpSelectionMerge %161 None 682 OpBranchConditional %159 %160 %207 683 %160 = OpLabel 684 OpBranch %163 685 %163 = OpLabel 686 %570 = OpPhi %50 %162 %160 %639 %166 687 %568 = OpPhi %24 %520 %160 %619 %166 688 %567 = OpPhi %18 %19 %160 %199 %166 689 %170 = OpSLessThan %50 %567 %169 690 OpLoopMerge %165 %166 None 691 OpBranchConditional %170 %164 %165 692 %164 = OpLabel 693 OpBranch %172 694 %172 = OpLabel 695 %619 = OpPhi %24 %568 %164 %644 %175 696 %617 = OpPhi %18 %19 %164 %197 %175 697 %639 = OpPhi %50 %570 %164 %651 %175 698 %178 = OpSLessThan %50 %617 %169 699 OpLoopMerge %174 %175 None 700 OpBranchConditional %178 %173 %174 701 %173 = OpLabel 702 %180 = OpIMul %18 %617 %82 703 %182 = OpIMul %18 %567 %82 704 %183 = OpIMul %18 %567 %648 705 %184 = OpIAdd %18 %180 %183 706 %185 = OpAccessChain %41 %55 %184 707 %186 = OpLoad %18 %185 708 %187 = OpIEqual %50 %186 %19 709 OpSelectionMerge %189 None 710 OpBranchConditional %187 %188 %189 711 %188 = OpLabel 712 %463 = OpCompositeInsert %24 %180 %649 0 713 %465 = OpCompositeInsert %24 %182 %463 1 714 OpBranch %189 715 %189 = OpLabel 716 %644 = OpPhi %24 %619 %173 %465 %188 717 %651 = OpSelect %50 %187 %66 %639 718 OpBranch %175 719 %175 = OpLabel 720 %197 = OpIAdd %18 %617 %60 721 OpBranch %172 722 %174 = OpLabel 723 OpBranch %166 724 %166 = OpLabel 725 %199 = OpIAdd %18 %567 %60 726 OpBranch %163 727 %165 = OpLabel 728 %201 = OpCompositeExtract %18 %568 0 729 %203 = OpCompositeExtract %18 %568 1 730 %204 = OpIMul %18 %203 %86 731 %205 = OpIAdd %18 %201 %204 732 %206 = OpAccessChain %41 %55 %205 733 OpStore %206 %60 734 OpBranch %161 735 %207 = OpLabel 736 %211 = OpSMod %18 %73 %534 737 %214 = OpIAdd %18 %73 %534 738 %216 = OpSGreaterThanEqual %50 %211 %19 739 %652 = OpSelect %50 %216 %77 %216 740 OpSelectionMerge %224 None 741 OpBranchConditional %652 %223 %224 742 %223 = OpLabel 743 %227 = OpISub %18 %76 %82 744 %230 = OpIMul %18 %98 %86 745 %231 = OpIAdd %18 %227 %230 746 %232 = OpAccessChain %41 %55 %231 747 %233 = OpLoad %18 %232 748 %234 = OpIEqual %50 %233 %19 749 OpBranch %224 750 %224 = OpLabel 751 %235 = OpPhi %50 %652 %207 %234 %223 752 OpSelectionMerge %237 None 753 OpBranchConditional %235 %236 %237 754 %236 = OpLabel 755 %239 = OpISub %18 %211 %60 756 %244 = OpIMul %18 %98 %86 757 %245 = OpIAdd %18 %76 %244 758 %246 = OpAccessChain %41 %55 %245 759 OpStore %246 %60 760 %249 = OpISub %18 %76 %60 761 %253 = OpIAdd %18 %249 %244 762 %254 = OpAccessChain %41 %55 %253 763 OpStore %254 %60 764 %257 = OpISub %18 %76 %82 765 %261 = OpIAdd %18 %257 %244 766 %262 = OpAccessChain %41 %55 %261 767 OpStore %262 %60 768 %479 = OpCompositeInsert %24 %257 %520 0 769 OpBranch %237 770 %237 = OpLabel 771 %550 = OpPhi %24 %520 %224 %479 %236 772 %549 = OpPhi %18 %211 %224 %239 %236 773 %268 = OpSGreaterThanEqual %50 %549 %19 774 OpSelectionMerge %270 None 775 OpBranchConditional %268 %269 %270 776 %269 = OpLabel 777 %272 = OpCompositeExtract %18 %550 1 778 %273 = OpSGreaterThan %50 %272 %19 779 OpBranch %270 780 %270 = OpLabel 781 %274 = OpPhi %50 %268 %237 %273 %269 782 OpSelectionMerge %276 None 783 OpBranchConditional %274 %275 %276 784 %275 = OpLabel 785 %278 = OpCompositeExtract %18 %550 0 786 %280 = OpCompositeExtract %18 %550 1 787 %281 = OpISub %18 %280 %82 788 %282 = OpIMul %18 %281 %86 789 %283 = OpIAdd %18 %278 %282 790 %284 = OpAccessChain %41 %55 %283 791 %285 = OpLoad %18 %284 792 %286 = OpIEqual %50 %285 %19 793 OpBranch %276 794 %276 = OpLabel 795 %287 = OpPhi %50 %274 %270 %286 %275 796 OpSelectionMerge %289 None 797 OpBranchConditional %287 %288 %289 798 %288 = OpLabel 799 %291 = OpISub %18 %549 %60 800 %293 = OpCompositeExtract %18 %550 0 801 %295 = OpCompositeExtract %18 %550 1 802 %296 = OpIMul %18 %295 %86 803 %297 = OpIAdd %18 %293 %296 804 %298 = OpAccessChain %41 %55 %297 805 OpStore %298 %60 806 %303 = OpISub %18 %295 %60 807 %304 = OpIMul %18 %303 %86 808 %305 = OpIAdd %18 %293 %304 809 %306 = OpAccessChain %41 %55 %305 810 OpStore %306 %60 811 %311 = OpISub %18 %295 %82 812 %312 = OpIMul %18 %311 %86 813 %313 = OpIAdd %18 %293 %312 814 %314 = OpAccessChain %41 %55 %313 815 OpStore %314 %60 816 %491 = OpCompositeInsert %24 %311 %550 1 817 OpBranch %289 818 %289 = OpLabel 819 %556 = OpPhi %24 %550 %276 %491 %288 820 %555 = OpPhi %18 %549 %276 %291 %288 821 %320 = OpSGreaterThanEqual %50 %555 %19 822 OpSelectionMerge %322 None 823 OpBranchConditional %320 %321 %322 824 %321 = OpLabel 825 %324 = OpCompositeExtract %18 %556 0 826 %325 = OpSLessThan %50 %324 %119 827 OpBranch %322 828 %322 = OpLabel 829 %326 = OpPhi %50 %320 %289 %325 %321 830 OpSelectionMerge %328 None 831 OpBranchConditional %326 %327 %328 832 %327 = OpLabel 833 %330 = OpCompositeExtract %18 %556 0 834 %331 = OpIAdd %18 %330 %82 835 %333 = OpCompositeExtract %18 %556 1 836 %334 = OpIMul %18 %333 %86 837 %335 = OpIAdd %18 %331 %334 838 %336 = OpAccessChain %41 %55 %335 839 %337 = OpLoad %18 %336 840 %338 = OpIEqual %50 %337 %19 841 OpBranch %328 842 %328 = OpLabel 843 %339 = OpPhi %50 %326 %322 %338 %327 844 OpSelectionMerge %341 None 845 OpBranchConditional %339 %340 %341 846 %340 = OpLabel 847 %343 = OpISub %18 %555 %60 848 %345 = OpCompositeExtract %18 %556 0 849 %347 = OpCompositeExtract %18 %556 1 850 %348 = OpIMul %18 %347 %86 851 %349 = OpIAdd %18 %345 %348 852 %350 = OpAccessChain %41 %55 %349 853 OpStore %350 %60 854 %353 = OpIAdd %18 %345 %60 855 %357 = OpIAdd %18 %353 %348 856 %358 = OpAccessChain %41 %55 %357 857 OpStore %358 %60 858 %361 = OpIAdd %18 %345 %82 859 %365 = OpIAdd %18 %361 %348 860 %366 = OpAccessChain %41 %55 %365 861 OpStore %366 %60 862 %503 = OpCompositeInsert %24 %361 %556 0 863 OpBranch %341 864 %341 = OpLabel 865 %562 = OpPhi %24 %556 %328 %503 %340 866 %561 = OpPhi %18 %555 %328 %343 %340 867 %372 = OpSGreaterThanEqual %50 %561 %19 868 OpSelectionMerge %374 None 869 OpBranchConditional %372 %373 %374 870 %373 = OpLabel 871 %376 = OpCompositeExtract %18 %562 1 872 %377 = OpSLessThan %50 %376 %119 873 OpBranch %374 874 %374 = OpLabel 875 %378 = OpPhi %50 %372 %341 %377 %373 876 OpSelectionMerge %380 None 877 OpBranchConditional %378 %379 %380 878 %379 = OpLabel 879 %382 = OpCompositeExtract %18 %562 0 880 %384 = OpCompositeExtract %18 %562 1 881 %385 = OpIAdd %18 %384 %82 882 %386 = OpIMul %18 %385 %86 883 %387 = OpIAdd %18 %382 %386 884 %388 = OpAccessChain %41 %55 %387 885 %389 = OpLoad %18 %388 886 %390 = OpIEqual %50 %389 %19 887 OpBranch %380 888 %380 = OpLabel 889 %391 = OpPhi %50 %378 %374 %390 %379 890 OpSelectionMerge %393 None 891 OpBranchConditional %391 %392 %393 892 %392 = OpLabel 893 %397 = OpCompositeExtract %18 %562 0 894 %399 = OpCompositeExtract %18 %562 1 895 %400 = OpIMul %18 %399 %86 896 %401 = OpIAdd %18 %397 %400 897 %402 = OpAccessChain %41 %55 %401 898 OpStore %402 %60 899 %407 = OpIAdd %18 %399 %60 900 %408 = OpIMul %18 %407 %86 901 %409 = OpIAdd %18 %397 %408 902 %410 = OpAccessChain %41 %55 %409 903 OpStore %410 %60 904 %415 = OpIAdd %18 %399 %82 905 %416 = OpIMul %18 %415 %86 906 %417 = OpIAdd %18 %397 %416 907 %418 = OpAccessChain %41 %55 %417 908 OpStore %418 %60 909 %515 = OpCompositeInsert %24 %415 %562 1 910 OpBranch %393 911 %393 = OpLabel 912 %638 = OpPhi %24 %562 %380 %515 %392 913 OpBranch %161 914 %161 = OpLabel 915 %637 = OpPhi %24 %568 %165 %638 %393 916 %621 = OpPhi %18 %73 %165 %214 %393 917 %569 = OpPhi %50 %570 %165 %591 %393 918 %425 = OpIMul %18 %39 %86 919 %428 = OpIAdd %18 %425 %34 920 %429 = OpAccessChain %41 %55 %428 921 %430 = OpLoad %18 %429 922 %431 = OpIEqual %50 %430 %60 923 OpSelectionMerge %433 None 924 OpBranchConditional %431 %432 %433 925 %432 = OpLabel 926 OpStore %435 %437 927 OpBranch %70 928 %433 = OpLabel 929 OpBranch %71 930 %71 = OpLabel 931 OpBranchConditional %569 %68 %70 932 %70 = OpLabel 933 %592 = OpPhi %50 %66 %432 %162 %71 934 OpSelectionMerge %445 None 935 OpBranchConditional %592 %442 %445 936 %445 = OpLabel 937 OpStore %435 %441 938 OpBranch %442 939 %442 = OpLabel 940 OpReturn 941 OpFunctionEnd 942END 943 944# uniforms for variant 945 946# resolution 947BUFFER variant_resolution DATA_TYPE vec2<float> STD140 DATA 948 32.0 32.0 949END 950 951BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 952 953PIPELINE graphics variant_pipeline 954 ATTACH variant_vertex_shader 955 ATTACH variant_fragment_shader 956 FRAMEBUFFER_SIZE 32 32 957 BIND BUFFER variant_framebuffer AS color LOCATION 0 958 BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 959END 960CLEAR_COLOR variant_pipeline 0 0 0 255 961 962CLEAR variant_pipeline 963RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32 964 965EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005 966