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