1e5c31af7Sopenharmony_ci#!amber 2e5c31af7Sopenharmony_ci 3e5c31af7Sopenharmony_ci# Copyright 2020 Google LLC 4e5c31af7Sopenharmony_ci# 5e5c31af7Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 6e5c31af7Sopenharmony_ci# you may not use this file except in compliance with the License. 7e5c31af7Sopenharmony_ci# You may obtain a copy of the License at 8e5c31af7Sopenharmony_ci# 9e5c31af7Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 10e5c31af7Sopenharmony_ci# 11e5c31af7Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 12e5c31af7Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 13e5c31af7Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e5c31af7Sopenharmony_ci# See the License for the specific language governing permissions and 15e5c31af7Sopenharmony_ci# limitations under the License. 16e5c31af7Sopenharmony_ci 17e5c31af7Sopenharmony_ci 18e5c31af7Sopenharmony_ci# A test for a bug found by the GraphicsFuzz project. 19e5c31af7Sopenharmony_ci 20e5c31af7Sopenharmony_ci# Short description: Equivalent shaders, one where an id is hidden inside a composite 21e5c31af7Sopenharmony_ci 22e5c31af7Sopenharmony_ci# The test passes because both shaders render the same image. 23e5c31af7Sopenharmony_ci 24e5c31af7Sopenharmony_ciSHADER vertex reference_vertex_shader PASSTHROUGH 25e5c31af7Sopenharmony_ci 26e5c31af7Sopenharmony_ciSHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 27e5c31af7Sopenharmony_ci; SPIR-V 28e5c31af7Sopenharmony_ci; Version: 1.0 29e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 7 30e5c31af7Sopenharmony_ci; Bound: 107 31e5c31af7Sopenharmony_ci; Schema: 0 32e5c31af7Sopenharmony_ci OpCapability Shader 33e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 34e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 35e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %12 %74 36e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 37e5c31af7Sopenharmony_ci OpSource ESSL 320 38e5c31af7Sopenharmony_ci OpName %4 "main" 39e5c31af7Sopenharmony_ci OpName %12 "gl_FragCoord" 40e5c31af7Sopenharmony_ci OpName %15 "buf0" 41e5c31af7Sopenharmony_ci OpMemberName %15 0 "resolution" 42e5c31af7Sopenharmony_ci OpName %17 "" 43e5c31af7Sopenharmony_ci OpName %74 "_GLF_color" 44e5c31af7Sopenharmony_ci OpName %100 "indexable" 45e5c31af7Sopenharmony_ci OpDecorate %12 BuiltIn FragCoord 46e5c31af7Sopenharmony_ci OpMemberDecorate %15 0 Offset 0 47e5c31af7Sopenharmony_ci OpDecorate %15 Block 48e5c31af7Sopenharmony_ci OpDecorate %17 DescriptorSet 0 49e5c31af7Sopenharmony_ci OpDecorate %17 Binding 0 50e5c31af7Sopenharmony_ci OpDecorate %74 Location 0 51e5c31af7Sopenharmony_ci %2 = OpTypeVoid 52e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 53e5c31af7Sopenharmony_ci %6 = OpTypeFloat 32 54e5c31af7Sopenharmony_ci %7 = OpTypeVector %6 2 55e5c31af7Sopenharmony_ci %10 = OpTypeVector %6 4 56e5c31af7Sopenharmony_ci %11 = OpTypePointer Input %10 57e5c31af7Sopenharmony_ci %12 = OpVariable %11 Input 58e5c31af7Sopenharmony_ci %15 = OpTypeStruct %7 59e5c31af7Sopenharmony_ci %16 = OpTypePointer Uniform %15 60e5c31af7Sopenharmony_ci %17 = OpVariable %16 Uniform 61e5c31af7Sopenharmony_ci %18 = OpTypeInt 32 1 62e5c31af7Sopenharmony_ci %19 = OpConstant %18 0 63e5c31af7Sopenharmony_ci %20 = OpTypePointer Uniform %7 64e5c31af7Sopenharmony_ci %27 = OpTypeInt 32 0 65e5c31af7Sopenharmony_ci %32 = OpConstant %6 10 66e5c31af7Sopenharmony_ci %47 = OpConstant %18 10 67e5c31af7Sopenharmony_ci %51 = OpConstant %18 100 68e5c31af7Sopenharmony_ci %60 = OpTypeBool 69e5c31af7Sopenharmony_ci %62 = OpConstant %18 4 70e5c31af7Sopenharmony_ci %65 = OpConstant %18 1000 71e5c31af7Sopenharmony_ci %71 = OpConstant %18 1 72e5c31af7Sopenharmony_ci %73 = OpTypePointer Output %10 73e5c31af7Sopenharmony_ci %74 = OpVariable %73 Output 74e5c31af7Sopenharmony_ci %75 = OpConstant %27 16 75e5c31af7Sopenharmony_ci %76 = OpTypeArray %10 %75 76e5c31af7Sopenharmony_ci %77 = OpConstant %6 0 77e5c31af7Sopenharmony_ci %78 = OpConstant %6 1 78e5c31af7Sopenharmony_ci %79 = OpConstantComposite %10 %77 %77 %77 %78 79e5c31af7Sopenharmony_ci %80 = OpConstant %6 0.5 80e5c31af7Sopenharmony_ci %81 = OpConstantComposite %10 %80 %77 %77 %78 81e5c31af7Sopenharmony_ci %82 = OpConstantComposite %10 %77 %80 %77 %78 82e5c31af7Sopenharmony_ci %83 = OpConstantComposite %10 %80 %80 %77 %78 83e5c31af7Sopenharmony_ci %84 = OpConstantComposite %10 %77 %77 %80 %78 84e5c31af7Sopenharmony_ci %85 = OpConstantComposite %10 %80 %77 %80 %78 85e5c31af7Sopenharmony_ci %86 = OpConstantComposite %10 %77 %80 %80 %78 86e5c31af7Sopenharmony_ci %87 = OpConstantComposite %10 %80 %80 %80 %78 87e5c31af7Sopenharmony_ci %88 = OpConstantComposite %10 %78 %77 %77 %78 88e5c31af7Sopenharmony_ci %89 = OpConstantComposite %10 %77 %78 %77 %78 89e5c31af7Sopenharmony_ci %90 = OpConstantComposite %10 %78 %78 %77 %78 90e5c31af7Sopenharmony_ci %91 = OpConstantComposite %10 %77 %77 %78 %78 91e5c31af7Sopenharmony_ci %92 = OpConstantComposite %10 %78 %77 %78 %78 92e5c31af7Sopenharmony_ci %93 = OpConstantComposite %10 %77 %78 %78 %78 93e5c31af7Sopenharmony_ci %94 = OpConstantComposite %10 %78 %78 %78 %78 94e5c31af7Sopenharmony_ci %95 = OpConstantComposite %76 %79 %81 %82 %83 %84 %85 %86 %87 %79 %88 %89 %90 %91 %92 %93 %94 95e5c31af7Sopenharmony_ci %97 = OpConstant %18 16 96e5c31af7Sopenharmony_ci %99 = OpTypePointer Function %76 97e5c31af7Sopenharmony_ci %101 = OpTypePointer Function %10 98e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 99e5c31af7Sopenharmony_ci %5 = OpLabel 100e5c31af7Sopenharmony_ci %100 = OpVariable %99 Function 101e5c31af7Sopenharmony_ci %13 = OpLoad %10 %12 102e5c31af7Sopenharmony_ci %14 = OpVectorShuffle %7 %13 %13 0 1 103e5c31af7Sopenharmony_ci %21 = OpAccessChain %20 %17 %19 104e5c31af7Sopenharmony_ci %22 = OpLoad %7 %21 105e5c31af7Sopenharmony_ci %23 = OpFDiv %7 %14 %22 106e5c31af7Sopenharmony_ci %31 = OpCompositeExtract %6 %23 0 107e5c31af7Sopenharmony_ci %33 = OpFMul %6 %31 %32 108e5c31af7Sopenharmony_ci %34 = OpConvertFToS %18 %33 109e5c31af7Sopenharmony_ci %37 = OpCompositeExtract %6 %23 1 110e5c31af7Sopenharmony_ci %38 = OpFMul %6 %37 %32 111e5c31af7Sopenharmony_ci %39 = OpConvertFToS %18 %38 112e5c31af7Sopenharmony_ci %48 = OpIMul %18 %39 %47 113e5c31af7Sopenharmony_ci %49 = OpIAdd %18 %34 %48 114e5c31af7Sopenharmony_ci OpBranch %53 115e5c31af7Sopenharmony_ci %53 = OpLabel 116e5c31af7Sopenharmony_ci %106 = OpPhi %18 %51 %5 %69 %54 117e5c31af7Sopenharmony_ci %104 = OpPhi %18 %19 %5 %72 %54 118e5c31af7Sopenharmony_ci %61 = OpSLessThan %60 %104 %49 119e5c31af7Sopenharmony_ci OpLoopMerge %55 %54 None 120e5c31af7Sopenharmony_ci OpBranchConditional %61 %54 %55 121e5c31af7Sopenharmony_ci %54 = OpLabel 122e5c31af7Sopenharmony_ci %64 = OpIMul %18 %62 %106 123e5c31af7Sopenharmony_ci %67 = OpISub %18 %65 %106 124e5c31af7Sopenharmony_ci %68 = OpIMul %18 %64 %67 125e5c31af7Sopenharmony_ci %69 = OpSDiv %18 %68 %65 126e5c31af7Sopenharmony_ci %72 = OpIAdd %18 %104 %71 127e5c31af7Sopenharmony_ci OpBranch %53 128e5c31af7Sopenharmony_ci %55 = OpLabel 129e5c31af7Sopenharmony_ci %98 = OpSMod %18 %106 %97 130e5c31af7Sopenharmony_ci OpStore %100 %95 131e5c31af7Sopenharmony_ci %102 = OpAccessChain %101 %100 %98 132e5c31af7Sopenharmony_ci %103 = OpLoad %10 %102 133e5c31af7Sopenharmony_ci OpStore %74 %103 134e5c31af7Sopenharmony_ci OpReturn 135e5c31af7Sopenharmony_ci OpFunctionEnd 136e5c31af7Sopenharmony_ciEND 137e5c31af7Sopenharmony_ci 138e5c31af7Sopenharmony_ci# uniforms for reference 139e5c31af7Sopenharmony_ci 140e5c31af7Sopenharmony_ci# resolution 141e5c31af7Sopenharmony_ciBUFFER reference_resolution DATA_TYPE vec2<float> DATA 142e5c31af7Sopenharmony_ci 256.0 256.0 143e5c31af7Sopenharmony_ciEND 144e5c31af7Sopenharmony_ci 145e5c31af7Sopenharmony_ciBUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM 146e5c31af7Sopenharmony_ci 147e5c31af7Sopenharmony_ciPIPELINE graphics reference_pipeline 148e5c31af7Sopenharmony_ci ATTACH reference_vertex_shader 149e5c31af7Sopenharmony_ci ATTACH reference_fragment_shader 150e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 151e5c31af7Sopenharmony_ci BIND BUFFER reference_framebuffer AS color LOCATION 0 152e5c31af7Sopenharmony_ci BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 153e5c31af7Sopenharmony_ciEND 154e5c31af7Sopenharmony_ciCLEAR_COLOR reference_pipeline 0 0 0 255 155e5c31af7Sopenharmony_ci 156e5c31af7Sopenharmony_ciCLEAR reference_pipeline 157e5c31af7Sopenharmony_ciRUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256 158e5c31af7Sopenharmony_ci 159e5c31af7Sopenharmony_ci 160e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH 161e5c31af7Sopenharmony_ci 162e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 163e5c31af7Sopenharmony_ci; SPIR-V 164e5c31af7Sopenharmony_ci; Version: 1.0 165e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 7 166e5c31af7Sopenharmony_ci; Bound: 395 167e5c31af7Sopenharmony_ci; Schema: 0 168e5c31af7Sopenharmony_ci OpCapability Shader 169e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 170e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 171e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %12 %74 172e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 173e5c31af7Sopenharmony_ci OpSource ESSL 320 174e5c31af7Sopenharmony_ci OpName %4 "main" 175e5c31af7Sopenharmony_ci OpName %12 "gl_FragCoord" 176e5c31af7Sopenharmony_ci OpName %15 "buf0" 177e5c31af7Sopenharmony_ci OpMemberName %15 0 "resolution" 178e5c31af7Sopenharmony_ci OpName %17 "" 179e5c31af7Sopenharmony_ci OpName %74 "_GLF_color" 180e5c31af7Sopenharmony_ci OpName %100 "indexable" 181e5c31af7Sopenharmony_ci OpDecorate %12 BuiltIn FragCoord 182e5c31af7Sopenharmony_ci OpMemberDecorate %15 0 Offset 0 183e5c31af7Sopenharmony_ci OpDecorate %15 Block 184e5c31af7Sopenharmony_ci OpDecorate %17 DescriptorSet 0 185e5c31af7Sopenharmony_ci OpDecorate %17 Binding 0 186e5c31af7Sopenharmony_ci OpDecorate %74 Location 0 187e5c31af7Sopenharmony_ci %2 = OpTypeVoid 188e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 189e5c31af7Sopenharmony_ci %6 = OpTypeFloat 32 190e5c31af7Sopenharmony_ci %7 = OpTypeVector %6 2 191e5c31af7Sopenharmony_ci %10 = OpTypeVector %6 4 192e5c31af7Sopenharmony_ci %11 = OpTypePointer Input %10 193e5c31af7Sopenharmony_ci %12 = OpVariable %11 Input 194e5c31af7Sopenharmony_ci %15 = OpTypeStruct %7 195e5c31af7Sopenharmony_ci %16 = OpTypePointer Uniform %15 196e5c31af7Sopenharmony_ci %17 = OpVariable %16 Uniform 197e5c31af7Sopenharmony_ci %18 = OpTypeInt 32 1 198e5c31af7Sopenharmony_ci %19 = OpConstant %18 0 199e5c31af7Sopenharmony_ci %20 = OpTypePointer Uniform %7 200e5c31af7Sopenharmony_ci %27 = OpTypeInt 32 0 201e5c31af7Sopenharmony_ci %32 = OpConstant %6 10 202e5c31af7Sopenharmony_ci %47 = OpConstant %18 10 203e5c31af7Sopenharmony_ci %51 = OpConstant %18 100 204e5c31af7Sopenharmony_ci %60 = OpTypeBool 205e5c31af7Sopenharmony_ci %62 = OpConstant %18 4 206e5c31af7Sopenharmony_ci %65 = OpConstant %18 1000 207e5c31af7Sopenharmony_ci %71 = OpConstant %18 1 208e5c31af7Sopenharmony_ci %73 = OpTypePointer Output %10 209e5c31af7Sopenharmony_ci %74 = OpVariable %73 Output 210e5c31af7Sopenharmony_ci %75 = OpConstant %27 16 211e5c31af7Sopenharmony_ci %76 = OpTypeArray %10 %75 212e5c31af7Sopenharmony_ci %77 = OpConstant %6 0 213e5c31af7Sopenharmony_ci %78 = OpConstant %6 1 214e5c31af7Sopenharmony_ci %79 = OpConstantComposite %10 %77 %77 %77 %78 215e5c31af7Sopenharmony_ci %80 = OpConstant %6 0.5 216e5c31af7Sopenharmony_ci %81 = OpConstantComposite %10 %80 %77 %77 %78 217e5c31af7Sopenharmony_ci %82 = OpConstantComposite %10 %77 %80 %77 %78 218e5c31af7Sopenharmony_ci %83 = OpConstantComposite %10 %80 %80 %77 %78 219e5c31af7Sopenharmony_ci %84 = OpConstantComposite %10 %77 %77 %80 %78 220e5c31af7Sopenharmony_ci %85 = OpConstantComposite %10 %80 %77 %80 %78 221e5c31af7Sopenharmony_ci %86 = OpConstantComposite %10 %77 %80 %80 %78 222e5c31af7Sopenharmony_ci %87 = OpConstantComposite %10 %80 %80 %80 %78 223e5c31af7Sopenharmony_ci %88 = OpConstantComposite %10 %78 %77 %77 %78 224e5c31af7Sopenharmony_ci %89 = OpConstantComposite %10 %77 %78 %77 %78 225e5c31af7Sopenharmony_ci %90 = OpConstantComposite %10 %78 %78 %77 %78 226e5c31af7Sopenharmony_ci %91 = OpConstantComposite %10 %77 %77 %78 %78 227e5c31af7Sopenharmony_ci %92 = OpConstantComposite %10 %78 %77 %78 %78 228e5c31af7Sopenharmony_ci %93 = OpConstantComposite %10 %77 %78 %78 %78 229e5c31af7Sopenharmony_ci %94 = OpConstantComposite %10 %78 %78 %78 %78 230e5c31af7Sopenharmony_ci %95 = OpConstantComposite %76 %79 %81 %82 %83 %84 %85 %86 %87 %79 %88 %89 %90 %91 %92 %93 %94 231e5c31af7Sopenharmony_ci %97 = OpConstant %18 16 232e5c31af7Sopenharmony_ci %99 = OpTypePointer Function %76 233e5c31af7Sopenharmony_ci %101 = OpTypePointer Function %10 234e5c31af7Sopenharmony_ci %213 = OpConstantComposite %7 %77 %77 235e5c31af7Sopenharmony_ci %246 = OpConstant %6 0.5 236e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 237e5c31af7Sopenharmony_ci %5 = OpLabel 238e5c31af7Sopenharmony_ci %100 = OpVariable %99 Function 239e5c31af7Sopenharmony_ci %13 = OpLoad %10 %12 240e5c31af7Sopenharmony_ci %14 = OpVectorShuffle %7 %13 %13 0 1 241e5c31af7Sopenharmony_ci %21 = OpAccessChain %20 %17 %19 242e5c31af7Sopenharmony_ci %341 = OpCompositeConstruct %10 %77 %14 %246 243e5c31af7Sopenharmony_ci %22 = OpLoad %7 %21 244e5c31af7Sopenharmony_ci %23 = OpFDiv %7 %14 %22 245e5c31af7Sopenharmony_ci %31 = OpCompositeExtract %6 %23 0 246e5c31af7Sopenharmony_ci %388 = OpCompositeExtract %6 %341 3 247e5c31af7Sopenharmony_ci %343 = OpCompositeConstruct %10 %388 %32 %213 248e5c31af7Sopenharmony_ci %394 = OpCompositeExtract %6 %343 1 249e5c31af7Sopenharmony_ci %33 = OpFMul %6 %31 %394 250e5c31af7Sopenharmony_ci %34 = OpConvertFToS %18 %33 251e5c31af7Sopenharmony_ci %37 = OpCompositeExtract %6 %23 1 252e5c31af7Sopenharmony_ci %38 = OpFMul %6 %37 %32 253e5c31af7Sopenharmony_ci %39 = OpConvertFToS %18 %38 254e5c31af7Sopenharmony_ci %48 = OpIMul %18 %39 %47 255e5c31af7Sopenharmony_ci %49 = OpIAdd %18 %34 %48 256e5c31af7Sopenharmony_ci OpBranch %53 257e5c31af7Sopenharmony_ci %53 = OpLabel 258e5c31af7Sopenharmony_ci %106 = OpPhi %18 %51 %5 %69 %54 259e5c31af7Sopenharmony_ci %104 = OpPhi %18 %19 %5 %72 %54 260e5c31af7Sopenharmony_ci %61 = OpSLessThan %60 %104 %49 261e5c31af7Sopenharmony_ci OpLoopMerge %55 %54 None 262e5c31af7Sopenharmony_ci OpBranchConditional %61 %54 %55 263e5c31af7Sopenharmony_ci %54 = OpLabel 264e5c31af7Sopenharmony_ci %64 = OpIMul %18 %62 %106 265e5c31af7Sopenharmony_ci %67 = OpISub %18 %65 %106 266e5c31af7Sopenharmony_ci %68 = OpIMul %18 %64 %67 267e5c31af7Sopenharmony_ci %69 = OpSDiv %18 %68 %65 268e5c31af7Sopenharmony_ci %72 = OpIAdd %18 %104 %71 269e5c31af7Sopenharmony_ci OpBranch %53 270e5c31af7Sopenharmony_ci %55 = OpLabel 271e5c31af7Sopenharmony_ci %98 = OpSMod %18 %106 %97 272e5c31af7Sopenharmony_ci OpStore %100 %95 273e5c31af7Sopenharmony_ci %102 = OpAccessChain %101 %100 %98 274e5c31af7Sopenharmony_ci %103 = OpLoad %10 %102 275e5c31af7Sopenharmony_ci OpStore %74 %103 276e5c31af7Sopenharmony_ci OpReturn 277e5c31af7Sopenharmony_ci OpFunctionEnd 278e5c31af7Sopenharmony_ciEND 279e5c31af7Sopenharmony_ci 280e5c31af7Sopenharmony_ci# uniforms for variant 281e5c31af7Sopenharmony_ci 282e5c31af7Sopenharmony_ci# resolution 283e5c31af7Sopenharmony_ciBUFFER variant_resolution DATA_TYPE vec2<float> DATA 284e5c31af7Sopenharmony_ci 256.0 256.0 285e5c31af7Sopenharmony_ciEND 286e5c31af7Sopenharmony_ci 287e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 288e5c31af7Sopenharmony_ci 289e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 290e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 291e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 292e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 293e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 294e5c31af7Sopenharmony_ci BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0 295e5c31af7Sopenharmony_ciEND 296e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 297e5c31af7Sopenharmony_ci 298e5c31af7Sopenharmony_ciCLEAR variant_pipeline 299e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 300e5c31af7Sopenharmony_ci 301e5c31af7Sopenharmony_ciEXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005 302