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