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