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