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