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