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 features extra OpCopyObject instructions 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 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 256.0 256.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 256 256 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 256 256 663 664 665SHADER vertex variant_vertex_shader PASSTHROUGH 666 667SHADER fragment variant_fragment_shader SPIRV-ASM 668; SPIR-V 669; Version: 1.0 670; Generator: Khronos Glslang Reference Front End; 7 671; Bound: 978 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 %4 = OpFunction %2 None %3 746 %5 = OpLabel 747 %9 = OpVariable %8 Function 748 %26 = OpVariable %25 Function 749 %42 = OpVariable %41 Function 750 %62 = OpVariable %25 Function 751 %65 = OpVariable %64 Function 752 %67 = OpVariable %41 Function 753 %74 = OpVariable %41 Function 754 %171 = OpVariable %41 Function 755 %208 = OpVariable %41 Function 756 %13 = OpLoad %10 %12 757 %14 = OpVectorShuffle %7 %13 %13 0 1 758 %21 = OpAccessChain %20 %17 %19 759 %22 = OpLoad %7 %21 760 %23 = OpFDiv %7 %14 %22 761 OpStore %9 %23 762 %30 = OpAccessChain %29 %9 %28 763 %31 = OpLoad %6 %30 764 %33 = OpFMul %6 %31 %32 765 %34 = OpConvertFToS %18 %33 766 %36 = OpAccessChain %29 %9 %35 767 %37 = OpLoad %6 %36 768 %38 = OpFMul %6 %37 %32 769 %39 = OpConvertFToS %18 %38 770 %40 = OpCompositeConstruct %24 %34 %39 771 OpStore %26 %40 772 OpStore %42 %19 773 OpBranch %43 774 %43 = OpLabel 775 OpLoopMerge %45 %46 None 776 OpBranch %47 777 %47 = OpLabel 778 %48 = OpLoad %18 %42 779 %51 = OpSLessThan %50 %48 %49 780 OpBranchConditional %51 %44 %45 781 %44 = OpLabel 782 %56 = OpLoad %18 %42 783 %58 = OpAccessChain %57 %55 %56 784 OpStore %58 %19 785 OpBranch %46 786 %46 = OpLabel 787 %59 = OpLoad %18 %42 788 %61 = OpIAdd %18 %59 %60 789 OpStore %42 %61 790 OpBranch %43 791 %45 = OpLabel 792 OpStore %62 %63 793 OpStore %65 %66 794 OpStore %67 %19 795 OpBranch %68 796 %68 = OpLabel 797 OpLoopMerge %70 %71 None 798 OpBranch %69 799 %69 = OpLabel 800 %72 = OpLoad %18 %67 801 %73 = OpIAdd %18 %72 %60 802 OpStore %67 %73 803 OpStore %74 %19 804 %75 = OpAccessChain %41 %62 %28 805 %76 = OpLoad %18 %75 806 %77 = OpSGreaterThan %50 %76 %19 807 OpSelectionMerge %79 None 808 OpBranchConditional %77 %78 %79 809 %78 = OpLabel 810 %80 = OpAccessChain %41 %62 %28 811 %81 = OpLoad %18 %80 812 %83 = OpISub %18 %81 %82 813 %84 = OpAccessChain %41 %62 %35 814 %85 = OpLoad %18 %84 815 %87 = OpIMul %18 %85 %86 816 %88 = OpIAdd %18 %83 %87 817 %89 = OpAccessChain %57 %55 %88 818 %90 = OpLoad %18 %89 819 %91 = OpIEqual %50 %90 %19 820 OpBranch %79 821 %79 = OpLabel 822 %92 = OpPhi %50 %77 %69 %91 %78 823 OpSelectionMerge %94 None 824 OpBranchConditional %92 %93 %94 825 %93 = OpLabel 826 %95 = OpLoad %18 %74 827 %96 = OpIAdd %18 %95 %60 828 OpStore %74 %96 829 OpBranch %94 830 %94 = OpLabel 831 %97 = OpAccessChain %41 %62 %35 832 %98 = OpLoad %18 %97 833 %99 = OpSGreaterThan %50 %98 %19 834 OpSelectionMerge %101 None 835 OpBranchConditional %99 %100 %101 836 %100 = OpLabel 837 %102 = OpAccessChain %41 %62 %28 838 %103 = OpLoad %18 %102 839 %104 = OpAccessChain %41 %62 %35 840 %105 = OpLoad %18 %104 841 %106 = OpISub %18 %105 %82 842 %107 = OpIMul %18 %106 %86 843 %108 = OpIAdd %18 %103 %107 844 %109 = OpAccessChain %57 %55 %108 845 %110 = OpLoad %18 %109 846 %111 = OpIEqual %50 %110 %19 847 OpBranch %101 848 %101 = OpLabel 849 %112 = OpPhi %50 %99 %94 %111 %100 850 OpSelectionMerge %114 None 851 OpBranchConditional %112 %113 %114 852 %113 = OpLabel 853 %115 = OpLoad %18 %74 854 %116 = OpIAdd %18 %115 %60 855 OpStore %74 %116 856 OpBranch %114 857 %114 = OpLabel 858 %117 = OpAccessChain %41 %62 %28 859 %118 = OpLoad %18 %117 860 %120 = OpSLessThan %50 %118 %119 861 OpSelectionMerge %122 None 862 OpBranchConditional %120 %121 %122 863 %121 = OpLabel 864 %123 = OpAccessChain %41 %62 %28 865 %124 = OpLoad %18 %123 866 %125 = OpIAdd %18 %124 %82 867 %126 = OpAccessChain %41 %62 %35 868 %127 = OpLoad %18 %126 869 %128 = OpIMul %18 %127 %86 870 %129 = OpIAdd %18 %125 %128 871 %130 = OpAccessChain %57 %55 %129 872 %131 = OpLoad %18 %130 873 %132 = OpIEqual %50 %131 %19 874 OpBranch %122 875 %122 = OpLabel 876 %133 = OpPhi %50 %120 %114 %132 %121 877 OpSelectionMerge %135 None 878 OpBranchConditional %133 %134 %135 879 %134 = OpLabel 880 %136 = OpLoad %18 %74 881 %137 = OpIAdd %18 %136 %60 882 OpStore %74 %137 883 OpBranch %135 884 %135 = OpLabel 885 %138 = OpAccessChain %41 %62 %35 886 %139 = OpLoad %18 %138 887 %140 = OpSLessThan %50 %139 %119 888 OpSelectionMerge %142 None 889 OpBranchConditional %140 %141 %142 890 %141 = OpLabel 891 %143 = OpAccessChain %41 %62 %28 892 %144 = OpLoad %18 %143 893 %145 = OpAccessChain %41 %62 %35 894 %146 = OpLoad %18 %145 895 %147 = OpIAdd %18 %146 %82 896 %148 = OpIMul %18 %147 %86 897 %149 = OpIAdd %18 %144 %148 898 %150 = OpAccessChain %57 %55 %149 899 %151 = OpLoad %18 %150 900 %152 = OpIEqual %50 %151 %19 901 OpBranch %142 902 %142 = OpLabel 903 %153 = OpPhi %50 %140 %135 %152 %141 904 OpSelectionMerge %155 None 905 OpBranchConditional %153 %154 %155 906 %154 = OpLabel 907 %156 = OpLoad %18 %74 908 %157 = OpIAdd %18 %156 %60 909 OpStore %74 %157 910 OpBranch %155 911 %155 = OpLabel 912 %158 = OpLoad %18 %74 913 %159 = OpIEqual %50 %158 %19 914 OpSelectionMerge %161 None 915 OpBranchConditional %159 %160 %207 916 %160 = OpLabel 917 OpStore %65 %162 918 OpStore %42 %19 919 OpBranch %163 920 %163 = OpLabel 921 OpLoopMerge %165 %166 None 922 OpBranch %167 923 %167 = OpLabel 924 %168 = OpLoad %18 %42 925 %170 = OpSLessThan %50 %168 %169 926 OpBranchConditional %170 %164 %165 927 %164 = OpLabel 928 OpStore %171 %19 929 OpBranch %172 930 %172 = OpLabel 931 OpLoopMerge %174 %175 None 932 OpBranch %176 933 %176 = OpLabel 934 %177 = OpLoad %18 %171 935 %178 = OpSLessThan %50 %177 %169 936 OpBranchConditional %178 %173 %174 937 %173 = OpLabel 938 %179 = OpLoad %18 %171 939 %180 = OpIMul %18 %179 %82 940 %181 = OpLoad %18 %42 941 %182 = OpIMul %18 %181 %82 942 %183 = OpIMul %18 %182 %86 943 %184 = OpIAdd %18 %180 %183 944 %185 = OpAccessChain %57 %55 %184 945 %186 = OpLoad %18 %185 946 %187 = OpIEqual %50 %186 %19 947 OpSelectionMerge %189 None 948 OpBranchConditional %187 %188 %189 949 %188 = OpLabel 950 %190 = OpLoad %18 %171 951 %191 = OpIMul %18 %190 %82 952 %192 = OpAccessChain %41 %62 %28 953 OpStore %192 %191 954 %193 = OpLoad %18 %42 955 %194 = OpIMul %18 %193 %82 956 %195 = OpAccessChain %41 %62 %35 957 OpStore %195 %194 958 OpStore %65 %66 959 OpBranch %189 960 %189 = OpLabel 961 OpBranch %175 962 %175 = OpLabel 963 %196 = OpLoad %18 %171 964 %197 = OpIAdd %18 %196 %60 965 OpStore %171 %197 966 OpBranch %172 967 %174 = OpLabel 968 OpBranch %166 969 %166 = OpLabel 970 %198 = OpLoad %18 %42 971 %199 = OpIAdd %18 %198 %60 972 OpStore %42 %199 973 OpBranch %163 974 %165 = OpLabel 975 %200 = OpAccessChain %41 %62 %28 976 %201 = OpLoad %18 %200 977 %202 = OpAccessChain %41 %62 %35 978 %203 = OpLoad %18 %202 979 %204 = OpIMul %18 %203 %86 980 %205 = OpIAdd %18 %201 %204 981 %206 = OpAccessChain %57 %55 %205 982 OpStore %206 %60 983 OpBranch %161 984 %207 = OpLabel 985 %209 = OpLoad %18 %67 986 %210 = OpLoad %18 %74 987 %211 = OpSMod %18 %209 %210 988 OpStore %208 %211 989 %212 = OpLoad %18 %74 990 %213 = OpLoad %18 %67 991 %214 = OpIAdd %18 %213 %212 992 OpStore %67 %214 993 %215 = OpLoad %18 %208 994 %216 = OpSGreaterThanEqual %50 %215 %19 995 OpSelectionMerge %218 None 996 OpBranchConditional %216 %217 %218 997 %217 = OpLabel 998 %219 = OpAccessChain %41 %62 %28 999 %220 = OpLoad %18 %219 1000 %221 = OpSGreaterThan %50 %220 %19 1001 OpBranch %218 1002 %218 = OpLabel 1003 %222 = OpPhi %50 %216 %207 %221 %217 1004 OpSelectionMerge %224 None 1005 OpBranchConditional %222 %223 %224 1006 %223 = OpLabel 1007 %225 = OpAccessChain %41 %62 %28 1008 %226 = OpLoad %18 %225 1009 %227 = OpISub %18 %226 %82 1010 %228 = OpAccessChain %41 %62 %35 1011 %229 = OpLoad %18 %228 1012 %230 = OpIMul %18 %229 %86 1013 %231 = OpIAdd %18 %227 %230 1014 %232 = OpAccessChain %57 %55 %231 1015 %233 = OpLoad %18 %232 1016 %234 = OpIEqual %50 %233 %19 1017 OpBranch %224 1018 %224 = OpLabel 1019 %235 = OpPhi %50 %222 %218 %234 %223 1020 OpSelectionMerge %237 None 1021 OpBranchConditional %235 %236 %237 1022 %236 = OpLabel 1023 %238 = OpLoad %18 %208 1024 %239 = OpISub %18 %238 %60 1025 OpStore %208 %239 1026 %240 = OpAccessChain %41 %62 %28 1027 %241 = OpLoad %18 %240 1028 %242 = OpAccessChain %41 %62 %35 1029 %243 = OpLoad %18 %242 1030 %244 = OpIMul %18 %243 %86 1031 %245 = OpIAdd %18 %241 %244 1032 %246 = OpAccessChain %57 %55 %245 1033 OpStore %246 %60 1034 %247 = OpAccessChain %41 %62 %28 1035 %248 = OpLoad %18 %247 1036 %249 = OpISub %18 %248 %60 1037 %250 = OpAccessChain %41 %62 %35 1038 %251 = OpLoad %18 %250 1039 %252 = OpIMul %18 %251 %86 1040 %253 = OpIAdd %18 %249 %252 1041 %254 = OpAccessChain %57 %55 %253 1042 OpStore %254 %60 1043 %255 = OpAccessChain %41 %62 %28 1044 %256 = OpLoad %18 %255 1045 %257 = OpISub %18 %256 %82 1046 %258 = OpAccessChain %41 %62 %35 1047 %259 = OpLoad %18 %258 1048 %260 = OpIMul %18 %259 %86 1049 %261 = OpIAdd %18 %257 %260 1050 %262 = OpAccessChain %57 %55 %261 1051 OpStore %262 %60 1052 %263 = OpAccessChain %41 %62 %28 1053 %264 = OpLoad %18 %263 1054 %265 = OpISub %18 %264 %82 1055 %266 = OpAccessChain %41 %62 %28 1056 OpStore %266 %265 1057 OpBranch %237 1058 %237 = OpLabel 1059 %267 = OpLoad %18 %208 1060 %268 = OpSGreaterThanEqual %50 %267 %19 1061 OpSelectionMerge %270 None 1062 OpBranchConditional %268 %269 %270 1063 %269 = OpLabel 1064 %271 = OpAccessChain %41 %62 %35 1065 %272 = OpLoad %18 %271 1066 %273 = OpSGreaterThan %50 %272 %19 1067 OpBranch %270 1068 %270 = OpLabel 1069 %274 = OpPhi %50 %268 %237 %273 %269 1070 OpSelectionMerge %276 None 1071 OpBranchConditional %274 %275 %276 1072 %275 = OpLabel 1073 %277 = OpAccessChain %41 %62 %28 1074 %278 = OpLoad %18 %277 1075 %279 = OpAccessChain %41 %62 %35 1076 %280 = OpLoad %18 %279 1077 %281 = OpISub %18 %280 %82 1078 %282 = OpIMul %18 %281 %86 1079 %283 = OpIAdd %18 %278 %282 1080 %284 = OpAccessChain %57 %55 %283 1081 %285 = OpLoad %18 %284 1082 %286 = OpIEqual %50 %285 %19 1083 OpBranch %276 1084 %276 = OpLabel 1085 %287 = OpPhi %50 %274 %270 %286 %275 1086 OpSelectionMerge %289 None 1087 OpBranchConditional %287 %288 %289 1088 %288 = OpLabel 1089 %290 = OpLoad %18 %208 1090 %291 = OpISub %18 %290 %60 1091 OpStore %208 %291 1092 %292 = OpAccessChain %41 %62 %28 1093 %293 = OpLoad %18 %292 1094 %294 = OpAccessChain %41 %62 %35 1095 %295 = OpLoad %18 %294 1096 %296 = OpIMul %18 %295 %86 1097 %297 = OpIAdd %18 %293 %296 1098 %298 = OpAccessChain %57 %55 %297 1099 OpStore %298 %60 1100 %299 = OpAccessChain %41 %62 %28 1101 %300 = OpLoad %18 %299 1102 %301 = OpAccessChain %41 %62 %35 1103 %302 = OpLoad %18 %301 1104 %303 = OpISub %18 %302 %60 1105 %304 = OpIMul %18 %303 %86 1106 %305 = OpIAdd %18 %300 %304 1107 %306 = OpAccessChain %57 %55 %305 1108 OpStore %306 %60 1109 %307 = OpAccessChain %41 %62 %28 1110 %308 = OpLoad %18 %307 1111 %309 = OpAccessChain %41 %62 %35 1112 %310 = OpLoad %18 %309 1113 %311 = OpISub %18 %310 %82 1114 %312 = OpIMul %18 %311 %86 1115 %313 = OpIAdd %18 %308 %312 1116 %314 = OpAccessChain %57 %55 %313 1117 OpStore %314 %60 1118 %315 = OpAccessChain %41 %62 %35 1119 %316 = OpLoad %18 %315 1120 %317 = OpISub %18 %316 %82 1121 %318 = OpAccessChain %41 %62 %35 1122 OpStore %318 %317 1123 OpBranch %289 1124 %289 = OpLabel 1125 %319 = OpLoad %18 %208 1126 %320 = OpSGreaterThanEqual %50 %319 %19 1127 OpSelectionMerge %322 None 1128 OpBranchConditional %320 %321 %322 1129 %321 = OpLabel 1130 %323 = OpAccessChain %41 %62 %28 1131 %324 = OpLoad %18 %323 1132 %325 = OpSLessThan %50 %324 %119 1133 OpBranch %322 1134 %322 = OpLabel 1135 %326 = OpPhi %50 %320 %289 %325 %321 1136 OpSelectionMerge %328 None 1137 OpBranchConditional %326 %327 %328 1138 %327 = OpLabel 1139 %329 = OpAccessChain %41 %62 %28 1140 %330 = OpLoad %18 %329 1141 %331 = OpIAdd %18 %330 %82 1142 %332 = OpAccessChain %41 %62 %35 1143 %333 = OpLoad %18 %332 1144 %334 = OpIMul %18 %333 %86 1145 %335 = OpIAdd %18 %331 %334 1146 %336 = OpAccessChain %57 %55 %335 1147 %337 = OpLoad %18 %336 1148 %338 = OpIEqual %50 %337 %19 1149 OpBranch %328 1150 %328 = OpLabel 1151 %339 = OpPhi %50 %326 %322 %338 %327 1152 OpSelectionMerge %341 None 1153 OpBranchConditional %339 %340 %341 1154 %340 = OpLabel 1155 %342 = OpLoad %18 %208 1156 %343 = OpISub %18 %342 %60 1157 OpStore %208 %343 1158 %344 = OpAccessChain %41 %62 %28 1159 %345 = OpLoad %18 %344 1160 %346 = OpAccessChain %41 %62 %35 1161 %347 = OpLoad %18 %346 1162 %348 = OpIMul %18 %347 %86 1163 %349 = OpIAdd %18 %345 %348 1164 %350 = OpAccessChain %57 %55 %349 1165 OpStore %350 %60 1166 %351 = OpAccessChain %41 %62 %28 1167 %352 = OpLoad %18 %351 1168 %353 = OpIAdd %18 %352 %60 1169 %354 = OpAccessChain %41 %62 %35 1170 %355 = OpLoad %18 %354 1171 %356 = OpIMul %18 %355 %86 1172 %357 = OpIAdd %18 %353 %356 1173 %358 = OpAccessChain %57 %55 %357 1174 OpStore %358 %60 1175 %359 = OpAccessChain %41 %62 %28 1176 %360 = OpLoad %18 %359 1177 %361 = OpIAdd %18 %360 %82 1178 %362 = OpAccessChain %41 %62 %35 1179 %363 = OpLoad %18 %362 1180 %364 = OpIMul %18 %363 %86 1181 %365 = OpIAdd %18 %361 %364 1182 %366 = OpAccessChain %57 %55 %365 1183 OpStore %366 %60 1184 %367 = OpAccessChain %41 %62 %28 1185 %368 = OpLoad %18 %367 1186 %369 = OpIAdd %18 %368 %82 1187 %370 = OpAccessChain %41 %62 %28 1188 OpStore %370 %369 1189 OpBranch %341 1190 %341 = OpLabel 1191 %371 = OpLoad %18 %208 1192 %372 = OpSGreaterThanEqual %50 %371 %19 1193 OpSelectionMerge %374 None 1194 OpBranchConditional %372 %373 %374 1195 %373 = OpLabel 1196 %375 = OpAccessChain %41 %62 %35 1197 %376 = OpLoad %18 %375 1198 %377 = OpSLessThan %50 %376 %119 1199 OpBranch %374 1200 %374 = OpLabel 1201 %378 = OpPhi %50 %372 %341 %377 %373 1202 OpSelectionMerge %380 None 1203 OpBranchConditional %378 %379 %380 1204 %379 = OpLabel 1205 %381 = OpAccessChain %41 %62 %28 1206 %382 = OpLoad %18 %381 1207 %383 = OpAccessChain %41 %62 %35 1208 %384 = OpLoad %18 %383 1209 %385 = OpIAdd %18 %384 %82 1210 %386 = OpIMul %18 %385 %86 1211 %387 = OpIAdd %18 %382 %386 1212 %388 = OpAccessChain %57 %55 %387 1213 %389 = OpLoad %18 %388 1214 %390 = OpIEqual %50 %389 %19 1215 OpBranch %380 1216 %380 = OpLabel 1217 %391 = OpPhi %50 %378 %374 %390 %379 1218 OpSelectionMerge %393 None 1219 OpBranchConditional %391 %392 %393 1220 %392 = OpLabel 1221 %394 = OpLoad %18 %208 1222 %395 = OpISub %18 %394 %60 1223 OpStore %208 %395 1224 %396 = OpAccessChain %41 %62 %28 1225 %397 = OpLoad %18 %396 1226 %398 = OpAccessChain %41 %62 %35 1227 %399 = OpLoad %18 %398 1228 %400 = OpIMul %18 %399 %86 1229 %401 = OpIAdd %18 %397 %400 1230 %402 = OpAccessChain %57 %55 %401 1231 OpStore %402 %60 1232 %403 = OpAccessChain %41 %62 %28 1233 %404 = OpLoad %18 %403 1234 %405 = OpAccessChain %41 %62 %35 1235 %406 = OpLoad %18 %405 1236 %407 = OpIAdd %18 %406 %60 1237 %408 = OpIMul %18 %407 %86 1238 %409 = OpIAdd %18 %404 %408 1239 %410 = OpAccessChain %57 %55 %409 1240 OpStore %410 %60 1241 %411 = OpAccessChain %41 %62 %28 1242 %412 = OpLoad %18 %411 1243 %413 = OpAccessChain %41 %62 %35 1244 %414 = OpLoad %18 %413 1245 %415 = OpIAdd %18 %414 %82 1246 %416 = OpIMul %18 %415 %86 1247 %417 = OpIAdd %18 %412 %416 1248 %418 = OpAccessChain %57 %55 %417 1249 OpStore %418 %60 1250 %419 = OpAccessChain %41 %62 %35 1251 %420 = OpLoad %18 %419 1252 %421 = OpIAdd %18 %420 %82 1253 %422 = OpAccessChain %41 %62 %35 1254 OpStore %422 %421 1255 OpBranch %393 1256 %393 = OpLabel 1257 OpBranch %161 1258 %161 = OpLabel 1259 %423 = OpAccessChain %41 %26 %35 1260 %424 = OpLoad %18 %423 1261 %425 = OpIMul %18 %424 %86 1262 %426 = OpAccessChain %41 %26 %28 1263 %427 = OpLoad %18 %426 1264 %428 = OpIAdd %18 %425 %427 1265 %429 = OpAccessChain %57 %55 %428 1266 %430 = OpLoad %18 %429 1267 %431 = OpIEqual %50 %430 %60 1268 OpSelectionMerge %433 None 1269 OpBranchConditional %431 %432 %433 1270 %432 = OpLabel 1271 OpStore %435 %437 1272 OpReturn 1273 %433 = OpLabel 1274 OpBranch %71 1275 %71 = OpLabel 1276 %439 = OpLoad %50 %65 1277 %976 = OpCopyObject %41 %67 1278 OpBranchConditional %439 %68 %70 1279 %70 = OpLabel 1280 %728 = OpCopyObject %41 %171 1281 %977 = OpCopyObject %41 %976 1282 OpStore %435 %441 1283 OpReturn 1284 OpFunctionEnd 1285END 1286 1287# uniforms for variant 1288 1289# resolution 1290BUFFER variant_resolution DATA_TYPE vec2<float> DATA 1291 256.0 256.0 1292END 1293 1294BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 1295 1296PIPELINE graphics variant_pipeline 1297 ATTACH variant_vertex_shader 1298 ATTACH variant_fragment_shader 1299 FRAMEBUFFER_SIZE 256 256 1300 BIND BUFFER variant_framebuffer AS color LOCATION 0 1301 BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 1302END 1303CLEAR_COLOR variant_pipeline 0 0 0 255 1304 1305CLEAR variant_pipeline 1306RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 1307 1308EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005 1309