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_ciSHADER vertex variant_vertex_shader PASSTHROUGH 25e5c31af7Sopenharmony_ci 26e5c31af7Sopenharmony_ci# variant_fragment_shader is derived from the following GLSL: 27e5c31af7Sopenharmony_ci# #version 320 es 28e5c31af7Sopenharmony_ci# 29e5c31af7Sopenharmony_ci# #define _int_1 _GLF_uniform_int_values[0] 30e5c31af7Sopenharmony_ci# #define _int_0 _GLF_uniform_int_values[1] 31e5c31af7Sopenharmony_ci# #define _int_10 _GLF_uniform_int_values[2] 32e5c31af7Sopenharmony_ci# #define _int_6 _GLF_uniform_int_values[3] 33e5c31af7Sopenharmony_ci# 34e5c31af7Sopenharmony_ci# precision highp float; 35e5c31af7Sopenharmony_ci# precision highp int; 36e5c31af7Sopenharmony_ci# 37e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_int_values: [1, 0, 10, 6] 38e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0 39e5c31af7Sopenharmony_ci# { 40e5c31af7Sopenharmony_ci# int _GLF_uniform_int_values[4]; 41e5c31af7Sopenharmony_ci# }; 42e5c31af7Sopenharmony_ci# 43e5c31af7Sopenharmony_ci# const int _GLF_global_loop_bound = 10; 44e5c31af7Sopenharmony_ci# int _GLF_global_loop_count = 0; 45e5c31af7Sopenharmony_ci# 46e5c31af7Sopenharmony_ci# struct S 47e5c31af7Sopenharmony_ci# { 48e5c31af7Sopenharmony_ci# int data[10]; 49e5c31af7Sopenharmony_ci# }; 50e5c31af7Sopenharmony_ci# 51e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 52e5c31af7Sopenharmony_ci# 53e5c31af7Sopenharmony_ci# void func() 54e5c31af7Sopenharmony_ci# { 55e5c31af7Sopenharmony_ci# int a = _int_1; 56e5c31af7Sopenharmony_ci# int b = _int_1; 57e5c31af7Sopenharmony_ci# 58e5c31af7Sopenharmony_ci# while (_GLF_global_loop_count < _GLF_global_loop_bound) 59e5c31af7Sopenharmony_ci# { 60e5c31af7Sopenharmony_ci# _GLF_global_loop_count ++; 61e5c31af7Sopenharmony_ci# 62e5c31af7Sopenharmony_ci# if(b == _int_6) 63e5c31af7Sopenharmony_ci# { 64e5c31af7Sopenharmony_ci# break; 65e5c31af7Sopenharmony_ci# } 66e5c31af7Sopenharmony_ci# 67e5c31af7Sopenharmony_ci# b++; 68e5c31af7Sopenharmony_ci# 69e5c31af7Sopenharmony_ci# // Always false. 70e5c31af7Sopenharmony_ci# if(int[10](_int_1, _int_1, _int_1, _int_1, _int_1, _int_1, _int_1, _int_1, _int_1, _int_1)[a] == _int_0) 71e5c31af7Sopenharmony_ci# { 72e5c31af7Sopenharmony_ci# return; 73e5c31af7Sopenharmony_ci# } 74e5c31af7Sopenharmony_ci# } 75e5c31af7Sopenharmony_ci# } 76e5c31af7Sopenharmony_ci# 77e5c31af7Sopenharmony_ci# void main() 78e5c31af7Sopenharmony_ci# { 79e5c31af7Sopenharmony_ci# S obj = S(int[10](_int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0)); 80e5c31af7Sopenharmony_ci# 81e5c31af7Sopenharmony_ci# for(int i = _int_0; i < _int_10 && _GLF_global_loop_count < _GLF_global_loop_bound; i ++) 82e5c31af7Sopenharmony_ci# { 83e5c31af7Sopenharmony_ci# _GLF_global_loop_count ++; 84e5c31af7Sopenharmony_ci# 85e5c31af7Sopenharmony_ci# if(i == 0) 86e5c31af7Sopenharmony_ci# { 87e5c31af7Sopenharmony_ci# obj.data[i] = 1; 88e5c31af7Sopenharmony_ci# } 89e5c31af7Sopenharmony_ci# else if(i == 1) 90e5c31af7Sopenharmony_ci# { 91e5c31af7Sopenharmony_ci# // Calling func twice makes sure the global counter has reached its limit, and this 92e5c31af7Sopenharmony_ci# // loop will therefore end. 93e5c31af7Sopenharmony_ci# func(); 94e5c31af7Sopenharmony_ci# func(); 95e5c31af7Sopenharmony_ci# obj.data[i] = _int_1; 96e5c31af7Sopenharmony_ci# } 97e5c31af7Sopenharmony_ci# // Never executed. 98e5c31af7Sopenharmony_ci# else if(i == 4) 99e5c31af7Sopenharmony_ci# { 100e5c31af7Sopenharmony_ci# obj.data[i] = _int_1; 101e5c31af7Sopenharmony_ci# } 102e5c31af7Sopenharmony_ci# // Never executed. 103e5c31af7Sopenharmony_ci# else 104e5c31af7Sopenharmony_ci# { 105e5c31af7Sopenharmony_ci# discard; 106e5c31af7Sopenharmony_ci# } 107e5c31af7Sopenharmony_ci# } 108e5c31af7Sopenharmony_ci# 109e5c31af7Sopenharmony_ci# // Check results against reference values. 110e5c31af7Sopenharmony_ci# bool ok = true; 111e5c31af7Sopenharmony_ci# int ref[10] = int[10](_int_1, _int_1, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0); 112e5c31af7Sopenharmony_ci# 113e5c31af7Sopenharmony_ci# for(int i = 0; i < 10; i ++) 114e5c31af7Sopenharmony_ci# { 115e5c31af7Sopenharmony_ci# if(obj.data[i] != ref[i]) 116e5c31af7Sopenharmony_ci# { 117e5c31af7Sopenharmony_ci# ok = false; 118e5c31af7Sopenharmony_ci# } 119e5c31af7Sopenharmony_ci# } 120e5c31af7Sopenharmony_ci# 121e5c31af7Sopenharmony_ci# if(ok) 122e5c31af7Sopenharmony_ci# { 123e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1); 124e5c31af7Sopenharmony_ci# } 125e5c31af7Sopenharmony_ci# else 126e5c31af7Sopenharmony_ci# { 127e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_0); 128e5c31af7Sopenharmony_ci# } 129e5c31af7Sopenharmony_ci# } 130e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 131e5c31af7Sopenharmony_ci; SPIR-V 132e5c31af7Sopenharmony_ci; Version: 1.0 133e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10 134e5c31af7Sopenharmony_ci; Bound: 226 135e5c31af7Sopenharmony_ci; Schema: 0 136e5c31af7Sopenharmony_ci OpCapability Shader 137e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 138e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 139e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %207 140e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 141e5c31af7Sopenharmony_ci OpSource ESSL 320 142e5c31af7Sopenharmony_ci OpName %4 "main" 143e5c31af7Sopenharmony_ci OpName %6 "func(" 144e5c31af7Sopenharmony_ci OpName %10 "_GLF_global_loop_count" 145e5c31af7Sopenharmony_ci OpName %13 "a" 146e5c31af7Sopenharmony_ci OpName %17 "buf0" 147e5c31af7Sopenharmony_ci OpMemberName %17 0 "_GLF_uniform_int_values" 148e5c31af7Sopenharmony_ci OpName %19 "" 149e5c31af7Sopenharmony_ci OpName %23 "b" 150e5c31af7Sopenharmony_ci OpName %73 "indexable" 151e5c31af7Sopenharmony_ci OpName %82 "S" 152e5c31af7Sopenharmony_ci OpMemberName %82 0 "data" 153e5c31af7Sopenharmony_ci OpName %84 "obj" 154e5c31af7Sopenharmony_ci OpName %107 "i" 155e5c31af7Sopenharmony_ci OpName %157 "ok" 156e5c31af7Sopenharmony_ci OpName %159 "ref" 157e5c31af7Sopenharmony_ci OpName %181 "i" 158e5c31af7Sopenharmony_ci OpName %207 "_GLF_color" 159e5c31af7Sopenharmony_ci OpDecorate %16 ArrayStride 16 160e5c31af7Sopenharmony_ci OpMemberDecorate %17 0 Offset 0 161e5c31af7Sopenharmony_ci OpDecorate %17 Block 162e5c31af7Sopenharmony_ci OpDecorate %19 DescriptorSet 0 163e5c31af7Sopenharmony_ci OpDecorate %19 Binding 0 164e5c31af7Sopenharmony_ci OpDecorate %207 Location 0 165e5c31af7Sopenharmony_ci %2 = OpTypeVoid 166e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 167e5c31af7Sopenharmony_ci %8 = OpTypeInt 32 1 168e5c31af7Sopenharmony_ci %9 = OpTypePointer Private %8 169e5c31af7Sopenharmony_ci %10 = OpVariable %9 Private 170e5c31af7Sopenharmony_ci %11 = OpConstant %8 0 171e5c31af7Sopenharmony_ci %12 = OpTypePointer Function %8 172e5c31af7Sopenharmony_ci %14 = OpTypeInt 32 0 173e5c31af7Sopenharmony_ci %15 = OpConstant %14 4 174e5c31af7Sopenharmony_ci %16 = OpTypeArray %8 %15 175e5c31af7Sopenharmony_ci %17 = OpTypeStruct %16 176e5c31af7Sopenharmony_ci %18 = OpTypePointer Uniform %17 177e5c31af7Sopenharmony_ci %19 = OpVariable %18 Uniform 178e5c31af7Sopenharmony_ci %20 = OpTypePointer Uniform %8 179e5c31af7Sopenharmony_ci %32 = OpConstant %8 10 180e5c31af7Sopenharmony_ci %33 = OpTypeBool 181e5c31af7Sopenharmony_ci %36 = OpConstant %8 1 182e5c31af7Sopenharmony_ci %39 = OpConstant %8 3 183e5c31af7Sopenharmony_ci %68 = OpConstant %14 10 184e5c31af7Sopenharmony_ci %69 = OpTypeArray %8 %68 185e5c31af7Sopenharmony_ci %72 = OpTypePointer Function %69 186e5c31af7Sopenharmony_ci %82 = OpTypeStruct %69 187e5c31af7Sopenharmony_ci %83 = OpTypePointer Function %82 188e5c31af7Sopenharmony_ci %116 = OpConstant %8 2 189e5c31af7Sopenharmony_ci %144 = OpConstant %8 4 190e5c31af7Sopenharmony_ci %156 = OpTypePointer Function %33 191e5c31af7Sopenharmony_ci %158 = OpConstantTrue %33 192e5c31af7Sopenharmony_ci %198 = OpConstantFalse %33 193e5c31af7Sopenharmony_ci %204 = OpTypeFloat 32 194e5c31af7Sopenharmony_ci %205 = OpTypeVector %204 4 195e5c31af7Sopenharmony_ci %206 = OpTypePointer Output %205 196e5c31af7Sopenharmony_ci %207 = OpVariable %206 Output 197e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 198e5c31af7Sopenharmony_ci %5 = OpLabel 199e5c31af7Sopenharmony_ci %84 = OpVariable %83 Function 200e5c31af7Sopenharmony_ci %107 = OpVariable %12 Function 201e5c31af7Sopenharmony_ci %157 = OpVariable %156 Function 202e5c31af7Sopenharmony_ci %159 = OpVariable %72 Function 203e5c31af7Sopenharmony_ci %181 = OpVariable %12 Function 204e5c31af7Sopenharmony_ci OpStore %10 %11 205e5c31af7Sopenharmony_ci %85 = OpAccessChain %20 %19 %11 %36 206e5c31af7Sopenharmony_ci %86 = OpLoad %8 %85 207e5c31af7Sopenharmony_ci %87 = OpAccessChain %20 %19 %11 %36 208e5c31af7Sopenharmony_ci %88 = OpLoad %8 %87 209e5c31af7Sopenharmony_ci %89 = OpAccessChain %20 %19 %11 %36 210e5c31af7Sopenharmony_ci %90 = OpLoad %8 %89 211e5c31af7Sopenharmony_ci %91 = OpAccessChain %20 %19 %11 %36 212e5c31af7Sopenharmony_ci %92 = OpLoad %8 %91 213e5c31af7Sopenharmony_ci %93 = OpAccessChain %20 %19 %11 %36 214e5c31af7Sopenharmony_ci %94 = OpLoad %8 %93 215e5c31af7Sopenharmony_ci %95 = OpAccessChain %20 %19 %11 %36 216e5c31af7Sopenharmony_ci %96 = OpLoad %8 %95 217e5c31af7Sopenharmony_ci %97 = OpAccessChain %20 %19 %11 %36 218e5c31af7Sopenharmony_ci %98 = OpLoad %8 %97 219e5c31af7Sopenharmony_ci %99 = OpAccessChain %20 %19 %11 %36 220e5c31af7Sopenharmony_ci %100 = OpLoad %8 %99 221e5c31af7Sopenharmony_ci %101 = OpAccessChain %20 %19 %11 %36 222e5c31af7Sopenharmony_ci %102 = OpLoad %8 %101 223e5c31af7Sopenharmony_ci %103 = OpAccessChain %20 %19 %11 %36 224e5c31af7Sopenharmony_ci %104 = OpLoad %8 %103 225e5c31af7Sopenharmony_ci %105 = OpCompositeConstruct %69 %86 %88 %90 %92 %94 %96 %98 %100 %102 %104 226e5c31af7Sopenharmony_ci %106 = OpCompositeConstruct %82 %105 227e5c31af7Sopenharmony_ci OpStore %84 %106 228e5c31af7Sopenharmony_ci %108 = OpAccessChain %20 %19 %11 %36 229e5c31af7Sopenharmony_ci %109 = OpLoad %8 %108 230e5c31af7Sopenharmony_ci OpStore %107 %109 231e5c31af7Sopenharmony_ci OpBranch %110 232e5c31af7Sopenharmony_ci %110 = OpLabel 233e5c31af7Sopenharmony_ci OpLoopMerge %112 %113 None 234e5c31af7Sopenharmony_ci OpBranch %114 235e5c31af7Sopenharmony_ci %114 = OpLabel 236e5c31af7Sopenharmony_ci %115 = OpLoad %8 %107 237e5c31af7Sopenharmony_ci %117 = OpAccessChain %20 %19 %11 %116 238e5c31af7Sopenharmony_ci %118 = OpLoad %8 %117 239e5c31af7Sopenharmony_ci %119 = OpSLessThan %33 %115 %118 240e5c31af7Sopenharmony_ci %120 = OpLoad %8 %10 241e5c31af7Sopenharmony_ci %121 = OpSLessThan %33 %120 %32 242e5c31af7Sopenharmony_ci %122 = OpLogicalAnd %33 %119 %121 243e5c31af7Sopenharmony_ci OpBranchConditional %122 %111 %112 244e5c31af7Sopenharmony_ci %111 = OpLabel 245e5c31af7Sopenharmony_ci %123 = OpLoad %8 %10 246e5c31af7Sopenharmony_ci %124 = OpIAdd %8 %123 %36 247e5c31af7Sopenharmony_ci OpStore %10 %124 248e5c31af7Sopenharmony_ci %125 = OpLoad %8 %107 249e5c31af7Sopenharmony_ci %126 = OpIEqual %33 %125 %11 250e5c31af7Sopenharmony_ci OpSelectionMerge %128 None 251e5c31af7Sopenharmony_ci OpBranchConditional %126 %127 %131 252e5c31af7Sopenharmony_ci %127 = OpLabel 253e5c31af7Sopenharmony_ci %129 = OpLoad %8 %107 254e5c31af7Sopenharmony_ci %130 = OpAccessChain %12 %84 %11 %129 255e5c31af7Sopenharmony_ci OpStore %130 %36 256e5c31af7Sopenharmony_ci OpBranch %128 257e5c31af7Sopenharmony_ci %131 = OpLabel 258e5c31af7Sopenharmony_ci %132 = OpLoad %8 %107 259e5c31af7Sopenharmony_ci %133 = OpIEqual %33 %132 %36 260e5c31af7Sopenharmony_ci OpSelectionMerge %135 None 261e5c31af7Sopenharmony_ci OpBranchConditional %133 %134 %142 262e5c31af7Sopenharmony_ci %134 = OpLabel 263e5c31af7Sopenharmony_ci %136 = OpFunctionCall %2 %6 264e5c31af7Sopenharmony_ci %137 = OpFunctionCall %2 %6 265e5c31af7Sopenharmony_ci %138 = OpLoad %8 %107 266e5c31af7Sopenharmony_ci %139 = OpAccessChain %20 %19 %11 %11 267e5c31af7Sopenharmony_ci %140 = OpLoad %8 %139 268e5c31af7Sopenharmony_ci %141 = OpAccessChain %12 %84 %11 %138 269e5c31af7Sopenharmony_ci OpStore %141 %140 270e5c31af7Sopenharmony_ci OpBranch %135 271e5c31af7Sopenharmony_ci %142 = OpLabel 272e5c31af7Sopenharmony_ci %143 = OpLoad %8 %107 273e5c31af7Sopenharmony_ci %145 = OpIEqual %33 %143 %144 274e5c31af7Sopenharmony_ci OpSelectionMerge %147 None 275e5c31af7Sopenharmony_ci OpBranchConditional %145 %146 %152 276e5c31af7Sopenharmony_ci %146 = OpLabel 277e5c31af7Sopenharmony_ci %148 = OpLoad %8 %107 278e5c31af7Sopenharmony_ci %149 = OpAccessChain %20 %19 %11 %11 279e5c31af7Sopenharmony_ci %150 = OpLoad %8 %149 280e5c31af7Sopenharmony_ci %151 = OpAccessChain %12 %84 %11 %148 281e5c31af7Sopenharmony_ci OpStore %151 %150 282e5c31af7Sopenharmony_ci OpBranch %147 283e5c31af7Sopenharmony_ci %152 = OpLabel 284e5c31af7Sopenharmony_ci OpKill 285e5c31af7Sopenharmony_ci %147 = OpLabel 286e5c31af7Sopenharmony_ci OpBranch %135 287e5c31af7Sopenharmony_ci %135 = OpLabel 288e5c31af7Sopenharmony_ci OpBranch %128 289e5c31af7Sopenharmony_ci %128 = OpLabel 290e5c31af7Sopenharmony_ci OpBranch %113 291e5c31af7Sopenharmony_ci %113 = OpLabel 292e5c31af7Sopenharmony_ci %154 = OpLoad %8 %107 293e5c31af7Sopenharmony_ci %155 = OpIAdd %8 %154 %36 294e5c31af7Sopenharmony_ci OpStore %107 %155 295e5c31af7Sopenharmony_ci OpBranch %110 296e5c31af7Sopenharmony_ci %112 = OpLabel 297e5c31af7Sopenharmony_ci OpStore %157 %158 298e5c31af7Sopenharmony_ci %160 = OpAccessChain %20 %19 %11 %11 299e5c31af7Sopenharmony_ci %161 = OpLoad %8 %160 300e5c31af7Sopenharmony_ci %162 = OpAccessChain %20 %19 %11 %11 301e5c31af7Sopenharmony_ci %163 = OpLoad %8 %162 302e5c31af7Sopenharmony_ci %164 = OpAccessChain %20 %19 %11 %36 303e5c31af7Sopenharmony_ci %165 = OpLoad %8 %164 304e5c31af7Sopenharmony_ci %166 = OpAccessChain %20 %19 %11 %36 305e5c31af7Sopenharmony_ci %167 = OpLoad %8 %166 306e5c31af7Sopenharmony_ci %168 = OpAccessChain %20 %19 %11 %36 307e5c31af7Sopenharmony_ci %169 = OpLoad %8 %168 308e5c31af7Sopenharmony_ci %170 = OpAccessChain %20 %19 %11 %36 309e5c31af7Sopenharmony_ci %171 = OpLoad %8 %170 310e5c31af7Sopenharmony_ci %172 = OpAccessChain %20 %19 %11 %36 311e5c31af7Sopenharmony_ci %173 = OpLoad %8 %172 312e5c31af7Sopenharmony_ci %174 = OpAccessChain %20 %19 %11 %36 313e5c31af7Sopenharmony_ci %175 = OpLoad %8 %174 314e5c31af7Sopenharmony_ci %176 = OpAccessChain %20 %19 %11 %36 315e5c31af7Sopenharmony_ci %177 = OpLoad %8 %176 316e5c31af7Sopenharmony_ci %178 = OpAccessChain %20 %19 %11 %36 317e5c31af7Sopenharmony_ci %179 = OpLoad %8 %178 318e5c31af7Sopenharmony_ci %180 = OpCompositeConstruct %69 %161 %163 %165 %167 %169 %171 %173 %175 %177 %179 319e5c31af7Sopenharmony_ci OpStore %159 %180 320e5c31af7Sopenharmony_ci OpStore %181 %11 321e5c31af7Sopenharmony_ci OpBranch %182 322e5c31af7Sopenharmony_ci %182 = OpLabel 323e5c31af7Sopenharmony_ci OpLoopMerge %184 %185 None 324e5c31af7Sopenharmony_ci OpBranch %186 325e5c31af7Sopenharmony_ci %186 = OpLabel 326e5c31af7Sopenharmony_ci %187 = OpLoad %8 %181 327e5c31af7Sopenharmony_ci %188 = OpSLessThan %33 %187 %32 328e5c31af7Sopenharmony_ci OpBranchConditional %188 %183 %184 329e5c31af7Sopenharmony_ci %183 = OpLabel 330e5c31af7Sopenharmony_ci %189 = OpLoad %8 %181 331e5c31af7Sopenharmony_ci %190 = OpAccessChain %12 %84 %11 %189 332e5c31af7Sopenharmony_ci %191 = OpLoad %8 %190 333e5c31af7Sopenharmony_ci %192 = OpLoad %8 %181 334e5c31af7Sopenharmony_ci %193 = OpAccessChain %12 %159 %192 335e5c31af7Sopenharmony_ci %194 = OpLoad %8 %193 336e5c31af7Sopenharmony_ci %195 = OpINotEqual %33 %191 %194 337e5c31af7Sopenharmony_ci OpSelectionMerge %197 None 338e5c31af7Sopenharmony_ci OpBranchConditional %195 %196 %197 339e5c31af7Sopenharmony_ci %196 = OpLabel 340e5c31af7Sopenharmony_ci OpStore %157 %198 341e5c31af7Sopenharmony_ci OpBranch %197 342e5c31af7Sopenharmony_ci %197 = OpLabel 343e5c31af7Sopenharmony_ci OpBranch %185 344e5c31af7Sopenharmony_ci %185 = OpLabel 345e5c31af7Sopenharmony_ci %199 = OpLoad %8 %181 346e5c31af7Sopenharmony_ci %200 = OpIAdd %8 %199 %36 347e5c31af7Sopenharmony_ci OpStore %181 %200 348e5c31af7Sopenharmony_ci OpBranch %182 349e5c31af7Sopenharmony_ci %184 = OpLabel 350e5c31af7Sopenharmony_ci %201 = OpLoad %33 %157 351e5c31af7Sopenharmony_ci OpSelectionMerge %203 None 352e5c31af7Sopenharmony_ci OpBranchConditional %201 %202 %221 353e5c31af7Sopenharmony_ci %202 = OpLabel 354e5c31af7Sopenharmony_ci %208 = OpAccessChain %20 %19 %11 %11 355e5c31af7Sopenharmony_ci %209 = OpLoad %8 %208 356e5c31af7Sopenharmony_ci %210 = OpConvertSToF %204 %209 357e5c31af7Sopenharmony_ci %211 = OpAccessChain %20 %19 %11 %36 358e5c31af7Sopenharmony_ci %212 = OpLoad %8 %211 359e5c31af7Sopenharmony_ci %213 = OpConvertSToF %204 %212 360e5c31af7Sopenharmony_ci %214 = OpAccessChain %20 %19 %11 %36 361e5c31af7Sopenharmony_ci %215 = OpLoad %8 %214 362e5c31af7Sopenharmony_ci %216 = OpConvertSToF %204 %215 363e5c31af7Sopenharmony_ci %217 = OpAccessChain %20 %19 %11 %11 364e5c31af7Sopenharmony_ci %218 = OpLoad %8 %217 365e5c31af7Sopenharmony_ci %219 = OpConvertSToF %204 %218 366e5c31af7Sopenharmony_ci %220 = OpCompositeConstruct %205 %210 %213 %216 %219 367e5c31af7Sopenharmony_ci OpStore %207 %220 368e5c31af7Sopenharmony_ci OpBranch %203 369e5c31af7Sopenharmony_ci %221 = OpLabel 370e5c31af7Sopenharmony_ci %222 = OpAccessChain %20 %19 %11 %36 371e5c31af7Sopenharmony_ci %223 = OpLoad %8 %222 372e5c31af7Sopenharmony_ci %224 = OpConvertSToF %204 %223 373e5c31af7Sopenharmony_ci %225 = OpCompositeConstruct %205 %224 %224 %224 %224 374e5c31af7Sopenharmony_ci OpStore %207 %225 375e5c31af7Sopenharmony_ci OpBranch %203 376e5c31af7Sopenharmony_ci %203 = OpLabel 377e5c31af7Sopenharmony_ci OpReturn 378e5c31af7Sopenharmony_ci OpFunctionEnd 379e5c31af7Sopenharmony_ci %6 = OpFunction %2 None %3 380e5c31af7Sopenharmony_ci %7 = OpLabel 381e5c31af7Sopenharmony_ci %13 = OpVariable %12 Function 382e5c31af7Sopenharmony_ci %23 = OpVariable %12 Function 383e5c31af7Sopenharmony_ci %73 = OpVariable %72 Function 384e5c31af7Sopenharmony_ci %21 = OpAccessChain %20 %19 %11 %11 385e5c31af7Sopenharmony_ci %22 = OpLoad %8 %21 386e5c31af7Sopenharmony_ci OpStore %13 %22 387e5c31af7Sopenharmony_ci %24 = OpAccessChain %20 %19 %11 %11 388e5c31af7Sopenharmony_ci %25 = OpLoad %8 %24 389e5c31af7Sopenharmony_ci OpStore %23 %25 390e5c31af7Sopenharmony_ci OpBranch %26 391e5c31af7Sopenharmony_ci %26 = OpLabel 392e5c31af7Sopenharmony_ci OpLoopMerge %28 %29 None 393e5c31af7Sopenharmony_ci OpBranch %30 394e5c31af7Sopenharmony_ci %30 = OpLabel 395e5c31af7Sopenharmony_ci %31 = OpLoad %8 %10 396e5c31af7Sopenharmony_ci %34 = OpSLessThan %33 %31 %32 397e5c31af7Sopenharmony_ci OpBranchConditional %34 %27 %28 398e5c31af7Sopenharmony_ci %27 = OpLabel 399e5c31af7Sopenharmony_ci %35 = OpLoad %8 %10 400e5c31af7Sopenharmony_ci %37 = OpIAdd %8 %35 %36 401e5c31af7Sopenharmony_ci OpStore %10 %37 402e5c31af7Sopenharmony_ci %38 = OpLoad %8 %23 403e5c31af7Sopenharmony_ci %40 = OpAccessChain %20 %19 %11 %39 404e5c31af7Sopenharmony_ci %41 = OpLoad %8 %40 405e5c31af7Sopenharmony_ci %42 = OpIEqual %33 %38 %41 406e5c31af7Sopenharmony_ci OpSelectionMerge %44 None 407e5c31af7Sopenharmony_ci OpBranchConditional %42 %43 %44 408e5c31af7Sopenharmony_ci %43 = OpLabel 409e5c31af7Sopenharmony_ci OpBranch %28 410e5c31af7Sopenharmony_ci %44 = OpLabel 411e5c31af7Sopenharmony_ci %46 = OpLoad %8 %23 412e5c31af7Sopenharmony_ci %47 = OpIAdd %8 %46 %36 413e5c31af7Sopenharmony_ci OpStore %23 %47 414e5c31af7Sopenharmony_ci %48 = OpAccessChain %20 %19 %11 %11 415e5c31af7Sopenharmony_ci %49 = OpLoad %8 %48 416e5c31af7Sopenharmony_ci %50 = OpAccessChain %20 %19 %11 %11 417e5c31af7Sopenharmony_ci %51 = OpLoad %8 %50 418e5c31af7Sopenharmony_ci %52 = OpAccessChain %20 %19 %11 %11 419e5c31af7Sopenharmony_ci %53 = OpLoad %8 %52 420e5c31af7Sopenharmony_ci %54 = OpAccessChain %20 %19 %11 %11 421e5c31af7Sopenharmony_ci %55 = OpLoad %8 %54 422e5c31af7Sopenharmony_ci %56 = OpAccessChain %20 %19 %11 %11 423e5c31af7Sopenharmony_ci %57 = OpLoad %8 %56 424e5c31af7Sopenharmony_ci %58 = OpAccessChain %20 %19 %11 %11 425e5c31af7Sopenharmony_ci %59 = OpLoad %8 %58 426e5c31af7Sopenharmony_ci %60 = OpAccessChain %20 %19 %11 %11 427e5c31af7Sopenharmony_ci %61 = OpLoad %8 %60 428e5c31af7Sopenharmony_ci %62 = OpAccessChain %20 %19 %11 %11 429e5c31af7Sopenharmony_ci %63 = OpLoad %8 %62 430e5c31af7Sopenharmony_ci %64 = OpAccessChain %20 %19 %11 %11 431e5c31af7Sopenharmony_ci %65 = OpLoad %8 %64 432e5c31af7Sopenharmony_ci %66 = OpAccessChain %20 %19 %11 %11 433e5c31af7Sopenharmony_ci %67 = OpLoad %8 %66 434e5c31af7Sopenharmony_ci %70 = OpCompositeConstruct %69 %49 %51 %53 %55 %57 %59 %61 %63 %65 %67 435e5c31af7Sopenharmony_ci %71 = OpLoad %8 %13 436e5c31af7Sopenharmony_ci OpStore %73 %70 437e5c31af7Sopenharmony_ci %74 = OpAccessChain %12 %73 %71 438e5c31af7Sopenharmony_ci %75 = OpLoad %8 %74 439e5c31af7Sopenharmony_ci %76 = OpAccessChain %20 %19 %11 %36 440e5c31af7Sopenharmony_ci %77 = OpLoad %8 %76 441e5c31af7Sopenharmony_ci %78 = OpIEqual %33 %75 %77 442e5c31af7Sopenharmony_ci OpSelectionMerge %80 None 443e5c31af7Sopenharmony_ci OpBranchConditional %78 %79 %80 444e5c31af7Sopenharmony_ci %79 = OpLabel 445e5c31af7Sopenharmony_ci OpReturn 446e5c31af7Sopenharmony_ci %80 = OpLabel 447e5c31af7Sopenharmony_ci OpBranch %29 448e5c31af7Sopenharmony_ci %29 = OpLabel 449e5c31af7Sopenharmony_ci OpBranch %26 450e5c31af7Sopenharmony_ci %28 = OpLabel 451e5c31af7Sopenharmony_ci OpReturn 452e5c31af7Sopenharmony_ci OpFunctionEnd 453e5c31af7Sopenharmony_ciEND 454e5c31af7Sopenharmony_ci 455e5c31af7Sopenharmony_ci# uniforms for variant 456e5c31af7Sopenharmony_ci 457e5c31af7Sopenharmony_ci# _GLF_uniform_int_values 458e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA 459e5c31af7Sopenharmony_ci 1 0 10 6 460e5c31af7Sopenharmony_ciEND 461e5c31af7Sopenharmony_ci 462e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 463e5c31af7Sopenharmony_ci 464e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 465e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 466e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 467e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 468e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 469e5c31af7Sopenharmony_ci BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0 470e5c31af7Sopenharmony_ciEND 471e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 472e5c31af7Sopenharmony_ci 473e5c31af7Sopenharmony_ciCLEAR variant_pipeline 474e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256 475e5c31af7Sopenharmony_ci 476e5c31af7Sopenharmony_ciEXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255 477