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