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