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# '--convert-local-access-chains'
26e5c31af7Sopenharmony_ci# '--copy-propagate-arrays'
27e5c31af7Sopenharmony_ci# '--reduce-load-size'
28e5c31af7Sopenharmony_ci# '--scalar-replacement=100'
29e5c31af7Sopenharmony_ci# '--eliminate-dead-code-aggressive'
30e5c31af7Sopenharmony_ci# '--eliminate-dead-inserts'
31e5c31af7Sopenharmony_ci# '--convert-local-access-chains'
32e5c31af7Sopenharmony_ci# '--private-to-local'
33e5c31af7Sopenharmony_ci# '--eliminate-local-single-block'
34e5c31af7Sopenharmony_ci# '--combine-access-chains'
35e5c31af7Sopenharmony_ci# '--eliminate-local-single-block'
36e5c31af7Sopenharmony_ci# '--eliminate-local-single-store'
37e5c31af7Sopenharmony_ci# '--eliminate-dead-branches'
38e5c31af7Sopenharmony_ci# '--merge-return'
39e5c31af7Sopenharmony_ci# '--eliminate-dead-branches'
40e5c31af7Sopenharmony_ci# '--eliminate-local-single-store'
41e5c31af7Sopenharmony_ci# '--ccp'
42e5c31af7Sopenharmony_ci# '--simplify-instructions'
43e5c31af7Sopenharmony_ci# '--eliminate-dead-inserts'
44e5c31af7Sopenharmony_ci# '--inline-entry-points-exhaustive'
45e5c31af7Sopenharmony_ci# '--simplify-instructions'
46e5c31af7Sopenharmony_ci# '--eliminate-dead-branches'
47e5c31af7Sopenharmony_ci# '--merge-blocks'
48e5c31af7Sopenharmony_ci# '--eliminate-dead-branches'
49e5c31af7Sopenharmony_ci# '--merge-return'
50e5c31af7Sopenharmony_ci# '--ccp'
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_20 _GLF_uniform_int_values[0]
60e5c31af7Sopenharmony_ci# #define _int_5 _GLF_uniform_int_values[1]
61e5c31af7Sopenharmony_ci# #define _int_0 _GLF_uniform_int_values[2]
62e5c31af7Sopenharmony_ci# #define _int_1 _GLF_uniform_int_values[3]
63e5c31af7Sopenharmony_ci# #define _float_1_0 _GLF_uniform_float_values[0]
64e5c31af7Sopenharmony_ci#
65e5c31af7Sopenharmony_ci# precision highp float;
66e5c31af7Sopenharmony_ci# precision highp int;
67e5c31af7Sopenharmony_ci#
68e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_float_values: 1.0
69e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0
70e5c31af7Sopenharmony_ci# {
71e5c31af7Sopenharmony_ci#     float _GLF_uniform_float_values[1];
72e5c31af7Sopenharmony_ci# };
73e5c31af7Sopenharmony_ci#
74e5c31af7Sopenharmony_ci# // Contents of _GLF_uniform_int_values: [20, 5, 0, 1]
75e5c31af7Sopenharmony_ci# layout(set = 0, binding = 1) uniform buf1
76e5c31af7Sopenharmony_ci# {
77e5c31af7Sopenharmony_ci#     int _GLF_uniform_int_values[4];
78e5c31af7Sopenharmony_ci# };
79e5c31af7Sopenharmony_ci#
80e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color;
81e5c31af7Sopenharmony_ci#
82e5c31af7Sopenharmony_ci# int func()
83e5c31af7Sopenharmony_ci# {
84e5c31af7Sopenharmony_ci#     int a = _int_0;
85e5c31af7Sopenharmony_ci#
86e5c31af7Sopenharmony_ci#     for(int i = _int_1; i < _int_20; i++)
87e5c31af7Sopenharmony_ci#     {
88e5c31af7Sopenharmony_ci#         // Always false.
89e5c31af7Sopenharmony_ci#         if(gl_FragCoord.y < 0.0)
90e5c31af7Sopenharmony_ci#         {
91e5c31af7Sopenharmony_ci#             discard;
92e5c31af7Sopenharmony_ci#         }
93e5c31af7Sopenharmony_ci#
94e5c31af7Sopenharmony_ci#         for(int j = 1; j < 80; j ++)
95e5c31af7Sopenharmony_ci#         {
96e5c31af7Sopenharmony_ci#             if(a >= 5)
97e5c31af7Sopenharmony_ci#             {
98e5c31af7Sopenharmony_ci#                 // Always false.
99e5c31af7Sopenharmony_ci#                 if(gl_FragCoord.y < 0.0)
100e5c31af7Sopenharmony_ci#                 {
101e5c31af7Sopenharmony_ci#                     continue;
102e5c31af7Sopenharmony_ci#                 }
103e5c31af7Sopenharmony_ci#
104e5c31af7Sopenharmony_ci#                 break;
105e5c31af7Sopenharmony_ci#             }
106e5c31af7Sopenharmony_ci#
107e5c31af7Sopenharmony_ci#             a++;
108e5c31af7Sopenharmony_ci#
109e5c31af7Sopenharmony_ci#             if(gl_FragCoord.x < _float_1_0)
110e5c31af7Sopenharmony_ci#             {
111e5c31af7Sopenharmony_ci#                 _GLF_color = vec4(_int_1);
112e5c31af7Sopenharmony_ci#             }
113e5c31af7Sopenharmony_ci#         }
114e5c31af7Sopenharmony_ci#     }
115e5c31af7Sopenharmony_ci#
116e5c31af7Sopenharmony_ci#     // Always returns 5.
117e5c31af7Sopenharmony_ci#     return a;
118e5c31af7Sopenharmony_ci# }
119e5c31af7Sopenharmony_ci#
120e5c31af7Sopenharmony_ci# void main()
121e5c31af7Sopenharmony_ci# {
122e5c31af7Sopenharmony_ci#     _GLF_color = vec4(_int_0);
123e5c31af7Sopenharmony_ci#
124e5c31af7Sopenharmony_ci#     // Always true.
125e5c31af7Sopenharmony_ci#     if(func() == _int_5)
126e5c31af7Sopenharmony_ci#     {
127e5c31af7Sopenharmony_ci#         _GLF_color = vec4(_int_1, _int_0, _int_0, _int_1);
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: 180
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" %40 %88
140e5c31af7Sopenharmony_ci               OpExecutionMode %4 OriginUpperLeft
141e5c31af7Sopenharmony_ci               OpSource ESSL 320
142e5c31af7Sopenharmony_ci               OpName %4 "main"
143e5c31af7Sopenharmony_ci               OpName %8 "func("
144e5c31af7Sopenharmony_ci               OpName %11 "a"
145e5c31af7Sopenharmony_ci               OpName %15 "buf1"
146e5c31af7Sopenharmony_ci               OpMemberName %15 0 "_GLF_uniform_int_values"
147e5c31af7Sopenharmony_ci               OpName %17 ""
148e5c31af7Sopenharmony_ci               OpName %23 "i"
149e5c31af7Sopenharmony_ci               OpName %40 "gl_FragCoord"
150e5c31af7Sopenharmony_ci               OpName %50 "j"
151e5c31af7Sopenharmony_ci               OpName %78 "buf0"
152e5c31af7Sopenharmony_ci               OpMemberName %78 0 "_GLF_uniform_float_values"
153e5c31af7Sopenharmony_ci               OpName %80 ""
154e5c31af7Sopenharmony_ci               OpName %88 "_GLF_color"
155e5c31af7Sopenharmony_ci               OpDecorate %14 ArrayStride 16
156e5c31af7Sopenharmony_ci               OpMemberDecorate %15 0 Offset 0
157e5c31af7Sopenharmony_ci               OpDecorate %15 Block
158e5c31af7Sopenharmony_ci               OpDecorate %17 DescriptorSet 0
159e5c31af7Sopenharmony_ci               OpDecorate %17 Binding 1
160e5c31af7Sopenharmony_ci               OpDecorate %40 BuiltIn FragCoord
161e5c31af7Sopenharmony_ci               OpDecorate %77 ArrayStride 16
162e5c31af7Sopenharmony_ci               OpMemberDecorate %78 0 Offset 0
163e5c31af7Sopenharmony_ci               OpDecorate %78 Block
164e5c31af7Sopenharmony_ci               OpDecorate %80 DescriptorSet 0
165e5c31af7Sopenharmony_ci               OpDecorate %80 Binding 0
166e5c31af7Sopenharmony_ci               OpDecorate %88 Location 0
167e5c31af7Sopenharmony_ci          %2 = OpTypeVoid
168e5c31af7Sopenharmony_ci          %3 = OpTypeFunction %2
169e5c31af7Sopenharmony_ci          %6 = OpTypeInt 32 1
170e5c31af7Sopenharmony_ci          %7 = OpTypeFunction %6
171e5c31af7Sopenharmony_ci         %10 = OpTypePointer Function %6
172e5c31af7Sopenharmony_ci         %12 = OpTypeInt 32 0
173e5c31af7Sopenharmony_ci         %13 = OpConstant %12 4
174e5c31af7Sopenharmony_ci         %14 = OpTypeArray %6 %13
175e5c31af7Sopenharmony_ci         %15 = OpTypeStruct %14
176e5c31af7Sopenharmony_ci         %16 = OpTypePointer Uniform %15
177e5c31af7Sopenharmony_ci         %17 = OpVariable %16 Uniform
178e5c31af7Sopenharmony_ci         %18 = OpConstant %6 0
179e5c31af7Sopenharmony_ci         %19 = OpConstant %6 2
180e5c31af7Sopenharmony_ci         %20 = OpTypePointer Uniform %6
181e5c31af7Sopenharmony_ci         %24 = OpConstant %6 3
182e5c31af7Sopenharmony_ci         %35 = OpTypeBool
183e5c31af7Sopenharmony_ci         %37 = OpTypeFloat 32
184e5c31af7Sopenharmony_ci         %38 = OpTypeVector %37 4
185e5c31af7Sopenharmony_ci         %39 = OpTypePointer Input %38
186e5c31af7Sopenharmony_ci         %40 = OpVariable %39 Input
187e5c31af7Sopenharmony_ci         %41 = OpConstant %12 1
188e5c31af7Sopenharmony_ci         %42 = OpTypePointer Input %37
189e5c31af7Sopenharmony_ci         %45 = OpConstant %37 0
190e5c31af7Sopenharmony_ci         %51 = OpConstant %6 1
191e5c31af7Sopenharmony_ci         %58 = OpConstant %6 80
192e5c31af7Sopenharmony_ci         %61 = OpConstant %6 5
193e5c31af7Sopenharmony_ci         %74 = OpConstant %12 0
194e5c31af7Sopenharmony_ci         %77 = OpTypeArray %37 %41
195e5c31af7Sopenharmony_ci         %78 = OpTypeStruct %77
196e5c31af7Sopenharmony_ci         %79 = OpTypePointer Uniform %78
197e5c31af7Sopenharmony_ci         %80 = OpVariable %79 Uniform
198e5c31af7Sopenharmony_ci         %81 = OpTypePointer Uniform %37
199e5c31af7Sopenharmony_ci         %87 = OpTypePointer Output %38
200e5c31af7Sopenharmony_ci         %88 = OpVariable %87 Output
201e5c31af7Sopenharmony_ci          %4 = OpFunction %2 None %3
202e5c31af7Sopenharmony_ci          %5 = OpLabel
203e5c31af7Sopenharmony_ci        %123 = OpVariable %10 Function
204e5c31af7Sopenharmony_ci        %124 = OpVariable %10 Function
205e5c31af7Sopenharmony_ci        %125 = OpVariable %10 Function
206e5c31af7Sopenharmony_ci        %126 = OpVariable %10 Function
207e5c31af7Sopenharmony_ci        %100 = OpAccessChain %20 %17 %18 %19
208e5c31af7Sopenharmony_ci        %101 = OpLoad %6 %100
209e5c31af7Sopenharmony_ci        %102 = OpConvertSToF %37 %101
210e5c31af7Sopenharmony_ci        %103 = OpCompositeConstruct %38 %102 %102 %102 %102
211e5c31af7Sopenharmony_ci               OpStore %88 %103
212e5c31af7Sopenharmony_ci        %128 = OpAccessChain %20 %17 %18 %19
213e5c31af7Sopenharmony_ci        %129 = OpLoad %6 %128
214e5c31af7Sopenharmony_ci               OpStore %123 %129
215e5c31af7Sopenharmony_ci        %130 = OpAccessChain %20 %17 %18 %24
216e5c31af7Sopenharmony_ci        %131 = OpLoad %6 %130
217e5c31af7Sopenharmony_ci               OpStore %124 %131
218e5c31af7Sopenharmony_ci               OpBranch %132
219e5c31af7Sopenharmony_ci        %132 = OpLabel
220e5c31af7Sopenharmony_ci        %134 = OpLoad %6 %124
221e5c31af7Sopenharmony_ci        %135 = OpAccessChain %20 %17 %18 %18
222e5c31af7Sopenharmony_ci        %136 = OpLoad %6 %135
223e5c31af7Sopenharmony_ci        %137 = OpSLessThan %35 %134 %136
224e5c31af7Sopenharmony_ci               OpLoopMerge %178 %175 None
225e5c31af7Sopenharmony_ci               OpBranchConditional %137 %138 %178
226e5c31af7Sopenharmony_ci        %138 = OpLabel
227e5c31af7Sopenharmony_ci        %139 = OpAccessChain %42 %40 %41
228e5c31af7Sopenharmony_ci        %140 = OpLoad %37 %139
229e5c31af7Sopenharmony_ci        %141 = OpFOrdLessThan %35 %140 %45
230e5c31af7Sopenharmony_ci               OpSelectionMerge %143 None
231e5c31af7Sopenharmony_ci               OpBranchConditional %141 %142 %143
232e5c31af7Sopenharmony_ci        %142 = OpLabel
233e5c31af7Sopenharmony_ci               OpKill
234e5c31af7Sopenharmony_ci        %143 = OpLabel
235e5c31af7Sopenharmony_ci               OpStore %125 %51
236e5c31af7Sopenharmony_ci               OpBranch %144
237e5c31af7Sopenharmony_ci        %144 = OpLabel
238e5c31af7Sopenharmony_ci        %146 = OpLoad %6 %125
239e5c31af7Sopenharmony_ci        %147 = OpSLessThan %35 %146 %58
240e5c31af7Sopenharmony_ci               OpLoopMerge %174 %171 None
241e5c31af7Sopenharmony_ci               OpBranchConditional %147 %148 %174
242e5c31af7Sopenharmony_ci        %148 = OpLabel
243e5c31af7Sopenharmony_ci        %149 = OpLoad %6 %123
244e5c31af7Sopenharmony_ci        %150 = OpSGreaterThanEqual %35 %149 %61
245e5c31af7Sopenharmony_ci               OpSelectionMerge %157 None
246e5c31af7Sopenharmony_ci               OpBranchConditional %150 %151 %157
247e5c31af7Sopenharmony_ci        %151 = OpLabel
248e5c31af7Sopenharmony_ci        %152 = OpAccessChain %42 %40 %41
249e5c31af7Sopenharmony_ci        %153 = OpLoad %37 %152
250e5c31af7Sopenharmony_ci        %154 = OpFOrdLessThan %35 %153 %45
251e5c31af7Sopenharmony_ci               OpSelectionMerge %156 None
252e5c31af7Sopenharmony_ci               OpBranchConditional %154 %155 %156
253e5c31af7Sopenharmony_ci        %155 = OpLabel
254e5c31af7Sopenharmony_ci               OpBranch %171
255e5c31af7Sopenharmony_ci        %156 = OpLabel
256e5c31af7Sopenharmony_ci               OpBranch %174
257e5c31af7Sopenharmony_ci        %157 = OpLabel
258e5c31af7Sopenharmony_ci        %158 = OpLoad %6 %123
259e5c31af7Sopenharmony_ci        %159 = OpIAdd %6 %158 %51
260e5c31af7Sopenharmony_ci               OpStore %123 %159
261e5c31af7Sopenharmony_ci        %160 = OpAccessChain %42 %40 %74
262e5c31af7Sopenharmony_ci        %161 = OpLoad %37 %160
263e5c31af7Sopenharmony_ci        %162 = OpAccessChain %81 %80 %18 %18
264e5c31af7Sopenharmony_ci        %163 = OpLoad %37 %162
265e5c31af7Sopenharmony_ci        %164 = OpFOrdLessThan %35 %161 %163
266e5c31af7Sopenharmony_ci               OpSelectionMerge %170 None
267e5c31af7Sopenharmony_ci               OpBranchConditional %164 %165 %170
268e5c31af7Sopenharmony_ci        %165 = OpLabel
269e5c31af7Sopenharmony_ci        %166 = OpAccessChain %20 %17 %18 %24
270e5c31af7Sopenharmony_ci        %167 = OpLoad %6 %166
271e5c31af7Sopenharmony_ci        %168 = OpConvertSToF %37 %167
272e5c31af7Sopenharmony_ci        %169 = OpCompositeConstruct %38 %168 %168 %168 %168
273e5c31af7Sopenharmony_ci               OpStore %88 %169
274e5c31af7Sopenharmony_ci               OpBranch %170
275e5c31af7Sopenharmony_ci        %170 = OpLabel
276e5c31af7Sopenharmony_ci               OpBranch %171
277e5c31af7Sopenharmony_ci        %171 = OpLabel
278e5c31af7Sopenharmony_ci        %172 = OpLoad %6 %125
279e5c31af7Sopenharmony_ci        %173 = OpIAdd %6 %172 %51
280e5c31af7Sopenharmony_ci               OpStore %125 %173
281e5c31af7Sopenharmony_ci               OpBranch %144
282e5c31af7Sopenharmony_ci        %174 = OpLabel
283e5c31af7Sopenharmony_ci               OpBranch %175
284e5c31af7Sopenharmony_ci        %175 = OpLabel
285e5c31af7Sopenharmony_ci        %176 = OpLoad %6 %124
286e5c31af7Sopenharmony_ci        %177 = OpIAdd %6 %176 %51
287e5c31af7Sopenharmony_ci               OpStore %124 %177
288e5c31af7Sopenharmony_ci               OpBranch %132
289e5c31af7Sopenharmony_ci        %178 = OpLabel
290e5c31af7Sopenharmony_ci        %179 = OpLoad %6 %123
291e5c31af7Sopenharmony_ci               OpStore %126 %179
292e5c31af7Sopenharmony_ci        %104 = OpLoad %6 %126
293e5c31af7Sopenharmony_ci        %105 = OpAccessChain %20 %17 %18 %51
294e5c31af7Sopenharmony_ci        %106 = OpLoad %6 %105
295e5c31af7Sopenharmony_ci        %107 = OpIEqual %35 %104 %106
296e5c31af7Sopenharmony_ci               OpSelectionMerge %109 None
297e5c31af7Sopenharmony_ci               OpBranchConditional %107 %108 %109
298e5c31af7Sopenharmony_ci        %108 = OpLabel
299e5c31af7Sopenharmony_ci        %110 = OpAccessChain %20 %17 %18 %24
300e5c31af7Sopenharmony_ci        %111 = OpLoad %6 %110
301e5c31af7Sopenharmony_ci        %112 = OpConvertSToF %37 %111
302e5c31af7Sopenharmony_ci        %113 = OpAccessChain %20 %17 %18 %19
303e5c31af7Sopenharmony_ci        %114 = OpLoad %6 %113
304e5c31af7Sopenharmony_ci        %115 = OpConvertSToF %37 %114
305e5c31af7Sopenharmony_ci        %116 = OpAccessChain %20 %17 %18 %19
306e5c31af7Sopenharmony_ci        %117 = OpLoad %6 %116
307e5c31af7Sopenharmony_ci        %118 = OpConvertSToF %37 %117
308e5c31af7Sopenharmony_ci        %119 = OpAccessChain %20 %17 %18 %24
309e5c31af7Sopenharmony_ci        %120 = OpLoad %6 %119
310e5c31af7Sopenharmony_ci        %121 = OpConvertSToF %37 %120
311e5c31af7Sopenharmony_ci        %122 = OpCompositeConstruct %38 %112 %115 %118 %121
312e5c31af7Sopenharmony_ci               OpStore %88 %122
313e5c31af7Sopenharmony_ci               OpBranch %109
314e5c31af7Sopenharmony_ci        %109 = OpLabel
315e5c31af7Sopenharmony_ci               OpReturn
316e5c31af7Sopenharmony_ci               OpFunctionEnd
317e5c31af7Sopenharmony_ci          %8 = OpFunction %6 None %7
318e5c31af7Sopenharmony_ci          %9 = OpLabel
319e5c31af7Sopenharmony_ci         %11 = OpVariable %10 Function
320e5c31af7Sopenharmony_ci         %23 = OpVariable %10 Function
321e5c31af7Sopenharmony_ci         %50 = OpVariable %10 Function
322e5c31af7Sopenharmony_ci         %21 = OpAccessChain %20 %17 %18 %19
323e5c31af7Sopenharmony_ci         %22 = OpLoad %6 %21
324e5c31af7Sopenharmony_ci               OpStore %11 %22
325e5c31af7Sopenharmony_ci         %25 = OpAccessChain %20 %17 %18 %24
326e5c31af7Sopenharmony_ci         %26 = OpLoad %6 %25
327e5c31af7Sopenharmony_ci               OpStore %23 %26
328e5c31af7Sopenharmony_ci               OpBranch %27
329e5c31af7Sopenharmony_ci         %27 = OpLabel
330e5c31af7Sopenharmony_ci               OpLoopMerge %29 %30 None
331e5c31af7Sopenharmony_ci               OpBranch %31
332e5c31af7Sopenharmony_ci         %31 = OpLabel
333e5c31af7Sopenharmony_ci         %32 = OpLoad %6 %23
334e5c31af7Sopenharmony_ci         %33 = OpAccessChain %20 %17 %18 %18
335e5c31af7Sopenharmony_ci         %34 = OpLoad %6 %33
336e5c31af7Sopenharmony_ci         %36 = OpSLessThan %35 %32 %34
337e5c31af7Sopenharmony_ci               OpBranchConditional %36 %28 %29
338e5c31af7Sopenharmony_ci         %28 = OpLabel
339e5c31af7Sopenharmony_ci         %43 = OpAccessChain %42 %40 %41
340e5c31af7Sopenharmony_ci         %44 = OpLoad %37 %43
341e5c31af7Sopenharmony_ci         %46 = OpFOrdLessThan %35 %44 %45
342e5c31af7Sopenharmony_ci               OpSelectionMerge %48 None
343e5c31af7Sopenharmony_ci               OpBranchConditional %46 %47 %48
344e5c31af7Sopenharmony_ci         %47 = OpLabel
345e5c31af7Sopenharmony_ci               OpKill
346e5c31af7Sopenharmony_ci         %48 = OpLabel
347e5c31af7Sopenharmony_ci               OpStore %50 %51
348e5c31af7Sopenharmony_ci               OpBranch %52
349e5c31af7Sopenharmony_ci         %52 = OpLabel
350e5c31af7Sopenharmony_ci               OpLoopMerge %54 %55 None
351e5c31af7Sopenharmony_ci               OpBranch %56
352e5c31af7Sopenharmony_ci         %56 = OpLabel
353e5c31af7Sopenharmony_ci         %57 = OpLoad %6 %50
354e5c31af7Sopenharmony_ci         %59 = OpSLessThan %35 %57 %58
355e5c31af7Sopenharmony_ci               OpBranchConditional %59 %53 %54
356e5c31af7Sopenharmony_ci         %53 = OpLabel
357e5c31af7Sopenharmony_ci         %60 = OpLoad %6 %11
358e5c31af7Sopenharmony_ci         %62 = OpSGreaterThanEqual %35 %60 %61
359e5c31af7Sopenharmony_ci               OpSelectionMerge %64 None
360e5c31af7Sopenharmony_ci               OpBranchConditional %62 %63 %64
361e5c31af7Sopenharmony_ci         %63 = OpLabel
362e5c31af7Sopenharmony_ci         %65 = OpAccessChain %42 %40 %41
363e5c31af7Sopenharmony_ci         %66 = OpLoad %37 %65
364e5c31af7Sopenharmony_ci         %67 = OpFOrdLessThan %35 %66 %45
365e5c31af7Sopenharmony_ci               OpSelectionMerge %69 None
366e5c31af7Sopenharmony_ci               OpBranchConditional %67 %68 %69
367e5c31af7Sopenharmony_ci         %68 = OpLabel
368e5c31af7Sopenharmony_ci               OpBranch %55
369e5c31af7Sopenharmony_ci         %69 = OpLabel
370e5c31af7Sopenharmony_ci               OpBranch %54
371e5c31af7Sopenharmony_ci         %64 = OpLabel
372e5c31af7Sopenharmony_ci         %72 = OpLoad %6 %11
373e5c31af7Sopenharmony_ci         %73 = OpIAdd %6 %72 %51
374e5c31af7Sopenharmony_ci               OpStore %11 %73
375e5c31af7Sopenharmony_ci         %75 = OpAccessChain %42 %40 %74
376e5c31af7Sopenharmony_ci         %76 = OpLoad %37 %75
377e5c31af7Sopenharmony_ci         %82 = OpAccessChain %81 %80 %18 %18
378e5c31af7Sopenharmony_ci         %83 = OpLoad %37 %82
379e5c31af7Sopenharmony_ci         %84 = OpFOrdLessThan %35 %76 %83
380e5c31af7Sopenharmony_ci               OpSelectionMerge %86 None
381e5c31af7Sopenharmony_ci               OpBranchConditional %84 %85 %86
382e5c31af7Sopenharmony_ci         %85 = OpLabel
383e5c31af7Sopenharmony_ci         %89 = OpAccessChain %20 %17 %18 %24
384e5c31af7Sopenharmony_ci         %90 = OpLoad %6 %89
385e5c31af7Sopenharmony_ci         %91 = OpConvertSToF %37 %90
386e5c31af7Sopenharmony_ci         %92 = OpCompositeConstruct %38 %91 %91 %91 %91
387e5c31af7Sopenharmony_ci               OpStore %88 %92
388e5c31af7Sopenharmony_ci               OpBranch %86
389e5c31af7Sopenharmony_ci         %86 = OpLabel
390e5c31af7Sopenharmony_ci               OpBranch %55
391e5c31af7Sopenharmony_ci         %55 = OpLabel
392e5c31af7Sopenharmony_ci         %93 = OpLoad %6 %50
393e5c31af7Sopenharmony_ci         %94 = OpIAdd %6 %93 %51
394e5c31af7Sopenharmony_ci               OpStore %50 %94
395e5c31af7Sopenharmony_ci               OpBranch %52
396e5c31af7Sopenharmony_ci         %54 = OpLabel
397e5c31af7Sopenharmony_ci               OpBranch %30
398e5c31af7Sopenharmony_ci         %30 = OpLabel
399e5c31af7Sopenharmony_ci         %95 = OpLoad %6 %23
400e5c31af7Sopenharmony_ci         %96 = OpIAdd %6 %95 %51
401e5c31af7Sopenharmony_ci               OpStore %23 %96
402e5c31af7Sopenharmony_ci               OpBranch %27
403e5c31af7Sopenharmony_ci         %29 = OpLabel
404e5c31af7Sopenharmony_ci         %97 = OpLoad %6 %11
405e5c31af7Sopenharmony_ci               OpReturnValue %97
406e5c31af7Sopenharmony_ci               OpFunctionEnd
407e5c31af7Sopenharmony_ciEND
408e5c31af7Sopenharmony_ci
409e5c31af7Sopenharmony_ci# uniforms for variant
410e5c31af7Sopenharmony_ci
411e5c31af7Sopenharmony_ci# _GLF_uniform_int_values
412e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_int_values DATA_TYPE int32[] STD140 DATA
413e5c31af7Sopenharmony_ci 20 5 0 1
414e5c31af7Sopenharmony_ciEND
415e5c31af7Sopenharmony_ci# _GLF_uniform_float_values
416e5c31af7Sopenharmony_ciBUFFER variant__GLF_uniform_float_values DATA_TYPE float[] STD140 DATA
417e5c31af7Sopenharmony_ci 1.0
418e5c31af7Sopenharmony_ciEND
419e5c31af7Sopenharmony_ci
420e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
421e5c31af7Sopenharmony_ci
422e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline
423e5c31af7Sopenharmony_ci  ATTACH variant_vertex_shader
424e5c31af7Sopenharmony_ci  ATTACH variant_fragment_shader
425e5c31af7Sopenharmony_ci  FRAMEBUFFER_SIZE 256 256
426e5c31af7Sopenharmony_ci  BIND BUFFER variant_framebuffer AS color LOCATION 0
427e5c31af7Sopenharmony_ci  BIND BUFFER variant__GLF_uniform_int_values AS uniform DESCRIPTOR_SET 0 BINDING 1
428e5c31af7Sopenharmony_ci  BIND BUFFER variant__GLF_uniform_float_values AS uniform DESCRIPTOR_SET 0 BINDING 0
429e5c31af7Sopenharmony_ciEND
430e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255
431e5c31af7Sopenharmony_ci
432e5c31af7Sopenharmony_ciCLEAR variant_pipeline
433e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
434e5c31af7Sopenharmony_ci
435e5c31af7Sopenharmony_ciEXPECT variant_framebuffer IDX 0 0 SIZE 256 256 EQ_RGBA 255 0 0 255
436