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 the GraphicsFuzz project.
19e5c31af7Sopenharmony_ci
20e5c31af7Sopenharmony_ci# Short description: Equivalent shaders, one with an additional access chain
21e5c31af7Sopenharmony_ci
22e5c31af7Sopenharmony_ci# The test passes because both shaders render the same image.
23e5c31af7Sopenharmony_ci
24e5c31af7Sopenharmony_ciSHADER vertex texgen_vert PASSTHROUGH
25e5c31af7Sopenharmony_ci
26e5c31af7Sopenharmony_ciSHADER fragment texgen_frag GLSL
27e5c31af7Sopenharmony_ci#version 430
28e5c31af7Sopenharmony_ciprecision highp float;
29e5c31af7Sopenharmony_ci
30e5c31af7Sopenharmony_cilayout(location = 0) out vec4 _GLF_color;
31e5c31af7Sopenharmony_ci
32e5c31af7Sopenharmony_civoid main()
33e5c31af7Sopenharmony_ci{
34e5c31af7Sopenharmony_ci _GLF_color = vec4(
35e5c31af7Sopenharmony_ci floor(gl_FragCoord.x) * (1.0 / 255.0),
36e5c31af7Sopenharmony_ci (int(gl_FragCoord.x) ^ int(gl_FragCoord.y)) * (1.0 / 255.0),
37e5c31af7Sopenharmony_ci floor(gl_FragCoord.y) * (1.0 / 255.0),
38e5c31af7Sopenharmony_ci 1.0);
39e5c31af7Sopenharmony_ci}
40e5c31af7Sopenharmony_ciEND
41e5c31af7Sopenharmony_ciBUFFER default_texture FORMAT B8G8R8A8_UNORM
42e5c31af7Sopenharmony_ci
43e5c31af7Sopenharmony_ciPIPELINE graphics texgen_pipeline
44e5c31af7Sopenharmony_ci  ATTACH texgen_vert
45e5c31af7Sopenharmony_ci  ATTACH texgen_frag
46e5c31af7Sopenharmony_ci  FRAMEBUFFER_SIZE 256 256
47e5c31af7Sopenharmony_ci  BIND BUFFER default_texture AS color LOCATION 0
48e5c31af7Sopenharmony_ciEND
49e5c31af7Sopenharmony_ci
50e5c31af7Sopenharmony_ciCLEAR_COLOR texgen_pipeline 0 0 0 255
51e5c31af7Sopenharmony_ciCLEAR texgen_pipeline
52e5c31af7Sopenharmony_ciRUN texgen_pipeline DRAW_RECT POS 0 0  SIZE 256 256
53e5c31af7Sopenharmony_ci
54e5c31af7Sopenharmony_ciSHADER vertex reference_vertex_shader PASSTHROUGH
55e5c31af7Sopenharmony_ci
56e5c31af7Sopenharmony_ciSHADER fragment reference_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
57e5c31af7Sopenharmony_ci; SPIR-V
58e5c31af7Sopenharmony_ci; Version: 1.0
59e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10
60e5c31af7Sopenharmony_ci; Bound: 254
61e5c31af7Sopenharmony_ci; Schema: 0
62e5c31af7Sopenharmony_ci               OpCapability Shader
63e5c31af7Sopenharmony_ci          %1 = OpExtInstImport "GLSL.std.450"
64e5c31af7Sopenharmony_ci               OpMemoryModel Logical GLSL450
65e5c31af7Sopenharmony_ci               OpEntryPoint Fragment %4 "main" %115 %130
66e5c31af7Sopenharmony_ci               OpExecutionMode %4 OriginUpperLeft
67e5c31af7Sopenharmony_ci               OpSource ESSL 320
68e5c31af7Sopenharmony_ci               OpName %4 "main"
69e5c31af7Sopenharmony_ci               OpName %115 "gl_FragCoord"
70e5c31af7Sopenharmony_ci               OpName %130 "_GLF_color"
71e5c31af7Sopenharmony_ci               OpName %134 "tex"
72e5c31af7Sopenharmony_ci               OpDecorate %115 BuiltIn FragCoord
73e5c31af7Sopenharmony_ci               OpDecorate %130 Location 0
74e5c31af7Sopenharmony_ci               OpDecorate %134 RelaxedPrecision
75e5c31af7Sopenharmony_ci               OpDecorate %134 DescriptorSet 0
76e5c31af7Sopenharmony_ci               OpDecorate %134 Binding 0
77e5c31af7Sopenharmony_ci               OpDecorate %135 RelaxedPrecision
78e5c31af7Sopenharmony_ci               OpDecorate %137 RelaxedPrecision
79e5c31af7Sopenharmony_ci          %2 = OpTypeVoid
80e5c31af7Sopenharmony_ci          %3 = OpTypeFunction %2
81e5c31af7Sopenharmony_ci          %6 = OpTypeFloat 32
82e5c31af7Sopenharmony_ci          %7 = OpTypeVector %6 2
83e5c31af7Sopenharmony_ci         %19 = OpConstant %6 0.318309873
84e5c31af7Sopenharmony_ci         %22 = OpConstant %6 0.00100000005
85e5c31af7Sopenharmony_ci         %23 = OpTypeBool
86e5c31af7Sopenharmony_ci         %27 = OpConstant %6 0
87e5c31af7Sopenharmony_ci         %32 = OpTypeInt 32 0
88e5c31af7Sopenharmony_ci         %36 = OpConstant %32 0
89e5c31af7Sopenharmony_ci         %55 = OpConstant %6 0.970000029
90e5c31af7Sopenharmony_ci         %56 = OpConstant %6 0.189999998
91e5c31af7Sopenharmony_ci         %73 = OpConstant %6 0.5
92e5c31af7Sopenharmony_ci         %81 = OpConstant %6 1
93e5c31af7Sopenharmony_ci         %98 = OpConstantComposite %7 %73 %73
94e5c31af7Sopenharmony_ci        %113 = OpTypeVector %6 4
95e5c31af7Sopenharmony_ci        %114 = OpTypePointer Input %113
96e5c31af7Sopenharmony_ci        %115 = OpVariable %114 Input
97e5c31af7Sopenharmony_ci        %118 = OpConstant %6 0.00390625
98e5c31af7Sopenharmony_ci        %124 = OpConstant %6 256
99e5c31af7Sopenharmony_ci        %129 = OpTypePointer Output %113
100e5c31af7Sopenharmony_ci        %130 = OpVariable %129 Output
101e5c31af7Sopenharmony_ci        %131 = OpTypeImage %6 2D 0 0 0 1 Unknown
102e5c31af7Sopenharmony_ci        %132 = OpTypeSampledImage %131
103e5c31af7Sopenharmony_ci        %133 = OpTypePointer UniformConstant %132
104e5c31af7Sopenharmony_ci        %134 = OpVariable %133 UniformConstant
105e5c31af7Sopenharmony_ci        %253 = OpConstantComposite %7 %118 %118
106e5c31af7Sopenharmony_ci          %4 = OpFunction %2 None %3
107e5c31af7Sopenharmony_ci          %5 = OpLabel
108e5c31af7Sopenharmony_ci        %116 = OpLoad %113 %115
109e5c31af7Sopenharmony_ci        %117 = OpVectorShuffle %7 %116 %116 0 1
110e5c31af7Sopenharmony_ci        %119 = OpVectorTimesScalar %7 %117 %118
111e5c31af7Sopenharmony_ci        %160 = OpFSub %7 %119 %98
112e5c31af7Sopenharmony_ci        %162 = OpExtInst %6 %1 Length %160
113e5c31af7Sopenharmony_ci               OpSelectionMerge %235 None
114e5c31af7Sopenharmony_ci               OpSwitch %36 %176
115e5c31af7Sopenharmony_ci        %176 = OpLabel
116e5c31af7Sopenharmony_ci        %179 = OpFOrdLessThan %23 %162 %22
117e5c31af7Sopenharmony_ci               OpSelectionMerge %181 None
118e5c31af7Sopenharmony_ci               OpBranchConditional %179 %180 %181
119e5c31af7Sopenharmony_ci        %180 = OpLabel
120e5c31af7Sopenharmony_ci               OpBranch %235
121e5c31af7Sopenharmony_ci        %181 = OpLabel
122e5c31af7Sopenharmony_ci        %183 = OpExtInst %7 %1 FAbs %160
123e5c31af7Sopenharmony_ci        %185 = OpCompositeExtract %6 %183 1
124e5c31af7Sopenharmony_ci        %187 = OpCompositeExtract %6 %183 0
125e5c31af7Sopenharmony_ci        %188 = OpFOrdGreaterThan %23 %185 %187
126e5c31af7Sopenharmony_ci               OpSelectionMerge %201 None
127e5c31af7Sopenharmony_ci               OpBranchConditional %188 %189 %195
128e5c31af7Sopenharmony_ci        %189 = OpLabel
129e5c31af7Sopenharmony_ci        %194 = OpFDiv %6 %187 %185
130e5c31af7Sopenharmony_ci               OpBranch %201
131e5c31af7Sopenharmony_ci        %195 = OpLabel
132e5c31af7Sopenharmony_ci        %200 = OpFDiv %6 %185 %187
133e5c31af7Sopenharmony_ci               OpBranch %201
134e5c31af7Sopenharmony_ci        %201 = OpLabel
135e5c31af7Sopenharmony_ci        %247 = OpPhi %6 %194 %189 %200 %195
136e5c31af7Sopenharmony_ci        %203 = OpFMul %6 %56 %247
137e5c31af7Sopenharmony_ci        %205 = OpFMul %6 %203 %247
138e5c31af7Sopenharmony_ci        %206 = OpFSub %6 %55 %205
139e5c31af7Sopenharmony_ci        %208 = OpFMul %6 %206 %247
140e5c31af7Sopenharmony_ci        %210 = OpFMul %6 %208 %19
141e5c31af7Sopenharmony_ci        %215 = OpFOrdLessThan %23 %185 %187
142e5c31af7Sopenharmony_ci               OpSelectionMerge %219 None
143e5c31af7Sopenharmony_ci               OpBranchConditional %215 %216 %219
144e5c31af7Sopenharmony_ci        %216 = OpLabel
145e5c31af7Sopenharmony_ci        %218 = OpFSub %6 %73 %210
146e5c31af7Sopenharmony_ci               OpBranch %219
147e5c31af7Sopenharmony_ci        %219 = OpLabel
148e5c31af7Sopenharmony_ci        %248 = OpPhi %6 %210 %201 %218 %216
149e5c31af7Sopenharmony_ci        %221 = OpCompositeExtract %6 %160 0
150e5c31af7Sopenharmony_ci        %222 = OpFOrdLessThan %23 %221 %27
151e5c31af7Sopenharmony_ci               OpSelectionMerge %226 None
152e5c31af7Sopenharmony_ci               OpBranchConditional %222 %223 %226
153e5c31af7Sopenharmony_ci        %223 = OpLabel
154e5c31af7Sopenharmony_ci        %225 = OpFSub %6 %81 %248
155e5c31af7Sopenharmony_ci               OpBranch %226
156e5c31af7Sopenharmony_ci        %226 = OpLabel
157e5c31af7Sopenharmony_ci        %249 = OpPhi %6 %248 %219 %225 %223
158e5c31af7Sopenharmony_ci        %228 = OpCompositeExtract %6 %160 1
159e5c31af7Sopenharmony_ci        %229 = OpFOrdLessThan %23 %228 %27
160e5c31af7Sopenharmony_ci               OpSelectionMerge %233 None
161e5c31af7Sopenharmony_ci               OpBranchConditional %229 %230 %233
162e5c31af7Sopenharmony_ci        %230 = OpLabel
163e5c31af7Sopenharmony_ci        %232 = OpFNegate %6 %249
164e5c31af7Sopenharmony_ci               OpBranch %233
165e5c31af7Sopenharmony_ci        %233 = OpLabel
166e5c31af7Sopenharmony_ci        %250 = OpPhi %6 %249 %226 %232 %230
167e5c31af7Sopenharmony_ci               OpBranch %235
168e5c31af7Sopenharmony_ci        %235 = OpLabel
169e5c31af7Sopenharmony_ci        %251 = OpPhi %6 %27 %180 %250 %233
170e5c31af7Sopenharmony_ci        %167 = OpCompositeConstruct %7 %162 %251
171e5c31af7Sopenharmony_ci        %125 = OpVectorTimesScalar %7 %167 %124
172e5c31af7Sopenharmony_ci        %126 = OpExtInst %7 %1 Floor %125
173e5c31af7Sopenharmony_ci        %128 = OpFMul %7 %126 %253
174e5c31af7Sopenharmony_ci        %135 = OpLoad %132 %134
175e5c31af7Sopenharmony_ci        %137 = OpImageSampleImplicitLod %113 %135 %128
176e5c31af7Sopenharmony_ci        %140 = OpCompositeExtract %6 %137 0
177e5c31af7Sopenharmony_ci        %141 = OpCompositeExtract %6 %137 1
178e5c31af7Sopenharmony_ci        %142 = OpCompositeExtract %6 %137 2
179e5c31af7Sopenharmony_ci        %143 = OpCompositeConstruct %113 %140 %141 %142 %81
180e5c31af7Sopenharmony_ci               OpStore %130 %143
181e5c31af7Sopenharmony_ci               OpReturn
182e5c31af7Sopenharmony_ci               OpFunctionEnd
183e5c31af7Sopenharmony_ciEND
184e5c31af7Sopenharmony_ci
185e5c31af7Sopenharmony_ci# uniforms for reference
186e5c31af7Sopenharmony_ci
187e5c31af7Sopenharmony_ci# tex
188e5c31af7Sopenharmony_ciSAMPLER reference_tex
189e5c31af7Sopenharmony_ci
190e5c31af7Sopenharmony_ci
191e5c31af7Sopenharmony_ciBUFFER reference_framebuffer FORMAT B8G8R8A8_UNORM
192e5c31af7Sopenharmony_ci
193e5c31af7Sopenharmony_ciPIPELINE graphics reference_pipeline
194e5c31af7Sopenharmony_ci  ATTACH reference_vertex_shader
195e5c31af7Sopenharmony_ci  ATTACH reference_fragment_shader
196e5c31af7Sopenharmony_ci  FRAMEBUFFER_SIZE 256 256
197e5c31af7Sopenharmony_ci  BIND BUFFER reference_framebuffer AS color LOCATION 0
198e5c31af7Sopenharmony_ci  BIND BUFFER default_texture AS combined_image_sampler SAMPLER reference_tex DESCRIPTOR_SET 0 BINDING 0
199e5c31af7Sopenharmony_ciEND
200e5c31af7Sopenharmony_ciCLEAR_COLOR reference_pipeline 0 0 0 255
201e5c31af7Sopenharmony_ci
202e5c31af7Sopenharmony_ciCLEAR reference_pipeline
203e5c31af7Sopenharmony_ciRUN reference_pipeline DRAW_RECT POS 0 0 SIZE 256 256
204e5c31af7Sopenharmony_ci
205e5c31af7Sopenharmony_ci
206e5c31af7Sopenharmony_ciSHADER vertex variant_vertex_shader PASSTHROUGH
207e5c31af7Sopenharmony_ci
208e5c31af7Sopenharmony_ciSHADER fragment variant_fragment_shader SPIRV-ASM TARGET_ENV spv1.0
209e5c31af7Sopenharmony_ci; SPIR-V
210e5c31af7Sopenharmony_ci; Version: 1.0
211e5c31af7Sopenharmony_ci; Generator: Khronos Glslang Reference Front End; 10
212e5c31af7Sopenharmony_ci; Bound: 529
213e5c31af7Sopenharmony_ci; Schema: 0
214e5c31af7Sopenharmony_ci               OpCapability Shader
215e5c31af7Sopenharmony_ci          %1 = OpExtInstImport "GLSL.std.450"
216e5c31af7Sopenharmony_ci               OpMemoryModel Logical GLSL450
217e5c31af7Sopenharmony_ci               OpEntryPoint Fragment %4 "main" %115 %130
218e5c31af7Sopenharmony_ci               OpExecutionMode %4 OriginUpperLeft
219e5c31af7Sopenharmony_ci               OpSource ESSL 320
220e5c31af7Sopenharmony_ci               OpName %4 "main"
221e5c31af7Sopenharmony_ci               OpName %115 "gl_FragCoord"
222e5c31af7Sopenharmony_ci               OpName %130 "_GLF_color"
223e5c31af7Sopenharmony_ci               OpName %134 "tex"
224e5c31af7Sopenharmony_ci               OpDecorate %115 BuiltIn FragCoord
225e5c31af7Sopenharmony_ci               OpDecorate %130 Location 0
226e5c31af7Sopenharmony_ci               OpDecorate %134 RelaxedPrecision
227e5c31af7Sopenharmony_ci               OpDecorate %134 DescriptorSet 0
228e5c31af7Sopenharmony_ci               OpDecorate %134 Binding 0
229e5c31af7Sopenharmony_ci               OpDecorate %135 RelaxedPrecision
230e5c31af7Sopenharmony_ci               OpDecorate %137 RelaxedPrecision
231e5c31af7Sopenharmony_ci          %2 = OpTypeVoid
232e5c31af7Sopenharmony_ci          %3 = OpTypeFunction %2
233e5c31af7Sopenharmony_ci          %6 = OpTypeFloat 32
234e5c31af7Sopenharmony_ci          %7 = OpTypeVector %6 2
235e5c31af7Sopenharmony_ci         %19 = OpConstant %6 0.318309873
236e5c31af7Sopenharmony_ci         %22 = OpConstant %6 0.00100000005
237e5c31af7Sopenharmony_ci         %23 = OpTypeBool
238e5c31af7Sopenharmony_ci         %27 = OpConstant %6 0
239e5c31af7Sopenharmony_ci         %32 = OpTypeInt 32 0
240e5c31af7Sopenharmony_ci         %36 = OpConstant %32 0
241e5c31af7Sopenharmony_ci         %55 = OpConstant %6 0.970000029
242e5c31af7Sopenharmony_ci         %56 = OpConstant %6 0.189999998
243e5c31af7Sopenharmony_ci         %73 = OpConstant %6 0.5
244e5c31af7Sopenharmony_ci         %81 = OpConstant %6 1
245e5c31af7Sopenharmony_ci         %98 = OpConstantComposite %7 %73 %73
246e5c31af7Sopenharmony_ci        %113 = OpTypeVector %6 4
247e5c31af7Sopenharmony_ci        %114 = OpTypePointer Input %113
248e5c31af7Sopenharmony_ci        %115 = OpVariable %114 Input
249e5c31af7Sopenharmony_ci        %118 = OpConstant %6 0.00390625
250e5c31af7Sopenharmony_ci        %124 = OpConstant %6 256
251e5c31af7Sopenharmony_ci        %129 = OpTypePointer Output %113
252e5c31af7Sopenharmony_ci        %130 = OpVariable %129 Output
253e5c31af7Sopenharmony_ci        %131 = OpTypeImage %6 2D 0 0 0 1 Unknown
254e5c31af7Sopenharmony_ci        %132 = OpTypeSampledImage %131
255e5c31af7Sopenharmony_ci        %133 = OpTypePointer UniformConstant %132
256e5c31af7Sopenharmony_ci        %134 = OpVariable %133 UniformConstant
257e5c31af7Sopenharmony_ci        %253 = OpConstantComposite %7 %118 %118
258e5c31af7Sopenharmony_ci        %379 = OpTypeInt 32 1
259e5c31af7Sopenharmony_ci        %380 = OpConstant %379 3
260e5c31af7Sopenharmony_ci        %383 = OpConstant %379 0
261e5c31af7Sopenharmony_ci        %384 = OpTypePointer Input %6
262e5c31af7Sopenharmony_ci        %475 = OpConstantFalse %23
263e5c31af7Sopenharmony_ci        %526 = OpTypePointer Function %23
264e5c31af7Sopenharmony_ci          %4 = OpFunction %2 None %3
265e5c31af7Sopenharmony_ci          %5 = OpLabel
266e5c31af7Sopenharmony_ci        %527 = OpVariable %526 Function %475
267e5c31af7Sopenharmony_ci        %116 = OpLoad %113 %115
268e5c31af7Sopenharmony_ci        %117 = OpVectorShuffle %7 %116 %116 0 1
269e5c31af7Sopenharmony_ci        %119 = OpVectorTimesScalar %7 %117 %118
270e5c31af7Sopenharmony_ci        %160 = OpFSub %7 %119 %98
271e5c31af7Sopenharmony_ci        %162 = OpExtInst %6 %1 Length %160
272e5c31af7Sopenharmony_ci               OpSelectionMerge %235 None
273e5c31af7Sopenharmony_ci               OpSwitch %36 %176
274e5c31af7Sopenharmony_ci        %176 = OpLabel
275e5c31af7Sopenharmony_ci        %179 = OpFOrdLessThan %23 %162 %22
276e5c31af7Sopenharmony_ci               OpSelectionMerge %181 None
277e5c31af7Sopenharmony_ci               OpBranchConditional %179 %180 %181
278e5c31af7Sopenharmony_ci        %180 = OpLabel
279e5c31af7Sopenharmony_ci               OpBranch %235
280e5c31af7Sopenharmony_ci        %181 = OpLabel
281e5c31af7Sopenharmony_ci        %183 = OpExtInst %7 %1 FAbs %160
282e5c31af7Sopenharmony_ci        %185 = OpCompositeExtract %6 %183 1
283e5c31af7Sopenharmony_ci        %187 = OpCompositeExtract %6 %183 0
284e5c31af7Sopenharmony_ci        %188 = OpFOrdGreaterThan %23 %185 %187
285e5c31af7Sopenharmony_ci               OpSelectionMerge %201 None
286e5c31af7Sopenharmony_ci               OpBranchConditional %188 %189 %195
287e5c31af7Sopenharmony_ci        %189 = OpLabel
288e5c31af7Sopenharmony_ci        %194 = OpFDiv %6 %187 %185
289e5c31af7Sopenharmony_ci               OpBranch %201
290e5c31af7Sopenharmony_ci        %195 = OpLabel
291e5c31af7Sopenharmony_ci        %200 = OpFDiv %6 %185 %187
292e5c31af7Sopenharmony_ci               OpBranch %201
293e5c31af7Sopenharmony_ci        %201 = OpLabel
294e5c31af7Sopenharmony_ci        %247 = OpPhi %6 %194 %189 %200 %195
295e5c31af7Sopenharmony_ci        %203 = OpFMul %6 %56 %247
296e5c31af7Sopenharmony_ci        %205 = OpFMul %6 %203 %247
297e5c31af7Sopenharmony_ci        %206 = OpFSub %6 %55 %205
298e5c31af7Sopenharmony_ci        %208 = OpFMul %6 %206 %247
299e5c31af7Sopenharmony_ci        %210 = OpFMul %6 %208 %19
300e5c31af7Sopenharmony_ci        %215 = OpFOrdLessThan %23 %185 %187
301e5c31af7Sopenharmony_ci               OpSelectionMerge %219 None
302e5c31af7Sopenharmony_ci               OpBranchConditional %215 %216 %219
303e5c31af7Sopenharmony_ci        %216 = OpLabel
304e5c31af7Sopenharmony_ci        %218 = OpFSub %6 %73 %210
305e5c31af7Sopenharmony_ci               OpBranch %219
306e5c31af7Sopenharmony_ci        %219 = OpLabel
307e5c31af7Sopenharmony_ci        %248 = OpPhi %6 %210 %201 %218 %216
308e5c31af7Sopenharmony_ci        %221 = OpCompositeExtract %6 %160 0
309e5c31af7Sopenharmony_ci        %222 = OpFOrdLessThan %23 %221 %27
310e5c31af7Sopenharmony_ci               OpSelectionMerge %226 None
311e5c31af7Sopenharmony_ci               OpBranchConditional %222 %223 %226
312e5c31af7Sopenharmony_ci        %223 = OpLabel
313e5c31af7Sopenharmony_ci        %225 = OpFSub %6 %81 %248
314e5c31af7Sopenharmony_ci               OpBranch %226
315e5c31af7Sopenharmony_ci        %226 = OpLabel
316e5c31af7Sopenharmony_ci        %249 = OpPhi %6 %248 %219 %225 %223
317e5c31af7Sopenharmony_ci        %228 = OpCompositeExtract %6 %160 1
318e5c31af7Sopenharmony_ci        %229 = OpFOrdLessThan %23 %228 %27
319e5c31af7Sopenharmony_ci               OpSelectionMerge %233 None
320e5c31af7Sopenharmony_ci               OpBranchConditional %229 %230 %233
321e5c31af7Sopenharmony_ci        %230 = OpLabel
322e5c31af7Sopenharmony_ci        %232 = OpFNegate %6 %249
323e5c31af7Sopenharmony_ci               OpBranch %233
324e5c31af7Sopenharmony_ci        %233 = OpLabel
325e5c31af7Sopenharmony_ci        %250 = OpPhi %6 %249 %226 %232 %230
326e5c31af7Sopenharmony_ci               OpBranch %235
327e5c31af7Sopenharmony_ci        %235 = OpLabel
328e5c31af7Sopenharmony_ci        %251 = OpPhi %6 %27 %180 %250 %233
329e5c31af7Sopenharmony_ci        %167 = OpCompositeConstruct %7 %162 %251
330e5c31af7Sopenharmony_ci        %125 = OpVectorTimesScalar %7 %167 %124
331e5c31af7Sopenharmony_ci        %126 = OpExtInst %7 %1 Floor %125
332e5c31af7Sopenharmony_ci        %128 = OpFMul %7 %126 %253
333e5c31af7Sopenharmony_ci        %135 = OpLoad %132 %134
334e5c31af7Sopenharmony_ci        %137 = OpImageSampleImplicitLod %113 %135 %128
335e5c31af7Sopenharmony_ci        %140 = OpCompositeExtract %6 %137 0
336e5c31af7Sopenharmony_ci        %141 = OpCompositeExtract %6 %137 1
337e5c31af7Sopenharmony_ci        %142 = OpCompositeExtract %6 %137 2
338e5c31af7Sopenharmony_ci               OpStore %527 %179
339e5c31af7Sopenharmony_ci        %528 = OpLoad %23 %527
340e5c31af7Sopenharmony_ci        %381 = OpULessThanEqual %23 %383 %380
341e5c31af7Sopenharmony_ci        %382 = OpSelect %379 %381 %383 %380
342e5c31af7Sopenharmony_ci        %385 = OpAccessChain %384 %115 %382
343e5c31af7Sopenharmony_ci        %143 = OpCompositeConstruct %113 %140 %141 %142 %81
344e5c31af7Sopenharmony_ci               OpStore %130 %143
345e5c31af7Sopenharmony_ci               OpReturn
346e5c31af7Sopenharmony_ci               OpFunctionEnd
347e5c31af7Sopenharmony_ciEND
348e5c31af7Sopenharmony_ci
349e5c31af7Sopenharmony_ci# uniforms for variant
350e5c31af7Sopenharmony_ci
351e5c31af7Sopenharmony_ci# tex
352e5c31af7Sopenharmony_ciSAMPLER variant_tex
353e5c31af7Sopenharmony_ci
354e5c31af7Sopenharmony_ci
355e5c31af7Sopenharmony_ciBUFFER variant_framebuffer FORMAT B8G8R8A8_UNORM
356e5c31af7Sopenharmony_ci
357e5c31af7Sopenharmony_ciPIPELINE graphics variant_pipeline
358e5c31af7Sopenharmony_ci  ATTACH variant_vertex_shader
359e5c31af7Sopenharmony_ci  ATTACH variant_fragment_shader
360e5c31af7Sopenharmony_ci  FRAMEBUFFER_SIZE 256 256
361e5c31af7Sopenharmony_ci  BIND BUFFER variant_framebuffer AS color LOCATION 0
362e5c31af7Sopenharmony_ci  BIND BUFFER default_texture AS combined_image_sampler SAMPLER variant_tex DESCRIPTOR_SET 0 BINDING 0
363e5c31af7Sopenharmony_ciEND
364e5c31af7Sopenharmony_ciCLEAR_COLOR variant_pipeline 0 0 0 255
365e5c31af7Sopenharmony_ci
366e5c31af7Sopenharmony_ciCLEAR variant_pipeline
367e5c31af7Sopenharmony_ciRUN variant_pipeline DRAW_RECT POS 0 0 SIZE 256 256
368e5c31af7Sopenharmony_ci
369e5c31af7Sopenharmony_ciEXPECT reference_framebuffer EQ_HISTOGRAM_EMD_BUFFER variant_framebuffer TOLERANCE 0.005
370