1e5c31af7Sopenharmony_ci#!amber
2e5c31af7Sopenharmony_ci
3e5c31af7Sopenharmony_ci# Copyright 2020 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 bug found by GraphicsFuzz.
19e5c31af7Sopenharmony_ci
20e5c31af7Sopenharmony_ci# Short description: A fragment shader with array and nested loops
21e5c31af7Sopenharmony_ci
22e5c31af7Sopenharmony_ci# The test passes because both shaders render the same image.
23e5c31af7Sopenharmony_ci
24e5c31af7Sopenharmony_ci# Optimized using spirv-opt with the following arguments:
25e5c31af7Sopenharmony_ci# '--private-to-local'
26e5c31af7Sopenharmony_ci# '--copy-propagate-arrays'
27e5c31af7Sopenharmony_ci# '--if-conversion'
28e5c31af7Sopenharmony_ci# '--private-to-local'
29e5c31af7Sopenharmony_ci# '--eliminate-dead-inserts'
30e5c31af7Sopenharmony_ci# '--if-conversion'
31e5c31af7Sopenharmony_ci# '--if-conversion'
32e5c31af7Sopenharmony_ci# '--scalar-replacement=100'
33e5c31af7Sopenharmony_ci# '--private-to-local'
34e5c31af7Sopenharmony_ci# '--reduce-load-size'
35e5c31af7Sopenharmony_ci# '--ccp'
36e5c31af7Sopenharmony_ci# '--scalar-replacement=100'
37e5c31af7Sopenharmony_ci# '--eliminate-dead-branches'
38e5c31af7Sopenharmony_ci# '--eliminate-dead-branches'
39e5c31af7Sopenharmony_ci# '--merge-return'
40e5c31af7Sopenharmony_ci# '--private-to-local'
41e5c31af7Sopenharmony_ci# '--redundancy-elimination'
42e5c31af7Sopenharmony_ci# '--combine-access-chains'
43e5c31af7Sopenharmony_ci# '--eliminate-local-multi-store'
44e5c31af7Sopenharmony_ci# '--ccp'
45e5c31af7Sopenharmony_ci# '--convert-local-access-chains'
46e5c31af7Sopenharmony_ci# '--reduce-load-size'
47e5c31af7Sopenharmony_ci# '--private-to-local'
48e5c31af7Sopenharmony_ci# '--vector-dce'
49e5c31af7Sopenharmony_ci# spirv-opt commit hash: 230f363e6da32791f640b02205e0645cc67c3f1d
50e5c31af7Sopenharmony_ci
51e5c31af7Sopenharmony_ci
52e5c31af7Sopenharmony_ci
53e5c31af7Sopenharmony_ciSHADER vertex reference_vertex_shader PASSTHROUGH
54e5c31af7Sopenharmony_ci
55e5c31af7Sopenharmony_ci# reference_fragment_shader is derived from the following GLSL:
56e5c31af7Sopenharmony_ci# #version 320 es
57e5c31af7Sopenharmony_ci# precision highp float;
58e5c31af7Sopenharmony_ci#
59e5c31af7Sopenharmony_ci# precision highp int;
60e5c31af7Sopenharmony_ci#
61e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color;
62e5c31af7Sopenharmony_ci#
63e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0
64e5c31af7Sopenharmony_ci# {
65e5c31af7Sopenharmony_ci#     vec2 resolution;
66e5c31af7Sopenharmony_ci# };
67e5c31af7Sopenharmony_ci# float cross2d(vec2 a, vec2 b)
68e5c31af7Sopenharmony_ci# {
69e5c31af7Sopenharmony_ci#     return ((a.x) * (b.y) - (b.x) * (a.y));
70e5c31af7Sopenharmony_ci# }
71e5c31af7Sopenharmony_ci# int pointInTriangle(vec2 p, vec2 a, vec2 b, vec2 c)
72e5c31af7Sopenharmony_ci# {
73e5c31af7Sopenharmony_ci#     float pab = cross2d(vec2(p.x - a.x, p.y - a.y), vec2(b.x - a.x, b.y - a.y));
74e5c31af7Sopenharmony_ci#     float pbc = cross2d(vec2(p.x - b.x, p.y - b.y), vec2(c.x - b.x, c.y - b.y));
75e5c31af7Sopenharmony_ci#     if (!((pab < 0.0 && pbc < 0.0) || (pab >= 0.0 && pbc >= 0.0)))
76e5c31af7Sopenharmony_ci#     {
77e5c31af7Sopenharmony_ci#         return 0;
78e5c31af7Sopenharmony_ci#     }
79e5c31af7Sopenharmony_ci#     float pca = cross2d(vec2(p.x - c.x, p.y - c.y), vec2(a.x - c.x, a.y - c.y));
80e5c31af7Sopenharmony_ci#     if (!((pab < 0.0 && pca < 0.0) || (pab >= 0.0 && pca >= 0.0)))
81e5c31af7Sopenharmony_ci#     {
82e5c31af7Sopenharmony_ci#         return 0;
83e5c31af7Sopenharmony_ci#     }
84e5c31af7Sopenharmony_ci#     return 1;
85e5c31af7Sopenharmony_ci# }
86e5c31af7Sopenharmony_ci# void main()
87e5c31af7Sopenharmony_ci# {
88e5c31af7Sopenharmony_ci#     vec2 pos = gl_FragCoord.xy / resolution;
89e5c31af7Sopenharmony_ci#     if (pointInTriangle(pos, vec2(0.7, 0.3), vec2(0.5, 0.9), vec2(0.1, 0.4)) == 1)
90e5c31af7Sopenharmony_ci#     {
91e5c31af7Sopenharmony_ci#         _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
92e5c31af7Sopenharmony_ci#     }
93e5c31af7Sopenharmony_ci#     else
94e5c31af7Sopenharmony_ci#     {
95e5c31af7Sopenharmony_ci#         _GLF_color = vec4(0.0, 0.0, 0.0, 1.0);
96e5c31af7Sopenharmony_ci#     }
97e5c31af7Sopenharmony_ci# }
98e5c31af7Sopenharmony_ciSHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
99e5c31af7Sopenharmony_ci; SPIR-V
100e5c31af7Sopenharmony_ci; Version: 1.0
101e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10
102e5c31af7Sopenharmony_ci; Bound: 207
103e5c31af7Sopenharmony_ci; Schema: 0
104e5c31af7Sopenharmony_ci               OpCapability Shader
105e5c31af7Sopenharmony_ci          %1 = OpExtInstImport "GLSL.std.450"
106e5c31af7Sopenharmony_ci               OpMemoryModel Logical GLSL450
107e5c31af7Sopenharmony_ci               OpEntryPoint Fragment %4 "main" %162 %191
108e5c31af7Sopenharmony_ci               OpExecutionMode %4 OriginUpperLeft
109e5c31af7Sopenharmony_ci               OpSource ESSL 320
110e5c31af7Sopenharmony_ci               OpName %4 "main"
111e5c31af7Sopenharmony_ci               OpName %12 "cross2d(vf2;vf2;"
112e5c31af7Sopenharmony_ci               OpName %10 "a"
113e5c31af7Sopenharmony_ci               OpName %11 "b"
114e5c31af7Sopenharmony_ci               OpName %20 "pointInTriangle(vf2;vf2;vf2;vf2;"
115e5c31af7Sopenharmony_ci               OpName %16 "p"
116e5c31af7Sopenharmony_ci               OpName %17 "a"
117e5c31af7Sopenharmony_ci               OpName %18 "b"
118e5c31af7Sopenharmony_ci               OpName %19 "c"
119e5c31af7Sopenharmony_ci               OpName %39 "pab"
120e5c31af7Sopenharmony_ci               OpName %62 "param"
121e5c31af7Sopenharmony_ci               OpName %63 "param"
122e5c31af7Sopenharmony_ci               OpName %65 "pbc"
123e5c31af7Sopenharmony_ci               OpName %88 "param"
124e5c31af7Sopenharmony_ci               OpName %89 "param"
125e5c31af7Sopenharmony_ci               OpName %112 "pca"
126e5c31af7Sopenharmony_ci               OpName %135 "param"
127e5c31af7Sopenharmony_ci               OpName %136 "param"
128e5c31af7Sopenharmony_ci               OpName %159 "pos"
129e5c31af7Sopenharmony_ci               OpName %162 "gl_FragCoord"
130e5c31af7Sopenharmony_ci               OpName %165 "buf0"
131e5c31af7Sopenharmony_ci               OpMemberName %165 0 "resolution"
132e5c31af7Sopenharmony_ci               OpName %167 ""
133e5c31af7Sopenharmony_ci               OpName %181 "param"
134e5c31af7Sopenharmony_ci               OpName %183 "param"
135e5c31af7Sopenharmony_ci               OpName %184 "param"
136e5c31af7Sopenharmony_ci               OpName %185 "param"
137e5c31af7Sopenharmony_ci               OpName %191 "_GLF_color"
138e5c31af7Sopenharmony_ci               OpDecorate %162 BuiltIn FragCoord
139e5c31af7Sopenharmony_ci               OpMemberDecorate %165 0 Offset 0
140e5c31af7Sopenharmony_ci               OpDecorate %165 Block
141e5c31af7Sopenharmony_ci               OpDecorate %167 DescriptorSet 0
142e5c31af7Sopenharmony_ci               OpDecorate %167 Binding 0
143e5c31af7Sopenharmony_ci               OpDecorate %191 Location 0
144e5c31af7Sopenharmony_ci          %2 = OpTypeVoid
145e5c31af7Sopenharmony_ci          %3 = OpTypeFunction %2
146e5c31af7Sopenharmony_ci          %6 = OpTypeFloat 32
147e5c31af7Sopenharmony_ci          %7 = OpTypeVector %6 2
148e5c31af7Sopenharmony_ci          %8 = OpTypePointer Function %7
149e5c31af7Sopenharmony_ci          %9 = OpTypeFunction %6 %8 %8
150e5c31af7Sopenharmony_ci         %14 = OpTypeInt 32 1
151e5c31af7Sopenharmony_ci         %15 = OpTypeFunction %14 %8 %8 %8 %8
152e5c31af7Sopenharmony_ci         %22 = OpTypeInt 32 0
153e5c31af7Sopenharmony_ci         %23 = OpConstant %22 0
154e5c31af7Sopenharmony_ci         %24 = OpTypePointer Function %6
155e5c31af7Sopenharmony_ci         %27 = OpConstant %22 1
156e5c31af7Sopenharmony_ci         %91 = OpTypeBool
157e5c31af7Sopenharmony_ci         %93 = OpConstant %6 0
158e5c31af7Sopenharmony_ci        %110 = OpConstant %14 0
159e5c31af7Sopenharmony_ci        %156 = OpConstant %14 1
160e5c31af7Sopenharmony_ci        %160 = OpTypeVector %6 4
161e5c31af7Sopenharmony_ci        %161 = OpTypePointer Input %160
162e5c31af7Sopenharmony_ci        %162 = OpVariable %161 Input
163e5c31af7Sopenharmony_ci        %165 = OpTypeStruct %7
164e5c31af7Sopenharmony_ci        %166 = OpTypePointer Uniform %165
165e5c31af7Sopenharmony_ci        %167 = OpVariable %166 Uniform
166e5c31af7Sopenharmony_ci        %168 = OpTypePointer Uniform %7
167e5c31af7Sopenharmony_ci        %172 = OpConstant %6 0.699999988
168e5c31af7Sopenharmony_ci        %173 = OpConstant %6 0.300000012
169e5c31af7Sopenharmony_ci        %174 = OpConstantComposite %7 %172 %173
170e5c31af7Sopenharmony_ci        %175 = OpConstant %6 0.5
171e5c31af7Sopenharmony_ci        %176 = OpConstant %6 0.899999976
172e5c31af7Sopenharmony_ci        %177 = OpConstantComposite %7 %175 %176
173e5c31af7Sopenharmony_ci        %178 = OpConstant %6 0.100000001
174e5c31af7Sopenharmony_ci        %179 = OpConstant %6 0.400000006
175e5c31af7Sopenharmony_ci        %180 = OpConstantComposite %7 %178 %179
176e5c31af7Sopenharmony_ci        %190 = OpTypePointer Output %160
177e5c31af7Sopenharmony_ci        %191 = OpVariable %190 Output
178e5c31af7Sopenharmony_ci        %192 = OpConstant %6 1
179e5c31af7Sopenharmony_ci        %193 = OpConstantComposite %160 %192 %93 %93 %192
180e5c31af7Sopenharmony_ci        %195 = OpConstantComposite %160 %93 %93 %93 %192
181e5c31af7Sopenharmony_ci        %197 = OpTypePointer Function %14
182e5c31af7Sopenharmony_ci        %201 = OpConstantFalse %91
183e5c31af7Sopenharmony_ci        %202 = OpTypePointer Function %91
184e5c31af7Sopenharmony_ci        %204 = OpConstantTrue %91
185e5c31af7Sopenharmony_ci          %4 = OpFunction %2 None %3
186e5c31af7Sopenharmony_ci          %5 = OpLabel
187e5c31af7Sopenharmony_ci        %159 = OpVariable %8 Function
188e5c31af7Sopenharmony_ci        %181 = OpVariable %8 Function
189e5c31af7Sopenharmony_ci        %183 = OpVariable %8 Function
190e5c31af7Sopenharmony_ci        %184 = OpVariable %8 Function
191e5c31af7Sopenharmony_ci        %185 = OpVariable %8 Function
192e5c31af7Sopenharmony_ci        %163 = OpLoad %160 %162
193e5c31af7Sopenharmony_ci        %164 = OpVectorShuffle %7 %163 %163 0 1
194e5c31af7Sopenharmony_ci        %169 = OpAccessChain %168 %167 %110
195e5c31af7Sopenharmony_ci        %170 = OpLoad %7 %169
196e5c31af7Sopenharmony_ci        %171 = OpFDiv %7 %164 %170
197e5c31af7Sopenharmony_ci               OpStore %159 %171
198e5c31af7Sopenharmony_ci               OpStore %181 %171
199e5c31af7Sopenharmony_ci               OpStore %183 %174
200e5c31af7Sopenharmony_ci               OpStore %184 %177
201e5c31af7Sopenharmony_ci               OpStore %185 %180
202e5c31af7Sopenharmony_ci        %186 = OpFunctionCall %14 %20 %181 %183 %184 %185
203e5c31af7Sopenharmony_ci        %187 = OpIEqual %91 %186 %156
204e5c31af7Sopenharmony_ci               OpSelectionMerge %189 None
205e5c31af7Sopenharmony_ci               OpBranchConditional %187 %188 %194
206e5c31af7Sopenharmony_ci        %188 = OpLabel
207e5c31af7Sopenharmony_ci               OpStore %191 %193
208e5c31af7Sopenharmony_ci               OpBranch %189
209e5c31af7Sopenharmony_ci        %194 = OpLabel
210e5c31af7Sopenharmony_ci               OpStore %191 %195
211e5c31af7Sopenharmony_ci               OpBranch %189
212e5c31af7Sopenharmony_ci        %189 = OpLabel
213e5c31af7Sopenharmony_ci               OpReturn
214e5c31af7Sopenharmony_ci               OpFunctionEnd
215e5c31af7Sopenharmony_ci         %12 = OpFunction %6 None %9
216e5c31af7Sopenharmony_ci         %10 = OpFunctionParameter %8
217e5c31af7Sopenharmony_ci         %11 = OpFunctionParameter %8
218e5c31af7Sopenharmony_ci         %13 = OpLabel
219e5c31af7Sopenharmony_ci         %25 = OpAccessChain %24 %10 %23
220e5c31af7Sopenharmony_ci         %26 = OpLoad %6 %25
221e5c31af7Sopenharmony_ci         %28 = OpAccessChain %24 %11 %27
222e5c31af7Sopenharmony_ci         %29 = OpLoad %6 %28
223e5c31af7Sopenharmony_ci         %30 = OpFMul %6 %26 %29
224e5c31af7Sopenharmony_ci         %31 = OpAccessChain %24 %11 %23
225e5c31af7Sopenharmony_ci         %32 = OpLoad %6 %31
226e5c31af7Sopenharmony_ci         %33 = OpAccessChain %24 %10 %27
227e5c31af7Sopenharmony_ci         %34 = OpLoad %6 %33
228e5c31af7Sopenharmony_ci         %35 = OpFMul %6 %32 %34
229e5c31af7Sopenharmony_ci         %36 = OpFSub %6 %30 %35
230e5c31af7Sopenharmony_ci               OpReturnValue %36
231e5c31af7Sopenharmony_ci               OpFunctionEnd
232e5c31af7Sopenharmony_ci         %20 = OpFunction %14 None %15
233e5c31af7Sopenharmony_ci         %16 = OpFunctionParameter %8
234e5c31af7Sopenharmony_ci         %17 = OpFunctionParameter %8
235e5c31af7Sopenharmony_ci         %18 = OpFunctionParameter %8
236e5c31af7Sopenharmony_ci         %19 = OpFunctionParameter %8
237e5c31af7Sopenharmony_ci         %21 = OpLabel
238e5c31af7Sopenharmony_ci        %203 = OpVariable %202 Function %201
239e5c31af7Sopenharmony_ci        %198 = OpVariable %197 Function
240e5c31af7Sopenharmony_ci         %39 = OpVariable %24 Function
241e5c31af7Sopenharmony_ci         %62 = OpVariable %8 Function
242e5c31af7Sopenharmony_ci         %63 = OpVariable %8 Function
243e5c31af7Sopenharmony_ci         %65 = OpVariable %24 Function
244e5c31af7Sopenharmony_ci         %88 = OpVariable %8 Function
245e5c31af7Sopenharmony_ci         %89 = OpVariable %8 Function
246e5c31af7Sopenharmony_ci        %112 = OpVariable %24 Function
247e5c31af7Sopenharmony_ci        %135 = OpVariable %8 Function
248e5c31af7Sopenharmony_ci        %136 = OpVariable %8 Function
249e5c31af7Sopenharmony_ci               OpSelectionMerge %196 None
250e5c31af7Sopenharmony_ci               OpSwitch %23 %200
251e5c31af7Sopenharmony_ci        %200 = OpLabel
252e5c31af7Sopenharmony_ci         %40 = OpAccessChain %24 %16 %23
253e5c31af7Sopenharmony_ci         %41 = OpLoad %6 %40
254e5c31af7Sopenharmony_ci         %42 = OpAccessChain %24 %17 %23
255e5c31af7Sopenharmony_ci         %43 = OpLoad %6 %42
256e5c31af7Sopenharmony_ci         %44 = OpFSub %6 %41 %43
257e5c31af7Sopenharmony_ci         %45 = OpAccessChain %24 %16 %27
258e5c31af7Sopenharmony_ci         %46 = OpLoad %6 %45
259e5c31af7Sopenharmony_ci         %47 = OpAccessChain %24 %17 %27
260e5c31af7Sopenharmony_ci         %48 = OpLoad %6 %47
261e5c31af7Sopenharmony_ci         %49 = OpFSub %6 %46 %48
262e5c31af7Sopenharmony_ci         %50 = OpCompositeConstruct %7 %44 %49
263e5c31af7Sopenharmony_ci         %51 = OpAccessChain %24 %18 %23
264e5c31af7Sopenharmony_ci         %52 = OpLoad %6 %51
265e5c31af7Sopenharmony_ci         %54 = OpLoad %6 %42
266e5c31af7Sopenharmony_ci         %55 = OpFSub %6 %52 %54
267e5c31af7Sopenharmony_ci         %56 = OpAccessChain %24 %18 %27
268e5c31af7Sopenharmony_ci         %57 = OpLoad %6 %56
269e5c31af7Sopenharmony_ci         %59 = OpLoad %6 %47
270e5c31af7Sopenharmony_ci         %60 = OpFSub %6 %57 %59
271e5c31af7Sopenharmony_ci         %61 = OpCompositeConstruct %7 %55 %60
272e5c31af7Sopenharmony_ci               OpStore %62 %50
273e5c31af7Sopenharmony_ci               OpStore %63 %61
274e5c31af7Sopenharmony_ci         %64 = OpFunctionCall %6 %12 %62 %63
275e5c31af7Sopenharmony_ci               OpStore %39 %64
276e5c31af7Sopenharmony_ci         %67 = OpLoad %6 %40
277e5c31af7Sopenharmony_ci         %69 = OpLoad %6 %51
278e5c31af7Sopenharmony_ci         %70 = OpFSub %6 %67 %69
279e5c31af7Sopenharmony_ci         %72 = OpLoad %6 %45
280e5c31af7Sopenharmony_ci         %74 = OpLoad %6 %56
281e5c31af7Sopenharmony_ci         %75 = OpFSub %6 %72 %74
282e5c31af7Sopenharmony_ci         %76 = OpCompositeConstruct %7 %70 %75
283e5c31af7Sopenharmony_ci         %77 = OpAccessChain %24 %19 %23
284e5c31af7Sopenharmony_ci         %78 = OpLoad %6 %77
285e5c31af7Sopenharmony_ci         %80 = OpLoad %6 %51
286e5c31af7Sopenharmony_ci         %81 = OpFSub %6 %78 %80
287e5c31af7Sopenharmony_ci         %82 = OpAccessChain %24 %19 %27
288e5c31af7Sopenharmony_ci         %83 = OpLoad %6 %82
289e5c31af7Sopenharmony_ci         %85 = OpLoad %6 %56
290e5c31af7Sopenharmony_ci         %86 = OpFSub %6 %83 %85
291e5c31af7Sopenharmony_ci         %87 = OpCompositeConstruct %7 %81 %86
292e5c31af7Sopenharmony_ci               OpStore %88 %76
293e5c31af7Sopenharmony_ci               OpStore %89 %87
294e5c31af7Sopenharmony_ci         %90 = OpFunctionCall %6 %12 %88 %89
295e5c31af7Sopenharmony_ci               OpStore %65 %90
296e5c31af7Sopenharmony_ci         %94 = OpFOrdLessThan %91 %64 %93
297e5c31af7Sopenharmony_ci         %96 = OpFOrdLessThan %91 %90 %93
298e5c31af7Sopenharmony_ci         %97 = OpLogicalAnd %91 %94 %96
299e5c31af7Sopenharmony_ci         %98 = OpLogicalNot %91 %97
300e5c31af7Sopenharmony_ci               OpSelectionMerge %100 None
301e5c31af7Sopenharmony_ci               OpBranchConditional %98 %99 %100
302e5c31af7Sopenharmony_ci         %99 = OpLabel
303e5c31af7Sopenharmony_ci        %102 = OpFOrdGreaterThanEqual %91 %64 %93
304e5c31af7Sopenharmony_ci        %104 = OpFOrdGreaterThanEqual %91 %90 %93
305e5c31af7Sopenharmony_ci        %105 = OpLogicalAnd %91 %102 %104
306e5c31af7Sopenharmony_ci               OpBranch %100
307e5c31af7Sopenharmony_ci        %100 = OpLabel
308e5c31af7Sopenharmony_ci        %106 = OpPhi %91 %97 %200 %105 %99
309e5c31af7Sopenharmony_ci        %107 = OpLogicalNot %91 %106
310e5c31af7Sopenharmony_ci               OpSelectionMerge %109 None
311e5c31af7Sopenharmony_ci               OpBranchConditional %107 %108 %109
312e5c31af7Sopenharmony_ci        %108 = OpLabel
313e5c31af7Sopenharmony_ci               OpStore %203 %204
314e5c31af7Sopenharmony_ci               OpStore %198 %110
315e5c31af7Sopenharmony_ci               OpBranch %196
316e5c31af7Sopenharmony_ci        %109 = OpLabel
317e5c31af7Sopenharmony_ci        %114 = OpLoad %6 %40
318e5c31af7Sopenharmony_ci        %116 = OpLoad %6 %77
319e5c31af7Sopenharmony_ci        %117 = OpFSub %6 %114 %116
320e5c31af7Sopenharmony_ci        %119 = OpLoad %6 %45
321e5c31af7Sopenharmony_ci        %121 = OpLoad %6 %82
322e5c31af7Sopenharmony_ci        %122 = OpFSub %6 %119 %121
323e5c31af7Sopenharmony_ci        %123 = OpCompositeConstruct %7 %117 %122
324e5c31af7Sopenharmony_ci        %125 = OpLoad %6 %42
325e5c31af7Sopenharmony_ci        %127 = OpLoad %6 %77
326e5c31af7Sopenharmony_ci        %128 = OpFSub %6 %125 %127
327e5c31af7Sopenharmony_ci        %130 = OpLoad %6 %47
328e5c31af7Sopenharmony_ci        %132 = OpLoad %6 %82
329e5c31af7Sopenharmony_ci        %133 = OpFSub %6 %130 %132
330e5c31af7Sopenharmony_ci        %134 = OpCompositeConstruct %7 %128 %133
331e5c31af7Sopenharmony_ci               OpStore %135 %123
332e5c31af7Sopenharmony_ci               OpStore %136 %134
333e5c31af7Sopenharmony_ci        %137 = OpFunctionCall %6 %12 %135 %136
334e5c31af7Sopenharmony_ci               OpStore %112 %137
335e5c31af7Sopenharmony_ci        %139 = OpFOrdLessThan %91 %64 %93
336e5c31af7Sopenharmony_ci        %141 = OpFOrdLessThan %91 %137 %93
337e5c31af7Sopenharmony_ci        %142 = OpLogicalAnd %91 %139 %141
338e5c31af7Sopenharmony_ci        %143 = OpLogicalNot %91 %142
339e5c31af7Sopenharmony_ci               OpSelectionMerge %145 None
340e5c31af7Sopenharmony_ci               OpBranchConditional %143 %144 %145
341e5c31af7Sopenharmony_ci        %144 = OpLabel
342e5c31af7Sopenharmony_ci        %147 = OpFOrdGreaterThanEqual %91 %64 %93
343e5c31af7Sopenharmony_ci        %149 = OpFOrdGreaterThanEqual %91 %137 %93
344e5c31af7Sopenharmony_ci        %150 = OpLogicalAnd %91 %147 %149
345e5c31af7Sopenharmony_ci               OpBranch %145
346e5c31af7Sopenharmony_ci        %145 = OpLabel
347e5c31af7Sopenharmony_ci        %151 = OpPhi %91 %142 %109 %150 %144
348e5c31af7Sopenharmony_ci        %152 = OpLogicalNot %91 %151
349e5c31af7Sopenharmony_ci               OpSelectionMerge %154 None
350e5c31af7Sopenharmony_ci               OpBranchConditional %152 %153 %154
351e5c31af7Sopenharmony_ci        %153 = OpLabel
352e5c31af7Sopenharmony_ci               OpStore %203 %204
353e5c31af7Sopenharmony_ci               OpStore %198 %110
354e5c31af7Sopenharmony_ci               OpBranch %196
355e5c31af7Sopenharmony_ci        %154 = OpLabel
356e5c31af7Sopenharmony_ci               OpStore %203 %204
357e5c31af7Sopenharmony_ci               OpStore %198 %156
358e5c31af7Sopenharmony_ci               OpBranch %196
359e5c31af7Sopenharmony_ci        %196 = OpLabel
360e5c31af7Sopenharmony_ci        %206 = OpPhi %14 %110 %108 %110 %153 %156 %154
361e5c31af7Sopenharmony_ci               OpReturnValue %206
362e5c31af7Sopenharmony_ci               OpFunctionEnd
363e5c31af7Sopenharmony_ciEND
364e5c31af7Sopenharmony_ci
365e5c31af7Sopenharmony_ci# uniforms for reference
366e5c31af7Sopenharmony_ci
367e5c31af7Sopenharmony_ci# resolution
368e5c31af7Sopenharmony_ciBUFFER reference_resolution DATA_TYPE vec2<float> DATA
369e5c31af7Sopenharmony_ci 256.0 256.0
370e5c31af7Sopenharmony_ciEND
371e5c31af7Sopenharmony_ci
372e5c31af7Sopenharmony_ciBUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
373e5c31af7Sopenharmony_ci
374e5c31af7Sopenharmony_ciPIPELINE graphics reference_pipeline
375e5c31af7Sopenharmony_ci  ATTACH reference_vertex_shader
376e5c31af7Sopenharmony_ci  ATTACH reference_fragment_shader
377e5c31af7Sopenharmony_ci  FRAMEBUFFER_SIZE 256 256
378e5c31af7Sopenharmony_ci  BIND BUFFER reference_framebuffer AS color LOCATION 0
379e5c31af7Sopenharmony_ci  BIND BUFFER reference_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
380e5c31af7Sopenharmony_ciEND
381e5c31af7Sopenharmony_ciCLEAR_COLOR reference_pipeline 0 0 0 255
382e5c31af7Sopenharmony_ci
383e5c31af7Sopenharmony_ciCLEAR reference_pipeline
384e5c31af7Sopenharmony_ciRUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
385e5c31af7Sopenharmony_ci
386e5c31af7Sopenharmony_ci
387e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH
388e5c31af7Sopenharmony_ci
389e5c31af7Sopenharmony_ci# variant_fragment_shader is derived from the following GLSL:
390e5c31af7Sopenharmony_ci# #version 320 es
391e5c31af7Sopenharmony_ci# precision highp float;
392e5c31af7Sopenharmony_ci#
393e5c31af7Sopenharmony_ci# precision highp int;
394e5c31af7Sopenharmony_ci#
395e5c31af7Sopenharmony_ci# layout(location = 0) out vec4 _GLF_color;
396e5c31af7Sopenharmony_ci#
397e5c31af7Sopenharmony_ci# layout(set = 0, binding = 0) uniform buf0
398e5c31af7Sopenharmony_ci# {
399e5c31af7Sopenharmony_ci#     vec2 resolution;
400e5c31af7Sopenharmony_ci# };
401e5c31af7Sopenharmony_ci# float cross2d(vec2 a, vec2 b)
402e5c31af7Sopenharmony_ci# {
403e5c31af7Sopenharmony_ci#     return ((a.x) * (b.y) - (b.x) * (a.y));
404e5c31af7Sopenharmony_ci# }
405e5c31af7Sopenharmony_ci# int pointInTriangle(vec2 p, vec2 a, vec2 b, vec2 c)
406e5c31af7Sopenharmony_ci# {
407e5c31af7Sopenharmony_ci#     const int array_size = 256;
408e5c31af7Sopenharmony_ci#     int array_a[array_size];
409e5c31af7Sopenharmony_ci#     float pab = cross2d(vec2(p.x - a.x, p.y - a.y), vec2(b.x - a.x, b.y - a.y));
410e5c31af7Sopenharmony_ci#     float pbc = cross2d(vec2(p.x - b.x, p.y - b.y), vec2(c.x - b.x, c.y - b.y));
411e5c31af7Sopenharmony_ci#     if (!((pab < 0.0 && pbc < 0.0) || (pab >= 0.0 && pbc >= 0.0)))
412e5c31af7Sopenharmony_ci#     {
413e5c31af7Sopenharmony_ci#         // Injected live code block has no impact on rest of the code in the shader.
414e5c31af7Sopenharmony_ci#         // Initialize array to known values.
415e5c31af7Sopenharmony_ci#         for (int i = 0; i < array_size; i++)
416e5c31af7Sopenharmony_ci#         {
417e5c31af7Sopenharmony_ci#             array_a[i] = 0;
418e5c31af7Sopenharmony_ci#         }
419e5c31af7Sopenharmony_ci#         // Total loop iteration count: 6x4x4x4 = 384.
420e5c31af7Sopenharmony_ci#         for (int int_a = 0; int_a < 6; )
421e5c31af7Sopenharmony_ci#         {
422e5c31af7Sopenharmony_ci#             int_a++;
423e5c31af7Sopenharmony_ci#             int int_c = 1;
424e5c31af7Sopenharmony_ci#             int int_h = 1;
425e5c31af7Sopenharmony_ci#             int int_d = 0;
426e5c31af7Sopenharmony_ci#             do
427e5c31af7Sopenharmony_ci#             {
428e5c31af7Sopenharmony_ci#                 int_d++;
429e5c31af7Sopenharmony_ci#                 int int_e = 0;
430e5c31af7Sopenharmony_ci#                 for (int int_f = 0; int_f < 4; int_c++)
431e5c31af7Sopenharmony_ci#                 {
432e5c31af7Sopenharmony_ci#                     int_f++;
433e5c31af7Sopenharmony_ci#                     for (int int_g = 0; int_g < 4; int_e++)
434e5c31af7Sopenharmony_ci#                     {
435e5c31af7Sopenharmony_ci#                         int_g++;
436e5c31af7Sopenharmony_ci#                         if (array_a[clamp(int_e * 2 + 32, 0, array_size - 1)] == 0)
437e5c31af7Sopenharmony_ci#                         {
438e5c31af7Sopenharmony_ci#                             int_h = int_c;
439e5c31af7Sopenharmony_ci#                         }
440e5c31af7Sopenharmony_ci#                     }
441e5c31af7Sopenharmony_ci#                 }
442e5c31af7Sopenharmony_ci#                 array_a[clamp(1 + int_h * 16, 0, array_size - 1)] = 1;
443e5c31af7Sopenharmony_ci#             } while (int_d < 4);
444e5c31af7Sopenharmony_ci#         }
445e5c31af7Sopenharmony_ci#         return 0;
446e5c31af7Sopenharmony_ci#     }
447e5c31af7Sopenharmony_ci#     float pca = cross2d(vec2(p.x - c.x, p.y - c.y), vec2(a.x - c.x, a.y - c.y));
448e5c31af7Sopenharmony_ci#     if (!((pab < 0.0 && pca < 0.0) || (pab >= 0.0 && pca >= 0.0)))
449e5c31af7Sopenharmony_ci#     {
450e5c31af7Sopenharmony_ci#         return 0;
451e5c31af7Sopenharmony_ci#     }
452e5c31af7Sopenharmony_ci#     return 1;
453e5c31af7Sopenharmony_ci# }
454e5c31af7Sopenharmony_ci# void main()
455e5c31af7Sopenharmony_ci# {
456e5c31af7Sopenharmony_ci#     vec2 pos = gl_FragCoord.xy / resolution;
457e5c31af7Sopenharmony_ci#     if (pointInTriangle(pos, vec2(0.7, 0.3), vec2(0.5, 0.9), vec2(0.1, 0.4)) == 1)
458e5c31af7Sopenharmony_ci#     {
459e5c31af7Sopenharmony_ci#         _GLF_color = vec4(1.0, 0.0, 0.0, 1.0);
460e5c31af7Sopenharmony_ci#     }
461e5c31af7Sopenharmony_ci#     else
462e5c31af7Sopenharmony_ci#     {
463e5c31af7Sopenharmony_ci#         _GLF_color = vec4(0.0, 0.0, 0.0, 1.0);
464e5c31af7Sopenharmony_ci#     }
465e5c31af7Sopenharmony_ci# }
466e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
467e5c31af7Sopenharmony_ci; SPIR-V
468e5c31af7Sopenharmony_ci; Version: 1.0
469e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10
470e5c31af7Sopenharmony_ci; Bound: 318
471e5c31af7Sopenharmony_ci; Schema: 0
472e5c31af7Sopenharmony_ci               OpCapability Shader
473e5c31af7Sopenharmony_ci          %1 = OpExtInstImport "GLSL.std.450"
474e5c31af7Sopenharmony_ci               OpMemoryModel Logical GLSL450
475e5c31af7Sopenharmony_ci               OpEntryPoint Fragment %4 "main" %247 %276
476e5c31af7Sopenharmony_ci               OpExecutionMode %4 OriginUpperLeft
477e5c31af7Sopenharmony_ci               OpSource ESSL 320
478e5c31af7Sopenharmony_ci               OpName %4 "main"
479e5c31af7Sopenharmony_ci               OpName %12 "cross2d(vf2;vf2;"
480e5c31af7Sopenharmony_ci               OpName %10 "a"
481e5c31af7Sopenharmony_ci               OpName %11 "b"
482e5c31af7Sopenharmony_ci               OpName %20 "pointInTriangle(vf2;vf2;vf2;vf2;"
483e5c31af7Sopenharmony_ci               OpName %16 "p"
484e5c31af7Sopenharmony_ci               OpName %17 "a"
485e5c31af7Sopenharmony_ci               OpName %18 "b"
486e5c31af7Sopenharmony_ci               OpName %19 "c"
487e5c31af7Sopenharmony_ci               OpName %39 "pab"
488e5c31af7Sopenharmony_ci               OpName %62 "param"
489e5c31af7Sopenharmony_ci               OpName %63 "param"
490e5c31af7Sopenharmony_ci               OpName %65 "pbc"
491e5c31af7Sopenharmony_ci               OpName %88 "param"
492e5c31af7Sopenharmony_ci               OpName %89 "param"
493e5c31af7Sopenharmony_ci               OpName %111 "i"
494e5c31af7Sopenharmony_ci               OpName %124 "array_a"
495e5c31af7Sopenharmony_ci               OpName %130 "int_a"
496e5c31af7Sopenharmony_ci               OpName %141 "int_c"
497e5c31af7Sopenharmony_ci               OpName %142 "int_h"
498e5c31af7Sopenharmony_ci               OpName %143 "int_d"
499e5c31af7Sopenharmony_ci               OpName %150 "int_e"
500e5c31af7Sopenharmony_ci               OpName %151 "int_f"
501e5c31af7Sopenharmony_ci               OpName %162 "int_g"
502e5c31af7Sopenharmony_ci               OpName %198 "pca"
503e5c31af7Sopenharmony_ci               OpName %221 "param"
504e5c31af7Sopenharmony_ci               OpName %222 "param"
505e5c31af7Sopenharmony_ci               OpName %244 "pos"
506e5c31af7Sopenharmony_ci               OpName %247 "gl_FragCoord"
507e5c31af7Sopenharmony_ci               OpName %250 "buf0"
508e5c31af7Sopenharmony_ci               OpMemberName %250 0 "resolution"
509e5c31af7Sopenharmony_ci               OpName %252 ""
510e5c31af7Sopenharmony_ci               OpName %266 "param"
511e5c31af7Sopenharmony_ci               OpName %268 "param"
512e5c31af7Sopenharmony_ci               OpName %269 "param"
513e5c31af7Sopenharmony_ci               OpName %270 "param"
514e5c31af7Sopenharmony_ci               OpName %276 "_GLF_color"
515e5c31af7Sopenharmony_ci               OpDecorate %247 BuiltIn FragCoord
516e5c31af7Sopenharmony_ci               OpMemberDecorate %250 0 Offset 0
517e5c31af7Sopenharmony_ci               OpDecorate %250 Block
518e5c31af7Sopenharmony_ci               OpDecorate %252 DescriptorSet 0
519e5c31af7Sopenharmony_ci               OpDecorate %252 Binding 0
520e5c31af7Sopenharmony_ci               OpDecorate %276 Location 0
521e5c31af7Sopenharmony_ci          %2 = OpTypeVoid
522e5c31af7Sopenharmony_ci          %3 = OpTypeFunction %2
523e5c31af7Sopenharmony_ci          %6 = OpTypeFloat 32
524e5c31af7Sopenharmony_ci          %7 = OpTypeVector %6 2
525e5c31af7Sopenharmony_ci          %8 = OpTypePointer Function %7
526e5c31af7Sopenharmony_ci          %9 = OpTypeFunction %6 %8 %8
527e5c31af7Sopenharmony_ci         %14 = OpTypeInt 32 1
528e5c31af7Sopenharmony_ci         %15 = OpTypeFunction %14 %8 %8 %8 %8
529e5c31af7Sopenharmony_ci         %22 = OpTypeInt 32 0
530e5c31af7Sopenharmony_ci         %23 = OpConstant %22 0
531e5c31af7Sopenharmony_ci         %24 = OpTypePointer Function %6
532e5c31af7Sopenharmony_ci         %27 = OpConstant %22 1
533e5c31af7Sopenharmony_ci         %91 = OpTypeBool
534e5c31af7Sopenharmony_ci         %93 = OpConstant %6 0
535e5c31af7Sopenharmony_ci        %110 = OpTypePointer Function %14
536e5c31af7Sopenharmony_ci        %112 = OpConstant %14 0
537e5c31af7Sopenharmony_ci        %119 = OpConstant %14 256
538e5c31af7Sopenharmony_ci        %121 = OpConstant %22 256
539e5c31af7Sopenharmony_ci        %122 = OpTypeArray %14 %121
540e5c31af7Sopenharmony_ci        %123 = OpTypePointer Function %122
541e5c31af7Sopenharmony_ci        %128 = OpConstant %14 1
542e5c31af7Sopenharmony_ci        %137 = OpConstant %14 6
543e5c31af7Sopenharmony_ci        %158 = OpConstant %14 4
544e5c31af7Sopenharmony_ci        %173 = OpConstant %14 2
545e5c31af7Sopenharmony_ci        %175 = OpConstant %14 32
546e5c31af7Sopenharmony_ci        %177 = OpConstant %14 255
547e5c31af7Sopenharmony_ci        %190 = OpConstant %14 16
548e5c31af7Sopenharmony_ci        %245 = OpTypeVector %6 4
549e5c31af7Sopenharmony_ci        %246 = OpTypePointer Input %245
550e5c31af7Sopenharmony_ci        %247 = OpVariable %246 Input
551e5c31af7Sopenharmony_ci        %250 = OpTypeStruct %7
552e5c31af7Sopenharmony_ci        %251 = OpTypePointer Uniform %250
553e5c31af7Sopenharmony_ci        %252 = OpVariable %251 Uniform
554e5c31af7Sopenharmony_ci        %253 = OpTypePointer Uniform %7
555e5c31af7Sopenharmony_ci        %257 = OpConstant %6 0.699999988
556e5c31af7Sopenharmony_ci        %258 = OpConstant %6 0.300000012
557e5c31af7Sopenharmony_ci        %259 = OpConstantComposite %7 %257 %258
558e5c31af7Sopenharmony_ci        %260 = OpConstant %6 0.5
559e5c31af7Sopenharmony_ci        %261 = OpConstant %6 0.899999976
560e5c31af7Sopenharmony_ci        %262 = OpConstantComposite %7 %260 %261
561e5c31af7Sopenharmony_ci        %263 = OpConstant %6 0.100000001
562e5c31af7Sopenharmony_ci        %264 = OpConstant %6 0.400000006
563e5c31af7Sopenharmony_ci        %265 = OpConstantComposite %7 %263 %264
564e5c31af7Sopenharmony_ci        %275 = OpTypePointer Output %245
565e5c31af7Sopenharmony_ci        %276 = OpVariable %275 Output
566e5c31af7Sopenharmony_ci        %277 = OpConstant %6 1
567e5c31af7Sopenharmony_ci        %278 = OpConstantComposite %245 %277 %93 %93 %277
568e5c31af7Sopenharmony_ci        %280 = OpConstantComposite %245 %93 %93 %93 %277
569e5c31af7Sopenharmony_ci        %285 = OpConstantFalse %91
570e5c31af7Sopenharmony_ci        %286 = OpTypePointer Function %91
571e5c31af7Sopenharmony_ci        %288 = OpConstantTrue %91
572e5c31af7Sopenharmony_ci        %317 = OpConstant %14 17
573e5c31af7Sopenharmony_ci          %4 = OpFunction %2 None %3
574e5c31af7Sopenharmony_ci          %5 = OpLabel
575e5c31af7Sopenharmony_ci        %244 = OpVariable %8 Function
576e5c31af7Sopenharmony_ci        %266 = OpVariable %8 Function
577e5c31af7Sopenharmony_ci        %268 = OpVariable %8 Function
578e5c31af7Sopenharmony_ci        %269 = OpVariable %8 Function
579e5c31af7Sopenharmony_ci        %270 = OpVariable %8 Function
580e5c31af7Sopenharmony_ci        %248 = OpLoad %245 %247
581e5c31af7Sopenharmony_ci        %249 = OpVectorShuffle %7 %248 %248 0 1
582e5c31af7Sopenharmony_ci        %254 = OpAccessChain %253 %252 %112
583e5c31af7Sopenharmony_ci        %255 = OpLoad %7 %254
584e5c31af7Sopenharmony_ci        %256 = OpFDiv %7 %249 %255
585e5c31af7Sopenharmony_ci               OpStore %244 %256
586e5c31af7Sopenharmony_ci               OpStore %266 %256
587e5c31af7Sopenharmony_ci               OpStore %268 %259
588e5c31af7Sopenharmony_ci               OpStore %269 %262
589e5c31af7Sopenharmony_ci               OpStore %270 %265
590e5c31af7Sopenharmony_ci        %271 = OpFunctionCall %14 %20 %266 %268 %269 %270
591e5c31af7Sopenharmony_ci        %272 = OpIEqual %91 %271 %128
592e5c31af7Sopenharmony_ci               OpSelectionMerge %274 None
593e5c31af7Sopenharmony_ci               OpBranchConditional %272 %273 %279
594e5c31af7Sopenharmony_ci        %273 = OpLabel
595e5c31af7Sopenharmony_ci               OpStore %276 %278
596e5c31af7Sopenharmony_ci               OpBranch %274
597e5c31af7Sopenharmony_ci        %279 = OpLabel
598e5c31af7Sopenharmony_ci               OpStore %276 %280
599e5c31af7Sopenharmony_ci               OpBranch %274
600e5c31af7Sopenharmony_ci        %274 = OpLabel
601e5c31af7Sopenharmony_ci               OpReturn
602e5c31af7Sopenharmony_ci               OpFunctionEnd
603e5c31af7Sopenharmony_ci         %12 = OpFunction %6 None %9
604e5c31af7Sopenharmony_ci         %10 = OpFunctionParameter %8
605e5c31af7Sopenharmony_ci         %11 = OpFunctionParameter %8
606e5c31af7Sopenharmony_ci         %13 = OpLabel
607e5c31af7Sopenharmony_ci         %25 = OpAccessChain %24 %10 %23
608e5c31af7Sopenharmony_ci         %26 = OpLoad %6 %25
609e5c31af7Sopenharmony_ci         %28 = OpAccessChain %24 %11 %27
610e5c31af7Sopenharmony_ci         %29 = OpLoad %6 %28
611e5c31af7Sopenharmony_ci         %30 = OpFMul %6 %26 %29
612e5c31af7Sopenharmony_ci         %31 = OpAccessChain %24 %11 %23
613e5c31af7Sopenharmony_ci         %32 = OpLoad %6 %31
614e5c31af7Sopenharmony_ci         %33 = OpAccessChain %24 %10 %27
615e5c31af7Sopenharmony_ci         %34 = OpLoad %6 %33
616e5c31af7Sopenharmony_ci         %35 = OpFMul %6 %32 %34
617e5c31af7Sopenharmony_ci         %36 = OpFSub %6 %30 %35
618e5c31af7Sopenharmony_ci               OpReturnValue %36
619e5c31af7Sopenharmony_ci               OpFunctionEnd
620e5c31af7Sopenharmony_ci         %20 = OpFunction %14 None %15
621e5c31af7Sopenharmony_ci         %16 = OpFunctionParameter %8
622e5c31af7Sopenharmony_ci         %17 = OpFunctionParameter %8
623e5c31af7Sopenharmony_ci         %18 = OpFunctionParameter %8
624e5c31af7Sopenharmony_ci         %19 = OpFunctionParameter %8
625e5c31af7Sopenharmony_ci         %21 = OpLabel
626e5c31af7Sopenharmony_ci        %287 = OpVariable %286 Function %285
627e5c31af7Sopenharmony_ci        %282 = OpVariable %110 Function
628e5c31af7Sopenharmony_ci         %39 = OpVariable %24 Function
629e5c31af7Sopenharmony_ci         %62 = OpVariable %8 Function
630e5c31af7Sopenharmony_ci         %63 = OpVariable %8 Function
631e5c31af7Sopenharmony_ci         %65 = OpVariable %24 Function
632e5c31af7Sopenharmony_ci         %88 = OpVariable %8 Function
633e5c31af7Sopenharmony_ci         %89 = OpVariable %8 Function
634e5c31af7Sopenharmony_ci        %111 = OpVariable %110 Function
635e5c31af7Sopenharmony_ci        %124 = OpVariable %123 Function
636e5c31af7Sopenharmony_ci        %130 = OpVariable %110 Function
637e5c31af7Sopenharmony_ci        %141 = OpVariable %110 Function
638e5c31af7Sopenharmony_ci        %142 = OpVariable %110 Function
639e5c31af7Sopenharmony_ci        %143 = OpVariable %110 Function
640e5c31af7Sopenharmony_ci        %150 = OpVariable %110 Function
641e5c31af7Sopenharmony_ci        %151 = OpVariable %110 Function
642e5c31af7Sopenharmony_ci        %162 = OpVariable %110 Function
643e5c31af7Sopenharmony_ci        %198 = OpVariable %24 Function
644e5c31af7Sopenharmony_ci        %221 = OpVariable %8 Function
645e5c31af7Sopenharmony_ci        %222 = OpVariable %8 Function
646e5c31af7Sopenharmony_ci               OpSelectionMerge %281 None
647e5c31af7Sopenharmony_ci               OpSwitch %23 %284
648e5c31af7Sopenharmony_ci        %284 = OpLabel
649e5c31af7Sopenharmony_ci         %40 = OpAccessChain %24 %16 %23
650e5c31af7Sopenharmony_ci         %41 = OpLoad %6 %40
651e5c31af7Sopenharmony_ci         %42 = OpAccessChain %24 %17 %23
652e5c31af7Sopenharmony_ci         %43 = OpLoad %6 %42
653e5c31af7Sopenharmony_ci         %44 = OpFSub %6 %41 %43
654e5c31af7Sopenharmony_ci         %45 = OpAccessChain %24 %16 %27
655e5c31af7Sopenharmony_ci         %46 = OpLoad %6 %45
656e5c31af7Sopenharmony_ci         %47 = OpAccessChain %24 %17 %27
657e5c31af7Sopenharmony_ci         %48 = OpLoad %6 %47
658e5c31af7Sopenharmony_ci         %49 = OpFSub %6 %46 %48
659e5c31af7Sopenharmony_ci         %50 = OpCompositeConstruct %7 %44 %49
660e5c31af7Sopenharmony_ci         %51 = OpAccessChain %24 %18 %23
661e5c31af7Sopenharmony_ci         %52 = OpLoad %6 %51
662e5c31af7Sopenharmony_ci         %54 = OpLoad %6 %42
663e5c31af7Sopenharmony_ci         %55 = OpFSub %6 %52 %54
664e5c31af7Sopenharmony_ci         %56 = OpAccessChain %24 %18 %27
665e5c31af7Sopenharmony_ci         %57 = OpLoad %6 %56
666e5c31af7Sopenharmony_ci         %59 = OpLoad %6 %47
667e5c31af7Sopenharmony_ci         %60 = OpFSub %6 %57 %59
668e5c31af7Sopenharmony_ci         %61 = OpCompositeConstruct %7 %55 %60
669e5c31af7Sopenharmony_ci               OpStore %62 %50
670e5c31af7Sopenharmony_ci               OpStore %63 %61
671e5c31af7Sopenharmony_ci         %64 = OpFunctionCall %6 %12 %62 %63
672e5c31af7Sopenharmony_ci               OpStore %39 %64
673e5c31af7Sopenharmony_ci         %67 = OpLoad %6 %40
674e5c31af7Sopenharmony_ci         %69 = OpLoad %6 %51
675e5c31af7Sopenharmony_ci         %70 = OpFSub %6 %67 %69
676e5c31af7Sopenharmony_ci         %72 = OpLoad %6 %45
677e5c31af7Sopenharmony_ci         %74 = OpLoad %6 %56
678e5c31af7Sopenharmony_ci         %75 = OpFSub %6 %72 %74
679e5c31af7Sopenharmony_ci         %76 = OpCompositeConstruct %7 %70 %75
680e5c31af7Sopenharmony_ci         %77 = OpAccessChain %24 %19 %23
681e5c31af7Sopenharmony_ci         %78 = OpLoad %6 %77
682e5c31af7Sopenharmony_ci         %80 = OpLoad %6 %51
683e5c31af7Sopenharmony_ci         %81 = OpFSub %6 %78 %80
684e5c31af7Sopenharmony_ci         %82 = OpAccessChain %24 %19 %27
685e5c31af7Sopenharmony_ci         %83 = OpLoad %6 %82
686e5c31af7Sopenharmony_ci         %85 = OpLoad %6 %56
687e5c31af7Sopenharmony_ci         %86 = OpFSub %6 %83 %85
688e5c31af7Sopenharmony_ci         %87 = OpCompositeConstruct %7 %81 %86
689e5c31af7Sopenharmony_ci               OpStore %88 %76
690e5c31af7Sopenharmony_ci               OpStore %89 %87
691e5c31af7Sopenharmony_ci         %90 = OpFunctionCall %6 %12 %88 %89
692e5c31af7Sopenharmony_ci               OpStore %65 %90
693e5c31af7Sopenharmony_ci         %94 = OpFOrdLessThan %91 %64 %93
694e5c31af7Sopenharmony_ci         %96 = OpFOrdLessThan %91 %90 %93
695e5c31af7Sopenharmony_ci         %97 = OpLogicalAnd %91 %94 %96
696e5c31af7Sopenharmony_ci         %98 = OpLogicalNot %91 %97
697e5c31af7Sopenharmony_ci               OpSelectionMerge %100 None
698e5c31af7Sopenharmony_ci               OpBranchConditional %98 %99 %100
699e5c31af7Sopenharmony_ci         %99 = OpLabel
700e5c31af7Sopenharmony_ci        %102 = OpFOrdGreaterThanEqual %91 %64 %93
701e5c31af7Sopenharmony_ci        %104 = OpFOrdGreaterThanEqual %91 %90 %93
702e5c31af7Sopenharmony_ci        %105 = OpLogicalAnd %91 %102 %104
703e5c31af7Sopenharmony_ci               OpBranch %100
704e5c31af7Sopenharmony_ci        %100 = OpLabel
705e5c31af7Sopenharmony_ci        %106 = OpPhi %91 %97 %284 %105 %99
706e5c31af7Sopenharmony_ci        %107 = OpLogicalNot %91 %106
707e5c31af7Sopenharmony_ci               OpSelectionMerge %109 None
708e5c31af7Sopenharmony_ci               OpBranchConditional %107 %108 %109
709e5c31af7Sopenharmony_ci        %108 = OpLabel
710e5c31af7Sopenharmony_ci               OpStore %111 %112
711e5c31af7Sopenharmony_ci               OpBranch %113
712e5c31af7Sopenharmony_ci        %113 = OpLabel
713e5c31af7Sopenharmony_ci        %290 = OpPhi %14 %112 %108 %129 %116
714e5c31af7Sopenharmony_ci               OpLoopMerge %115 %116 None
715e5c31af7Sopenharmony_ci               OpBranch %117
716e5c31af7Sopenharmony_ci        %117 = OpLabel
717e5c31af7Sopenharmony_ci        %120 = OpSLessThan %91 %290 %119
718e5c31af7Sopenharmony_ci               OpBranchConditional %120 %114 %115
719e5c31af7Sopenharmony_ci        %114 = OpLabel
720e5c31af7Sopenharmony_ci        %126 = OpAccessChain %110 %124 %290
721e5c31af7Sopenharmony_ci               OpStore %126 %112
722e5c31af7Sopenharmony_ci               OpBranch %116
723e5c31af7Sopenharmony_ci        %116 = OpLabel
724e5c31af7Sopenharmony_ci        %129 = OpIAdd %14 %290 %128
725e5c31af7Sopenharmony_ci               OpStore %111 %129
726e5c31af7Sopenharmony_ci               OpBranch %113
727e5c31af7Sopenharmony_ci        %115 = OpLabel
728e5c31af7Sopenharmony_ci               OpStore %130 %112
729e5c31af7Sopenharmony_ci               OpBranch %131
730e5c31af7Sopenharmony_ci        %131 = OpLabel
731e5c31af7Sopenharmony_ci        %291 = OpPhi %14 %112 %115 %306 %134
732e5c31af7Sopenharmony_ci               OpLoopMerge %133 %134 None
733e5c31af7Sopenharmony_ci               OpBranch %135
734e5c31af7Sopenharmony_ci        %135 = OpLabel
735e5c31af7Sopenharmony_ci        %138 = OpSLessThan %91 %291 %137
736e5c31af7Sopenharmony_ci               OpBranchConditional %138 %132 %133
737e5c31af7Sopenharmony_ci        %132 = OpLabel
738e5c31af7Sopenharmony_ci        %140 = OpIAdd %14 %291 %128
739e5c31af7Sopenharmony_ci               OpStore %130 %140
740e5c31af7Sopenharmony_ci               OpStore %141 %128
741e5c31af7Sopenharmony_ci               OpStore %142 %128
742e5c31af7Sopenharmony_ci               OpStore %143 %112
743e5c31af7Sopenharmony_ci               OpBranch %144
744e5c31af7Sopenharmony_ci        %144 = OpLabel
745e5c31af7Sopenharmony_ci        %296 = OpPhi %14 %128 %132 %295 %147
746e5c31af7Sopenharmony_ci        %293 = OpPhi %14 %112 %132 %149 %147
747e5c31af7Sopenharmony_ci        %306 = OpPhi %14 %140 %132 %306 %147
748e5c31af7Sopenharmony_ci        %301 = OpPhi %14 %128 %132 %300 %147
749e5c31af7Sopenharmony_ci               OpLoopMerge %146 %147 None
750e5c31af7Sopenharmony_ci               OpBranch %145
751e5c31af7Sopenharmony_ci        %145 = OpLabel
752e5c31af7Sopenharmony_ci        %149 = OpIAdd %14 %293 %128
753e5c31af7Sopenharmony_ci               OpStore %143 %149
754e5c31af7Sopenharmony_ci               OpStore %150 %112
755e5c31af7Sopenharmony_ci               OpStore %151 %112
756e5c31af7Sopenharmony_ci               OpBranch %152
757e5c31af7Sopenharmony_ci        %152 = OpLabel
758e5c31af7Sopenharmony_ci        %300 = OpPhi %14 %301 %145 %188 %155
759e5c31af7Sopenharmony_ci        %295 = OpPhi %14 %296 %145 %311 %155
760e5c31af7Sopenharmony_ci        %294 = OpPhi %14 %112 %145 %161 %155
761e5c31af7Sopenharmony_ci        %303 = OpPhi %14 %112 %145 %302 %155
762e5c31af7Sopenharmony_ci               OpLoopMerge %154 %155 None
763e5c31af7Sopenharmony_ci               OpBranch %156
764e5c31af7Sopenharmony_ci        %156 = OpLabel
765e5c31af7Sopenharmony_ci        %159 = OpSLessThan %91 %294 %158
766e5c31af7Sopenharmony_ci               OpBranchConditional %159 %153 %154
767e5c31af7Sopenharmony_ci        %153 = OpLabel
768e5c31af7Sopenharmony_ci        %161 = OpIAdd %14 %294 %128
769e5c31af7Sopenharmony_ci               OpStore %151 %161
770e5c31af7Sopenharmony_ci               OpStore %162 %112
771e5c31af7Sopenharmony_ci               OpBranch %163
772e5c31af7Sopenharmony_ci        %163 = OpLabel
773e5c31af7Sopenharmony_ci        %302 = OpPhi %14 %303 %153 %186 %166
774e5c31af7Sopenharmony_ci        %298 = OpPhi %14 %112 %153 %171 %166
775e5c31af7Sopenharmony_ci        %311 = OpPhi %14 %295 %153 %312 %166
776e5c31af7Sopenharmony_ci               OpLoopMerge %165 %166 None
777e5c31af7Sopenharmony_ci               OpBranch %167
778e5c31af7Sopenharmony_ci        %167 = OpLabel
779e5c31af7Sopenharmony_ci        %169 = OpSLessThan %91 %298 %158
780e5c31af7Sopenharmony_ci               OpBranchConditional %169 %164 %165
781e5c31af7Sopenharmony_ci        %164 = OpLabel
782e5c31af7Sopenharmony_ci        %171 = OpIAdd %14 %298 %128
783e5c31af7Sopenharmony_ci               OpStore %162 %171
784e5c31af7Sopenharmony_ci        %174 = OpIMul %14 %302 %173
785e5c31af7Sopenharmony_ci        %176 = OpIAdd %14 %174 %175
786e5c31af7Sopenharmony_ci        %178 = OpExtInst %14 %1 SClamp %176 %112 %177
787e5c31af7Sopenharmony_ci        %179 = OpAccessChain %110 %124 %178
788e5c31af7Sopenharmony_ci        %180 = OpLoad %14 %179
789e5c31af7Sopenharmony_ci        %181 = OpIEqual %91 %180 %112
790e5c31af7Sopenharmony_ci               OpSelectionMerge %183 None
791e5c31af7Sopenharmony_ci               OpBranchConditional %181 %182 %183
792e5c31af7Sopenharmony_ci        %182 = OpLabel
793e5c31af7Sopenharmony_ci               OpStore %142 %300
794e5c31af7Sopenharmony_ci               OpBranch %183
795e5c31af7Sopenharmony_ci        %183 = OpLabel
796e5c31af7Sopenharmony_ci        %312 = OpPhi %14 %311 %164 %300 %182
797e5c31af7Sopenharmony_ci               OpBranch %166
798e5c31af7Sopenharmony_ci        %166 = OpLabel
799e5c31af7Sopenharmony_ci        %186 = OpIAdd %14 %302 %128
800e5c31af7Sopenharmony_ci               OpStore %150 %186
801e5c31af7Sopenharmony_ci               OpBranch %163
802e5c31af7Sopenharmony_ci        %165 = OpLabel
803e5c31af7Sopenharmony_ci               OpBranch %155
804e5c31af7Sopenharmony_ci        %155 = OpLabel
805e5c31af7Sopenharmony_ci        %188 = OpIAdd %14 %300 %128
806e5c31af7Sopenharmony_ci               OpStore %141 %188
807e5c31af7Sopenharmony_ci               OpBranch %152
808e5c31af7Sopenharmony_ci        %154 = OpLabel
809e5c31af7Sopenharmony_ci        %191 = OpIMul %14 %295 %190
810e5c31af7Sopenharmony_ci        %192 = OpIAdd %14 %128 %191
811e5c31af7Sopenharmony_ci        %193 = OpExtInst %14 %1 SClamp %192 %112 %177
812e5c31af7Sopenharmony_ci        %194 = OpAccessChain %110 %124 %193
813e5c31af7Sopenharmony_ci               OpStore %194 %128
814e5c31af7Sopenharmony_ci               OpBranch %147
815e5c31af7Sopenharmony_ci        %147 = OpLabel
816e5c31af7Sopenharmony_ci        %196 = OpSLessThan %91 %149 %158
817e5c31af7Sopenharmony_ci               OpBranchConditional %196 %144 %146
818e5c31af7Sopenharmony_ci        %146 = OpLabel
819e5c31af7Sopenharmony_ci               OpBranch %134
820e5c31af7Sopenharmony_ci        %134 = OpLabel
821e5c31af7Sopenharmony_ci               OpBranch %131
822e5c31af7Sopenharmony_ci        %133 = OpLabel
823e5c31af7Sopenharmony_ci               OpStore %287 %288
824e5c31af7Sopenharmony_ci               OpStore %282 %112
825e5c31af7Sopenharmony_ci               OpBranch %281
826e5c31af7Sopenharmony_ci        %109 = OpLabel
827e5c31af7Sopenharmony_ci        %200 = OpLoad %6 %40
828e5c31af7Sopenharmony_ci        %202 = OpLoad %6 %77
829e5c31af7Sopenharmony_ci        %203 = OpFSub %6 %200 %202
830e5c31af7Sopenharmony_ci        %205 = OpLoad %6 %45
831e5c31af7Sopenharmony_ci        %207 = OpLoad %6 %82
832e5c31af7Sopenharmony_ci        %208 = OpFSub %6 %205 %207
833e5c31af7Sopenharmony_ci        %209 = OpCompositeConstruct %7 %203 %208
834e5c31af7Sopenharmony_ci        %211 = OpLoad %6 %42
835e5c31af7Sopenharmony_ci        %213 = OpLoad %6 %77
836e5c31af7Sopenharmony_ci        %214 = OpFSub %6 %211 %213
837e5c31af7Sopenharmony_ci        %216 = OpLoad %6 %47
838e5c31af7Sopenharmony_ci        %218 = OpLoad %6 %82
839e5c31af7Sopenharmony_ci        %219 = OpFSub %6 %216 %218
840e5c31af7Sopenharmony_ci        %220 = OpCompositeConstruct %7 %214 %219
841e5c31af7Sopenharmony_ci               OpStore %221 %209
842e5c31af7Sopenharmony_ci               OpStore %222 %220
843e5c31af7Sopenharmony_ci        %223 = OpFunctionCall %6 %12 %221 %222
844e5c31af7Sopenharmony_ci               OpStore %198 %223
845e5c31af7Sopenharmony_ci        %225 = OpFOrdLessThan %91 %64 %93
846e5c31af7Sopenharmony_ci        %227 = OpFOrdLessThan %91 %223 %93
847e5c31af7Sopenharmony_ci        %228 = OpLogicalAnd %91 %225 %227
848e5c31af7Sopenharmony_ci        %229 = OpLogicalNot %91 %228
849e5c31af7Sopenharmony_ci               OpSelectionMerge %231 None
850e5c31af7Sopenharmony_ci               OpBranchConditional %229 %230 %231
851e5c31af7Sopenharmony_ci        %230 = OpLabel
852e5c31af7Sopenharmony_ci        %233 = OpFOrdGreaterThanEqual %91 %64 %93
853e5c31af7Sopenharmony_ci        %235 = OpFOrdGreaterThanEqual %91 %223 %93
854e5c31af7Sopenharmony_ci        %236 = OpLogicalAnd %91 %233 %235
855e5c31af7Sopenharmony_ci               OpBranch %231
856e5c31af7Sopenharmony_ci        %231 = OpLabel
857e5c31af7Sopenharmony_ci        %237 = OpPhi %91 %228 %109 %236 %230
858e5c31af7Sopenharmony_ci        %238 = OpLogicalNot %91 %237
859e5c31af7Sopenharmony_ci               OpSelectionMerge %240 None
860e5c31af7Sopenharmony_ci               OpBranchConditional %238 %239 %240
861e5c31af7Sopenharmony_ci        %239 = OpLabel
862e5c31af7Sopenharmony_ci               OpStore %287 %288
863e5c31af7Sopenharmony_ci               OpStore %282 %112
864e5c31af7Sopenharmony_ci               OpBranch %281
865e5c31af7Sopenharmony_ci        %240 = OpLabel
866e5c31af7Sopenharmony_ci               OpStore %287 %288
867e5c31af7Sopenharmony_ci               OpStore %282 %128
868e5c31af7Sopenharmony_ci               OpBranch %281
869e5c31af7Sopenharmony_ci        %281 = OpLabel
870e5c31af7Sopenharmony_ci        %292 = OpPhi %14 %112 %133 %112 %239 %128 %240
871e5c31af7Sopenharmony_ci               OpReturnValue %292
872e5c31af7Sopenharmony_ci               OpFunctionEnd
873e5c31af7Sopenharmony_ciEND
874e5c31af7Sopenharmony_ci
875e5c31af7Sopenharmony_ci# uniforms for variant
876e5c31af7Sopenharmony_ci
877e5c31af7Sopenharmony_ci# resolution
878e5c31af7Sopenharmony_ciBUFFER variant_resolution DATA_TYPE vec2<float> DATA
879e5c31af7Sopenharmony_ci 256.0 256.0
880e5c31af7Sopenharmony_ciEND
881e5c31af7Sopenharmony_ci
882e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
883e5c31af7Sopenharmony_ci
884e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline
885e5c31af7Sopenharmony_ci  ATTACH variant_vertex_shader
886e5c31af7Sopenharmony_ci  ATTACH variant_fragment_shader
887e5c31af7Sopenharmony_ci  FRAMEBUFFER_SIZE 256 256
888e5c31af7Sopenharmony_ci  BIND BUFFER variant_framebuffer AS color LOCATION 0
889e5c31af7Sopenharmony_ci  BIND BUFFER variant_resolution AS uniform DESCRIPTOR_SET 0 BINDING 0
890e5c31af7Sopenharmony_ciEND
891e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255
892e5c31af7Sopenharmony_ci
893e5c31af7Sopenharmony_ciCLEAR variant_pipeline
894e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
895e5c31af7Sopenharmony_ci
896e5c31af7Sopenharmony_ciEXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
897