1e5c31af7Sopenharmony_ci#!amber
2e5c31af7Sopenharmony_ci
3e5c31af7Sopenharmony_ci# Copyright 2021 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# '--copy-propagate-arrays'
26e5c31af7Sopenharmony_ci# '--eliminate-dead-branches'
27e5c31af7Sopenharmony_ci# '--merge-blocks'
28e5c31af7Sopenharmony_ci# '--private-to-local'
29e5c31af7Sopenharmony_ci# '--reduce-load-size'
30e5c31af7Sopenharmony_ci# '--eliminate-dead-code-aggressive'
31e5c31af7Sopenharmony_ci# '--ccp'
32e5c31af7Sopenharmony_ci# '--reduce-load-size'
33e5c31af7Sopenharmony_ci# '--convert-local-access-chains'
34e5c31af7Sopenharmony_ci# '--eliminate-dead-branches'
35e5c31af7Sopenharmony_ci# '--merge-return'
36e5c31af7Sopenharmony_ci# '--eliminate-local-single-block'
37e5c31af7Sopenharmony_ci# '--eliminate-dead-code-aggressive'
38e5c31af7Sopenharmony_ci# '--redundancy-elimination'
39e5c31af7Sopenharmony_ci# '--eliminate-dead-branches'
40e5c31af7Sopenharmony_ci# '--merge-return'
41e5c31af7Sopenharmony_ci# '--eliminate-local-multi-store'
42e5c31af7Sopenharmony_ci# '--reduce-load-size'
43e5c31af7Sopenharmony_ci# '--inline-entry-points-exhaustive'
44e5c31af7Sopenharmony_ci# '--vector-dce'
45e5c31af7Sopenharmony_ci# '--eliminate-dead-branches'
46e5c31af7Sopenharmony_ci# '--merge-return'
47e5c31af7Sopenharmony_ci# '--eliminate-local-multi-store'
48e5c31af7Sopenharmony_ci# '--eliminate-dead-branches'
49e5c31af7Sopenharmony_ci# '--merge-blocks'
50e5c31af7Sopenharmony_ci# '--eliminate-local-single-store'
51e5c31af7Sopenharmony_ci# spirv-opt commit hash: a0370efd589be33d5d9a85cfde2f85841b3755af
52e5c31af7Sopenharmony_ci
53e5c31af7Sopenharmony_ci
54e5c31af7Sopenharmony_ci
55e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH
56e5c31af7Sopenharmony_ci
57e5c31af7Sopenharmony_ci# variant_fragment_shader is derived from the following GLSL:
58e5c31af7Sopenharmony_ci# #version 320 es
59e5c31af7Sopenharmony_ci# #define _int_0 _GLF_uniform_int_values[0]
60e5c31af7Sopenharmony_ci# #define _float_1_0 _GLF_uniform_float_values[0]
61e5c31af7Sopenharmony_ci# #define _float_0_1 _GLF_uniform_float_values[1]
62e5c31af7Sopenharmony_ci# #define _float_0_0 _GLF_uniform_float_values[2]
63e5c31af7Sopenharmony_ci#
64e5c31af7Sopenharmony_ci# precision highp float;
65e5c31af7Sopenharmony_ci# precision highp int;
66e5c31af7Sopenharmony_ci#
67e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_int_values: 0
68e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0
69e5c31af7Sopenharmony_ci# {
70e5c31af7Sopenharmony_ci#     int _GLF_uniform_int_values[1];
71e5c31af7Sopenharmony_ci# };
72e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_float_values: [1.0, 0.1, 0.0]
73e5c31af7Sopenharmony_ci# layout(set = 0, binding = 1) uniform buf1
74e5c31af7Sopenharmony_ci# {
75e5c31af7Sopenharmony_ci#     float _GLF_uniform_float_values[3];
76e5c31af7Sopenharmony_ci# };
77e5c31af7Sopenharmony_ci#
78e5c31af7Sopenharmony_ci# const int _GLF_global_loop_bound = 10;
79e5c31af7Sopenharmony_ci# int _GLF_global_loop_count = 0;
80e5c31af7Sopenharmony_ci#
81e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color;
82e5c31af7Sopenharmony_ci#
83e5c31af7Sopenharmony_ci# // This function always returns 1.0 or greater.
84e5c31af7Sopenharmony_ci# float func(float x)
85e5c31af7Sopenharmony_ci# {
86e5c31af7Sopenharmony_ci#     float f = _float_1_0;
87e5c31af7Sopenharmony_ci#
88e5c31af7Sopenharmony_ci#     // Always false.
89e5c31af7Sopenharmony_ci#     if(_float_1_0 < 1.0)
90e5c31af7Sopenharmony_ci#     {
91e5c31af7Sopenharmony_ci#         if(gl_FragCoord.x < _float_0_0)
92e5c31af7Sopenharmony_ci#         {
93e5c31af7Sopenharmony_ci#             return _float_1_0;
94e5c31af7Sopenharmony_ci#         }
95e5c31af7Sopenharmony_ci#     }
96e5c31af7Sopenharmony_ci#
97e5c31af7Sopenharmony_ci#     while(_GLF_global_loop_count < _GLF_global_loop_bound)
98e5c31af7Sopenharmony_ci#     {
99e5c31af7Sopenharmony_ci#         _GLF_global_loop_count++;
100e5c31af7Sopenharmony_ci#         f += _float_1_0;
101e5c31af7Sopenharmony_ci#
102e5c31af7Sopenharmony_ci#         // Always true.
103e5c31af7Sopenharmony_ci#         if(gl_FragCoord.x >= 0.0)
104e5c31af7Sopenharmony_ci#         {
105e5c31af7Sopenharmony_ci#             _GLF_color = vec4(_float_1_0);
106e5c31af7Sopenharmony_ci#         }
107e5c31af7Sopenharmony_ci#
108e5c31af7Sopenharmony_ci#         // Always false.
109e5c31af7Sopenharmony_ci#         if (x < _float_0_0)
110e5c31af7Sopenharmony_ci#         {
111e5c31af7Sopenharmony_ci#             return f;
112e5c31af7Sopenharmony_ci#         }
113e5c31af7Sopenharmony_ci#     }
114e5c31af7Sopenharmony_ci#
115e5c31af7Sopenharmony_ci#     // Never iterated as the loop bound has already been reached.
116e5c31af7Sopenharmony_ci#     while(_GLF_global_loop_count < _GLF_global_loop_bound)
117e5c31af7Sopenharmony_ci#     {
118e5c31af7Sopenharmony_ci#         _GLF_global_loop_count ++;
119e5c31af7Sopenharmony_ci#     }
120e5c31af7Sopenharmony_ci#
121e5c31af7Sopenharmony_ci#     return f;
122e5c31af7Sopenharmony_ci# }
123e5c31af7Sopenharmony_ci#
124e5c31af7Sopenharmony_ci# void main()
125e5c31af7Sopenharmony_ci# {
126e5c31af7Sopenharmony_ci#     _GLF_color = vec4(_int_0);
127e5c31af7Sopenharmony_ci#
128e5c31af7Sopenharmony_ci#     // Always false.
129e5c31af7Sopenharmony_ci#     if(gl_FragCoord.x < _float_0_1)
130e5c31af7Sopenharmony_ci#     {
131e5c31af7Sopenharmony_ci#         return;
132e5c31af7Sopenharmony_ci#     }
133e5c31af7Sopenharmony_ci#
134e5c31af7Sopenharmony_ci#     // v0 becomes (0, 0, 0, 0).
135e5c31af7Sopenharmony_ci#     vec4 v0 = _GLF_color;
136e5c31af7Sopenharmony_ci#
137e5c31af7Sopenharmony_ci#     // Always true.
138e5c31af7Sopenharmony_ci#     if(gl_FragCoord.x >= 0.0)
139e5c31af7Sopenharmony_ci#     {
140e5c31af7Sopenharmony_ci#         _GLF_color = vec4(_float_1_0);
141e5c31af7Sopenharmony_ci#     }
142e5c31af7Sopenharmony_ci#
143e5c31af7Sopenharmony_ci#     _GLF_color = v0;
144e5c31af7Sopenharmony_ci#
145e5c31af7Sopenharmony_ci#     // Always false.
146e5c31af7Sopenharmony_ci#     if(gl_FragCoord.y < _float_0_1)
147e5c31af7Sopenharmony_ci#     {
148e5c31af7Sopenharmony_ci#         return;
149e5c31af7Sopenharmony_ci#     }
150e5c31af7Sopenharmony_ci#
151e5c31af7Sopenharmony_ci#     vec4 v1 = vec4(_float_0_0);
152e5c31af7Sopenharmony_ci#     // v1 becomes (x, 0, 0, x), where x >= 1.0.
153e5c31af7Sopenharmony_ci#     v1.x = v1.w = func(gl_FragCoord.y);
154e5c31af7Sopenharmony_ci#
155e5c31af7Sopenharmony_ci#     // Always true.
156e5c31af7Sopenharmony_ci#     if(gl_FragCoord.x >= 0.0)
157e5c31af7Sopenharmony_ci#     {
158e5c31af7Sopenharmony_ci#         _GLF_color = vec4(_float_1_0);
159e5c31af7Sopenharmony_ci#     }
160e5c31af7Sopenharmony_ci#
161e5c31af7Sopenharmony_ci#     // Always false.
162e5c31af7Sopenharmony_ci#     if(gl_FragCoord.x < _float_0_0)
163e5c31af7Sopenharmony_ci#     {
164e5c31af7Sopenharmony_ci#         return;
165e5c31af7Sopenharmony_ci#     }
166e5c31af7Sopenharmony_ci#
167e5c31af7Sopenharmony_ci#     // Results clamps to (1, 0, 0, 1).
168e5c31af7Sopenharmony_ci#     _GLF_color = v1;
169e5c31af7Sopenharmony_ci# }
170e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
171e5c31af7Sopenharmony_ci; SPIR-V
172e5c31af7Sopenharmony_ci; Version: 1.0
173e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10
174e5c31af7Sopenharmony_ci; Bound: 247
175e5c31af7Sopenharmony_ci; Schema: 0
176e5c31af7Sopenharmony_ci               OpCapability Shader
177e5c31af7Sopenharmony_ci          %1 = OpExtInstImport "GLSL.std.450"
178e5c31af7Sopenharmony_ci               OpMemoryModel Logical GLSL450
179e5c31af7Sopenharmony_ci               OpEntryPoint Fragment %4 "main" %35 %71
180e5c31af7Sopenharmony_ci               OpExecutionMode %4 OriginUpperLeft
181e5c31af7Sopenharmony_ci               OpSource ESSL 320
182e5c31af7Sopenharmony_ci               OpName %4 "main"
183e5c31af7Sopenharmony_ci               OpName %10 "func(f1;"
184e5c31af7Sopenharmony_ci               OpName %9 "x"
185e5c31af7Sopenharmony_ci               OpName %14 "_GLF_global_loop_count"
186e5c31af7Sopenharmony_ci               OpName %16 "f"
187e5c31af7Sopenharmony_ci               OpName %20 "buf1"
188e5c31af7Sopenharmony_ci               OpMemberName %20 0 "_GLF_uniform_float_values"
189e5c31af7Sopenharmony_ci               OpName %22 ""
190e5c31af7Sopenharmony_ci               OpName %35 "gl_FragCoord"
191e5c31af7Sopenharmony_ci               OpName %71 "_GLF_color"
192e5c31af7Sopenharmony_ci               OpName %97 "buf0"
193e5c31af7Sopenharmony_ci               OpMemberName %97 0 "_GLF_uniform_int_values"
194e5c31af7Sopenharmony_ci               OpName %99 ""
195e5c31af7Sopenharmony_ci               OpName %114 "v0"
196e5c31af7Sopenharmony_ci               OpName %133 "v1"
197e5c31af7Sopenharmony_ci               OpName %137 "param"
198e5c31af7Sopenharmony_ci               OpDecorate %19 ArrayStride 16
199e5c31af7Sopenharmony_ci               OpMemberDecorate %20 0 Offset 0
200e5c31af7Sopenharmony_ci               OpDecorate %20 Block
201e5c31af7Sopenharmony_ci               OpDecorate %22 DescriptorSet 0
202e5c31af7Sopenharmony_ci               OpDecorate %22 Binding 1
203e5c31af7Sopenharmony_ci               OpDecorate %35 BuiltIn FragCoord
204e5c31af7Sopenharmony_ci               OpDecorate %71 Location 0
205e5c31af7Sopenharmony_ci               OpDecorate %96 ArrayStride 16
206e5c31af7Sopenharmony_ci               OpMemberDecorate %97 0 Offset 0
207e5c31af7Sopenharmony_ci               OpDecorate %97 Block
208e5c31af7Sopenharmony_ci               OpDecorate %99 DescriptorSet 0
209e5c31af7Sopenharmony_ci               OpDecorate %99 Binding 0
210e5c31af7Sopenharmony_ci          %2 = OpTypeVoid
211e5c31af7Sopenharmony_ci          %3 = OpTypeFunction %2
212e5c31af7Sopenharmony_ci          %6 = OpTypeFloat 32
213e5c31af7Sopenharmony_ci          %7 = OpTypePointer Function %6
214e5c31af7Sopenharmony_ci          %8 = OpTypeFunction %6 %7
215e5c31af7Sopenharmony_ci         %12 = OpTypeInt 32 1
216e5c31af7Sopenharmony_ci         %13 = OpTypePointer Private %12
217e5c31af7Sopenharmony_ci         %14 = OpVariable %13 Private
218e5c31af7Sopenharmony_ci         %15 = OpConstant %12 0
219e5c31af7Sopenharmony_ci         %17 = OpTypeInt 32 0
220e5c31af7Sopenharmony_ci         %18 = OpConstant %17 3
221e5c31af7Sopenharmony_ci         %19 = OpTypeArray %6 %18
222e5c31af7Sopenharmony_ci         %20 = OpTypeStruct %19
223e5c31af7Sopenharmony_ci         %21 = OpTypePointer Uniform %20
224e5c31af7Sopenharmony_ci         %22 = OpVariable %21 Uniform
225e5c31af7Sopenharmony_ci         %23 = OpTypePointer Uniform %6
226e5c31af7Sopenharmony_ci         %28 = OpConstant %6 1
227e5c31af7Sopenharmony_ci         %29 = OpTypeBool
228e5c31af7Sopenharmony_ci         %33 = OpTypeVector %6 4
229e5c31af7Sopenharmony_ci         %34 = OpTypePointer Input %33
230e5c31af7Sopenharmony_ci         %35 = OpVariable %34 Input
231e5c31af7Sopenharmony_ci         %36 = OpConstant %17 0
232e5c31af7Sopenharmony_ci         %37 = OpTypePointer Input %6
233e5c31af7Sopenharmony_ci         %40 = OpConstant %12 2
234e5c31af7Sopenharmony_ci         %55 = OpConstant %12 10
235e5c31af7Sopenharmony_ci         %58 = OpConstant %12 1
236e5c31af7Sopenharmony_ci         %66 = OpConstant %6 0
237e5c31af7Sopenharmony_ci         %70 = OpTypePointer Output %33
238e5c31af7Sopenharmony_ci         %71 = OpVariable %70 Output
239e5c31af7Sopenharmony_ci         %95 = OpConstant %17 1
240e5c31af7Sopenharmony_ci         %96 = OpTypeArray %12 %95
241e5c31af7Sopenharmony_ci         %97 = OpTypeStruct %96
242e5c31af7Sopenharmony_ci         %98 = OpTypePointer Uniform %97
243e5c31af7Sopenharmony_ci         %99 = OpVariable %98 Uniform
244e5c31af7Sopenharmony_ci        %100 = OpTypePointer Uniform %12
245e5c31af7Sopenharmony_ci        %113 = OpTypePointer Function %33
246e5c31af7Sopenharmony_ci        %166 = OpConstantFalse %29
247e5c31af7Sopenharmony_ci        %167 = OpTypePointer Function %29
248e5c31af7Sopenharmony_ci        %169 = OpConstantTrue %29
249e5c31af7Sopenharmony_ci        %192 = OpUndef %6
250e5c31af7Sopenharmony_ci          %4 = OpFunction %2 None %3
251e5c31af7Sopenharmony_ci          %5 = OpLabel
252e5c31af7Sopenharmony_ci        %194 = OpVariable %167 Function %166
253e5c31af7Sopenharmony_ci        %195 = OpVariable %7 Function
254e5c31af7Sopenharmony_ci        %196 = OpVariable %7 Function
255e5c31af7Sopenharmony_ci        %197 = OpVariable %7 Function
256e5c31af7Sopenharmony_ci        %114 = OpVariable %113 Function
257e5c31af7Sopenharmony_ci        %133 = OpVariable %113 Function
258e5c31af7Sopenharmony_ci        %137 = OpVariable %7 Function
259e5c31af7Sopenharmony_ci               OpSelectionMerge %164 None
260e5c31af7Sopenharmony_ci               OpSwitch %36 %165
261e5c31af7Sopenharmony_ci        %165 = OpLabel
262e5c31af7Sopenharmony_ci               OpStore %14 %15
263e5c31af7Sopenharmony_ci        %101 = OpAccessChain %100 %99 %15 %15
264e5c31af7Sopenharmony_ci        %102 = OpLoad %12 %101
265e5c31af7Sopenharmony_ci        %103 = OpConvertSToF %6 %102
266e5c31af7Sopenharmony_ci        %104 = OpCompositeConstruct %33 %103 %103 %103 %103
267e5c31af7Sopenharmony_ci               OpStore %71 %104
268e5c31af7Sopenharmony_ci        %105 = OpAccessChain %37 %35 %36
269e5c31af7Sopenharmony_ci        %106 = OpLoad %6 %105
270e5c31af7Sopenharmony_ci        %107 = OpAccessChain %23 %22 %15 %58
271e5c31af7Sopenharmony_ci        %108 = OpLoad %6 %107
272e5c31af7Sopenharmony_ci        %109 = OpFOrdLessThan %29 %106 %108
273e5c31af7Sopenharmony_ci               OpSelectionMerge %111 None
274e5c31af7Sopenharmony_ci               OpBranchConditional %109 %110 %111
275e5c31af7Sopenharmony_ci        %110 = OpLabel
276e5c31af7Sopenharmony_ci               OpBranch %164
277e5c31af7Sopenharmony_ci        %111 = OpLabel
278e5c31af7Sopenharmony_ci        %115 = OpLoad %33 %71
279e5c31af7Sopenharmony_ci               OpStore %114 %115
280e5c31af7Sopenharmony_ci        %118 = OpFOrdGreaterThanEqual %29 %106 %66
281e5c31af7Sopenharmony_ci               OpSelectionMerge %120 None
282e5c31af7Sopenharmony_ci               OpBranchConditional %118 %119 %120
283e5c31af7Sopenharmony_ci        %119 = OpLabel
284e5c31af7Sopenharmony_ci        %121 = OpAccessChain %23 %22 %15 %15
285e5c31af7Sopenharmony_ci        %122 = OpLoad %6 %121
286e5c31af7Sopenharmony_ci        %123 = OpCompositeConstruct %33 %122 %122 %122 %122
287e5c31af7Sopenharmony_ci               OpStore %71 %123
288e5c31af7Sopenharmony_ci               OpBranch %120
289e5c31af7Sopenharmony_ci        %120 = OpLabel
290e5c31af7Sopenharmony_ci               OpStore %71 %115
291e5c31af7Sopenharmony_ci        %125 = OpAccessChain %37 %35 %95
292e5c31af7Sopenharmony_ci        %126 = OpLoad %6 %125
293e5c31af7Sopenharmony_ci        %129 = OpFOrdLessThan %29 %126 %108
294e5c31af7Sopenharmony_ci               OpSelectionMerge %131 None
295e5c31af7Sopenharmony_ci               OpBranchConditional %129 %130 %131
296e5c31af7Sopenharmony_ci        %130 = OpLabel
297e5c31af7Sopenharmony_ci               OpBranch %164
298e5c31af7Sopenharmony_ci        %131 = OpLabel
299e5c31af7Sopenharmony_ci        %134 = OpAccessChain %23 %22 %15 %40
300e5c31af7Sopenharmony_ci        %135 = OpLoad %6 %134
301e5c31af7Sopenharmony_ci        %136 = OpCompositeConstruct %33 %135 %135 %135 %135
302e5c31af7Sopenharmony_ci               OpStore %133 %136
303e5c31af7Sopenharmony_ci               OpStore %137 %126
304e5c31af7Sopenharmony_ci               OpStore %194 %166
305e5c31af7Sopenharmony_ci               OpSelectionMerge %245 None
306e5c31af7Sopenharmony_ci               OpSwitch %36 %199
307e5c31af7Sopenharmony_ci        %199 = OpLabel
308e5c31af7Sopenharmony_ci        %200 = OpAccessChain %23 %22 %15 %15
309e5c31af7Sopenharmony_ci        %201 = OpLoad %6 %200
310e5c31af7Sopenharmony_ci               OpStore %196 %201
311e5c31af7Sopenharmony_ci        %202 = OpFOrdLessThan %29 %201 %28
312e5c31af7Sopenharmony_ci               OpSelectionMerge %211 None
313e5c31af7Sopenharmony_ci               OpBranchConditional %202 %203 %211
314e5c31af7Sopenharmony_ci        %203 = OpLabel
315e5c31af7Sopenharmony_ci        %204 = OpAccessChain %37 %35 %36
316e5c31af7Sopenharmony_ci        %205 = OpLoad %6 %204
317e5c31af7Sopenharmony_ci        %206 = OpAccessChain %23 %22 %15 %40
318e5c31af7Sopenharmony_ci        %207 = OpLoad %6 %206
319e5c31af7Sopenharmony_ci        %208 = OpFOrdLessThan %29 %205 %207
320e5c31af7Sopenharmony_ci               OpSelectionMerge %210 None
321e5c31af7Sopenharmony_ci               OpBranchConditional %208 %209 %210
322e5c31af7Sopenharmony_ci        %209 = OpLabel
323e5c31af7Sopenharmony_ci               OpStore %194 %169
324e5c31af7Sopenharmony_ci               OpStore %195 %201
325e5c31af7Sopenharmony_ci               OpBranch %245
326e5c31af7Sopenharmony_ci        %210 = OpLabel
327e5c31af7Sopenharmony_ci               OpBranch %211
328e5c31af7Sopenharmony_ci        %211 = OpLabel
329e5c31af7Sopenharmony_ci               OpBranch %212
330e5c31af7Sopenharmony_ci        %212 = OpLabel
331e5c31af7Sopenharmony_ci        %213 = OpPhi %6 %201 %211 %219 %232
332e5c31af7Sopenharmony_ci        %214 = OpLoad %12 %14
333e5c31af7Sopenharmony_ci        %215 = OpSLessThan %29 %214 %55
334e5c31af7Sopenharmony_ci               OpLoopMerge %233 %232 None
335e5c31af7Sopenharmony_ci               OpBranchConditional %215 %216 %233
336e5c31af7Sopenharmony_ci        %216 = OpLabel
337e5c31af7Sopenharmony_ci        %217 = OpLoad %12 %14
338e5c31af7Sopenharmony_ci        %218 = OpIAdd %12 %217 %58
339e5c31af7Sopenharmony_ci               OpStore %14 %218
340e5c31af7Sopenharmony_ci        %219 = OpFAdd %6 %213 %201
341e5c31af7Sopenharmony_ci               OpStore %196 %219
342e5c31af7Sopenharmony_ci        %220 = OpAccessChain %37 %35 %36
343e5c31af7Sopenharmony_ci        %221 = OpLoad %6 %220
344e5c31af7Sopenharmony_ci        %222 = OpFOrdGreaterThanEqual %29 %221 %66
345e5c31af7Sopenharmony_ci               OpSelectionMerge %225 None
346e5c31af7Sopenharmony_ci               OpBranchConditional %222 %223 %225
347e5c31af7Sopenharmony_ci        %223 = OpLabel
348e5c31af7Sopenharmony_ci        %224 = OpCompositeConstruct %33 %201 %201 %201 %201
349e5c31af7Sopenharmony_ci               OpStore %71 %224
350e5c31af7Sopenharmony_ci               OpBranch %225
351e5c31af7Sopenharmony_ci        %225 = OpLabel
352e5c31af7Sopenharmony_ci        %227 = OpAccessChain %23 %22 %15 %40
353e5c31af7Sopenharmony_ci        %228 = OpLoad %6 %227
354e5c31af7Sopenharmony_ci        %229 = OpFOrdLessThan %29 %126 %228
355e5c31af7Sopenharmony_ci               OpSelectionMerge %231 None
356e5c31af7Sopenharmony_ci               OpBranchConditional %229 %230 %231
357e5c31af7Sopenharmony_ci        %230 = OpLabel
358e5c31af7Sopenharmony_ci               OpStore %194 %169
359e5c31af7Sopenharmony_ci               OpStore %195 %219
360e5c31af7Sopenharmony_ci               OpBranch %233
361e5c31af7Sopenharmony_ci        %231 = OpLabel
362e5c31af7Sopenharmony_ci               OpBranch %232
363e5c31af7Sopenharmony_ci        %232 = OpLabel
364e5c31af7Sopenharmony_ci               OpBranch %212
365e5c31af7Sopenharmony_ci        %233 = OpLabel
366e5c31af7Sopenharmony_ci        %234 = OpPhi %6 %192 %212 %219 %230
367e5c31af7Sopenharmony_ci        %235 = OpPhi %6 %213 %212 %219 %230
368e5c31af7Sopenharmony_ci        %236 = OpPhi %29 %166 %212 %169 %230
369e5c31af7Sopenharmony_ci               OpSelectionMerge %237 None
370e5c31af7Sopenharmony_ci               OpBranchConditional %236 %245 %237
371e5c31af7Sopenharmony_ci        %237 = OpLabel
372e5c31af7Sopenharmony_ci               OpBranch %238
373e5c31af7Sopenharmony_ci        %238 = OpLabel
374e5c31af7Sopenharmony_ci        %239 = OpLoad %12 %14
375e5c31af7Sopenharmony_ci        %240 = OpSLessThan %29 %239 %55
376e5c31af7Sopenharmony_ci               OpLoopMerge %244 %241 None
377e5c31af7Sopenharmony_ci               OpBranchConditional %240 %241 %244
378e5c31af7Sopenharmony_ci        %241 = OpLabel
379e5c31af7Sopenharmony_ci        %242 = OpLoad %12 %14
380e5c31af7Sopenharmony_ci        %243 = OpIAdd %12 %242 %58
381e5c31af7Sopenharmony_ci               OpStore %14 %243
382e5c31af7Sopenharmony_ci               OpBranch %238
383e5c31af7Sopenharmony_ci        %244 = OpLabel
384e5c31af7Sopenharmony_ci               OpStore %194 %169
385e5c31af7Sopenharmony_ci               OpStore %195 %235
386e5c31af7Sopenharmony_ci               OpBranch %245
387e5c31af7Sopenharmony_ci        %245 = OpLabel
388e5c31af7Sopenharmony_ci        %246 = OpPhi %6 %201 %209 %234 %233 %235 %244
389e5c31af7Sopenharmony_ci               OpStore %197 %246
390e5c31af7Sopenharmony_ci        %161 = OpCompositeInsert %33 %246 %136 3
391e5c31af7Sopenharmony_ci        %163 = OpCompositeInsert %33 %246 %161 0
392e5c31af7Sopenharmony_ci               OpStore %133 %163
393e5c31af7Sopenharmony_ci               OpSelectionMerge %147 None
394e5c31af7Sopenharmony_ci               OpBranchConditional %118 %146 %147
395e5c31af7Sopenharmony_ci        %146 = OpLabel
396e5c31af7Sopenharmony_ci        %148 = OpAccessChain %23 %22 %15 %15
397e5c31af7Sopenharmony_ci        %149 = OpLoad %6 %148
398e5c31af7Sopenharmony_ci        %150 = OpCompositeConstruct %33 %149 %149 %149 %149
399e5c31af7Sopenharmony_ci               OpStore %71 %150
400e5c31af7Sopenharmony_ci               OpBranch %147
401e5c31af7Sopenharmony_ci        %147 = OpLabel
402e5c31af7Sopenharmony_ci        %155 = OpFOrdLessThan %29 %106 %135
403e5c31af7Sopenharmony_ci               OpSelectionMerge %157 None
404e5c31af7Sopenharmony_ci               OpBranchConditional %155 %156 %157
405e5c31af7Sopenharmony_ci        %156 = OpLabel
406e5c31af7Sopenharmony_ci               OpBranch %164
407e5c31af7Sopenharmony_ci        %157 = OpLabel
408e5c31af7Sopenharmony_ci               OpStore %71 %163
409e5c31af7Sopenharmony_ci               OpBranch %164
410e5c31af7Sopenharmony_ci        %164 = OpLabel
411e5c31af7Sopenharmony_ci               OpReturn
412e5c31af7Sopenharmony_ci               OpFunctionEnd
413e5c31af7Sopenharmony_ci         %10 = OpFunction %6 None %8
414e5c31af7Sopenharmony_ci          %9 = OpFunctionParameter %7
415e5c31af7Sopenharmony_ci         %11 = OpLabel
416e5c31af7Sopenharmony_ci        %174 = OpVariable %167 Function %166
417e5c31af7Sopenharmony_ci        %171 = OpVariable %7 Function
418e5c31af7Sopenharmony_ci         %16 = OpVariable %7 Function
419e5c31af7Sopenharmony_ci               OpSelectionMerge %170 None
420e5c31af7Sopenharmony_ci               OpSwitch %36 %173
421e5c31af7Sopenharmony_ci        %173 = OpLabel
422e5c31af7Sopenharmony_ci         %24 = OpAccessChain %23 %22 %15 %15
423e5c31af7Sopenharmony_ci         %25 = OpLoad %6 %24
424e5c31af7Sopenharmony_ci               OpStore %16 %25
425e5c31af7Sopenharmony_ci         %30 = OpFOrdLessThan %29 %25 %28
426e5c31af7Sopenharmony_ci               OpSelectionMerge %32 None
427e5c31af7Sopenharmony_ci               OpBranchConditional %30 %31 %32
428e5c31af7Sopenharmony_ci         %31 = OpLabel
429e5c31af7Sopenharmony_ci         %38 = OpAccessChain %37 %35 %36
430e5c31af7Sopenharmony_ci         %39 = OpLoad %6 %38
431e5c31af7Sopenharmony_ci         %41 = OpAccessChain %23 %22 %15 %40
432e5c31af7Sopenharmony_ci         %42 = OpLoad %6 %41
433e5c31af7Sopenharmony_ci         %43 = OpFOrdLessThan %29 %39 %42
434e5c31af7Sopenharmony_ci               OpSelectionMerge %45 None
435e5c31af7Sopenharmony_ci               OpBranchConditional %43 %44 %45
436e5c31af7Sopenharmony_ci         %44 = OpLabel
437e5c31af7Sopenharmony_ci               OpStore %174 %169
438e5c31af7Sopenharmony_ci               OpStore %171 %25
439e5c31af7Sopenharmony_ci               OpBranch %170
440e5c31af7Sopenharmony_ci         %45 = OpLabel
441e5c31af7Sopenharmony_ci               OpBranch %32
442e5c31af7Sopenharmony_ci         %32 = OpLabel
443e5c31af7Sopenharmony_ci               OpBranch %49
444e5c31af7Sopenharmony_ci         %49 = OpLabel
445e5c31af7Sopenharmony_ci        %179 = OpPhi %6 %25 %32 %63 %52
446e5c31af7Sopenharmony_ci         %54 = OpLoad %12 %14
447e5c31af7Sopenharmony_ci         %56 = OpSLessThan %29 %54 %55
448e5c31af7Sopenharmony_ci               OpLoopMerge %51 %52 None
449e5c31af7Sopenharmony_ci               OpBranchConditional %56 %50 %51
450e5c31af7Sopenharmony_ci         %50 = OpLabel
451e5c31af7Sopenharmony_ci         %57 = OpLoad %12 %14
452e5c31af7Sopenharmony_ci         %59 = OpIAdd %12 %57 %58
453e5c31af7Sopenharmony_ci               OpStore %14 %59
454e5c31af7Sopenharmony_ci         %63 = OpFAdd %6 %179 %25
455e5c31af7Sopenharmony_ci               OpStore %16 %63
456e5c31af7Sopenharmony_ci         %64 = OpAccessChain %37 %35 %36
457e5c31af7Sopenharmony_ci         %65 = OpLoad %6 %64
458e5c31af7Sopenharmony_ci         %67 = OpFOrdGreaterThanEqual %29 %65 %66
459e5c31af7Sopenharmony_ci               OpSelectionMerge %69 None
460e5c31af7Sopenharmony_ci               OpBranchConditional %67 %68 %69
461e5c31af7Sopenharmony_ci         %68 = OpLabel
462e5c31af7Sopenharmony_ci         %74 = OpCompositeConstruct %33 %25 %25 %25 %25
463e5c31af7Sopenharmony_ci               OpStore %71 %74
464e5c31af7Sopenharmony_ci               OpBranch %69
465e5c31af7Sopenharmony_ci         %69 = OpLabel
466e5c31af7Sopenharmony_ci         %75 = OpLoad %6 %9
467e5c31af7Sopenharmony_ci         %76 = OpAccessChain %23 %22 %15 %40
468e5c31af7Sopenharmony_ci         %77 = OpLoad %6 %76
469e5c31af7Sopenharmony_ci         %78 = OpFOrdLessThan %29 %75 %77
470e5c31af7Sopenharmony_ci               OpSelectionMerge %80 None
471e5c31af7Sopenharmony_ci               OpBranchConditional %78 %79 %80
472e5c31af7Sopenharmony_ci         %79 = OpLabel
473e5c31af7Sopenharmony_ci               OpStore %174 %169
474e5c31af7Sopenharmony_ci               OpStore %171 %63
475e5c31af7Sopenharmony_ci               OpBranch %51
476e5c31af7Sopenharmony_ci         %80 = OpLabel
477e5c31af7Sopenharmony_ci               OpBranch %52
478e5c31af7Sopenharmony_ci         %52 = OpLabel
479e5c31af7Sopenharmony_ci               OpBranch %49
480e5c31af7Sopenharmony_ci         %51 = OpLabel
481e5c31af7Sopenharmony_ci        %189 = OpPhi %6 %192 %49 %63 %79
482e5c31af7Sopenharmony_ci        %187 = OpPhi %6 %179 %49 %63 %79
483e5c31af7Sopenharmony_ci        %182 = OpPhi %29 %166 %49 %169 %79
484e5c31af7Sopenharmony_ci               OpSelectionMerge %175 None
485e5c31af7Sopenharmony_ci               OpBranchConditional %182 %170 %175
486e5c31af7Sopenharmony_ci        %175 = OpLabel
487e5c31af7Sopenharmony_ci               OpBranch %83
488e5c31af7Sopenharmony_ci         %83 = OpLabel
489e5c31af7Sopenharmony_ci         %88 = OpLoad %12 %14
490e5c31af7Sopenharmony_ci         %89 = OpSLessThan %29 %88 %55
491e5c31af7Sopenharmony_ci               OpLoopMerge %85 %84 None
492e5c31af7Sopenharmony_ci               OpBranchConditional %89 %84 %85
493e5c31af7Sopenharmony_ci         %84 = OpLabel
494e5c31af7Sopenharmony_ci         %90 = OpLoad %12 %14
495e5c31af7Sopenharmony_ci         %91 = OpIAdd %12 %90 %58
496e5c31af7Sopenharmony_ci               OpStore %14 %91
497e5c31af7Sopenharmony_ci               OpBranch %83
498e5c31af7Sopenharmony_ci         %85 = OpLabel
499e5c31af7Sopenharmony_ci               OpStore %174 %169
500e5c31af7Sopenharmony_ci               OpStore %171 %187
501e5c31af7Sopenharmony_ci               OpBranch %170
502e5c31af7Sopenharmony_ci        %170 = OpLabel
503e5c31af7Sopenharmony_ci        %188 = OpPhi %6 %25 %44 %189 %51 %187 %85
504e5c31af7Sopenharmony_ci               OpReturnValue %188
505e5c31af7Sopenharmony_ci               OpFunctionEnd
506e5c31af7Sopenharmony_ciEND
507e5c31af7Sopenharmony_ci
508e5c31af7Sopenharmony_ci# uniforms for variant
509e5c31af7Sopenharmony_ci
510e5c31af7Sopenharmony_ci# _GLF_uniform_float_values
511e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
512e5c31af7Sopenharmony_ci 1.0 0.1 0.0
513e5c31af7Sopenharmony_ciEND
514e5c31af7Sopenharmony_ci# _GLF_uniform_int_values
515e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
516e5c31af7Sopenharmony_ci 0
517e5c31af7Sopenharmony_ciEND
518e5c31af7Sopenharmony_ci
519e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
520e5c31af7Sopenharmony_ci
521e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline
522e5c31af7Sopenharmony_ci  ATTACH variant_vertex_shader
523e5c31af7Sopenharmony_ci  ATTACH variant_fragment_shader
524e5c31af7Sopenharmony_ci  FRAMEBUFFER_SIZE 256 256
525e5c31af7Sopenharmony_ci  BIND BUFFER variant_framebuffer AS color LOCATION 0
526e5c31af7Sopenharmony_ci  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 1
527e5c31af7Sopenharmony_ci  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 0
528e5c31af7Sopenharmony_ciEND
529e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255
530e5c31af7Sopenharmony_ci
531e5c31af7Sopenharmony_ciCLEAR variant_pipeline
532e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
533e5c31af7Sopenharmony_ci
534e5c31af7Sopenharmony_ciEXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
535