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_3 _GLF_uniform_int_values[0] 29e5c31af7Sopenharmony_ci# #define _int_1 _GLF_uniform_int_values[1] 30e5c31af7Sopenharmony_ci# #define _int_2 _GLF_uniform_int_values[2] 31e5c31af7Sopenharmony_ci# #define _int_4 _GLF_uniform_int_values[3] 32e5c31af7Sopenharmony_ci# #define _int_14 _GLF_uniform_int_values[4] 33e5c31af7Sopenharmony_ci# #define _int_15 _GLF_uniform_int_values[5] 34e5c31af7Sopenharmony_ci# #define _int_16 _GLF_uniform_int_values[6] 35e5c31af7Sopenharmony_ci# #define _int_17 _GLF_uniform_int_values[7] 36e5c31af7Sopenharmony_ci# #define _int_18 _GLF_uniform_int_values[8] 37e5c31af7Sopenharmony_ci# #define _int_19 _GLF_uniform_int_values[9] 38e5c31af7Sopenharmony_ci# #define _int_10 _GLF_uniform_int_values[10] 39e5c31af7Sopenharmony_ci# #define _int_0 _GLF_uniform_int_values[11] 40e5c31af7Sopenharmony_ci# #define _int_9 _GLF_uniform_int_values[12] 41e5c31af7Sopenharmony_ci# #define _int_5 _GLF_uniform_int_values[13] 42e5c31af7Sopenharmony_ci# #define _int_6 _GLF_uniform_int_values[14] 43e5c31af7Sopenharmony_ci# #define _int_7 _GLF_uniform_int_values[15] 44e5c31af7Sopenharmony_ci# #define _int_8 _GLF_uniform_int_values[16] 45e5c31af7Sopenharmony_ci# #define _float_1_0 _GLF_uniform_float_values[0] 46e5c31af7Sopenharmony_ci# 47e5c31af7Sopenharmony_ci# precision highp float; 48e5c31af7Sopenharmony_ci# precision highp int; 49e5c31af7Sopenharmony_ci# 50e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_float_values: 1.0 51e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0 52e5c31af7Sopenharmony_ci# { 53e5c31af7Sopenharmony_ci# float _GLF_uniform_float_values[1]; 54e5c31af7Sopenharmony_ci# }; 55e5c31af7Sopenharmony_ci# 56e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_int_values: [3, 1, 2, 4, 14, 15, 16, 17, 18, 19, 10, 0, 9, 5, 6, 7, 8] 57e5c31af7Sopenharmony_ci# layout(set = 0, binding = 1) uniform buf1 58e5c31af7Sopenharmony_ci# { 59e5c31af7Sopenharmony_ci# int _GLF_uniform_int_values[17]; 60e5c31af7Sopenharmony_ci# }; 61e5c31af7Sopenharmony_ci# 62e5c31af7Sopenharmony_ci# // Contents of two: 2.0 63e5c31af7Sopenharmony_ci# layout(set = 0, binding = 2) uniform buf2 64e5c31af7Sopenharmony_ci# { 65e5c31af7Sopenharmony_ci# float two; 66e5c31af7Sopenharmony_ci# }; 67e5c31af7Sopenharmony_ci# 68e5c31af7Sopenharmony_ci# struct S 69e5c31af7Sopenharmony_ci# { 70e5c31af7Sopenharmony_ci# int data; 71e5c31af7Sopenharmony_ci# int leftIndex; 72e5c31af7Sopenharmony_ci# int rightIndex; 73e5c31af7Sopenharmony_ci# }; 74e5c31af7Sopenharmony_ci# 75e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 76e5c31af7Sopenharmony_ci# 77e5c31af7Sopenharmony_ci# int data0[10] = int[10](0, 1, 2, 3, 4, 5, 6, 7, 8, 9), data1[10] = int[10](10, 11, 12, 13, 14, 15, 16, 17, 18, 19); 78e5c31af7Sopenharmony_ci# 79e5c31af7Sopenharmony_ci# void func0(int from, int mid, int to) 80e5c31af7Sopenharmony_ci# { 81e5c31af7Sopenharmony_ci# int k = _int_1, i = 1, j = _int_1; 82e5c31af7Sopenharmony_ci# 83e5c31af7Sopenharmony_ci# while(i <= mid) 84e5c31af7Sopenharmony_ci# { 85e5c31af7Sopenharmony_ci# if(i <= j) 86e5c31af7Sopenharmony_ci# { 87e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_1); 88e5c31af7Sopenharmony_ci# 89e5c31af7Sopenharmony_ci# int a = - _int_1; 90e5c31af7Sopenharmony_ci# 91e5c31af7Sopenharmony_ci# // Iterates once. 92e5c31af7Sopenharmony_ci# while(a != _int_1) 93e5c31af7Sopenharmony_ci# { 94e5c31af7Sopenharmony_ci# a = S[10](S(_int_1, _int_2, _int_3), S(_int_1, _int_2, _int_3), S(_int_1, _int_2, _int_3), S(_int_1, _int_2, _int_3), S(_int_1, _int_2, _int_3), S(_int_1, _int_2, _int_3), S(_int_1, _int_2, _int_3), S(_int_1, _int_2, _int_3), S(_int_1, _int_2, _int_3), S(_int_1, _int_2, _int_3))[clamp(a, _int_0, _int_9)].data; 95e5c31af7Sopenharmony_ci# } 96e5c31af7Sopenharmony_ci# } 97e5c31af7Sopenharmony_ci# else 98e5c31af7Sopenharmony_ci# { 99e5c31af7Sopenharmony_ci# data1[k++] = data0[j++]; 100e5c31af7Sopenharmony_ci# } 101e5c31af7Sopenharmony_ci# 102e5c31af7Sopenharmony_ci# i++; 103e5c31af7Sopenharmony_ci# } 104e5c31af7Sopenharmony_ci# 105e5c31af7Sopenharmony_ci# while(i < 5 && k < _int_10) 106e5c31af7Sopenharmony_ci# { 107e5c31af7Sopenharmony_ci# data1[k++] = int[10](_int_0, _int_1, _int_2, _int_3, _int_4, _int_5, _int_6, _int_7, _int_8, _int_9)[i++]; 108e5c31af7Sopenharmony_ci# } 109e5c31af7Sopenharmony_ci# 110e5c31af7Sopenharmony_ci# for(int i = from; i <= to - 1; i++) 111e5c31af7Sopenharmony_ci# { 112e5c31af7Sopenharmony_ci# data0[i] = data1[i]; 113e5c31af7Sopenharmony_ci# } 114e5c31af7Sopenharmony_ci# } 115e5c31af7Sopenharmony_ci# 116e5c31af7Sopenharmony_ci# int func1() 117e5c31af7Sopenharmony_ci# { 118e5c31af7Sopenharmony_ci# int a = _int_1; 119e5c31af7Sopenharmony_ci# 120e5c31af7Sopenharmony_ci# for(int i = 1; i < 10; i *= 2) 121e5c31af7Sopenharmony_ci# { 122e5c31af7Sopenharmony_ci# for(int j = 1; j < 10; j += i) 123e5c31af7Sopenharmony_ci# { 124e5c31af7Sopenharmony_ci# func0(i, j, min(i + j, 10)); 125e5c31af7Sopenharmony_ci# } 126e5c31af7Sopenharmony_ci# 127e5c31af7Sopenharmony_ci# while(a < _int_5) 128e5c31af7Sopenharmony_ci# { 129e5c31af7Sopenharmony_ci# // v becomes (0, 0). 130e5c31af7Sopenharmony_ci# ivec2 v = ivec2(vec2(_float_1_0) / two); 131e5c31af7Sopenharmony_ci# 132e5c31af7Sopenharmony_ci# // This loop is never iterated. 133e5c31af7Sopenharmony_ci# while(v.x + v.y > _int_2) 134e5c31af7Sopenharmony_ci# { 135e5c31af7Sopenharmony_ci# } 136e5c31af7Sopenharmony_ci# 137e5c31af7Sopenharmony_ci# a++; 138e5c31af7Sopenharmony_ci# } 139e5c31af7Sopenharmony_ci# } 140e5c31af7Sopenharmony_ci# return a; 141e5c31af7Sopenharmony_ci# } 142e5c31af7Sopenharmony_ci# 143e5c31af7Sopenharmony_ci# void main() 144e5c31af7Sopenharmony_ci# { 145e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_0); 146e5c31af7Sopenharmony_ci# 147e5c31af7Sopenharmony_ci# // Always true. 148e5c31af7Sopenharmony_ci# if(func1() == _int_5) 149e5c31af7Sopenharmony_ci# { 150e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1); 151e5c31af7Sopenharmony_ci# } 152e5c31af7Sopenharmony_ci# 153e5c31af7Sopenharmony_ci# /* 154e5c31af7Sopenharmony_ci# This python script was used to generate the reference values: 155e5c31af7Sopenharmony_ci# 156e5c31af7Sopenharmony_ci# data0 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 157e5c31af7Sopenharmony_ci# data1 = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 158e5c31af7Sopenharmony_ci# 159e5c31af7Sopenharmony_ci# def func0(x, y, z): 160e5c31af7Sopenharmony_ci# global data0 161e5c31af7Sopenharmony_ci# global data1 162e5c31af7Sopenharmony_ci# k = 1 163e5c31af7Sopenharmony_ci# i = 1 164e5c31af7Sopenharmony_ci# j = 1 165e5c31af7Sopenharmony_ci# 166e5c31af7Sopenharmony_ci# while i <= y: 167e5c31af7Sopenharmony_ci# if i > j: 168e5c31af7Sopenharmony_ci# data1[k] = data0[j] 169e5c31af7Sopenharmony_ci# k = k + 1 170e5c31af7Sopenharmony_ci# j = j + 1 171e5c31af7Sopenharmony_ci# i = i + 1 172e5c31af7Sopenharmony_ci# 173e5c31af7Sopenharmony_ci# while i < 5 and k < 10: 174e5c31af7Sopenharmony_ci# data1[k] = i 175e5c31af7Sopenharmony_ci# k = k + 1 176e5c31af7Sopenharmony_ci# i = i + 1 177e5c31af7Sopenharmony_ci# 178e5c31af7Sopenharmony_ci# for i in range(x, z): 179e5c31af7Sopenharmony_ci# data0[i] = data1[i] 180e5c31af7Sopenharmony_ci# 181e5c31af7Sopenharmony_ci# def func1(): 182e5c31af7Sopenharmony_ci# a = 1 183e5c31af7Sopenharmony_ci# i = 1 184e5c31af7Sopenharmony_ci# 185e5c31af7Sopenharmony_ci# while i < 10: 186e5c31af7Sopenharmony_ci# j = 1 187e5c31af7Sopenharmony_ci# while j < 10: 188e5c31af7Sopenharmony_ci# func0(i, j, min(i + j, 10)) 189e5c31af7Sopenharmony_ci# j = i + j 190e5c31af7Sopenharmony_ci# while a < 5: 191e5c31af7Sopenharmony_ci# a = a + 1 192e5c31af7Sopenharmony_ci# i = 2 * i 193e5c31af7Sopenharmony_ci# return a 194e5c31af7Sopenharmony_ci# 195e5c31af7Sopenharmony_ci# print(func1()) 196e5c31af7Sopenharmony_ci# print(data0) 197e5c31af7Sopenharmony_ci# print(data1) 198e5c31af7Sopenharmony_ci# */ 199e5c31af7Sopenharmony_ci# 200e5c31af7Sopenharmony_ci# int ref0[10] = int[10](_int_0, _int_2, _int_3, _int_4, _int_14, _int_15, _int_16, _int_17, _int_18, _int_19); 201e5c31af7Sopenharmony_ci# int ref1[10] = int[10](_int_10, _int_2, _int_3, _int_4, _int_14, _int_15, _int_16, _int_17, _int_18, _int_19); 202e5c31af7Sopenharmony_ci# 203e5c31af7Sopenharmony_ci# // Verify the global arrays against reference and set output to zero if the check fails. 204e5c31af7Sopenharmony_ci# for(int i = _int_0; i < _int_10; i++) 205e5c31af7Sopenharmony_ci# { 206e5c31af7Sopenharmony_ci# if(data0[i] != ref0[i] || data1[i] != ref1[i]) 207e5c31af7Sopenharmony_ci# { 208e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_0); 209e5c31af7Sopenharmony_ci# } 210e5c31af7Sopenharmony_ci# } 211e5c31af7Sopenharmony_ci# } 212e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 213e5c31af7Sopenharmony_ci; SPIR-V 214e5c31af7Sopenharmony_ci; Version: 1.0 215e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10 216e5c31af7Sopenharmony_ci; Bound: 437 217e5c31af7Sopenharmony_ci; Schema: 0 218e5c31af7Sopenharmony_ci OpCapability Shader 219e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 220e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 221e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %75 222e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 223e5c31af7Sopenharmony_ci OpSource ESSL 320 224e5c31af7Sopenharmony_ci OpName %4 "main" 225e5c31af7Sopenharmony_ci OpName %12 "func0(i1;i1;i1;" 226e5c31af7Sopenharmony_ci OpName %9 "from" 227e5c31af7Sopenharmony_ci OpName %10 "mid" 228e5c31af7Sopenharmony_ci OpName %11 "to" 229e5c31af7Sopenharmony_ci OpName %15 "func1(" 230e5c31af7Sopenharmony_ci OpName %21 "data0" 231e5c31af7Sopenharmony_ci OpName %33 "data1" 232e5c31af7Sopenharmony_ci OpName %45 "k" 233e5c31af7Sopenharmony_ci OpName %48 "buf1" 234e5c31af7Sopenharmony_ci OpMemberName %48 0 "_GLF_uniform_int_values" 235e5c31af7Sopenharmony_ci OpName %50 "" 236e5c31af7Sopenharmony_ci OpName %54 "i" 237e5c31af7Sopenharmony_ci OpName %55 "j" 238e5c31af7Sopenharmony_ci OpName %75 "_GLF_color" 239e5c31af7Sopenharmony_ci OpName %80 "a" 240e5c31af7Sopenharmony_ci OpName %99 "S" 241e5c31af7Sopenharmony_ci OpMemberName %99 0 "data" 242e5c31af7Sopenharmony_ci OpMemberName %99 1 "leftIndex" 243e5c31af7Sopenharmony_ci OpMemberName %99 2 "rightIndex" 244e5c31af7Sopenharmony_ci OpName %173 "indexable" 245e5c31af7Sopenharmony_ci OpName %227 "indexable" 246e5c31af7Sopenharmony_ci OpName %231 "i" 247e5c31af7Sopenharmony_ci OpName %249 "a" 248e5c31af7Sopenharmony_ci OpName %252 "i" 249e5c31af7Sopenharmony_ci OpName %260 "j" 250e5c31af7Sopenharmony_ci OpName %272 "param" 251e5c31af7Sopenharmony_ci OpName %274 "param" 252e5c31af7Sopenharmony_ci OpName %276 "param" 253e5c31af7Sopenharmony_ci OpName %292 "v" 254e5c31af7Sopenharmony_ci OpName %295 "buf0" 255e5c31af7Sopenharmony_ci OpMemberName %295 0 "_GLF_uniform_float_values" 256e5c31af7Sopenharmony_ci OpName %297 "" 257e5c31af7Sopenharmony_ci OpName %303 "buf2" 258e5c31af7Sopenharmony_ci OpMemberName %303 0 "two" 259e5c31af7Sopenharmony_ci OpName %305 "" 260e5c31af7Sopenharmony_ci OpName %355 "ref0" 261e5c31af7Sopenharmony_ci OpName %377 "ref1" 262e5c31af7Sopenharmony_ci OpName %399 "i" 263e5c31af7Sopenharmony_ci OpDecorate %47 ArrayStride 16 264e5c31af7Sopenharmony_ci OpMemberDecorate %48 0 Offset 0 265e5c31af7Sopenharmony_ci OpDecorate %48 Block 266e5c31af7Sopenharmony_ci OpDecorate %50 DescriptorSet 0 267e5c31af7Sopenharmony_ci OpDecorate %50 Binding 1 268e5c31af7Sopenharmony_ci OpDecorate %75 Location 0 269e5c31af7Sopenharmony_ci OpDecorate %294 ArrayStride 16 270e5c31af7Sopenharmony_ci OpMemberDecorate %295 0 Offset 0 271e5c31af7Sopenharmony_ci OpDecorate %295 Block 272e5c31af7Sopenharmony_ci OpDecorate %297 DescriptorSet 0 273e5c31af7Sopenharmony_ci OpDecorate %297 Binding 0 274e5c31af7Sopenharmony_ci OpMemberDecorate %303 0 Offset 0 275e5c31af7Sopenharmony_ci OpDecorate %303 Block 276e5c31af7Sopenharmony_ci OpDecorate %305 DescriptorSet 0 277e5c31af7Sopenharmony_ci OpDecorate %305 Binding 2 278e5c31af7Sopenharmony_ci %2 = OpTypeVoid 279e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 280e5c31af7Sopenharmony_ci %6 = OpTypeInt 32 1 281e5c31af7Sopenharmony_ci %7 = OpTypePointer Function %6 282e5c31af7Sopenharmony_ci %8 = OpTypeFunction %2 %7 %7 %7 283e5c31af7Sopenharmony_ci %14 = OpTypeFunction %6 284e5c31af7Sopenharmony_ci %17 = OpTypeInt 32 0 285e5c31af7Sopenharmony_ci %18 = OpConstant %17 10 286e5c31af7Sopenharmony_ci %19 = OpTypeArray %6 %18 287e5c31af7Sopenharmony_ci %20 = OpTypePointer Private %19 288e5c31af7Sopenharmony_ci %21 = OpVariable %20 Private 289e5c31af7Sopenharmony_ci %22 = OpConstant %6 0 290e5c31af7Sopenharmony_ci %23 = OpConstant %6 1 291e5c31af7Sopenharmony_ci %24 = OpConstant %6 2 292e5c31af7Sopenharmony_ci %25 = OpConstant %6 3 293e5c31af7Sopenharmony_ci %26 = OpConstant %6 4 294e5c31af7Sopenharmony_ci %27 = OpConstant %6 5 295e5c31af7Sopenharmony_ci %28 = OpConstant %6 6 296e5c31af7Sopenharmony_ci %29 = OpConstant %6 7 297e5c31af7Sopenharmony_ci %30 = OpConstant %6 8 298e5c31af7Sopenharmony_ci %31 = OpConstant %6 9 299e5c31af7Sopenharmony_ci %32 = OpConstantComposite %19 %22 %23 %24 %25 %26 %27 %28 %29 %30 %31 300e5c31af7Sopenharmony_ci %33 = OpVariable %20 Private 301e5c31af7Sopenharmony_ci %34 = OpConstant %6 10 302e5c31af7Sopenharmony_ci %35 = OpConstant %6 11 303e5c31af7Sopenharmony_ci %36 = OpConstant %6 12 304e5c31af7Sopenharmony_ci %37 = OpConstant %6 13 305e5c31af7Sopenharmony_ci %38 = OpConstant %6 14 306e5c31af7Sopenharmony_ci %39 = OpConstant %6 15 307e5c31af7Sopenharmony_ci %40 = OpConstant %6 16 308e5c31af7Sopenharmony_ci %41 = OpConstant %6 17 309e5c31af7Sopenharmony_ci %42 = OpConstant %6 18 310e5c31af7Sopenharmony_ci %43 = OpConstant %6 19 311e5c31af7Sopenharmony_ci %44 = OpConstantComposite %19 %34 %35 %36 %37 %38 %39 %40 %41 %42 %43 312e5c31af7Sopenharmony_ci %46 = OpConstant %17 17 313e5c31af7Sopenharmony_ci %47 = OpTypeArray %6 %46 314e5c31af7Sopenharmony_ci %48 = OpTypeStruct %47 315e5c31af7Sopenharmony_ci %49 = OpTypePointer Uniform %48 316e5c31af7Sopenharmony_ci %50 = OpVariable %49 Uniform 317e5c31af7Sopenharmony_ci %51 = OpTypePointer Uniform %6 318e5c31af7Sopenharmony_ci %65 = OpTypeBool 319e5c31af7Sopenharmony_ci %72 = OpTypeFloat 32 320e5c31af7Sopenharmony_ci %73 = OpTypeVector %72 4 321e5c31af7Sopenharmony_ci %74 = OpTypePointer Output %73 322e5c31af7Sopenharmony_ci %75 = OpVariable %74 Output 323e5c31af7Sopenharmony_ci %99 = OpTypeStruct %6 %6 %6 324e5c31af7Sopenharmony_ci %164 = OpTypeArray %99 %18 325e5c31af7Sopenharmony_ci %172 = OpTypePointer Function %164 326e5c31af7Sopenharmony_ci %181 = OpTypePointer Private %6 327e5c31af7Sopenharmony_ci %226 = OpTypePointer Function %19 328e5c31af7Sopenharmony_ci %290 = OpTypeVector %6 2 329e5c31af7Sopenharmony_ci %291 = OpTypePointer Function %290 330e5c31af7Sopenharmony_ci %293 = OpConstant %17 1 331e5c31af7Sopenharmony_ci %294 = OpTypeArray %72 %293 332e5c31af7Sopenharmony_ci %295 = OpTypeStruct %294 333e5c31af7Sopenharmony_ci %296 = OpTypePointer Uniform %295 334e5c31af7Sopenharmony_ci %297 = OpVariable %296 Uniform 335e5c31af7Sopenharmony_ci %298 = OpTypePointer Uniform %72 336e5c31af7Sopenharmony_ci %301 = OpTypeVector %72 2 337e5c31af7Sopenharmony_ci %303 = OpTypeStruct %72 338e5c31af7Sopenharmony_ci %304 = OpTypePointer Uniform %303 339e5c31af7Sopenharmony_ci %305 = OpVariable %304 Uniform 340e5c31af7Sopenharmony_ci %316 = OpConstant %17 0 341e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 342e5c31af7Sopenharmony_ci %5 = OpLabel 343e5c31af7Sopenharmony_ci %355 = OpVariable %226 Function 344e5c31af7Sopenharmony_ci %377 = OpVariable %226 Function 345e5c31af7Sopenharmony_ci %399 = OpVariable %7 Function 346e5c31af7Sopenharmony_ci OpStore %21 %32 347e5c31af7Sopenharmony_ci OpStore %33 %44 348e5c31af7Sopenharmony_ci %332 = OpAccessChain %51 %50 %22 %35 349e5c31af7Sopenharmony_ci %333 = OpLoad %6 %332 350e5c31af7Sopenharmony_ci %334 = OpConvertSToF %72 %333 351e5c31af7Sopenharmony_ci %335 = OpCompositeConstruct %73 %334 %334 %334 %334 352e5c31af7Sopenharmony_ci OpStore %75 %335 353e5c31af7Sopenharmony_ci %336 = OpFunctionCall %6 %15 354e5c31af7Sopenharmony_ci %337 = OpAccessChain %51 %50 %22 %37 355e5c31af7Sopenharmony_ci %338 = OpLoad %6 %337 356e5c31af7Sopenharmony_ci %339 = OpIEqual %65 %336 %338 357e5c31af7Sopenharmony_ci OpSelectionMerge %341 None 358e5c31af7Sopenharmony_ci OpBranchConditional %339 %340 %341 359e5c31af7Sopenharmony_ci %340 = OpLabel 360e5c31af7Sopenharmony_ci %342 = OpAccessChain %51 %50 %22 %23 361e5c31af7Sopenharmony_ci %343 = OpLoad %6 %342 362e5c31af7Sopenharmony_ci %344 = OpConvertSToF %72 %343 363e5c31af7Sopenharmony_ci %345 = OpAccessChain %51 %50 %22 %35 364e5c31af7Sopenharmony_ci %346 = OpLoad %6 %345 365e5c31af7Sopenharmony_ci %347 = OpConvertSToF %72 %346 366e5c31af7Sopenharmony_ci %348 = OpAccessChain %51 %50 %22 %35 367e5c31af7Sopenharmony_ci %349 = OpLoad %6 %348 368e5c31af7Sopenharmony_ci %350 = OpConvertSToF %72 %349 369e5c31af7Sopenharmony_ci %351 = OpAccessChain %51 %50 %22 %23 370e5c31af7Sopenharmony_ci %352 = OpLoad %6 %351 371e5c31af7Sopenharmony_ci %353 = OpConvertSToF %72 %352 372e5c31af7Sopenharmony_ci %354 = OpCompositeConstruct %73 %344 %347 %350 %353 373e5c31af7Sopenharmony_ci OpStore %75 %354 374e5c31af7Sopenharmony_ci OpBranch %341 375e5c31af7Sopenharmony_ci %341 = OpLabel 376e5c31af7Sopenharmony_ci %356 = OpAccessChain %51 %50 %22 %35 377e5c31af7Sopenharmony_ci %357 = OpLoad %6 %356 378e5c31af7Sopenharmony_ci %358 = OpAccessChain %51 %50 %22 %24 379e5c31af7Sopenharmony_ci %359 = OpLoad %6 %358 380e5c31af7Sopenharmony_ci %360 = OpAccessChain %51 %50 %22 %22 381e5c31af7Sopenharmony_ci %361 = OpLoad %6 %360 382e5c31af7Sopenharmony_ci %362 = OpAccessChain %51 %50 %22 %25 383e5c31af7Sopenharmony_ci %363 = OpLoad %6 %362 384e5c31af7Sopenharmony_ci %364 = OpAccessChain %51 %50 %22 %26 385e5c31af7Sopenharmony_ci %365 = OpLoad %6 %364 386e5c31af7Sopenharmony_ci %366 = OpAccessChain %51 %50 %22 %27 387e5c31af7Sopenharmony_ci %367 = OpLoad %6 %366 388e5c31af7Sopenharmony_ci %368 = OpAccessChain %51 %50 %22 %28 389e5c31af7Sopenharmony_ci %369 = OpLoad %6 %368 390e5c31af7Sopenharmony_ci %370 = OpAccessChain %51 %50 %22 %29 391e5c31af7Sopenharmony_ci %371 = OpLoad %6 %370 392e5c31af7Sopenharmony_ci %372 = OpAccessChain %51 %50 %22 %30 393e5c31af7Sopenharmony_ci %373 = OpLoad %6 %372 394e5c31af7Sopenharmony_ci %374 = OpAccessChain %51 %50 %22 %31 395e5c31af7Sopenharmony_ci %375 = OpLoad %6 %374 396e5c31af7Sopenharmony_ci %376 = OpCompositeConstruct %19 %357 %359 %361 %363 %365 %367 %369 %371 %373 %375 397e5c31af7Sopenharmony_ci OpStore %355 %376 398e5c31af7Sopenharmony_ci %378 = OpAccessChain %51 %50 %22 %34 399e5c31af7Sopenharmony_ci %379 = OpLoad %6 %378 400e5c31af7Sopenharmony_ci %380 = OpAccessChain %51 %50 %22 %24 401e5c31af7Sopenharmony_ci %381 = OpLoad %6 %380 402e5c31af7Sopenharmony_ci %382 = OpAccessChain %51 %50 %22 %22 403e5c31af7Sopenharmony_ci %383 = OpLoad %6 %382 404e5c31af7Sopenharmony_ci %384 = OpAccessChain %51 %50 %22 %25 405e5c31af7Sopenharmony_ci %385 = OpLoad %6 %384 406e5c31af7Sopenharmony_ci %386 = OpAccessChain %51 %50 %22 %26 407e5c31af7Sopenharmony_ci %387 = OpLoad %6 %386 408e5c31af7Sopenharmony_ci %388 = OpAccessChain %51 %50 %22 %27 409e5c31af7Sopenharmony_ci %389 = OpLoad %6 %388 410e5c31af7Sopenharmony_ci %390 = OpAccessChain %51 %50 %22 %28 411e5c31af7Sopenharmony_ci %391 = OpLoad %6 %390 412e5c31af7Sopenharmony_ci %392 = OpAccessChain %51 %50 %22 %29 413e5c31af7Sopenharmony_ci %393 = OpLoad %6 %392 414e5c31af7Sopenharmony_ci %394 = OpAccessChain %51 %50 %22 %30 415e5c31af7Sopenharmony_ci %395 = OpLoad %6 %394 416e5c31af7Sopenharmony_ci %396 = OpAccessChain %51 %50 %22 %31 417e5c31af7Sopenharmony_ci %397 = OpLoad %6 %396 418e5c31af7Sopenharmony_ci %398 = OpCompositeConstruct %19 %379 %381 %383 %385 %387 %389 %391 %393 %395 %397 419e5c31af7Sopenharmony_ci OpStore %377 %398 420e5c31af7Sopenharmony_ci %400 = OpAccessChain %51 %50 %22 %35 421e5c31af7Sopenharmony_ci %401 = OpLoad %6 %400 422e5c31af7Sopenharmony_ci OpStore %399 %401 423e5c31af7Sopenharmony_ci OpBranch %402 424e5c31af7Sopenharmony_ci %402 = OpLabel 425e5c31af7Sopenharmony_ci OpLoopMerge %404 %405 None 426e5c31af7Sopenharmony_ci OpBranch %406 427e5c31af7Sopenharmony_ci %406 = OpLabel 428e5c31af7Sopenharmony_ci %407 = OpLoad %6 %399 429e5c31af7Sopenharmony_ci %408 = OpAccessChain %51 %50 %22 %34 430e5c31af7Sopenharmony_ci %409 = OpLoad %6 %408 431e5c31af7Sopenharmony_ci %410 = OpSLessThan %65 %407 %409 432e5c31af7Sopenharmony_ci OpBranchConditional %410 %403 %404 433e5c31af7Sopenharmony_ci %403 = OpLabel 434e5c31af7Sopenharmony_ci %411 = OpLoad %6 %399 435e5c31af7Sopenharmony_ci %412 = OpAccessChain %181 %21 %411 436e5c31af7Sopenharmony_ci %413 = OpLoad %6 %412 437e5c31af7Sopenharmony_ci %414 = OpLoad %6 %399 438e5c31af7Sopenharmony_ci %415 = OpAccessChain %7 %355 %414 439e5c31af7Sopenharmony_ci %416 = OpLoad %6 %415 440e5c31af7Sopenharmony_ci %417 = OpINotEqual %65 %413 %416 441e5c31af7Sopenharmony_ci %418 = OpLogicalNot %65 %417 442e5c31af7Sopenharmony_ci OpSelectionMerge %420 None 443e5c31af7Sopenharmony_ci OpBranchConditional %418 %419 %420 444e5c31af7Sopenharmony_ci %419 = OpLabel 445e5c31af7Sopenharmony_ci %421 = OpLoad %6 %399 446e5c31af7Sopenharmony_ci %422 = OpAccessChain %181 %33 %421 447e5c31af7Sopenharmony_ci %423 = OpLoad %6 %422 448e5c31af7Sopenharmony_ci %424 = OpLoad %6 %399 449e5c31af7Sopenharmony_ci %425 = OpAccessChain %7 %377 %424 450e5c31af7Sopenharmony_ci %426 = OpLoad %6 %425 451e5c31af7Sopenharmony_ci %427 = OpINotEqual %65 %423 %426 452e5c31af7Sopenharmony_ci OpBranch %420 453e5c31af7Sopenharmony_ci %420 = OpLabel 454e5c31af7Sopenharmony_ci %428 = OpPhi %65 %417 %403 %427 %419 455e5c31af7Sopenharmony_ci OpSelectionMerge %430 None 456e5c31af7Sopenharmony_ci OpBranchConditional %428 %429 %430 457e5c31af7Sopenharmony_ci %429 = OpLabel 458e5c31af7Sopenharmony_ci %431 = OpAccessChain %51 %50 %22 %35 459e5c31af7Sopenharmony_ci %432 = OpLoad %6 %431 460e5c31af7Sopenharmony_ci %433 = OpConvertSToF %72 %432 461e5c31af7Sopenharmony_ci %434 = OpCompositeConstruct %73 %433 %433 %433 %433 462e5c31af7Sopenharmony_ci OpStore %75 %434 463e5c31af7Sopenharmony_ci OpBranch %430 464e5c31af7Sopenharmony_ci %430 = OpLabel 465e5c31af7Sopenharmony_ci OpBranch %405 466e5c31af7Sopenharmony_ci %405 = OpLabel 467e5c31af7Sopenharmony_ci %435 = OpLoad %6 %399 468e5c31af7Sopenharmony_ci %436 = OpIAdd %6 %435 %23 469e5c31af7Sopenharmony_ci OpStore %399 %436 470e5c31af7Sopenharmony_ci OpBranch %402 471e5c31af7Sopenharmony_ci %404 = OpLabel 472e5c31af7Sopenharmony_ci OpReturn 473e5c31af7Sopenharmony_ci OpFunctionEnd 474e5c31af7Sopenharmony_ci %12 = OpFunction %2 None %8 475e5c31af7Sopenharmony_ci %9 = OpFunctionParameter %7 476e5c31af7Sopenharmony_ci %10 = OpFunctionParameter %7 477e5c31af7Sopenharmony_ci %11 = OpFunctionParameter %7 478e5c31af7Sopenharmony_ci %13 = OpLabel 479e5c31af7Sopenharmony_ci %45 = OpVariable %7 Function 480e5c31af7Sopenharmony_ci %54 = OpVariable %7 Function 481e5c31af7Sopenharmony_ci %55 = OpVariable %7 Function 482e5c31af7Sopenharmony_ci %80 = OpVariable %7 Function 483e5c31af7Sopenharmony_ci %173 = OpVariable %172 Function 484e5c31af7Sopenharmony_ci %227 = OpVariable %226 Function 485e5c31af7Sopenharmony_ci %231 = OpVariable %7 Function 486e5c31af7Sopenharmony_ci %52 = OpAccessChain %51 %50 %22 %23 487e5c31af7Sopenharmony_ci %53 = OpLoad %6 %52 488e5c31af7Sopenharmony_ci OpStore %45 %53 489e5c31af7Sopenharmony_ci OpStore %54 %23 490e5c31af7Sopenharmony_ci %56 = OpAccessChain %51 %50 %22 %23 491e5c31af7Sopenharmony_ci %57 = OpLoad %6 %56 492e5c31af7Sopenharmony_ci OpStore %55 %57 493e5c31af7Sopenharmony_ci OpBranch %58 494e5c31af7Sopenharmony_ci %58 = OpLabel 495e5c31af7Sopenharmony_ci OpLoopMerge %60 %61 None 496e5c31af7Sopenharmony_ci OpBranch %62 497e5c31af7Sopenharmony_ci %62 = OpLabel 498e5c31af7Sopenharmony_ci %63 = OpLoad %6 %54 499e5c31af7Sopenharmony_ci %64 = OpLoad %6 %10 500e5c31af7Sopenharmony_ci %66 = OpSLessThanEqual %65 %63 %64 501e5c31af7Sopenharmony_ci OpBranchConditional %66 %59 %60 502e5c31af7Sopenharmony_ci %59 = OpLabel 503e5c31af7Sopenharmony_ci %67 = OpLoad %6 %54 504e5c31af7Sopenharmony_ci %68 = OpLoad %6 %55 505e5c31af7Sopenharmony_ci %69 = OpSLessThanEqual %65 %67 %68 506e5c31af7Sopenharmony_ci OpSelectionMerge %71 None 507e5c31af7Sopenharmony_ci OpBranchConditional %69 %70 %176 508e5c31af7Sopenharmony_ci %70 = OpLabel 509e5c31af7Sopenharmony_ci %76 = OpAccessChain %51 %50 %22 %23 510e5c31af7Sopenharmony_ci %77 = OpLoad %6 %76 511e5c31af7Sopenharmony_ci %78 = OpConvertSToF %72 %77 512e5c31af7Sopenharmony_ci %79 = OpCompositeConstruct %73 %78 %78 %78 %78 513e5c31af7Sopenharmony_ci OpStore %75 %79 514e5c31af7Sopenharmony_ci %81 = OpAccessChain %51 %50 %22 %23 515e5c31af7Sopenharmony_ci %82 = OpLoad %6 %81 516e5c31af7Sopenharmony_ci %83 = OpSNegate %6 %82 517e5c31af7Sopenharmony_ci OpStore %80 %83 518e5c31af7Sopenharmony_ci OpBranch %84 519e5c31af7Sopenharmony_ci %84 = OpLabel 520e5c31af7Sopenharmony_ci OpLoopMerge %86 %87 None 521e5c31af7Sopenharmony_ci OpBranch %88 522e5c31af7Sopenharmony_ci %88 = OpLabel 523e5c31af7Sopenharmony_ci %89 = OpLoad %6 %80 524e5c31af7Sopenharmony_ci %90 = OpAccessChain %51 %50 %22 %23 525e5c31af7Sopenharmony_ci %91 = OpLoad %6 %90 526e5c31af7Sopenharmony_ci %92 = OpINotEqual %65 %89 %91 527e5c31af7Sopenharmony_ci OpBranchConditional %92 %85 %86 528e5c31af7Sopenharmony_ci %85 = OpLabel 529e5c31af7Sopenharmony_ci %93 = OpAccessChain %51 %50 %22 %23 530e5c31af7Sopenharmony_ci %94 = OpLoad %6 %93 531e5c31af7Sopenharmony_ci %95 = OpAccessChain %51 %50 %22 %24 532e5c31af7Sopenharmony_ci %96 = OpLoad %6 %95 533e5c31af7Sopenharmony_ci %97 = OpAccessChain %51 %50 %22 %22 534e5c31af7Sopenharmony_ci %98 = OpLoad %6 %97 535e5c31af7Sopenharmony_ci %100 = OpCompositeConstruct %99 %94 %96 %98 536e5c31af7Sopenharmony_ci %101 = OpAccessChain %51 %50 %22 %23 537e5c31af7Sopenharmony_ci %102 = OpLoad %6 %101 538e5c31af7Sopenharmony_ci %103 = OpAccessChain %51 %50 %22 %24 539e5c31af7Sopenharmony_ci %104 = OpLoad %6 %103 540e5c31af7Sopenharmony_ci %105 = OpAccessChain %51 %50 %22 %22 541e5c31af7Sopenharmony_ci %106 = OpLoad %6 %105 542e5c31af7Sopenharmony_ci %107 = OpCompositeConstruct %99 %102 %104 %106 543e5c31af7Sopenharmony_ci %108 = OpAccessChain %51 %50 %22 %23 544e5c31af7Sopenharmony_ci %109 = OpLoad %6 %108 545e5c31af7Sopenharmony_ci %110 = OpAccessChain %51 %50 %22 %24 546e5c31af7Sopenharmony_ci %111 = OpLoad %6 %110 547e5c31af7Sopenharmony_ci %112 = OpAccessChain %51 %50 %22 %22 548e5c31af7Sopenharmony_ci %113 = OpLoad %6 %112 549e5c31af7Sopenharmony_ci %114 = OpCompositeConstruct %99 %109 %111 %113 550e5c31af7Sopenharmony_ci %115 = OpAccessChain %51 %50 %22 %23 551e5c31af7Sopenharmony_ci %116 = OpLoad %6 %115 552e5c31af7Sopenharmony_ci %117 = OpAccessChain %51 %50 %22 %24 553e5c31af7Sopenharmony_ci %118 = OpLoad %6 %117 554e5c31af7Sopenharmony_ci %119 = OpAccessChain %51 %50 %22 %22 555e5c31af7Sopenharmony_ci %120 = OpLoad %6 %119 556e5c31af7Sopenharmony_ci %121 = OpCompositeConstruct %99 %116 %118 %120 557e5c31af7Sopenharmony_ci %122 = OpAccessChain %51 %50 %22 %23 558e5c31af7Sopenharmony_ci %123 = OpLoad %6 %122 559e5c31af7Sopenharmony_ci %124 = OpAccessChain %51 %50 %22 %24 560e5c31af7Sopenharmony_ci %125 = OpLoad %6 %124 561e5c31af7Sopenharmony_ci %126 = OpAccessChain %51 %50 %22 %22 562e5c31af7Sopenharmony_ci %127 = OpLoad %6 %126 563e5c31af7Sopenharmony_ci %128 = OpCompositeConstruct %99 %123 %125 %127 564e5c31af7Sopenharmony_ci %129 = OpAccessChain %51 %50 %22 %23 565e5c31af7Sopenharmony_ci %130 = OpLoad %6 %129 566e5c31af7Sopenharmony_ci %131 = OpAccessChain %51 %50 %22 %24 567e5c31af7Sopenharmony_ci %132 = OpLoad %6 %131 568e5c31af7Sopenharmony_ci %133 = OpAccessChain %51 %50 %22 %22 569e5c31af7Sopenharmony_ci %134 = OpLoad %6 %133 570e5c31af7Sopenharmony_ci %135 = OpCompositeConstruct %99 %130 %132 %134 571e5c31af7Sopenharmony_ci %136 = OpAccessChain %51 %50 %22 %23 572e5c31af7Sopenharmony_ci %137 = OpLoad %6 %136 573e5c31af7Sopenharmony_ci %138 = OpAccessChain %51 %50 %22 %24 574e5c31af7Sopenharmony_ci %139 = OpLoad %6 %138 575e5c31af7Sopenharmony_ci %140 = OpAccessChain %51 %50 %22 %22 576e5c31af7Sopenharmony_ci %141 = OpLoad %6 %140 577e5c31af7Sopenharmony_ci %142 = OpCompositeConstruct %99 %137 %139 %141 578e5c31af7Sopenharmony_ci %143 = OpAccessChain %51 %50 %22 %23 579e5c31af7Sopenharmony_ci %144 = OpLoad %6 %143 580e5c31af7Sopenharmony_ci %145 = OpAccessChain %51 %50 %22 %24 581e5c31af7Sopenharmony_ci %146 = OpLoad %6 %145 582e5c31af7Sopenharmony_ci %147 = OpAccessChain %51 %50 %22 %22 583e5c31af7Sopenharmony_ci %148 = OpLoad %6 %147 584e5c31af7Sopenharmony_ci %149 = OpCompositeConstruct %99 %144 %146 %148 585e5c31af7Sopenharmony_ci %150 = OpAccessChain %51 %50 %22 %23 586e5c31af7Sopenharmony_ci %151 = OpLoad %6 %150 587e5c31af7Sopenharmony_ci %152 = OpAccessChain %51 %50 %22 %24 588e5c31af7Sopenharmony_ci %153 = OpLoad %6 %152 589e5c31af7Sopenharmony_ci %154 = OpAccessChain %51 %50 %22 %22 590e5c31af7Sopenharmony_ci %155 = OpLoad %6 %154 591e5c31af7Sopenharmony_ci %156 = OpCompositeConstruct %99 %151 %153 %155 592e5c31af7Sopenharmony_ci %157 = OpAccessChain %51 %50 %22 %23 593e5c31af7Sopenharmony_ci %158 = OpLoad %6 %157 594e5c31af7Sopenharmony_ci %159 = OpAccessChain %51 %50 %22 %24 595e5c31af7Sopenharmony_ci %160 = OpLoad %6 %159 596e5c31af7Sopenharmony_ci %161 = OpAccessChain %51 %50 %22 %22 597e5c31af7Sopenharmony_ci %162 = OpLoad %6 %161 598e5c31af7Sopenharmony_ci %163 = OpCompositeConstruct %99 %158 %160 %162 599e5c31af7Sopenharmony_ci %165 = OpCompositeConstruct %164 %100 %107 %114 %121 %128 %135 %142 %149 %156 %163 600e5c31af7Sopenharmony_ci %166 = OpLoad %6 %80 601e5c31af7Sopenharmony_ci %167 = OpAccessChain %51 %50 %22 %35 602e5c31af7Sopenharmony_ci %168 = OpLoad %6 %167 603e5c31af7Sopenharmony_ci %169 = OpAccessChain %51 %50 %22 %36 604e5c31af7Sopenharmony_ci %170 = OpLoad %6 %169 605e5c31af7Sopenharmony_ci %171 = OpExtInst %6 %1 SClamp %166 %168 %170 606e5c31af7Sopenharmony_ci OpStore %173 %165 607e5c31af7Sopenharmony_ci %174 = OpAccessChain %7 %173 %171 %22 608e5c31af7Sopenharmony_ci %175 = OpLoad %6 %174 609e5c31af7Sopenharmony_ci OpStore %80 %175 610e5c31af7Sopenharmony_ci OpBranch %87 611e5c31af7Sopenharmony_ci %87 = OpLabel 612e5c31af7Sopenharmony_ci OpBranch %84 613e5c31af7Sopenharmony_ci %86 = OpLabel 614e5c31af7Sopenharmony_ci OpBranch %71 615e5c31af7Sopenharmony_ci %176 = OpLabel 616e5c31af7Sopenharmony_ci %177 = OpLoad %6 %45 617e5c31af7Sopenharmony_ci %178 = OpIAdd %6 %177 %23 618e5c31af7Sopenharmony_ci OpStore %45 %178 619e5c31af7Sopenharmony_ci %179 = OpLoad %6 %55 620e5c31af7Sopenharmony_ci %180 = OpIAdd %6 %179 %23 621e5c31af7Sopenharmony_ci OpStore %55 %180 622e5c31af7Sopenharmony_ci %182 = OpAccessChain %181 %21 %179 623e5c31af7Sopenharmony_ci %183 = OpLoad %6 %182 624e5c31af7Sopenharmony_ci %184 = OpAccessChain %181 %33 %177 625e5c31af7Sopenharmony_ci OpStore %184 %183 626e5c31af7Sopenharmony_ci OpBranch %71 627e5c31af7Sopenharmony_ci %71 = OpLabel 628e5c31af7Sopenharmony_ci %185 = OpLoad %6 %54 629e5c31af7Sopenharmony_ci %186 = OpIAdd %6 %185 %23 630e5c31af7Sopenharmony_ci OpStore %54 %186 631e5c31af7Sopenharmony_ci OpBranch %61 632e5c31af7Sopenharmony_ci %61 = OpLabel 633e5c31af7Sopenharmony_ci OpBranch %58 634e5c31af7Sopenharmony_ci %60 = OpLabel 635e5c31af7Sopenharmony_ci OpBranch %187 636e5c31af7Sopenharmony_ci %187 = OpLabel 637e5c31af7Sopenharmony_ci OpLoopMerge %189 %190 None 638e5c31af7Sopenharmony_ci OpBranch %191 639e5c31af7Sopenharmony_ci %191 = OpLabel 640e5c31af7Sopenharmony_ci %192 = OpLoad %6 %54 641e5c31af7Sopenharmony_ci %193 = OpSLessThan %65 %192 %27 642e5c31af7Sopenharmony_ci OpSelectionMerge %195 None 643e5c31af7Sopenharmony_ci OpBranchConditional %193 %194 %195 644e5c31af7Sopenharmony_ci %194 = OpLabel 645e5c31af7Sopenharmony_ci %196 = OpLoad %6 %45 646e5c31af7Sopenharmony_ci %197 = OpAccessChain %51 %50 %22 %34 647e5c31af7Sopenharmony_ci %198 = OpLoad %6 %197 648e5c31af7Sopenharmony_ci %199 = OpSLessThan %65 %196 %198 649e5c31af7Sopenharmony_ci OpBranch %195 650e5c31af7Sopenharmony_ci %195 = OpLabel 651e5c31af7Sopenharmony_ci %200 = OpPhi %65 %193 %191 %199 %194 652e5c31af7Sopenharmony_ci OpBranchConditional %200 %188 %189 653e5c31af7Sopenharmony_ci %188 = OpLabel 654e5c31af7Sopenharmony_ci %201 = OpLoad %6 %45 655e5c31af7Sopenharmony_ci %202 = OpIAdd %6 %201 %23 656e5c31af7Sopenharmony_ci OpStore %45 %202 657e5c31af7Sopenharmony_ci %203 = OpAccessChain %51 %50 %22 %35 658e5c31af7Sopenharmony_ci %204 = OpLoad %6 %203 659e5c31af7Sopenharmony_ci %205 = OpAccessChain %51 %50 %22 %23 660e5c31af7Sopenharmony_ci %206 = OpLoad %6 %205 661e5c31af7Sopenharmony_ci %207 = OpAccessChain %51 %50 %22 %24 662e5c31af7Sopenharmony_ci %208 = OpLoad %6 %207 663e5c31af7Sopenharmony_ci %209 = OpAccessChain %51 %50 %22 %22 664e5c31af7Sopenharmony_ci %210 = OpLoad %6 %209 665e5c31af7Sopenharmony_ci %211 = OpAccessChain %51 %50 %22 %25 666e5c31af7Sopenharmony_ci %212 = OpLoad %6 %211 667e5c31af7Sopenharmony_ci %213 = OpAccessChain %51 %50 %22 %37 668e5c31af7Sopenharmony_ci %214 = OpLoad %6 %213 669e5c31af7Sopenharmony_ci %215 = OpAccessChain %51 %50 %22 %38 670e5c31af7Sopenharmony_ci %216 = OpLoad %6 %215 671e5c31af7Sopenharmony_ci %217 = OpAccessChain %51 %50 %22 %39 672e5c31af7Sopenharmony_ci %218 = OpLoad %6 %217 673e5c31af7Sopenharmony_ci %219 = OpAccessChain %51 %50 %22 %40 674e5c31af7Sopenharmony_ci %220 = OpLoad %6 %219 675e5c31af7Sopenharmony_ci %221 = OpAccessChain %51 %50 %22 %36 676e5c31af7Sopenharmony_ci %222 = OpLoad %6 %221 677e5c31af7Sopenharmony_ci %223 = OpCompositeConstruct %19 %204 %206 %208 %210 %212 %214 %216 %218 %220 %222 678e5c31af7Sopenharmony_ci %224 = OpLoad %6 %54 679e5c31af7Sopenharmony_ci %225 = OpIAdd %6 %224 %23 680e5c31af7Sopenharmony_ci OpStore %54 %225 681e5c31af7Sopenharmony_ci OpStore %227 %223 682e5c31af7Sopenharmony_ci %228 = OpAccessChain %7 %227 %224 683e5c31af7Sopenharmony_ci %229 = OpLoad %6 %228 684e5c31af7Sopenharmony_ci %230 = OpAccessChain %181 %33 %201 685e5c31af7Sopenharmony_ci OpStore %230 %229 686e5c31af7Sopenharmony_ci OpBranch %190 687e5c31af7Sopenharmony_ci %190 = OpLabel 688e5c31af7Sopenharmony_ci OpBranch %187 689e5c31af7Sopenharmony_ci %189 = OpLabel 690e5c31af7Sopenharmony_ci %232 = OpLoad %6 %9 691e5c31af7Sopenharmony_ci OpStore %231 %232 692e5c31af7Sopenharmony_ci OpBranch %233 693e5c31af7Sopenharmony_ci %233 = OpLabel 694e5c31af7Sopenharmony_ci OpLoopMerge %235 %236 None 695e5c31af7Sopenharmony_ci OpBranch %237 696e5c31af7Sopenharmony_ci %237 = OpLabel 697e5c31af7Sopenharmony_ci %238 = OpLoad %6 %231 698e5c31af7Sopenharmony_ci %239 = OpLoad %6 %11 699e5c31af7Sopenharmony_ci %240 = OpISub %6 %239 %23 700e5c31af7Sopenharmony_ci %241 = OpSLessThanEqual %65 %238 %240 701e5c31af7Sopenharmony_ci OpBranchConditional %241 %234 %235 702e5c31af7Sopenharmony_ci %234 = OpLabel 703e5c31af7Sopenharmony_ci %242 = OpLoad %6 %231 704e5c31af7Sopenharmony_ci %243 = OpLoad %6 %231 705e5c31af7Sopenharmony_ci %244 = OpAccessChain %181 %33 %243 706e5c31af7Sopenharmony_ci %245 = OpLoad %6 %244 707e5c31af7Sopenharmony_ci %246 = OpAccessChain %181 %21 %242 708e5c31af7Sopenharmony_ci OpStore %246 %245 709e5c31af7Sopenharmony_ci OpBranch %236 710e5c31af7Sopenharmony_ci %236 = OpLabel 711e5c31af7Sopenharmony_ci %247 = OpLoad %6 %231 712e5c31af7Sopenharmony_ci %248 = OpIAdd %6 %247 %23 713e5c31af7Sopenharmony_ci OpStore %231 %248 714e5c31af7Sopenharmony_ci OpBranch %233 715e5c31af7Sopenharmony_ci %235 = OpLabel 716e5c31af7Sopenharmony_ci OpReturn 717e5c31af7Sopenharmony_ci OpFunctionEnd 718e5c31af7Sopenharmony_ci %15 = OpFunction %6 None %14 719e5c31af7Sopenharmony_ci %16 = OpLabel 720e5c31af7Sopenharmony_ci %249 = OpVariable %7 Function 721e5c31af7Sopenharmony_ci %252 = OpVariable %7 Function 722e5c31af7Sopenharmony_ci %260 = OpVariable %7 Function 723e5c31af7Sopenharmony_ci %272 = OpVariable %7 Function 724e5c31af7Sopenharmony_ci %274 = OpVariable %7 Function 725e5c31af7Sopenharmony_ci %276 = OpVariable %7 Function 726e5c31af7Sopenharmony_ci %292 = OpVariable %291 Function 727e5c31af7Sopenharmony_ci %250 = OpAccessChain %51 %50 %22 %23 728e5c31af7Sopenharmony_ci %251 = OpLoad %6 %250 729e5c31af7Sopenharmony_ci OpStore %249 %251 730e5c31af7Sopenharmony_ci OpStore %252 %23 731e5c31af7Sopenharmony_ci OpBranch %253 732e5c31af7Sopenharmony_ci %253 = OpLabel 733e5c31af7Sopenharmony_ci OpLoopMerge %255 %256 None 734e5c31af7Sopenharmony_ci OpBranch %257 735e5c31af7Sopenharmony_ci %257 = OpLabel 736e5c31af7Sopenharmony_ci %258 = OpLoad %6 %252 737e5c31af7Sopenharmony_ci %259 = OpSLessThan %65 %258 %34 738e5c31af7Sopenharmony_ci OpBranchConditional %259 %254 %255 739e5c31af7Sopenharmony_ci %254 = OpLabel 740e5c31af7Sopenharmony_ci OpStore %260 %23 741e5c31af7Sopenharmony_ci OpBranch %261 742e5c31af7Sopenharmony_ci %261 = OpLabel 743e5c31af7Sopenharmony_ci OpLoopMerge %263 %264 None 744e5c31af7Sopenharmony_ci OpBranch %265 745e5c31af7Sopenharmony_ci %265 = OpLabel 746e5c31af7Sopenharmony_ci %266 = OpLoad %6 %260 747e5c31af7Sopenharmony_ci %267 = OpSLessThan %65 %266 %34 748e5c31af7Sopenharmony_ci OpBranchConditional %267 %262 %263 749e5c31af7Sopenharmony_ci %262 = OpLabel 750e5c31af7Sopenharmony_ci %268 = OpLoad %6 %252 751e5c31af7Sopenharmony_ci %269 = OpLoad %6 %260 752e5c31af7Sopenharmony_ci %270 = OpIAdd %6 %268 %269 753e5c31af7Sopenharmony_ci %271 = OpExtInst %6 %1 SMin %270 %34 754e5c31af7Sopenharmony_ci %273 = OpLoad %6 %252 755e5c31af7Sopenharmony_ci OpStore %272 %273 756e5c31af7Sopenharmony_ci %275 = OpLoad %6 %260 757e5c31af7Sopenharmony_ci OpStore %274 %275 758e5c31af7Sopenharmony_ci OpStore %276 %271 759e5c31af7Sopenharmony_ci %277 = OpFunctionCall %2 %12 %272 %274 %276 760e5c31af7Sopenharmony_ci OpBranch %264 761e5c31af7Sopenharmony_ci %264 = OpLabel 762e5c31af7Sopenharmony_ci %278 = OpLoad %6 %252 763e5c31af7Sopenharmony_ci %279 = OpLoad %6 %260 764e5c31af7Sopenharmony_ci %280 = OpIAdd %6 %279 %278 765e5c31af7Sopenharmony_ci OpStore %260 %280 766e5c31af7Sopenharmony_ci OpBranch %261 767e5c31af7Sopenharmony_ci %263 = OpLabel 768e5c31af7Sopenharmony_ci OpBranch %281 769e5c31af7Sopenharmony_ci %281 = OpLabel 770e5c31af7Sopenharmony_ci OpLoopMerge %283 %284 None 771e5c31af7Sopenharmony_ci OpBranch %285 772e5c31af7Sopenharmony_ci %285 = OpLabel 773e5c31af7Sopenharmony_ci %286 = OpLoad %6 %249 774e5c31af7Sopenharmony_ci %287 = OpAccessChain %51 %50 %22 %37 775e5c31af7Sopenharmony_ci %288 = OpLoad %6 %287 776e5c31af7Sopenharmony_ci %289 = OpSLessThan %65 %286 %288 777e5c31af7Sopenharmony_ci OpBranchConditional %289 %282 %283 778e5c31af7Sopenharmony_ci %282 = OpLabel 779e5c31af7Sopenharmony_ci %299 = OpAccessChain %298 %297 %22 %22 780e5c31af7Sopenharmony_ci %300 = OpLoad %72 %299 781e5c31af7Sopenharmony_ci %302 = OpCompositeConstruct %301 %300 %300 782e5c31af7Sopenharmony_ci %306 = OpAccessChain %298 %305 %22 783e5c31af7Sopenharmony_ci %307 = OpLoad %72 %306 784e5c31af7Sopenharmony_ci %308 = OpCompositeConstruct %301 %307 %307 785e5c31af7Sopenharmony_ci %309 = OpFDiv %301 %302 %308 786e5c31af7Sopenharmony_ci %310 = OpConvertFToS %290 %309 787e5c31af7Sopenharmony_ci OpStore %292 %310 788e5c31af7Sopenharmony_ci OpBranch %311 789e5c31af7Sopenharmony_ci %311 = OpLabel 790e5c31af7Sopenharmony_ci OpLoopMerge %313 %314 None 791e5c31af7Sopenharmony_ci OpBranch %315 792e5c31af7Sopenharmony_ci %315 = OpLabel 793e5c31af7Sopenharmony_ci %317 = OpAccessChain %7 %292 %316 794e5c31af7Sopenharmony_ci %318 = OpLoad %6 %317 795e5c31af7Sopenharmony_ci %319 = OpAccessChain %7 %292 %293 796e5c31af7Sopenharmony_ci %320 = OpLoad %6 %319 797e5c31af7Sopenharmony_ci %321 = OpIAdd %6 %318 %320 798e5c31af7Sopenharmony_ci %322 = OpAccessChain %51 %50 %22 %24 799e5c31af7Sopenharmony_ci %323 = OpLoad %6 %322 800e5c31af7Sopenharmony_ci %324 = OpSGreaterThan %65 %321 %323 801e5c31af7Sopenharmony_ci OpBranchConditional %324 %312 %313 802e5c31af7Sopenharmony_ci %312 = OpLabel 803e5c31af7Sopenharmony_ci OpBranch %314 804e5c31af7Sopenharmony_ci %314 = OpLabel 805e5c31af7Sopenharmony_ci OpBranch %311 806e5c31af7Sopenharmony_ci %313 = OpLabel 807e5c31af7Sopenharmony_ci %325 = OpLoad %6 %249 808e5c31af7Sopenharmony_ci %326 = OpIAdd %6 %325 %23 809e5c31af7Sopenharmony_ci OpStore %249 %326 810e5c31af7Sopenharmony_ci OpBranch %284 811e5c31af7Sopenharmony_ci %284 = OpLabel 812e5c31af7Sopenharmony_ci OpBranch %281 813e5c31af7Sopenharmony_ci %283 = OpLabel 814e5c31af7Sopenharmony_ci OpBranch %256 815e5c31af7Sopenharmony_ci %256 = OpLabel 816e5c31af7Sopenharmony_ci %327 = OpLoad %6 %252 817e5c31af7Sopenharmony_ci %328 = OpIMul %6 %327 %24 818e5c31af7Sopenharmony_ci OpStore %252 %328 819e5c31af7Sopenharmony_ci OpBranch %253 820e5c31af7Sopenharmony_ci %255 = OpLabel 821e5c31af7Sopenharmony_ci %329 = OpLoad %6 %249 822e5c31af7Sopenharmony_ci OpReturnValue %329 823e5c31af7Sopenharmony_ci OpFunctionEnd 824e5c31af7Sopenharmony_ciEND 825e5c31af7Sopenharmony_ci 826e5c31af7Sopenharmony_ci# uniforms for variant 827e5c31af7Sopenharmony_ci 828e5c31af7Sopenharmony_ci# two 829e5c31af7Sopenharmony_ciBUFFER variant_two DATA_TYPE float STD140 DATA 830e5c31af7Sopenharmony_ci 2.0 831e5c31af7Sopenharmony_ciEND 832e5c31af7Sopenharmony_ci# _GLF_uniform_int_values 833e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA 834e5c31af7Sopenharmony_ci 3 1 2 4 14 15 16 17 18 19 10 0 9 5 6 7 8 835e5c31af7Sopenharmony_ciEND 836e5c31af7Sopenharmony_ci# _GLF_uniform_float_values 837e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA 838e5c31af7Sopenharmony_ci 1.0 839e5c31af7Sopenharmony_ciEND 840e5c31af7Sopenharmony_ci 841e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 842e5c31af7Sopenharmony_ci 843e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 844e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 845e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 846e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 32 32 847e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 848e5c31af7Sopenharmony_ci BIND BUFFER variant_two AS uniform DESCRIPTOR_SET 0 BINDING 2 849e5c31af7Sopenharmony_ci BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1 850e5c31af7Sopenharmony_ci BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0 851e5c31af7Sopenharmony_ciEND 852e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 853e5c31af7Sopenharmony_ci 854e5c31af7Sopenharmony_ciCLEAR variant_pipeline 855e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32 856e5c31af7Sopenharmony_ci 857e5c31af7Sopenharmony_ciEXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255 858