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