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 texgen_vert PASSTHROUGH 25e5c31af7Sopenharmony_ci 26e5c31af7Sopenharmony_ciSHADER fragment texgen_frag GLSL 27e5c31af7Sopenharmony_ci#version 430 28e5c31af7Sopenharmony_ciprecision highp float; 29e5c31af7Sopenharmony_ci 30e5c31af7Sopenharmony_cilayout(location = 0) out vec4 _GLF_color; 31e5c31af7Sopenharmony_ci 32e5c31af7Sopenharmony_civoid main() 33e5c31af7Sopenharmony_ci{ 34e5c31af7Sopenharmony_ci _GLF_color = vec4( 35e5c31af7Sopenharmony_ci floor(gl_FragCoord.x) * (1.0 / 255.0), 36e5c31af7Sopenharmony_ci (int(gl_FragCoord.x) ^ int(gl_FragCoord.y)) * (1.0 / 255.0), 37e5c31af7Sopenharmony_ci floor(gl_FragCoord.y) * (1.0 / 255.0), 38e5c31af7Sopenharmony_ci 1.0); 39e5c31af7Sopenharmony_ci} 40e5c31af7Sopenharmony_ciEND 41e5c31af7Sopenharmony_ciBUFFER default_texture FORMAT B8G8R8A8_UNORM 42e5c31af7Sopenharmony_ci 43e5c31af7Sopenharmony_ciPIPELINE graphics texgen_pipeline 44e5c31af7Sopenharmony_ci ATTACH texgen_vert 45e5c31af7Sopenharmony_ci ATTACH texgen_frag 46e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 256 256 47e5c31af7Sopenharmony_ci BIND BUFFER default_texture AS color LOCATION 0 48e5c31af7Sopenharmony_ciEND 49e5c31af7Sopenharmony_ci 50e5c31af7Sopenharmony_ciCLEAR_COLOR texgen_pipeline 0 0 0 255 51e5c31af7Sopenharmony_ciCLEAR texgen_pipeline 52e5c31af7Sopenharmony_ciRUN texgen_pipeline DRAW_RECT POS 0 0 SIZE 256 256 53e5c31af7Sopenharmony_ci 54e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH 55e5c31af7Sopenharmony_ci 56e5c31af7Sopenharmony_ci# variant_fragment_shader is derived from the following GLSL: 57e5c31af7Sopenharmony_ci# #version 320 es 58e5c31af7Sopenharmony_ci# 59e5c31af7Sopenharmony_ci# #define _int_1 _GLF_uniform_int_values[0] 60e5c31af7Sopenharmony_ci# #define _int_0 _GLF_uniform_int_values[1] 61e5c31af7Sopenharmony_ci# #define _int_4 _GLF_uniform_int_values[2] 62e5c31af7Sopenharmony_ci# #define _int_2 _GLF_uniform_int_values[3] 63e5c31af7Sopenharmony_ci# #define _float_0_0 _GLF_uniform_float_values[0] 64e5c31af7Sopenharmony_ci# 65e5c31af7Sopenharmony_ci# precision highp float; 66e5c31af7Sopenharmony_ci# precision highp int; 67e5c31af7Sopenharmony_ci# 68e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_float_values: 0.0 69e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0 70e5c31af7Sopenharmony_ci# { 71e5c31af7Sopenharmony_ci# float _GLF_uniform_float_values[1]; 72e5c31af7Sopenharmony_ci# }; 73e5c31af7Sopenharmony_ci# 74e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_int_values: [1, 0, 4, 2] 75e5c31af7Sopenharmony_ci# layout(set = 0, binding = 1) uniform buf1 76e5c31af7Sopenharmony_ci# { 77e5c31af7Sopenharmony_ci# int _GLF_uniform_int_values[4]; 78e5c31af7Sopenharmony_ci# }; 79e5c31af7Sopenharmony_ci# 80e5c31af7Sopenharmony_ci# // Contents of injectionSwitch: [0.0, 1.0] 81e5c31af7Sopenharmony_ci# layout(push_constant) uniform buf_push 82e5c31af7Sopenharmony_ci# { 83e5c31af7Sopenharmony_ci# highp vec2 injectionSwitch; 84e5c31af7Sopenharmony_ci# }; 85e5c31af7Sopenharmony_ci# 86e5c31af7Sopenharmony_ci# layout(set = 0, binding = 2) uniform sampler2D tex; 87e5c31af7Sopenharmony_ci# 88e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color; 89e5c31af7Sopenharmony_ci# 90e5c31af7Sopenharmony_ci# const int _GLF_global_loop_bound = 10; 91e5c31af7Sopenharmony_ci# int _GLF_global_loop_count = 0; 92e5c31af7Sopenharmony_ci# 93e5c31af7Sopenharmony_ci# void func() 94e5c31af7Sopenharmony_ci# { 95e5c31af7Sopenharmony_ci# int arr[10] = int[10](_int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0, _int_0); 96e5c31af7Sopenharmony_ci# int a = _int_1; 97e5c31af7Sopenharmony_ci# int b = _int_1; 98e5c31af7Sopenharmony_ci# 99e5c31af7Sopenharmony_ci# // Iterates once. 100e5c31af7Sopenharmony_ci# for(int i = _int_1; i != _int_0; i--) 101e5c31af7Sopenharmony_ci# { 102e5c31af7Sopenharmony_ci# _GLF_global_loop_count++; 103e5c31af7Sopenharmony_ci# 104e5c31af7Sopenharmony_ci# // Iterates once. 105e5c31af7Sopenharmony_ci# while(_GLF_global_loop_count < _GLF_global_loop_bound) 106e5c31af7Sopenharmony_ci# { 107e5c31af7Sopenharmony_ci# _GLF_global_loop_count++; 108e5c31af7Sopenharmony_ci# 109e5c31af7Sopenharmony_ci# // Always false. 110e5c31af7Sopenharmony_ci# if(b >= _int_4) 111e5c31af7Sopenharmony_ci# { 112e5c31af7Sopenharmony_ci# break; 113e5c31af7Sopenharmony_ci# } 114e5c31af7Sopenharmony_ci# 115e5c31af7Sopenharmony_ci# while(_GLF_global_loop_count < _GLF_global_loop_bound) 116e5c31af7Sopenharmony_ci# { 117e5c31af7Sopenharmony_ci# _GLF_global_loop_count++; 118e5c31af7Sopenharmony_ci# } 119e5c31af7Sopenharmony_ci# 120e5c31af7Sopenharmony_ci# // These array values are not used. 121e5c31af7Sopenharmony_ci# arr[a++] = _int_1; 122e5c31af7Sopenharmony_ci# } 123e5c31af7Sopenharmony_ci# } 124e5c31af7Sopenharmony_ci# } 125e5c31af7Sopenharmony_ci# 126e5c31af7Sopenharmony_ci# void main() 127e5c31af7Sopenharmony_ci# { 128e5c31af7Sopenharmony_ci# int a = 1; 129e5c31af7Sopenharmony_ci# 130e5c31af7Sopenharmony_ci# // Iterates once. 131e5c31af7Sopenharmony_ci# while(_GLF_global_loop_count < _GLF_global_loop_bound) 132e5c31af7Sopenharmony_ci# { 133e5c31af7Sopenharmony_ci# _GLF_global_loop_count++; 134e5c31af7Sopenharmony_ci# 135e5c31af7Sopenharmony_ci# int b = _int_1; 136e5c31af7Sopenharmony_ci# 137e5c31af7Sopenharmony_ci# // Iterates four times. 138e5c31af7Sopenharmony_ci# while(_GLF_global_loop_count < _GLF_global_loop_bound) 139e5c31af7Sopenharmony_ci# { 140e5c31af7Sopenharmony_ci# _GLF_global_loop_count++; 141e5c31af7Sopenharmony_ci# 142e5c31af7Sopenharmony_ci# if(b >= _int_4) 143e5c31af7Sopenharmony_ci# { 144e5c31af7Sopenharmony_ci# break; 145e5c31af7Sopenharmony_ci# } 146e5c31af7Sopenharmony_ci# 147e5c31af7Sopenharmony_ci# b++; 148e5c31af7Sopenharmony_ci# } 149e5c31af7Sopenharmony_ci# 150e5c31af7Sopenharmony_ci# // Always false. 151e5c31af7Sopenharmony_ci# if(a >= 4) 152e5c31af7Sopenharmony_ci# { 153e5c31af7Sopenharmony_ci# break; 154e5c31af7Sopenharmony_ci# } 155e5c31af7Sopenharmony_ci# 156e5c31af7Sopenharmony_ci# // Always true. 157e5c31af7Sopenharmony_ci# if(gl_FragCoord.y > _float_0_0) 158e5c31af7Sopenharmony_ci# { 159e5c31af7Sopenharmony_ci# a++; 160e5c31af7Sopenharmony_ci# } 161e5c31af7Sopenharmony_ci# 162e5c31af7Sopenharmony_ci# // Always false. 163e5c31af7Sopenharmony_ci# if(gl_FragCoord.y < _float_0_0) 164e5c31af7Sopenharmony_ci# { 165e5c31af7Sopenharmony_ci# return; 166e5c31af7Sopenharmony_ci# } 167e5c31af7Sopenharmony_ci# 168e5c31af7Sopenharmony_ci# // Always true. 169e5c31af7Sopenharmony_ci# if(gl_FragCoord.x > _float_0_0) 170e5c31af7Sopenharmony_ci# { 171e5c31af7Sopenharmony_ci# // Iterates once (the global loop bound gets reached inside func()). 172e5c31af7Sopenharmony_ci# for(int i = _int_1; i != int(injectionSwitch.x) && _GLF_global_loop_count < _GLF_global_loop_bound; i++) 173e5c31af7Sopenharmony_ci# { 174e5c31af7Sopenharmony_ci# _GLF_global_loop_count++; 175e5c31af7Sopenharmony_ci# func(); 176e5c31af7Sopenharmony_ci# } 177e5c31af7Sopenharmony_ci# } 178e5c31af7Sopenharmony_ci# } 179e5c31af7Sopenharmony_ci# 180e5c31af7Sopenharmony_ci# // Always true. 181e5c31af7Sopenharmony_ci# if(a == _int_2) 182e5c31af7Sopenharmony_ci# { 183e5c31af7Sopenharmony_ci# // Texture sample is (0, 0, 0, 0). 184e5c31af7Sopenharmony_ci# _GLF_color = texture(tex, vec2(_int_0)) + vec4(_int_1, _int_0, _int_0, _int_1); 185e5c31af7Sopenharmony_ci# } 186e5c31af7Sopenharmony_ci# else 187e5c31af7Sopenharmony_ci# { 188e5c31af7Sopenharmony_ci# _GLF_color = vec4(_int_0); 189e5c31af7Sopenharmony_ci# } 190e5c31af7Sopenharmony_ci# } 191e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0 192e5c31af7Sopenharmony_ci; SPIR-V 193e5c31af7Sopenharmony_ci; Version: 1.0 194e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10 195e5c31af7Sopenharmony_ci; Bound: 238 196e5c31af7Sopenharmony_ci; Schema: 0 197e5c31af7Sopenharmony_ci OpCapability Shader 198e5c31af7Sopenharmony_ci %1 = OpExtInstImport "GLSL.std.450" 199e5c31af7Sopenharmony_ci OpMemoryModel Logical GLSL450 200e5c31af7Sopenharmony_ci OpEntryPoint Fragment %4 "main" %141 %208 201e5c31af7Sopenharmony_ci OpExecutionMode %4 OriginUpperLeft 202e5c31af7Sopenharmony_ci OpSource ESSL 320 203e5c31af7Sopenharmony_ci OpName %4 "main" 204e5c31af7Sopenharmony_ci OpName %6 "func(" 205e5c31af7Sopenharmony_ci OpName %10 "_GLF_global_loop_count" 206e5c31af7Sopenharmony_ci OpName %16 "arr" 207e5c31af7Sopenharmony_ci OpName %19 "buf1" 208e5c31af7Sopenharmony_ci OpMemberName %19 0 "_GLF_uniform_int_values" 209e5c31af7Sopenharmony_ci OpName %21 "" 210e5c31af7Sopenharmony_ci OpName %46 "a" 211e5c31af7Sopenharmony_ci OpName %49 "b" 212e5c31af7Sopenharmony_ci OpName %52 "i" 213e5c31af7Sopenharmony_ci OpName %101 "a" 214e5c31af7Sopenharmony_ci OpName %111 "b" 215e5c31af7Sopenharmony_ci OpName %141 "gl_FragCoord" 216e5c31af7Sopenharmony_ci OpName %147 "buf0" 217e5c31af7Sopenharmony_ci OpMemberName %147 0 "_GLF_uniform_float_values" 218e5c31af7Sopenharmony_ci OpName %149 "" 219e5c31af7Sopenharmony_ci OpName %174 "i" 220e5c31af7Sopenharmony_ci OpName %184 "buf_push" 221e5c31af7Sopenharmony_ci OpMemberName %184 0 "injectionSwitch" 222e5c31af7Sopenharmony_ci OpName %186 "" 223e5c31af7Sopenharmony_ci OpName %208 "_GLF_color" 224e5c31af7Sopenharmony_ci OpName %212 "tex" 225e5c31af7Sopenharmony_ci OpDecorate %18 ArrayStride 16 226e5c31af7Sopenharmony_ci OpMemberDecorate %19 0 Offset 0 227e5c31af7Sopenharmony_ci OpDecorate %19 Block 228e5c31af7Sopenharmony_ci OpDecorate %21 DescriptorSet 0 229e5c31af7Sopenharmony_ci OpDecorate %21 Binding 1 230e5c31af7Sopenharmony_ci OpDecorate %141 BuiltIn FragCoord 231e5c31af7Sopenharmony_ci OpDecorate %146 ArrayStride 16 232e5c31af7Sopenharmony_ci OpMemberDecorate %147 0 Offset 0 233e5c31af7Sopenharmony_ci OpDecorate %147 Block 234e5c31af7Sopenharmony_ci OpDecorate %149 DescriptorSet 0 235e5c31af7Sopenharmony_ci OpDecorate %149 Binding 0 236e5c31af7Sopenharmony_ci OpMemberDecorate %184 0 Offset 0 237e5c31af7Sopenharmony_ci OpDecorate %184 Block 238e5c31af7Sopenharmony_ci OpDecorate %208 Location 0 239e5c31af7Sopenharmony_ci OpDecorate %212 RelaxedPrecision 240e5c31af7Sopenharmony_ci OpDecorate %212 DescriptorSet 0 241e5c31af7Sopenharmony_ci OpDecorate %212 Binding 2 242e5c31af7Sopenharmony_ci OpDecorate %213 RelaxedPrecision 243e5c31af7Sopenharmony_ci OpDecorate %216 RelaxedPrecision 244e5c31af7Sopenharmony_ci OpDecorate %217 RelaxedPrecision 245e5c31af7Sopenharmony_ci OpDecorate %218 RelaxedPrecision 246e5c31af7Sopenharmony_ci OpDecorate %221 RelaxedPrecision 247e5c31af7Sopenharmony_ci OpDecorate %224 RelaxedPrecision 248e5c31af7Sopenharmony_ci OpDecorate %227 RelaxedPrecision 249e5c31af7Sopenharmony_ci OpDecorate %230 RelaxedPrecision 250e5c31af7Sopenharmony_ci OpDecorate %231 RelaxedPrecision 251e5c31af7Sopenharmony_ci OpDecorate %232 RelaxedPrecision 252e5c31af7Sopenharmony_ci %2 = OpTypeVoid 253e5c31af7Sopenharmony_ci %3 = OpTypeFunction %2 254e5c31af7Sopenharmony_ci %8 = OpTypeInt 32 1 255e5c31af7Sopenharmony_ci %9 = OpTypePointer Private %8 256e5c31af7Sopenharmony_ci %10 = OpVariable %9 Private 257e5c31af7Sopenharmony_ci %11 = OpConstant %8 0 258e5c31af7Sopenharmony_ci %12 = OpTypeInt 32 0 259e5c31af7Sopenharmony_ci %13 = OpConstant %12 10 260e5c31af7Sopenharmony_ci %14 = OpTypeArray %8 %13 261e5c31af7Sopenharmony_ci %15 = OpTypePointer Function %14 262e5c31af7Sopenharmony_ci %17 = OpConstant %12 4 263e5c31af7Sopenharmony_ci %18 = OpTypeArray %8 %17 264e5c31af7Sopenharmony_ci %19 = OpTypeStruct %18 265e5c31af7Sopenharmony_ci %20 = OpTypePointer Uniform %19 266e5c31af7Sopenharmony_ci %21 = OpVariable %20 Uniform 267e5c31af7Sopenharmony_ci %22 = OpConstant %8 1 268e5c31af7Sopenharmony_ci %23 = OpTypePointer Uniform %8 269e5c31af7Sopenharmony_ci %45 = OpTypePointer Function %8 270e5c31af7Sopenharmony_ci %63 = OpTypeBool 271e5c31af7Sopenharmony_ci %73 = OpConstant %8 10 272e5c31af7Sopenharmony_ci %78 = OpConstant %8 2 273e5c31af7Sopenharmony_ci %133 = OpConstant %8 4 274e5c31af7Sopenharmony_ci %138 = OpTypeFloat 32 275e5c31af7Sopenharmony_ci %139 = OpTypeVector %138 4 276e5c31af7Sopenharmony_ci %140 = OpTypePointer Input %139 277e5c31af7Sopenharmony_ci %141 = OpVariable %140 Input 278e5c31af7Sopenharmony_ci %142 = OpConstant %12 1 279e5c31af7Sopenharmony_ci %143 = OpTypePointer Input %138 280e5c31af7Sopenharmony_ci %146 = OpTypeArray %138 %142 281e5c31af7Sopenharmony_ci %147 = OpTypeStruct %146 282e5c31af7Sopenharmony_ci %148 = OpTypePointer Uniform %147 283e5c31af7Sopenharmony_ci %149 = OpVariable %148 Uniform 284e5c31af7Sopenharmony_ci %150 = OpTypePointer Uniform %138 285e5c31af7Sopenharmony_ci %166 = OpConstant %12 0 286e5c31af7Sopenharmony_ci %183 = OpTypeVector %138 2 287e5c31af7Sopenharmony_ci %184 = OpTypeStruct %183 288e5c31af7Sopenharmony_ci %185 = OpTypePointer PushConstant %184 289e5c31af7Sopenharmony_ci %186 = OpVariable %185 PushConstant 290e5c31af7Sopenharmony_ci %187 = OpTypePointer PushConstant %138 291e5c31af7Sopenharmony_ci %201 = OpConstant %8 3 292e5c31af7Sopenharmony_ci %207 = OpTypePointer Output %139 293e5c31af7Sopenharmony_ci %208 = OpVariable %207 Output 294e5c31af7Sopenharmony_ci %209 = OpTypeImage %138 2D 0 0 0 1 Unknown 295e5c31af7Sopenharmony_ci %210 = OpTypeSampledImage %209 296e5c31af7Sopenharmony_ci %211 = OpTypePointer UniformConstant %210 297e5c31af7Sopenharmony_ci %212 = OpVariable %211 UniformConstant 298e5c31af7Sopenharmony_ci %4 = OpFunction %2 None %3 299e5c31af7Sopenharmony_ci %5 = OpLabel 300e5c31af7Sopenharmony_ci %101 = OpVariable %45 Function 301e5c31af7Sopenharmony_ci %111 = OpVariable %45 Function 302e5c31af7Sopenharmony_ci %174 = OpVariable %45 Function 303e5c31af7Sopenharmony_ci OpStore %10 %11 304e5c31af7Sopenharmony_ci OpStore %101 %22 305e5c31af7Sopenharmony_ci OpBranch %102 306e5c31af7Sopenharmony_ci %102 = OpLabel 307e5c31af7Sopenharmony_ci OpLoopMerge %104 %105 None 308e5c31af7Sopenharmony_ci OpBranch %106 309e5c31af7Sopenharmony_ci %106 = OpLabel 310e5c31af7Sopenharmony_ci %107 = OpLoad %8 %10 311e5c31af7Sopenharmony_ci %108 = OpSLessThan %63 %107 %73 312e5c31af7Sopenharmony_ci OpBranchConditional %108 %103 %104 313e5c31af7Sopenharmony_ci %103 = OpLabel 314e5c31af7Sopenharmony_ci %109 = OpLoad %8 %10 315e5c31af7Sopenharmony_ci %110 = OpIAdd %8 %109 %22 316e5c31af7Sopenharmony_ci OpStore %10 %110 317e5c31af7Sopenharmony_ci %112 = OpAccessChain %23 %21 %11 %11 318e5c31af7Sopenharmony_ci %113 = OpLoad %8 %112 319e5c31af7Sopenharmony_ci OpStore %111 %113 320e5c31af7Sopenharmony_ci OpBranch %114 321e5c31af7Sopenharmony_ci %114 = OpLabel 322e5c31af7Sopenharmony_ci OpLoopMerge %116 %117 None 323e5c31af7Sopenharmony_ci OpBranch %118 324e5c31af7Sopenharmony_ci %118 = OpLabel 325e5c31af7Sopenharmony_ci %119 = OpLoad %8 %10 326e5c31af7Sopenharmony_ci %120 = OpSLessThan %63 %119 %73 327e5c31af7Sopenharmony_ci OpBranchConditional %120 %115 %116 328e5c31af7Sopenharmony_ci %115 = OpLabel 329e5c31af7Sopenharmony_ci %121 = OpLoad %8 %10 330e5c31af7Sopenharmony_ci %122 = OpIAdd %8 %121 %22 331e5c31af7Sopenharmony_ci OpStore %10 %122 332e5c31af7Sopenharmony_ci %123 = OpLoad %8 %111 333e5c31af7Sopenharmony_ci %124 = OpAccessChain %23 %21 %11 %78 334e5c31af7Sopenharmony_ci %125 = OpLoad %8 %124 335e5c31af7Sopenharmony_ci %126 = OpSGreaterThanEqual %63 %123 %125 336e5c31af7Sopenharmony_ci OpSelectionMerge %128 None 337e5c31af7Sopenharmony_ci OpBranchConditional %126 %127 %128 338e5c31af7Sopenharmony_ci %127 = OpLabel 339e5c31af7Sopenharmony_ci OpBranch %116 340e5c31af7Sopenharmony_ci %128 = OpLabel 341e5c31af7Sopenharmony_ci %130 = OpLoad %8 %111 342e5c31af7Sopenharmony_ci %131 = OpIAdd %8 %130 %22 343e5c31af7Sopenharmony_ci OpStore %111 %131 344e5c31af7Sopenharmony_ci OpBranch %117 345e5c31af7Sopenharmony_ci %117 = OpLabel 346e5c31af7Sopenharmony_ci OpBranch %114 347e5c31af7Sopenharmony_ci %116 = OpLabel 348e5c31af7Sopenharmony_ci %132 = OpLoad %8 %101 349e5c31af7Sopenharmony_ci %134 = OpSGreaterThanEqual %63 %132 %133 350e5c31af7Sopenharmony_ci OpSelectionMerge %136 None 351e5c31af7Sopenharmony_ci OpBranchConditional %134 %135 %136 352e5c31af7Sopenharmony_ci %135 = OpLabel 353e5c31af7Sopenharmony_ci OpBranch %104 354e5c31af7Sopenharmony_ci %136 = OpLabel 355e5c31af7Sopenharmony_ci %144 = OpAccessChain %143 %141 %142 356e5c31af7Sopenharmony_ci %145 = OpLoad %138 %144 357e5c31af7Sopenharmony_ci %151 = OpAccessChain %150 %149 %11 %11 358e5c31af7Sopenharmony_ci %152 = OpLoad %138 %151 359e5c31af7Sopenharmony_ci %153 = OpFOrdGreaterThan %63 %145 %152 360e5c31af7Sopenharmony_ci OpSelectionMerge %155 None 361e5c31af7Sopenharmony_ci OpBranchConditional %153 %154 %155 362e5c31af7Sopenharmony_ci %154 = OpLabel 363e5c31af7Sopenharmony_ci %156 = OpLoad %8 %101 364e5c31af7Sopenharmony_ci %157 = OpIAdd %8 %156 %22 365e5c31af7Sopenharmony_ci OpStore %101 %157 366e5c31af7Sopenharmony_ci OpBranch %155 367e5c31af7Sopenharmony_ci %155 = OpLabel 368e5c31af7Sopenharmony_ci %158 = OpAccessChain %143 %141 %142 369e5c31af7Sopenharmony_ci %159 = OpLoad %138 %158 370e5c31af7Sopenharmony_ci %160 = OpAccessChain %150 %149 %11 %11 371e5c31af7Sopenharmony_ci %161 = OpLoad %138 %160 372e5c31af7Sopenharmony_ci %162 = OpFOrdLessThan %63 %159 %161 373e5c31af7Sopenharmony_ci OpSelectionMerge %164 None 374e5c31af7Sopenharmony_ci OpBranchConditional %162 %163 %164 375e5c31af7Sopenharmony_ci %163 = OpLabel 376e5c31af7Sopenharmony_ci OpReturn 377e5c31af7Sopenharmony_ci %164 = OpLabel 378e5c31af7Sopenharmony_ci %167 = OpAccessChain %143 %141 %166 379e5c31af7Sopenharmony_ci %168 = OpLoad %138 %167 380e5c31af7Sopenharmony_ci %169 = OpAccessChain %150 %149 %11 %11 381e5c31af7Sopenharmony_ci %170 = OpLoad %138 %169 382e5c31af7Sopenharmony_ci %171 = OpFOrdGreaterThan %63 %168 %170 383e5c31af7Sopenharmony_ci OpSelectionMerge %173 None 384e5c31af7Sopenharmony_ci OpBranchConditional %171 %172 %173 385e5c31af7Sopenharmony_ci %172 = OpLabel 386e5c31af7Sopenharmony_ci %175 = OpAccessChain %23 %21 %11 %11 387e5c31af7Sopenharmony_ci %176 = OpLoad %8 %175 388e5c31af7Sopenharmony_ci OpStore %174 %176 389e5c31af7Sopenharmony_ci OpBranch %177 390e5c31af7Sopenharmony_ci %177 = OpLabel 391e5c31af7Sopenharmony_ci OpLoopMerge %179 %180 None 392e5c31af7Sopenharmony_ci OpBranch %181 393e5c31af7Sopenharmony_ci %181 = OpLabel 394e5c31af7Sopenharmony_ci %182 = OpLoad %8 %174 395e5c31af7Sopenharmony_ci %188 = OpAccessChain %187 %186 %11 %166 396e5c31af7Sopenharmony_ci %189 = OpLoad %138 %188 397e5c31af7Sopenharmony_ci %190 = OpConvertFToS %8 %189 398e5c31af7Sopenharmony_ci %191 = OpINotEqual %63 %182 %190 399e5c31af7Sopenharmony_ci %192 = OpLoad %8 %10 400e5c31af7Sopenharmony_ci %193 = OpSLessThan %63 %192 %73 401e5c31af7Sopenharmony_ci %194 = OpLogicalAnd %63 %191 %193 402e5c31af7Sopenharmony_ci OpBranchConditional %194 %178 %179 403e5c31af7Sopenharmony_ci %178 = OpLabel 404e5c31af7Sopenharmony_ci %195 = OpLoad %8 %10 405e5c31af7Sopenharmony_ci %196 = OpIAdd %8 %195 %22 406e5c31af7Sopenharmony_ci OpStore %10 %196 407e5c31af7Sopenharmony_ci %197 = OpFunctionCall %2 %6 408e5c31af7Sopenharmony_ci OpBranch %180 409e5c31af7Sopenharmony_ci %180 = OpLabel 410e5c31af7Sopenharmony_ci %198 = OpLoad %8 %174 411e5c31af7Sopenharmony_ci %199 = OpIAdd %8 %198 %22 412e5c31af7Sopenharmony_ci OpStore %174 %199 413e5c31af7Sopenharmony_ci OpBranch %177 414e5c31af7Sopenharmony_ci %179 = OpLabel 415e5c31af7Sopenharmony_ci OpBranch %173 416e5c31af7Sopenharmony_ci %173 = OpLabel 417e5c31af7Sopenharmony_ci OpBranch %105 418e5c31af7Sopenharmony_ci %105 = OpLabel 419e5c31af7Sopenharmony_ci OpBranch %102 420e5c31af7Sopenharmony_ci %104 = OpLabel 421e5c31af7Sopenharmony_ci %200 = OpLoad %8 %101 422e5c31af7Sopenharmony_ci %202 = OpAccessChain %23 %21 %11 %201 423e5c31af7Sopenharmony_ci %203 = OpLoad %8 %202 424e5c31af7Sopenharmony_ci %204 = OpIEqual %63 %200 %203 425e5c31af7Sopenharmony_ci OpSelectionMerge %206 None 426e5c31af7Sopenharmony_ci OpBranchConditional %204 %205 %233 427e5c31af7Sopenharmony_ci %205 = OpLabel 428e5c31af7Sopenharmony_ci %213 = OpLoad %210 %212 429e5c31af7Sopenharmony_ci %214 = OpAccessChain %23 %21 %11 %22 430e5c31af7Sopenharmony_ci %215 = OpLoad %8 %214 431e5c31af7Sopenharmony_ci %216 = OpConvertSToF %138 %215 432e5c31af7Sopenharmony_ci %217 = OpCompositeConstruct %183 %216 %216 433e5c31af7Sopenharmony_ci %218 = OpImageSampleImplicitLod %139 %213 %217 434e5c31af7Sopenharmony_ci %219 = OpAccessChain %23 %21 %11 %11 435e5c31af7Sopenharmony_ci %220 = OpLoad %8 %219 436e5c31af7Sopenharmony_ci %221 = OpConvertSToF %138 %220 437e5c31af7Sopenharmony_ci %222 = OpAccessChain %23 %21 %11 %22 438e5c31af7Sopenharmony_ci %223 = OpLoad %8 %222 439e5c31af7Sopenharmony_ci %224 = OpConvertSToF %138 %223 440e5c31af7Sopenharmony_ci %225 = OpAccessChain %23 %21 %11 %22 441e5c31af7Sopenharmony_ci %226 = OpLoad %8 %225 442e5c31af7Sopenharmony_ci %227 = OpConvertSToF %138 %226 443e5c31af7Sopenharmony_ci %228 = OpAccessChain %23 %21 %11 %11 444e5c31af7Sopenharmony_ci %229 = OpLoad %8 %228 445e5c31af7Sopenharmony_ci %230 = OpConvertSToF %138 %229 446e5c31af7Sopenharmony_ci %231 = OpCompositeConstruct %139 %221 %224 %227 %230 447e5c31af7Sopenharmony_ci %232 = OpFAdd %139 %218 %231 448e5c31af7Sopenharmony_ci OpStore %208 %232 449e5c31af7Sopenharmony_ci OpBranch %206 450e5c31af7Sopenharmony_ci %233 = OpLabel 451e5c31af7Sopenharmony_ci %234 = OpAccessChain %23 %21 %11 %22 452e5c31af7Sopenharmony_ci %235 = OpLoad %8 %234 453e5c31af7Sopenharmony_ci %236 = OpConvertSToF %138 %235 454e5c31af7Sopenharmony_ci %237 = OpCompositeConstruct %139 %236 %236 %236 %236 455e5c31af7Sopenharmony_ci OpStore %208 %237 456e5c31af7Sopenharmony_ci OpBranch %206 457e5c31af7Sopenharmony_ci %206 = OpLabel 458e5c31af7Sopenharmony_ci OpReturn 459e5c31af7Sopenharmony_ci OpFunctionEnd 460e5c31af7Sopenharmony_ci %6 = OpFunction %2 None %3 461e5c31af7Sopenharmony_ci %7 = OpLabel 462e5c31af7Sopenharmony_ci %16 = OpVariable %15 Function 463e5c31af7Sopenharmony_ci %46 = OpVariable %45 Function 464e5c31af7Sopenharmony_ci %49 = OpVariable %45 Function 465e5c31af7Sopenharmony_ci %52 = OpVariable %45 Function 466e5c31af7Sopenharmony_ci %24 = OpAccessChain %23 %21 %11 %22 467e5c31af7Sopenharmony_ci %25 = OpLoad %8 %24 468e5c31af7Sopenharmony_ci %26 = OpAccessChain %23 %21 %11 %22 469e5c31af7Sopenharmony_ci %27 = OpLoad %8 %26 470e5c31af7Sopenharmony_ci %28 = OpAccessChain %23 %21 %11 %22 471e5c31af7Sopenharmony_ci %29 = OpLoad %8 %28 472e5c31af7Sopenharmony_ci %30 = OpAccessChain %23 %21 %11 %22 473e5c31af7Sopenharmony_ci %31 = OpLoad %8 %30 474e5c31af7Sopenharmony_ci %32 = OpAccessChain %23 %21 %11 %22 475e5c31af7Sopenharmony_ci %33 = OpLoad %8 %32 476e5c31af7Sopenharmony_ci %34 = OpAccessChain %23 %21 %11 %22 477e5c31af7Sopenharmony_ci %35 = OpLoad %8 %34 478e5c31af7Sopenharmony_ci %36 = OpAccessChain %23 %21 %11 %22 479e5c31af7Sopenharmony_ci %37 = OpLoad %8 %36 480e5c31af7Sopenharmony_ci %38 = OpAccessChain %23 %21 %11 %22 481e5c31af7Sopenharmony_ci %39 = OpLoad %8 %38 482e5c31af7Sopenharmony_ci %40 = OpAccessChain %23 %21 %11 %22 483e5c31af7Sopenharmony_ci %41 = OpLoad %8 %40 484e5c31af7Sopenharmony_ci %42 = OpAccessChain %23 %21 %11 %22 485e5c31af7Sopenharmony_ci %43 = OpLoad %8 %42 486e5c31af7Sopenharmony_ci %44 = OpCompositeConstruct %14 %25 %27 %29 %31 %33 %35 %37 %39 %41 %43 487e5c31af7Sopenharmony_ci OpStore %16 %44 488e5c31af7Sopenharmony_ci %47 = OpAccessChain %23 %21 %11 %11 489e5c31af7Sopenharmony_ci %48 = OpLoad %8 %47 490e5c31af7Sopenharmony_ci OpStore %46 %48 491e5c31af7Sopenharmony_ci %50 = OpAccessChain %23 %21 %11 %11 492e5c31af7Sopenharmony_ci %51 = OpLoad %8 %50 493e5c31af7Sopenharmony_ci OpStore %49 %51 494e5c31af7Sopenharmony_ci %53 = OpAccessChain %23 %21 %11 %11 495e5c31af7Sopenharmony_ci %54 = OpLoad %8 %53 496e5c31af7Sopenharmony_ci OpStore %52 %54 497e5c31af7Sopenharmony_ci OpBranch %55 498e5c31af7Sopenharmony_ci %55 = OpLabel 499e5c31af7Sopenharmony_ci OpLoopMerge %57 %58 None 500e5c31af7Sopenharmony_ci OpBranch %59 501e5c31af7Sopenharmony_ci %59 = OpLabel 502e5c31af7Sopenharmony_ci %60 = OpLoad %8 %52 503e5c31af7Sopenharmony_ci %61 = OpAccessChain %23 %21 %11 %22 504e5c31af7Sopenharmony_ci %62 = OpLoad %8 %61 505e5c31af7Sopenharmony_ci %64 = OpINotEqual %63 %60 %62 506e5c31af7Sopenharmony_ci OpBranchConditional %64 %56 %57 507e5c31af7Sopenharmony_ci %56 = OpLabel 508e5c31af7Sopenharmony_ci %65 = OpLoad %8 %10 509e5c31af7Sopenharmony_ci %66 = OpIAdd %8 %65 %22 510e5c31af7Sopenharmony_ci OpStore %10 %66 511e5c31af7Sopenharmony_ci OpBranch %67 512e5c31af7Sopenharmony_ci %67 = OpLabel 513e5c31af7Sopenharmony_ci OpLoopMerge %69 %70 None 514e5c31af7Sopenharmony_ci OpBranch %71 515e5c31af7Sopenharmony_ci %71 = OpLabel 516e5c31af7Sopenharmony_ci %72 = OpLoad %8 %10 517e5c31af7Sopenharmony_ci %74 = OpSLessThan %63 %72 %73 518e5c31af7Sopenharmony_ci OpBranchConditional %74 %68 %69 519e5c31af7Sopenharmony_ci %68 = OpLabel 520e5c31af7Sopenharmony_ci %75 = OpLoad %8 %10 521e5c31af7Sopenharmony_ci %76 = OpIAdd %8 %75 %22 522e5c31af7Sopenharmony_ci OpStore %10 %76 523e5c31af7Sopenharmony_ci %77 = OpLoad %8 %49 524e5c31af7Sopenharmony_ci %79 = OpAccessChain %23 %21 %11 %78 525e5c31af7Sopenharmony_ci %80 = OpLoad %8 %79 526e5c31af7Sopenharmony_ci %81 = OpSGreaterThanEqual %63 %77 %80 527e5c31af7Sopenharmony_ci OpSelectionMerge %83 None 528e5c31af7Sopenharmony_ci OpBranchConditional %81 %82 %83 529e5c31af7Sopenharmony_ci %82 = OpLabel 530e5c31af7Sopenharmony_ci OpBranch %69 531e5c31af7Sopenharmony_ci %83 = OpLabel 532e5c31af7Sopenharmony_ci OpBranch %85 533e5c31af7Sopenharmony_ci %85 = OpLabel 534e5c31af7Sopenharmony_ci OpLoopMerge %87 %88 None 535e5c31af7Sopenharmony_ci OpBranch %89 536e5c31af7Sopenharmony_ci %89 = OpLabel 537e5c31af7Sopenharmony_ci %90 = OpLoad %8 %10 538e5c31af7Sopenharmony_ci %91 = OpSLessThan %63 %90 %73 539e5c31af7Sopenharmony_ci OpBranchConditional %91 %86 %87 540e5c31af7Sopenharmony_ci %86 = OpLabel 541e5c31af7Sopenharmony_ci %92 = OpLoad %8 %10 542e5c31af7Sopenharmony_ci %93 = OpIAdd %8 %92 %22 543e5c31af7Sopenharmony_ci OpStore %10 %93 544e5c31af7Sopenharmony_ci OpBranch %88 545e5c31af7Sopenharmony_ci %88 = OpLabel 546e5c31af7Sopenharmony_ci OpBranch %85 547e5c31af7Sopenharmony_ci %87 = OpLabel 548e5c31af7Sopenharmony_ci %94 = OpLoad %8 %46 549e5c31af7Sopenharmony_ci %95 = OpIAdd %8 %94 %22 550e5c31af7Sopenharmony_ci OpStore %46 %95 551e5c31af7Sopenharmony_ci %96 = OpAccessChain %23 %21 %11 %11 552e5c31af7Sopenharmony_ci %97 = OpLoad %8 %96 553e5c31af7Sopenharmony_ci %98 = OpAccessChain %45 %16 %94 554e5c31af7Sopenharmony_ci OpStore %98 %97 555e5c31af7Sopenharmony_ci OpBranch %70 556e5c31af7Sopenharmony_ci %70 = OpLabel 557e5c31af7Sopenharmony_ci OpBranch %67 558e5c31af7Sopenharmony_ci %69 = OpLabel 559e5c31af7Sopenharmony_ci OpBranch %58 560e5c31af7Sopenharmony_ci %58 = OpLabel 561e5c31af7Sopenharmony_ci %99 = OpLoad %8 %52 562e5c31af7Sopenharmony_ci %100 = OpISub %8 %99 %22 563e5c31af7Sopenharmony_ci OpStore %52 %100 564e5c31af7Sopenharmony_ci OpBranch %55 565e5c31af7Sopenharmony_ci %57 = OpLabel 566e5c31af7Sopenharmony_ci OpReturn 567e5c31af7Sopenharmony_ci OpFunctionEnd 568e5c31af7Sopenharmony_ciEND 569e5c31af7Sopenharmony_ci 570e5c31af7Sopenharmony_ci# uniforms for variant 571e5c31af7Sopenharmony_ci 572e5c31af7Sopenharmony_ci# tex 573e5c31af7Sopenharmony_ciSAMPLER variant_tex 574e5c31af7Sopenharmony_ci 575e5c31af7Sopenharmony_ci# injectionSwitch 576e5c31af7Sopenharmony_ciBUFFER variant_injectionSwitch DATA_TYPE vec2<float> STD140 DATA 577e5c31af7Sopenharmony_ci 0.0 1.0 578e5c31af7Sopenharmony_ciEND 579e5c31af7Sopenharmony_ci# _GLF_uniform_int_values 580e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA 581e5c31af7Sopenharmony_ci 1 0 4 2 582e5c31af7Sopenharmony_ciEND 583e5c31af7Sopenharmony_ci# _GLF_uniform_float_values 584e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA 585e5c31af7Sopenharmony_ci 0.0 586e5c31af7Sopenharmony_ciEND 587e5c31af7Sopenharmony_ci 588e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM 589e5c31af7Sopenharmony_ci 590e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline 591e5c31af7Sopenharmony_ci ATTACH variant_vertex_shader 592e5c31af7Sopenharmony_ci ATTACH variant_fragment_shader 593e5c31af7Sopenharmony_ci FRAMEBUFFER_SIZE 32 32 594e5c31af7Sopenharmony_ci BIND BUFFER variant_framebuffer AS color LOCATION 0 595e5c31af7Sopenharmony_ci BIND BUFFER default_texture AS combined_image_sampler SAMPLER variant_tex DESCRIPTOR_SET 0 BINDING 2 596e5c31af7Sopenharmony_ci BIND BUFFER variant_injectionSwitch AS push_constant 597e5c31af7Sopenharmony_ci BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1 598e5c31af7Sopenharmony_ci BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0 599e5c31af7Sopenharmony_ciEND 600e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255 601e5c31af7Sopenharmony_ci 602e5c31af7Sopenharmony_ciCLEAR variant_pipeline 603e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 32 32 604e5c31af7Sopenharmony_ci 605e5c31af7Sopenharmony_ciEXPECT variant_framebuffer IDX 0 0 SIZE 32 32 EQ_RGBA 255 0 0 255 606