1e5c31af7Sopenharmony_ci#!amber 2e5c31af7Sopenharmony_ci 3e5c31af7Sopenharmony_ci# Copyright 2021 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 coverage-gap found by the GraphicsFuzz project. 19e5c31af7Sopenharmony_ci 20e5c31af7Sopenharmony_ci# Short description: A fragment shader that covers specific LLVM code paths 21e5c31af7Sopenharmony_ci 22e5c31af7Sopenharmony_ci# The test passes because the shader always writes red. 23e5c31af7Sopenharmony_ci 24e5c31af7Sopenharmony_ci# Optimized using spirv-opt with the following arguments: 25e5c31af7Sopenharmony_ci# '--copy-propagate-arrays' 26e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 27e5c31af7Sopenharmony_ci# '--merge-blocks' 28e5c31af7Sopenharmony_ci# '--private-to-local' 29e5c31af7Sopenharmony_ci# '--reduce-load-size' 30e5c31af7Sopenharmony_ci# '--eliminate-dead-code-aggressive' 31e5c31af7Sopenharmony_ci# '--ccp' 32e5c31af7Sopenharmony_ci# '--reduce-load-size' 33e5c31af7Sopenharmony_ci# '--convert-local-access-chains' 34e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 35e5c31af7Sopenharmony_ci# '--merge-return' 36e5c31af7Sopenharmony_ci# '--eliminate-local-single-block' 37e5c31af7Sopenharmony_ci# '--eliminate-dead-code-aggressive' 38e5c31af7Sopenharmony_ci# '--redundancy-elimination' 39e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 40e5c31af7Sopenharmony_ci# '--merge-return' 41e5c31af7Sopenharmony_ci# '--eliminate-local-multi-store' 42e5c31af7Sopenharmony_ci# '--reduce-load-size' 43e5c31af7Sopenharmony_ci# '--inline-entry-points-exhaustive' 44e5c31af7Sopenharmony_ci# '--vector-dce' 45e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 46e5c31af7Sopenharmony_ci# '--merge-return' 47e5c31af7Sopenharmony_ci# '--eliminate-local-multi-store' 48e5c31af7Sopenharmony_ci# '--eliminate-dead-branches' 49e5c31af7Sopenharmony_ci# '--merge-blocks' 50e5c31af7Sopenharmony_ci# '--eliminate-local-single-store' 51e5c31af7Sopenharmony_ci# spirv-opt commit hash: a0370efd589be33d5d9a85cfde2f85841b3755af 52e5c31af7Sopenharmony_ci 53e5c31af7Sopenharmony_ci 54e5c31af7Sopenharmony_ci 55e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH 56e5c31af7Sopenharmony_ci 57e5c31af7Sopenharmony_ci# variant_fragment_shader is derived from the following GLSL: 58e5c31af7Sopenharmony_ci# #version 320 es 59e5c31af7Sopenharmony_ci# #define _int_0 _GLF_uniform_int_values[0] 60e5c31af7Sopenharmony_ci# #define _float_1_0 _GLF_uniform_float_values[0] 61e5c31af7Sopenharmony_ci# #define _float_0_1 _GLF_uniform_float_values[1] 62e5c31af7Sopenharmony_ci# #define _float_0_0 _GLF_uniform_float_values[2] 63e5c31af7Sopenharmony_ci# 64e5c31af7Sopenharmony_ci# precision highp float; 65e5c31af7Sopenharmony_ci# precision highp int; 66e5c31af7Sopenharmony_ci# 67e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_int_values: 0 68e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0 69e5c31af7Sopenharmony_ci# { 70e5c31af7Sopenharmony_ci# int _GLF_uniform_int_values[1]; 71e5c31af7Sopenharmony_ci# }; 72e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_float_values: [1.0, 0.1, 0.0] 73e5c31af7Sopenharmony_ci# layout(set = 0, binding = 1) uniform buf1 74e5c31af7Sopenharmony_ci# { 75e5c31af7Sopenharmony_ci# float _GLF_uniform_float_values[3]; 76e5c31af7Sopenharmony_ci# }; 77e5c31af7Sopenharmony_ci# 78e5c31af7Sopenharmony_ci# const int _GLF_global_loop_bound = 10; 79e5c31af7Sopenharmony_ci# int _GLF_global_loop_count = 0; 80e5c31af7Sopenharmony_ci# 81e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 82e5c31af7Sopenharmony_ci# 83e5c31af7Sopenharmony_ci# // This function always returns 1.0 or greater. 84e5c31af7Sopenharmony_ci# float func(float x) 85e5c31af7Sopenharmony_ci# { 86e5c31af7Sopenharmony_ci# float f = _float_1_0; 87e5c31af7Sopenharmony_ci# 88e5c31af7Sopenharmony_ci# // Always false. 89e5c31af7Sopenharmony_ci# if(_float_1_0 < 1.0) 90e5c31af7Sopenharmony_ci# { 91e5c31af7Sopenharmony_ci# if(gl_FragCoord.x < _float_0_0) 92e5c31af7Sopenharmony_ci# { 93e5c31af7Sopenharmony_ci# return _float_1_0; 94e5c31af7Sopenharmony_ci# } 95e5c31af7Sopenharmony_ci# } 96e5c31af7Sopenharmony_ci# 97e5c31af7Sopenharmony_ci# while(_GLF_global_loop_count < _GLF_global_loop_bound) 98e5c31af7Sopenharmony_ci# { 99e5c31af7Sopenharmony_ci# _GLF_global_loop_count++; 100e5c31af7Sopenharmony_ci# f += _float_1_0; 101e5c31af7Sopenharmony_ci# 102e5c31af7Sopenharmony_ci# // Always true. 103e5c31af7Sopenharmony_ci# if(gl_FragCoord.x >= 0.0) 104e5c31af7Sopenharmony_ci# { 105e5c31af7Sopenharmony_ci# _GLF_color = vec4(_float_1_0); 106e5c31af7Sopenharmony_ci# } 107e5c31af7Sopenharmony_ci# 108e5c31af7Sopenharmony_ci# // Always false. 109e5c31af7Sopenharmony_ci# if (x < _float_0_0) 110e5c31af7Sopenharmony_ci# { 111e5c31af7Sopenharmony_ci# return f; 112e5c31af7Sopenharmony_ci# } 113e5c31af7Sopenharmony_ci# } 114e5c31af7Sopenharmony_ci# 115e5c31af7Sopenharmony_ci# // Never iterated as the loop bound has already been reached. 116e5c31af7Sopenharmony_ci# while(_GLF_global_loop_count < _GLF_global_loop_bound) 117e5c31af7Sopenharmony_ci# { 118e5c31af7Sopenharmony_ci# _GLF_global_loop_count ++; 119e5c31af7Sopenharmony_ci# } 120e5c31af7Sopenharmony_ci# 121e5c31af7Sopenharmony_ci# return f; 122e5c31af7Sopenharmony_ci# } 123e5c31af7Sopenharmony_ci# 124e5c31af7Sopenharmony_ci# void main() 125e5c31af7Sopenharmony_ci# { 126e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_0); 127e5c31af7Sopenharmony_ci# 128e5c31af7Sopenharmony_ci# // Always false. 129e5c31af7Sopenharmony_ci# if(gl_FragCoord.x < _float_0_1) 130e5c31af7Sopenharmony_ci# { 131e5c31af7Sopenharmony_ci# return; 132e5c31af7Sopenharmony_ci# } 133e5c31af7Sopenharmony_ci# 134e5c31af7Sopenharmony_ci# // v0 becomes (0, 0, 0, 0). 135e5c31af7Sopenharmony_ci# vec4 v0 = _GLF_color; 136e5c31af7Sopenharmony_ci# 137e5c31af7Sopenharmony_ci# // Always true. 138e5c31af7Sopenharmony_ci# if(gl_FragCoord.x >= 0.0) 139e5c31af7Sopenharmony_ci# { 140e5c31af7Sopenharmony_ci# _GLF_color = vec4(_float_1_0); 141e5c31af7Sopenharmony_ci# } 142e5c31af7Sopenharmony_ci# 143e5c31af7Sopenharmony_ci# _GLF_color = v0; 144e5c31af7Sopenharmony_ci# 145e5c31af7Sopenharmony_ci# // Always false. 146e5c31af7Sopenharmony_ci# if(gl_FragCoord.y < _float_0_1) 147e5c31af7Sopenharmony_ci# { 148e5c31af7Sopenharmony_ci# return; 149e5c31af7Sopenharmony_ci# } 150e5c31af7Sopenharmony_ci# 151e5c31af7Sopenharmony_ci# vec4 v1 = vec4(_float_0_0); 152e5c31af7Sopenharmony_ci# // v1 becomes (x, 0, 0, x), where x >= 1.0. 153e5c31af7Sopenharmony_ci# v1.x = v1.w = func(gl_FragCoord.y); 154e5c31af7Sopenharmony_ci# 155e5c31af7Sopenharmony_ci# // Always true. 156e5c31af7Sopenharmony_ci# if(gl_FragCoord.x >= 0.0) 157e5c31af7Sopenharmony_ci# { 158e5c31af7Sopenharmony_ci# _GLF_color = vec4(_float_1_0); 159e5c31af7Sopenharmony_ci# } 160e5c31af7Sopenharmony_ci# 161e5c31af7Sopenharmony_ci# // Always false. 162e5c31af7Sopenharmony_ci# if(gl_FragCoord.x < _float_0_0) 163e5c31af7Sopenharmony_ci# { 164e5c31af7Sopenharmony_ci# return; 165e5c31af7Sopenharmony_ci# } 166e5c31af7Sopenharmony_ci# 167e5c31af7Sopenharmony_ci# // Results clamps to (1, 0, 0, 1). 168e5c31af7Sopenharmony_ci# _GLF_color = v1; 169e5c31af7Sopenharmony_ci# } 170e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 171e5c31af7Sopenharmony_ci; SPIR-V 172e5c31af7Sopenharmony_ci; Version: 1.0 173e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10 174e5c31af7Sopenharmony_ci; Bound: 247 175e5c31af7Sopenharmony_ci; Schema: 0 176e5c31af7Sopenharmony_ci OpCapability Shader 177e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 178e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 179e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %35 %71 180e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 181e5c31af7Sopenharmony_ci OpSource ESSL 320 182e5c31af7Sopenharmony_ci OpName %4 "main" 183e5c31af7Sopenharmony_ci OpName %10 "func(f1;" 184e5c31af7Sopenharmony_ci OpName %9 "x" 185e5c31af7Sopenharmony_ci OpName %14 "_GLF_global_loop_count" 186e5c31af7Sopenharmony_ci OpName %16 "f" 187e5c31af7Sopenharmony_ci OpName %20 "buf1" 188e5c31af7Sopenharmony_ci OpMemberName %20 0 "_GLF_uniform_float_values" 189e5c31af7Sopenharmony_ci OpName %22 "" 190e5c31af7Sopenharmony_ci OpName %35 "gl_FragCoord" 191e5c31af7Sopenharmony_ci OpName %71 "_GLF_color" 192e5c31af7Sopenharmony_ci OpName %97 "buf0" 193e5c31af7Sopenharmony_ci OpMemberName %97 0 "_GLF_uniform_int_values" 194e5c31af7Sopenharmony_ci OpName %99 "" 195e5c31af7Sopenharmony_ci OpName %114 "v0" 196e5c31af7Sopenharmony_ci OpName %133 "v1" 197e5c31af7Sopenharmony_ci OpName %137 "param" 198e5c31af7Sopenharmony_ci OpDecorate %19 ArrayStride 16 199e5c31af7Sopenharmony_ci OpMemberDecorate %20 0 Offset 0 200e5c31af7Sopenharmony_ci OpDecorate %20 Block 201e5c31af7Sopenharmony_ci OpDecorate %22 DescriptorSet 0 202e5c31af7Sopenharmony_ci OpDecorate %22 Binding 1 203e5c31af7Sopenharmony_ci OpDecorate %35 BuiltIn FragCoord 204e5c31af7Sopenharmony_ci OpDecorate %71 Location 0 205e5c31af7Sopenharmony_ci OpDecorate %96 ArrayStride 16 206e5c31af7Sopenharmony_ci OpMemberDecorate %97 0 Offset 0 207e5c31af7Sopenharmony_ci OpDecorate %97 Block 208e5c31af7Sopenharmony_ci OpDecorate %99 DescriptorSet 0 209e5c31af7Sopenharmony_ci OpDecorate %99 Binding 0 210e5c31af7Sopenharmony_ci %2 = OpTypeVoid 211e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 212e5c31af7Sopenharmony_ci %6 = OpTypeFloat 32 213e5c31af7Sopenharmony_ci %7 = OpTypePointer Function %6 214e5c31af7Sopenharmony_ci %8 = OpTypeFunction %6 %7 215e5c31af7Sopenharmony_ci %12 = OpTypeInt 32 1 216e5c31af7Sopenharmony_ci %13 = OpTypePointer Private %12 217e5c31af7Sopenharmony_ci %14 = OpVariable %13 Private 218e5c31af7Sopenharmony_ci %15 = OpConstant %12 0 219e5c31af7Sopenharmony_ci %17 = OpTypeInt 32 0 220e5c31af7Sopenharmony_ci %18 = OpConstant %17 3 221e5c31af7Sopenharmony_ci %19 = OpTypeArray %6 %18 222e5c31af7Sopenharmony_ci %20 = OpTypeStruct %19 223e5c31af7Sopenharmony_ci %21 = OpTypePointer Uniform %20 224e5c31af7Sopenharmony_ci %22 = OpVariable %21 Uniform 225e5c31af7Sopenharmony_ci %23 = OpTypePointer Uniform %6 226e5c31af7Sopenharmony_ci %28 = OpConstant %6 1 227e5c31af7Sopenharmony_ci %29 = OpTypeBool 228e5c31af7Sopenharmony_ci %33 = OpTypeVector %6 4 229e5c31af7Sopenharmony_ci %34 = OpTypePointer Input %33 230e5c31af7Sopenharmony_ci %35 = OpVariable %34 Input 231e5c31af7Sopenharmony_ci %36 = OpConstant %17 0 232e5c31af7Sopenharmony_ci %37 = OpTypePointer Input %6 233e5c31af7Sopenharmony_ci %40 = OpConstant %12 2 234e5c31af7Sopenharmony_ci %55 = OpConstant %12 10 235e5c31af7Sopenharmony_ci %58 = OpConstant %12 1 236e5c31af7Sopenharmony_ci %66 = OpConstant %6 0 237e5c31af7Sopenharmony_ci %70 = OpTypePointer Output %33 238e5c31af7Sopenharmony_ci %71 = OpVariable %70 Output 239e5c31af7Sopenharmony_ci %95 = OpConstant %17 1 240e5c31af7Sopenharmony_ci %96 = OpTypeArray %12 %95 241e5c31af7Sopenharmony_ci %97 = OpTypeStruct %96 242e5c31af7Sopenharmony_ci %98 = OpTypePointer Uniform %97 243e5c31af7Sopenharmony_ci %99 = OpVariable %98 Uniform 244e5c31af7Sopenharmony_ci %100 = OpTypePointer Uniform %12 245e5c31af7Sopenharmony_ci %113 = OpTypePointer Function %33 246e5c31af7Sopenharmony_ci %166 = OpConstantFalse %29 247e5c31af7Sopenharmony_ci %167 = OpTypePointer Function %29 248e5c31af7Sopenharmony_ci %169 = OpConstantTrue %29 249e5c31af7Sopenharmony_ci %192 = OpUndef %6 250e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 251e5c31af7Sopenharmony_ci %5 = OpLabel 252e5c31af7Sopenharmony_ci %194 = OpVariable %167 Function %166 253e5c31af7Sopenharmony_ci %195 = OpVariable %7 Function 254e5c31af7Sopenharmony_ci %196 = OpVariable %7 Function 255e5c31af7Sopenharmony_ci %197 = OpVariable %7 Function 256e5c31af7Sopenharmony_ci %114 = OpVariable %113 Function 257e5c31af7Sopenharmony_ci %133 = OpVariable %113 Function 258e5c31af7Sopenharmony_ci %137 = OpVariable %7 Function 259e5c31af7Sopenharmony_ci OpSelectionMerge %164 None 260e5c31af7Sopenharmony_ci OpSwitch %36 %165 261e5c31af7Sopenharmony_ci %165 = OpLabel 262e5c31af7Sopenharmony_ci OpStore %14 %15 263e5c31af7Sopenharmony_ci %101 = OpAccessChain %100 %99 %15 %15 264e5c31af7Sopenharmony_ci %102 = OpLoad %12 %101 265e5c31af7Sopenharmony_ci %103 = OpConvertSToF %6 %102 266e5c31af7Sopenharmony_ci %104 = OpCompositeConstruct %33 %103 %103 %103 %103 267e5c31af7Sopenharmony_ci OpStore %71 %104 268e5c31af7Sopenharmony_ci %105 = OpAccessChain %37 %35 %36 269e5c31af7Sopenharmony_ci %106 = OpLoad %6 %105 270e5c31af7Sopenharmony_ci %107 = OpAccessChain %23 %22 %15 %58 271e5c31af7Sopenharmony_ci %108 = OpLoad %6 %107 272e5c31af7Sopenharmony_ci %109 = OpFOrdLessThan %29 %106 %108 273e5c31af7Sopenharmony_ci OpSelectionMerge %111 None 274e5c31af7Sopenharmony_ci OpBranchConditional %109 %110 %111 275e5c31af7Sopenharmony_ci %110 = OpLabel 276e5c31af7Sopenharmony_ci OpBranch %164 277e5c31af7Sopenharmony_ci %111 = OpLabel 278e5c31af7Sopenharmony_ci %115 = OpLoad %33 %71 279e5c31af7Sopenharmony_ci OpStore %114 %115 280e5c31af7Sopenharmony_ci %118 = OpFOrdGreaterThanEqual %29 %106 %66 281e5c31af7Sopenharmony_ci OpSelectionMerge %120 None 282e5c31af7Sopenharmony_ci OpBranchConditional %118 %119 %120 283e5c31af7Sopenharmony_ci %119 = OpLabel 284e5c31af7Sopenharmony_ci %121 = OpAccessChain %23 %22 %15 %15 285e5c31af7Sopenharmony_ci %122 = OpLoad %6 %121 286e5c31af7Sopenharmony_ci %123 = OpCompositeConstruct %33 %122 %122 %122 %122 287e5c31af7Sopenharmony_ci OpStore %71 %123 288e5c31af7Sopenharmony_ci OpBranch %120 289e5c31af7Sopenharmony_ci %120 = OpLabel 290e5c31af7Sopenharmony_ci OpStore %71 %115 291e5c31af7Sopenharmony_ci %125 = OpAccessChain %37 %35 %95 292e5c31af7Sopenharmony_ci %126 = OpLoad %6 %125 293e5c31af7Sopenharmony_ci %129 = OpFOrdLessThan %29 %126 %108 294e5c31af7Sopenharmony_ci OpSelectionMerge %131 None 295e5c31af7Sopenharmony_ci OpBranchConditional %129 %130 %131 296e5c31af7Sopenharmony_ci %130 = OpLabel 297e5c31af7Sopenharmony_ci OpBranch %164 298e5c31af7Sopenharmony_ci %131 = OpLabel 299e5c31af7Sopenharmony_ci %134 = OpAccessChain %23 %22 %15 %40 300e5c31af7Sopenharmony_ci %135 = OpLoad %6 %134 301e5c31af7Sopenharmony_ci %136 = OpCompositeConstruct %33 %135 %135 %135 %135 302e5c31af7Sopenharmony_ci OpStore %133 %136 303e5c31af7Sopenharmony_ci OpStore %137 %126 304e5c31af7Sopenharmony_ci OpStore %194 %166 305e5c31af7Sopenharmony_ci OpSelectionMerge %245 None 306e5c31af7Sopenharmony_ci OpSwitch %36 %199 307e5c31af7Sopenharmony_ci %199 = OpLabel 308e5c31af7Sopenharmony_ci %200 = OpAccessChain %23 %22 %15 %15 309e5c31af7Sopenharmony_ci %201 = OpLoad %6 %200 310e5c31af7Sopenharmony_ci OpStore %196 %201 311e5c31af7Sopenharmony_ci %202 = OpFOrdLessThan %29 %201 %28 312e5c31af7Sopenharmony_ci OpSelectionMerge %211 None 313e5c31af7Sopenharmony_ci OpBranchConditional %202 %203 %211 314e5c31af7Sopenharmony_ci %203 = OpLabel 315e5c31af7Sopenharmony_ci %204 = OpAccessChain %37 %35 %36 316e5c31af7Sopenharmony_ci %205 = OpLoad %6 %204 317e5c31af7Sopenharmony_ci %206 = OpAccessChain %23 %22 %15 %40 318e5c31af7Sopenharmony_ci %207 = OpLoad %6 %206 319e5c31af7Sopenharmony_ci %208 = OpFOrdLessThan %29 %205 %207 320e5c31af7Sopenharmony_ci OpSelectionMerge %210 None 321e5c31af7Sopenharmony_ci OpBranchConditional %208 %209 %210 322e5c31af7Sopenharmony_ci %209 = OpLabel 323e5c31af7Sopenharmony_ci OpStore %194 %169 324e5c31af7Sopenharmony_ci OpStore %195 %201 325e5c31af7Sopenharmony_ci OpBranch %245 326e5c31af7Sopenharmony_ci %210 = OpLabel 327e5c31af7Sopenharmony_ci OpBranch %211 328e5c31af7Sopenharmony_ci %211 = OpLabel 329e5c31af7Sopenharmony_ci OpBranch %212 330e5c31af7Sopenharmony_ci %212 = OpLabel 331e5c31af7Sopenharmony_ci %213 = OpPhi %6 %201 %211 %219 %232 332e5c31af7Sopenharmony_ci %214 = OpLoad %12 %14 333e5c31af7Sopenharmony_ci %215 = OpSLessThan %29 %214 %55 334e5c31af7Sopenharmony_ci OpLoopMerge %233 %232 None 335e5c31af7Sopenharmony_ci OpBranchConditional %215 %216 %233 336e5c31af7Sopenharmony_ci %216 = OpLabel 337e5c31af7Sopenharmony_ci %217 = OpLoad %12 %14 338e5c31af7Sopenharmony_ci %218 = OpIAdd %12 %217 %58 339e5c31af7Sopenharmony_ci OpStore %14 %218 340e5c31af7Sopenharmony_ci %219 = OpFAdd %6 %213 %201 341e5c31af7Sopenharmony_ci OpStore %196 %219 342e5c31af7Sopenharmony_ci %220 = OpAccessChain %37 %35 %36 343e5c31af7Sopenharmony_ci %221 = OpLoad %6 %220 344e5c31af7Sopenharmony_ci %222 = OpFOrdGreaterThanEqual %29 %221 %66 345e5c31af7Sopenharmony_ci OpSelectionMerge %225 None 346e5c31af7Sopenharmony_ci OpBranchConditional %222 %223 %225 347e5c31af7Sopenharmony_ci %223 = OpLabel 348e5c31af7Sopenharmony_ci %224 = OpCompositeConstruct %33 %201 %201 %201 %201 349e5c31af7Sopenharmony_ci OpStore %71 %224 350e5c31af7Sopenharmony_ci OpBranch %225 351e5c31af7Sopenharmony_ci %225 = OpLabel 352e5c31af7Sopenharmony_ci %227 = OpAccessChain %23 %22 %15 %40 353e5c31af7Sopenharmony_ci %228 = OpLoad %6 %227 354e5c31af7Sopenharmony_ci %229 = OpFOrdLessThan %29 %126 %228 355e5c31af7Sopenharmony_ci OpSelectionMerge %231 None 356e5c31af7Sopenharmony_ci OpBranchConditional %229 %230 %231 357e5c31af7Sopenharmony_ci %230 = OpLabel 358e5c31af7Sopenharmony_ci OpStore %194 %169 359e5c31af7Sopenharmony_ci OpStore %195 %219 360e5c31af7Sopenharmony_ci OpBranch %233 361e5c31af7Sopenharmony_ci %231 = OpLabel 362e5c31af7Sopenharmony_ci OpBranch %232 363e5c31af7Sopenharmony_ci %232 = OpLabel 364e5c31af7Sopenharmony_ci OpBranch %212 365e5c31af7Sopenharmony_ci %233 = OpLabel 366e5c31af7Sopenharmony_ci %234 = OpPhi %6 %192 %212 %219 %230 367e5c31af7Sopenharmony_ci %235 = OpPhi %6 %213 %212 %219 %230 368e5c31af7Sopenharmony_ci %236 = OpPhi %29 %166 %212 %169 %230 369e5c31af7Sopenharmony_ci OpSelectionMerge %237 None 370e5c31af7Sopenharmony_ci OpBranchConditional %236 %245 %237 371e5c31af7Sopenharmony_ci %237 = OpLabel 372e5c31af7Sopenharmony_ci OpBranch %238 373e5c31af7Sopenharmony_ci %238 = OpLabel 374e5c31af7Sopenharmony_ci %239 = OpLoad %12 %14 375e5c31af7Sopenharmony_ci %240 = OpSLessThan %29 %239 %55 376e5c31af7Sopenharmony_ci OpLoopMerge %244 %241 None 377e5c31af7Sopenharmony_ci OpBranchConditional %240 %241 %244 378e5c31af7Sopenharmony_ci %241 = OpLabel 379e5c31af7Sopenharmony_ci %242 = OpLoad %12 %14 380e5c31af7Sopenharmony_ci %243 = OpIAdd %12 %242 %58 381e5c31af7Sopenharmony_ci OpStore %14 %243 382e5c31af7Sopenharmony_ci OpBranch %238 383e5c31af7Sopenharmony_ci %244 = OpLabel 384e5c31af7Sopenharmony_ci OpStore %194 %169 385e5c31af7Sopenharmony_ci OpStore %195 %235 386e5c31af7Sopenharmony_ci OpBranch %245 387e5c31af7Sopenharmony_ci %245 = OpLabel 388e5c31af7Sopenharmony_ci %246 = OpPhi %6 %201 %209 %234 %233 %235 %244 389e5c31af7Sopenharmony_ci OpStore %197 %246 390e5c31af7Sopenharmony_ci %161 = OpCompositeInsert %33 %246 %136 3 391e5c31af7Sopenharmony_ci %163 = OpCompositeInsert %33 %246 %161 0 392e5c31af7Sopenharmony_ci OpStore %133 %163 393e5c31af7Sopenharmony_ci OpSelectionMerge %147 None 394e5c31af7Sopenharmony_ci OpBranchConditional %118 %146 %147 395e5c31af7Sopenharmony_ci %146 = OpLabel 396e5c31af7Sopenharmony_ci %148 = OpAccessChain %23 %22 %15 %15 397e5c31af7Sopenharmony_ci %149 = OpLoad %6 %148 398e5c31af7Sopenharmony_ci %150 = OpCompositeConstruct %33 %149 %149 %149 %149 399e5c31af7Sopenharmony_ci OpStore %71 %150 400e5c31af7Sopenharmony_ci OpBranch %147 401e5c31af7Sopenharmony_ci %147 = OpLabel 402e5c31af7Sopenharmony_ci %155 = OpFOrdLessThan %29 %106 %135 403e5c31af7Sopenharmony_ci OpSelectionMerge %157 None 404e5c31af7Sopenharmony_ci OpBranchConditional %155 %156 %157 405e5c31af7Sopenharmony_ci %156 = OpLabel 406e5c31af7Sopenharmony_ci OpBranch %164 407e5c31af7Sopenharmony_ci %157 = OpLabel 408e5c31af7Sopenharmony_ci OpStore %71 %163 409e5c31af7Sopenharmony_ci OpBranch %164 410e5c31af7Sopenharmony_ci %164 = OpLabel 411e5c31af7Sopenharmony_ci OpReturn 412e5c31af7Sopenharmony_ci OpFunctionEnd 413e5c31af7Sopenharmony_ci %10 = OpFunction %6 None %8 414e5c31af7Sopenharmony_ci %9 = OpFunctionParameter %7 415e5c31af7Sopenharmony_ci %11 = OpLabel 416e5c31af7Sopenharmony_ci %174 = OpVariable %167 Function %166 417e5c31af7Sopenharmony_ci %171 = OpVariable %7 Function 418e5c31af7Sopenharmony_ci %16 = OpVariable %7 Function 419e5c31af7Sopenharmony_ci OpSelectionMerge %170 None 420e5c31af7Sopenharmony_ci OpSwitch %36 %173 421e5c31af7Sopenharmony_ci %173 = OpLabel 422e5c31af7Sopenharmony_ci %24 = OpAccessChain %23 %22 %15 %15 423e5c31af7Sopenharmony_ci %25 = OpLoad %6 %24 424e5c31af7Sopenharmony_ci OpStore %16 %25 425e5c31af7Sopenharmony_ci %30 = OpFOrdLessThan %29 %25 %28 426e5c31af7Sopenharmony_ci OpSelectionMerge %32 None 427e5c31af7Sopenharmony_ci OpBranchConditional %30 %31 %32 428e5c31af7Sopenharmony_ci %31 = OpLabel 429e5c31af7Sopenharmony_ci %38 = OpAccessChain %37 %35 %36 430e5c31af7Sopenharmony_ci %39 = OpLoad %6 %38 431e5c31af7Sopenharmony_ci %41 = OpAccessChain %23 %22 %15 %40 432e5c31af7Sopenharmony_ci %42 = OpLoad %6 %41 433e5c31af7Sopenharmony_ci %43 = OpFOrdLessThan %29 %39 %42 434e5c31af7Sopenharmony_ci OpSelectionMerge %45 None 435e5c31af7Sopenharmony_ci OpBranchConditional %43 %44 %45 436e5c31af7Sopenharmony_ci %44 = OpLabel 437e5c31af7Sopenharmony_ci OpStore %174 %169 438e5c31af7Sopenharmony_ci OpStore %171 %25 439e5c31af7Sopenharmony_ci OpBranch %170 440e5c31af7Sopenharmony_ci %45 = OpLabel 441e5c31af7Sopenharmony_ci OpBranch %32 442e5c31af7Sopenharmony_ci %32 = OpLabel 443e5c31af7Sopenharmony_ci OpBranch %49 444e5c31af7Sopenharmony_ci %49 = OpLabel 445e5c31af7Sopenharmony_ci %179 = OpPhi %6 %25 %32 %63 %52 446e5c31af7Sopenharmony_ci %54 = OpLoad %12 %14 447e5c31af7Sopenharmony_ci %56 = OpSLessThan %29 %54 %55 448e5c31af7Sopenharmony_ci OpLoopMerge %51 %52 None 449e5c31af7Sopenharmony_ci OpBranchConditional %56 %50 %51 450e5c31af7Sopenharmony_ci %50 = OpLabel 451e5c31af7Sopenharmony_ci %57 = OpLoad %12 %14 452e5c31af7Sopenharmony_ci %59 = OpIAdd %12 %57 %58 453e5c31af7Sopenharmony_ci OpStore %14 %59 454e5c31af7Sopenharmony_ci %63 = OpFAdd %6 %179 %25 455e5c31af7Sopenharmony_ci OpStore %16 %63 456e5c31af7Sopenharmony_ci %64 = OpAccessChain %37 %35 %36 457e5c31af7Sopenharmony_ci %65 = OpLoad %6 %64 458e5c31af7Sopenharmony_ci %67 = OpFOrdGreaterThanEqual %29 %65 %66 459e5c31af7Sopenharmony_ci OpSelectionMerge %69 None 460e5c31af7Sopenharmony_ci OpBranchConditional %67 %68 %69 461e5c31af7Sopenharmony_ci %68 = OpLabel 462e5c31af7Sopenharmony_ci %74 = OpCompositeConstruct %33 %25 %25 %25 %25 463e5c31af7Sopenharmony_ci OpStore %71 %74 464e5c31af7Sopenharmony_ci OpBranch %69 465e5c31af7Sopenharmony_ci %69 = OpLabel 466e5c31af7Sopenharmony_ci %75 = OpLoad %6 %9 467e5c31af7Sopenharmony_ci %76 = OpAccessChain %23 %22 %15 %40 468e5c31af7Sopenharmony_ci %77 = OpLoad %6 %76 469e5c31af7Sopenharmony_ci %78 = OpFOrdLessThan %29 %75 %77 470e5c31af7Sopenharmony_ci OpSelectionMerge %80 None 471e5c31af7Sopenharmony_ci OpBranchConditional %78 %79 %80 472e5c31af7Sopenharmony_ci %79 = OpLabel 473e5c31af7Sopenharmony_ci OpStore %174 %169 474e5c31af7Sopenharmony_ci OpStore %171 %63 475e5c31af7Sopenharmony_ci OpBranch %51 476e5c31af7Sopenharmony_ci %80 = OpLabel 477e5c31af7Sopenharmony_ci OpBranch %52 478e5c31af7Sopenharmony_ci %52 = OpLabel 479e5c31af7Sopenharmony_ci OpBranch %49 480e5c31af7Sopenharmony_ci %51 = OpLabel 481e5c31af7Sopenharmony_ci %189 = OpPhi %6 %192 %49 %63 %79 482e5c31af7Sopenharmony_ci %187 = OpPhi %6 %179 %49 %63 %79 483e5c31af7Sopenharmony_ci %182 = OpPhi %29 %166 %49 %169 %79 484e5c31af7Sopenharmony_ci OpSelectionMerge %175 None 485e5c31af7Sopenharmony_ci OpBranchConditional %182 %170 %175 486e5c31af7Sopenharmony_ci %175 = OpLabel 487e5c31af7Sopenharmony_ci OpBranch %83 488e5c31af7Sopenharmony_ci %83 = OpLabel 489e5c31af7Sopenharmony_ci %88 = OpLoad %12 %14 490e5c31af7Sopenharmony_ci %89 = OpSLessThan %29 %88 %55 491e5c31af7Sopenharmony_ci OpLoopMerge %85 %84 None 492e5c31af7Sopenharmony_ci OpBranchConditional %89 %84 %85 493e5c31af7Sopenharmony_ci %84 = OpLabel 494e5c31af7Sopenharmony_ci %90 = OpLoad %12 %14 495e5c31af7Sopenharmony_ci %91 = OpIAdd %12 %90 %58 496e5c31af7Sopenharmony_ci OpStore %14 %91 497e5c31af7Sopenharmony_ci OpBranch %83 498e5c31af7Sopenharmony_ci %85 = OpLabel 499e5c31af7Sopenharmony_ci OpStore %174 %169 500e5c31af7Sopenharmony_ci OpStore %171 %187 501e5c31af7Sopenharmony_ci OpBranch %170 502e5c31af7Sopenharmony_ci %170 = OpLabel 503e5c31af7Sopenharmony_ci %188 = OpPhi %6 %25 %44 %189 %51 %187 %85 504e5c31af7Sopenharmony_ci OpReturnValue %188 505e5c31af7Sopenharmony_ci OpFunctionEnd 506e5c31af7Sopenharmony_ciEND 507e5c31af7Sopenharmony_ci 508e5c31af7Sopenharmony_ci# uniforms for variant 509e5c31af7Sopenharmony_ci 510e5c31af7Sopenharmony_ci# _GLF_uniform_float_values 511e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA 512e5c31af7Sopenharmony_ci 1.0 0.1 0.0 513e5c31af7Sopenharmony_ciEND 514e5c31af7Sopenharmony_ci# _GLF_uniform_int_values 515e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA 516e5c31af7Sopenharmony_ci 0 517e5c31af7Sopenharmony_ciEND 518e5c31af7Sopenharmony_ci 519e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 520e5c31af7Sopenharmony_ci 521e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 522e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 523e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 524e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 525e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 526e5c31af7Sopenharmony_ci BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1 527e5c31af7Sopenharmony_ci BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0 528e5c31af7Sopenharmony_ciEND 529e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 530e5c31af7Sopenharmony_ci 531e5c31af7Sopenharmony_ciCLEAR variant_pipeline 532e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 533e5c31af7Sopenharmony_ci 534e5c31af7Sopenharmony_ciEXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255 535