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 obfuscates an id via composites 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: 366 31; Schema: 0 32 OpCapability Shader 33 %1 = OpExtInstImport "GLSL.std.450" 34 OpMemoryModel Logical GLSL450 35 OpEntryPoint Fragment %4 "main" %246 %268 36 OpExecutionMode %4 OriginUpperLeft 37 OpSource ESSL 320 38 OpName %4 "main" 39 OpName %246 "gl_FragCoord" 40 OpName %249 "buf0" 41 OpMemberName %249 0 "resolution" 42 OpName %251 "" 43 OpName %268 "_GLF_color" 44 OpDecorate %246 BuiltIn FragCoord 45 OpMemberDecorate %249 0 Offset 0 46 OpDecorate %249 Block 47 OpDecorate %251 DescriptorSet 0 48 OpDecorate %251 Binding 0 49 OpDecorate %268 Location 0 50 %2 = OpTypeVoid 51 %3 = OpTypeFunction %2 52 %6 = OpTypeInt 32 1 53 %7 = OpTypeVector %6 2 54 %9 = OpTypeFloat 32 55 %10 = OpTypeVector %9 4 56 %20 = OpTypeInt 32 0 57 %22 = OpTypePointer Function %6 58 %25 = OpConstant %6 256 59 %26 = OpTypeBool 60 %28 = OpConstant %20 0 61 %31 = OpConstant %20 256 62 %32 = OpTypeArray %6 %31 63 %33 = OpConstant %6 115 64 %34 = OpConstant %6 133 65 %35 = OpConstant %6 150 66 %36 = OpConstant %6 164 67 %37 = OpConstant %6 176 68 %38 = OpConstant %6 184 69 %39 = OpConstant %6 190 70 %40 = OpConstant %6 192 71 %41 = OpConstant %6 191 72 %42 = OpConstant %6 187 73 %43 = OpConstant %6 181 74 %44 = OpConstant %6 172 75 %45 = OpConstant %6 163 76 %46 = OpConstant %6 153 77 %47 = OpConstant %6 143 78 %48 = OpConstant %6 134 79 %49 = OpConstant %6 126 80 %50 = OpConstant %6 120 81 %51 = OpConstant %6 116 82 %52 = OpConstant %6 114 83 %53 = OpConstant %6 117 84 %54 = OpConstant %6 121 85 %55 = OpConstant %6 127 86 %56 = OpConstant %6 141 87 %57 = OpConstant %6 148 88 %58 = OpConstant %6 154 89 %59 = OpConstant %6 159 90 %60 = OpConstant %6 162 91 %61 = OpConstant %6 161 92 %62 = OpConstant %6 157 93 %63 = OpConstant %6 151 94 %64 = OpConstant %6 124 95 %65 = OpConstant %6 113 96 %66 = OpConstant %6 103 97 %67 = OpConstant %6 94 98 %68 = OpConstant %6 87 99 %69 = OpConstant %6 82 100 %70 = OpConstant %6 79 101 %71 = OpConstant %6 80 102 %72 = OpConstant %6 84 103 %73 = OpConstant %6 91 104 %74 = OpConstant %6 101 105 %75 = OpConstant %6 130 106 %76 = OpConstant %6 146 107 %77 = OpConstant %6 182 108 %78 = OpConstant %6 199 109 %79 = OpConstant %6 215 110 %80 = OpConstant %6 229 111 %81 = OpConstant %6 240 112 %82 = OpConstant %6 249 113 %83 = OpConstant %6 254 114 %84 = OpConstant %6 250 115 %85 = OpConstant %6 243 116 %86 = OpConstant %6 233 117 %87 = OpConstant %6 223 118 %88 = OpConstant %6 212 119 %89 = OpConstant %6 200 120 %90 = OpConstant %6 180 121 %91 = OpConstant %6 166 122 %92 = OpConstant %6 169 123 %93 = OpConstant %6 174 124 %94 = OpConstant %6 179 125 %95 = OpConstant %6 185 126 %96 = OpConstant %6 193 127 %97 = OpConstant %6 195 128 %98 = OpConstant %6 188 129 %99 = OpConstant %6 171 130 %100 = OpConstant %6 149 131 %101 = OpConstant %6 137 132 %102 = OpConstant %6 125 133 %103 = OpConstant %6 105 134 %104 = OpConstant %6 97 135 %105 = OpConstant %6 93 136 %106 = OpConstant %6 98 137 %107 = OpConstant %6 106 138 %108 = OpConstant %6 145 139 %109 = OpConstant %6 177 140 %110 = OpConstant %6 208 141 %111 = OpConstant %6 221 142 %112 = OpConstant %6 231 143 %113 = OpConstant %6 239 144 %114 = OpConstant %6 244 145 %115 = OpConstant %6 242 146 %116 = OpConstant %6 236 147 %117 = OpConstant %6 228 148 %118 = OpConstant %6 218 149 %119 = OpConstant %6 207 150 %120 = OpConstant %6 194 151 %121 = OpConstant %6 158 152 %122 = OpConstant %6 135 153 %123 = OpConstant %6 132 154 %124 = OpConstant %6 131 155 %125 = OpConstant %6 138 156 %126 = OpConstant %6 147 157 %127 = OpConstant %6 155 158 %128 = OpConstant %6 152 159 %129 = OpConstant %6 139 160 %130 = OpConstant %6 129 161 %131 = OpConstant %6 118 162 %132 = OpConstant %6 68 163 %133 = OpConstant %6 58 164 %134 = OpConstant %6 49 165 %135 = OpConstant %6 43 166 %136 = OpConstant %6 40 167 %137 = OpConstant %6 41 168 %138 = OpConstant %6 44 169 %139 = OpConstant %6 51 170 %140 = OpConstant %6 61 171 %141 = OpConstant %6 73 172 %142 = OpConstant %6 119 173 %143 = OpConstant %6 173 174 %144 = OpConstant %6 186 175 %145 = OpConstant %6 128 176 %146 = OpConstant %6 104 177 %147 = OpConstant %6 86 178 %148 = OpConstant %6 81 179 %149 = OpConstant %6 77 180 %150 = OpConstant %6 76 181 %151 = OpConstant %6 89 182 %152 = OpConstant %6 102 183 %153 = OpConstant %6 92 184 %154 = OpConstant %6 83 185 %155 = OpConstant %6 62 186 %156 = OpConstant %6 50 187 %157 = OpConstant %6 38 188 %158 = OpConstant %6 26 189 %159 = OpConstant %6 16 190 %160 = OpConstant %6 8 191 %161 = OpConstant %6 2 192 %162 = OpConstant %6 0 193 %163 = OpConstant %6 4 194 %164 = OpConstant %6 11 195 %165 = OpConstant %6 21 196 %166 = OpConstant %6 33 197 %167 = OpConstant %6 48 198 %168 = OpConstant %6 64 199 %169 = OpConstant %6 144 200 %170 = OpConstant %6 123 201 %171 = OpConstant %6 112 202 %172 = OpConstant %6 100 203 %173 = OpConstant %6 90 204 %174 = OpConstant %6 65 205 %175 = OpConstant %6 67 206 %176 = OpConstant %6 70 207 %177 = OpConstant %6 75 208 %178 = OpConstant %6 95 209 %179 = OpConstant %6 88 210 %180 = OpConstant %6 69 211 %181 = OpConstant %6 47 212 %182 = OpConstant %6 36 213 %183 = OpConstant %6 18 214 %184 = OpConstant %6 13 215 %185 = OpConstant %6 15 216 %186 = OpConstant %6 22 217 %187 = OpConstant %6 32 218 %188 = OpConstant %6 45 219 %189 = OpConstant %6 60 220 %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 221 %193 = OpTypePointer Function %32 222 %215 = OpConstant %9 15 223 %231 = OpConstant %9 1 224 %236 = OpConstant %6 1 225 %238 = OpConstant %9 0 226 %239 = OpConstantComposite %10 %238 %238 %238 %231 227 %242 = OpTypeVector %9 2 228 %245 = OpTypePointer Input %10 229 %246 = OpVariable %245 Input 230 %249 = OpTypeStruct %242 231 %250 = OpTypePointer Uniform %249 232 %251 = OpVariable %250 Uniform 233 %252 = OpTypePointer Uniform %242 234 %259 = OpConstant %9 256 235 %267 = OpTypePointer Output %10 236 %268 = OpVariable %267 Output 237 %277 = OpConstantFalse %26 238 %280 = OpConstantTrue %26 239 %363 = OpUndef %10 240 %365 = OpConstant %9 0.0666666701 241 %4 = OpFunction %2 None %3 242 %5 = OpLabel 243 %285 = OpVariable %193 Function 244 %286 = OpVariable %193 Function 245 %288 = OpVariable %193 Function 246 %247 = OpLoad %10 %246 247 %248 = OpVectorShuffle %242 %247 %247 0 1 248 %253 = OpAccessChain %252 %251 %162 249 %254 = OpLoad %242 %253 250 %255 = OpFDiv %242 %248 %254 251 %258 = OpCompositeExtract %9 %255 0 252 %260 = OpFMul %9 %258 %259 253 %261 = OpConvertFToS %6 %260 254 %263 = OpCompositeExtract %9 %255 1 255 %264 = OpFMul %9 %263 %259 256 %265 = OpConvertFToS %6 %264 257 %266 = OpCompositeConstruct %7 %261 %265 258 OpSelectionMerge %341 None 259 OpSwitch %28 %291 260 %291 = OpLabel 261 OpBranch %292 262 %292 = OpLabel 263 %355 = OpPhi %7 %266 %291 %354 %337 264 %295 = OpCompositeExtract %6 %355 1 265 %296 = OpINotEqual %26 %295 %25 266 OpLoopMerge %338 %337 None 267 OpBranchConditional %296 %297 %338 268 %297 = OpLabel 269 %299 = OpCompositeExtract %6 %355 0 270 OpStore %285 %190 271 %302 = OpAccessChain %22 %285 %295 272 %303 = OpLoad %6 %302 273 %304 = OpIAdd %6 %303 %185 274 %305 = OpSLessThan %26 %299 %304 275 OpSelectionMerge %315 None 276 OpBranchConditional %305 %306 %315 277 %306 = OpLabel 278 OpStore %286 %190 279 %311 = OpAccessChain %22 %286 %295 280 %312 = OpLoad %6 %311 281 %313 = OpISub %6 %312 %185 282 %314 = OpSGreaterThan %26 %299 %313 283 OpBranch %315 284 %315 = OpLabel 285 %316 = OpPhi %26 %305 %297 %314 %306 286 OpSelectionMerge %333 None 287 OpBranchConditional %316 %317 %333 288 %317 = OpLabel 289 OpStore %288 %190 290 %322 = OpAccessChain %22 %288 %295 291 %323 = OpLoad %6 %322 292 %324 = OpISub %6 %299 %323 293 %325 = OpConvertSToF %9 %324 294 %326 = OpExtInst %9 %1 FAbs %325 295 %327 = OpFSub %9 %215 %326 296 %328 = OpFMul %9 %327 %365 297 %332 = OpCompositeConstruct %10 %328 %328 %328 %231 298 OpBranch %338 299 %333 = OpLabel 300 %336 = OpIAdd %6 %295 %236 301 %354 = OpCompositeInsert %7 %336 %355 1 302 OpBranch %337 303 %337 = OpLabel 304 OpBranch %292 305 %338 = OpLabel 306 %361 = OpPhi %10 %363 %292 %332 %317 307 %357 = OpPhi %26 %277 %292 %280 %317 308 OpSelectionMerge %340 None 309 OpBranchConditional %357 %341 %340 310 %340 = OpLabel 311 OpBranch %341 312 %341 = OpLabel 313 %360 = OpPhi %10 %361 %338 %239 %340 314 OpStore %268 %360 315 OpReturn 316 OpFunctionEnd 317END 318 319# uniforms for reference 320 321# resolution 322BUFFER reference_resolution DATA_TYPE vec2<float> DATA 323 256.0 256.0 324END 325 326BUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM 327 328PIPELINE graphics reference_pipeline 329 ATTACH reference_vertex_shader 330 ATTACH reference_fragment_shader 331 FRAMEBUFFER_SIZE 256 256 332 BIND BUFFER reference_framebuffer AS color LOCATION 0 333 BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 334END 335CLEAR_COLOR reference_pipeline 0 0 0 255 336 337CLEAR reference_pipeline 338RUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256 339 340 341SHADER vertex variant_vertex_shader PASSTHROUGH 342 343SHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 344; SPIR-V 345; Version: 1.0 346; Generator: Khronos Glslang Reference Front End; 7 347; Bound: 2249 348; Schema: 0 349 OpCapability Shader 350 %1 = OpExtInstImport "GLSL.std.450" 351 OpMemoryModel Logical GLSL450 352 OpEntryPoint Fragment %4 "main" %246 %268 353 OpExecutionMode %4 OriginUpperLeft 354 OpSource ESSL 320 355 OpName %4 "main" 356 OpName %246 "gl_FragCoord" 357 OpName %249 "buf0" 358 OpMemberName %249 0 "resolution" 359 OpName %251 "" 360 OpName %268 "_GLF_color" 361 OpDecorate %246 BuiltIn FragCoord 362 OpMemberDecorate %249 0 Offset 0 363 OpDecorate %249 Block 364 OpDecorate %251 DescriptorSet 0 365 OpDecorate %251 Binding 0 366 OpDecorate %268 Location 0 367 %2 = OpTypeVoid 368 %3 = OpTypeFunction %2 369 %6 = OpTypeInt 32 1 370 %7 = OpTypeVector %6 2 371 %9 = OpTypeFloat 32 372 %10 = OpTypeVector %9 4 373 %20 = OpTypeInt 32 0 374 %22 = OpTypePointer Function %6 375 %25 = OpConstant %6 256 376 %26 = OpTypeBool 377 %28 = OpConstant %20 0 378 %31 = OpConstant %20 256 379 %32 = OpTypeArray %6 %31 380 %33 = OpConstant %6 115 381 %34 = OpConstant %6 133 382 %35 = OpConstant %6 150 383 %36 = OpConstant %6 164 384 %37 = OpConstant %6 176 385 %38 = OpConstant %6 184 386 %39 = OpConstant %6 190 387 %40 = OpConstant %6 192 388 %41 = OpConstant %6 191 389 %42 = OpConstant %6 187 390 %43 = OpConstant %6 181 391 %44 = OpConstant %6 172 392 %45 = OpConstant %6 163 393 %46 = OpConstant %6 153 394 %47 = OpConstant %6 143 395 %48 = OpConstant %6 134 396 %49 = OpConstant %6 126 397 %50 = OpConstant %6 120 398 %51 = OpConstant %6 116 399 %52 = OpConstant %6 114 400 %53 = OpConstant %6 117 401 %54 = OpConstant %6 121 402 %55 = OpConstant %6 127 403 %56 = OpConstant %6 141 404 %57 = OpConstant %6 148 405 %58 = OpConstant %6 154 406 %59 = OpConstant %6 159 407 %60 = OpConstant %6 162 408 %61 = OpConstant %6 161 409 %62 = OpConstant %6 157 410 %63 = OpConstant %6 151 411 %64 = OpConstant %6 124 412 %65 = OpConstant %6 113 413 %66 = OpConstant %6 103 414 %67 = OpConstant %6 94 415 %68 = OpConstant %6 87 416 %69 = OpConstant %6 82 417 %70 = OpConstant %6 79 418 %71 = OpConstant %6 80 419 %72 = OpConstant %6 84 420 %73 = OpConstant %6 91 421 %74 = OpConstant %6 101 422 %75 = OpConstant %6 130 423 %76 = OpConstant %6 146 424 %77 = OpConstant %6 182 425 %78 = OpConstant %6 199 426 %79 = OpConstant %6 215 427 %80 = OpConstant %6 229 428 %81 = OpConstant %6 240 429 %82 = OpConstant %6 249 430 %83 = OpConstant %6 254 431 %84 = OpConstant %6 250 432 %85 = OpConstant %6 243 433 %86 = OpConstant %6 233 434 %87 = OpConstant %6 223 435 %88 = OpConstant %6 212 436 %89 = OpConstant %6 200 437 %90 = OpConstant %6 180 438 %91 = OpConstant %6 166 439 %92 = OpConstant %6 169 440 %93 = OpConstant %6 174 441 %94 = OpConstant %6 179 442 %95 = OpConstant %6 185 443 %96 = OpConstant %6 193 444 %97 = OpConstant %6 195 445 %98 = OpConstant %6 188 446 %99 = OpConstant %6 171 447 %100 = OpConstant %6 149 448 %101 = OpConstant %6 137 449 %102 = OpConstant %6 125 450 %103 = OpConstant %6 105 451 %104 = OpConstant %6 97 452 %105 = OpConstant %6 93 453 %106 = OpConstant %6 98 454 %107 = OpConstant %6 106 455 %108 = OpConstant %6 145 456 %109 = OpConstant %6 177 457 %110 = OpConstant %6 208 458 %111 = OpConstant %6 221 459 %112 = OpConstant %6 231 460 %113 = OpConstant %6 239 461 %114 = OpConstant %6 244 462 %115 = OpConstant %6 242 463 %116 = OpConstant %6 236 464 %117 = OpConstant %6 228 465 %118 = OpConstant %6 218 466 %119 = OpConstant %6 207 467 %120 = OpConstant %6 194 468 %121 = OpConstant %6 158 469 %122 = OpConstant %6 135 470 %123 = OpConstant %6 132 471 %124 = OpConstant %6 131 472 %125 = OpConstant %6 138 473 %126 = OpConstant %6 147 474 %127 = OpConstant %6 155 475 %128 = OpConstant %6 152 476 %129 = OpConstant %6 139 477 %130 = OpConstant %6 129 478 %131 = OpConstant %6 118 479 %132 = OpConstant %6 68 480 %133 = OpConstant %6 58 481 %134 = OpConstant %6 49 482 %135 = OpConstant %6 43 483 %136 = OpConstant %6 40 484 %137 = OpConstant %6 41 485 %138 = OpConstant %6 44 486 %139 = OpConstant %6 51 487 %140 = OpConstant %6 61 488 %141 = OpConstant %6 73 489 %142 = OpConstant %6 119 490 %143 = OpConstant %6 173 491 %144 = OpConstant %6 186 492 %145 = OpConstant %6 128 493 %146 = OpConstant %6 104 494 %147 = OpConstant %6 86 495 %148 = OpConstant %6 81 496 %149 = OpConstant %6 77 497 %150 = OpConstant %6 76 498 %151 = OpConstant %6 89 499 %152 = OpConstant %6 102 500 %153 = OpConstant %6 92 501 %154 = OpConstant %6 83 502 %155 = OpConstant %6 62 503 %156 = OpConstant %6 50 504 %157 = OpConstant %6 38 505 %158 = OpConstant %6 26 506 %159 = OpConstant %6 16 507 %160 = OpConstant %6 8 508 %161 = OpConstant %6 2 509 %162 = OpConstant %6 0 510 %163 = OpConstant %6 4 511 %164 = OpConstant %6 11 512 %165 = OpConstant %6 21 513 %166 = OpConstant %6 33 514 %167 = OpConstant %6 48 515 %168 = OpConstant %6 64 516 %169 = OpConstant %6 144 517 %170 = OpConstant %6 123 518 %171 = OpConstant %6 112 519 %172 = OpConstant %6 100 520 %173 = OpConstant %6 90 521 %174 = OpConstant %6 65 522 %175 = OpConstant %6 67 523 %176 = OpConstant %6 70 524 %177 = OpConstant %6 75 525 %178 = OpConstant %6 95 526 %179 = OpConstant %6 88 527 %180 = OpConstant %6 69 528 %181 = OpConstant %6 47 529 %182 = OpConstant %6 36 530 %183 = OpConstant %6 18 531 %184 = OpConstant %6 13 532 %185 = OpConstant %6 15 533 %186 = OpConstant %6 22 534 %187 = OpConstant %6 32 535 %188 = OpConstant %6 45 536 %189 = OpConstant %6 60 537 %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 538 %193 = OpTypePointer Function %32 539 %215 = OpConstant %9 15 540 %231 = OpConstant %9 1 541 %236 = OpConstant %6 1 542 %238 = OpConstant %9 0 543 %239 = OpConstantComposite %10 %238 %238 %238 %231 544 %242 = OpTypeVector %9 2 545 %245 = OpTypePointer Input %10 546 %246 = OpVariable %245 Input 547 %249 = OpTypeStruct %242 548 %250 = OpTypePointer Uniform %249 549 %251 = OpVariable %250 Uniform 550 %252 = OpTypePointer Uniform %242 551 %259 = OpConstant %9 256 552 %267 = OpTypePointer Output %10 553 %268 = OpVariable %267 Output 554 %277 = OpConstantFalse %26 555 %280 = OpConstantTrue %26 556 %363 = OpUndef %10 557 %365 = OpConstant %9 0.0666666701 558 %4 = OpFunction %2 None %3 559 %5 = OpLabel 560 %285 = OpVariable %193 Function 561 %286 = OpVariable %193 Function 562 %288 = OpVariable %193 Function 563 %247 = OpLoad %10 %246 564 %248 = OpVectorShuffle %242 %247 %247 0 1 565 %253 = OpAccessChain %252 %251 %162 566 %254 = OpLoad %242 %253 567 %255 = OpFDiv %242 %248 %254 568 %588 = OpCompositeConstruct %10 %254 %215 %215 569 %474 = OpSNegate %6 %69 570 %258 = OpCompositeExtract %9 %255 0 571 %260 = OpFMul %9 %258 %259 572 %2248 = OpCompositeExtract %9 %588 2 573 %593 = OpCompositeConstruct %242 %238 %2248 574 %547 = OpISub %6 %50 %162 575 %261 = OpConvertFToS %6 %260 576 %263 = OpCompositeExtract %9 %255 1 577 %264 = OpFMul %9 %263 %259 578 %265 = OpConvertFToS %6 %264 579 %266 = OpCompositeConstruct %7 %261 %265 580 OpSelectionMerge %341 None 581 OpSwitch %28 %291 582 %291 = OpLabel 583 OpBranch %292 584 %292 = OpLabel 585 %355 = OpPhi %7 %266 %291 %354 %337 586 %295 = OpCompositeExtract %6 %355 1 587 %296 = OpINotEqual %26 %295 %25 588 OpLoopMerge %338 %337 None 589 OpBranchConditional %296 %297 %338 590 %297 = OpLabel 591 %299 = OpCompositeExtract %6 %355 0 592 OpStore %285 %190 593 %302 = OpAccessChain %22 %285 %295 594 %303 = OpLoad %6 %302 595 %304 = OpIAdd %6 %303 %185 596 %305 = OpSLessThan %26 %299 %304 597 OpSelectionMerge %315 None 598 OpBranchConditional %305 %306 %315 599 %306 = OpLabel 600 OpStore %286 %190 601 %311 = OpAccessChain %22 %286 %295 602 %312 = OpLoad %6 %311 603 %313 = OpISub %6 %312 %185 604 %314 = OpSGreaterThan %26 %299 %313 605 OpBranch %315 606 %315 = OpLabel 607 %316 = OpPhi %26 %305 %297 %314 %306 608 OpSelectionMerge %333 None 609 OpBranchConditional %316 %317 %333 610 %317 = OpLabel 611 OpStore %288 %190 612 %322 = OpAccessChain %22 %288 %295 613 %323 = OpLoad %6 %322 614 %324 = OpISub %6 %299 %323 615 %325 = OpConvertSToF %9 %324 616 %639 = OpCompositeConstruct %249 %593 617 %495 = OpIAdd %6 %73 %114 618 %326 = OpExtInst %9 %1 FAbs %325 619 %2247 = OpCompositeExtract %9 %639 0 1 620 %327 = OpFSub %9 %2247 %326 621 %328 = OpFMul %9 %327 %365 622 %332 = OpCompositeConstruct %10 %328 %328 %328 %231 623 OpBranch %338 624 %333 = OpLabel 625 %336 = OpIAdd %6 %295 %236 626 %354 = OpCompositeInsert %7 %336 %355 1 627 OpBranch %337 628 %337 = OpLabel 629 OpBranch %292 630 %338 = OpLabel 631 %361 = OpPhi %10 %363 %292 %332 %317 632 %357 = OpPhi %26 %277 %292 %280 %317 633 OpSelectionMerge %340 None 634 OpBranchConditional %357 %341 %340 635 %340 = OpLabel 636 OpBranch %341 637 %341 = OpLabel 638 %360 = OpPhi %10 %361 %338 %239 %340 639 OpStore %268 %360 640 OpReturn 641 OpFunctionEnd 642END 643 644# uniforms for variant 645 646# resolution 647BUFFER variant_resolution DATA_TYPE vec2<float> DATA 648 256.0 256.0 649END 650 651BUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 652 653PIPELINE graphics variant_pipeline 654 ATTACH variant_vertex_shader 655 ATTACH variant_fragment_shader 656 FRAMEBUFFER_SIZE 256 256 657 BIND BUFFER variant_framebuffer AS color LOCATION 0 658 BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 659END 660CLEAR_COLOR variant_pipeline 0 0 0 255 661 662CLEAR variant_pipeline 663RUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 664 665EXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005 666