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