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