1e5c31af7Sopenharmony_ci# -------------------------------------------------
2e5c31af7Sopenharmony_ci# drawElements Quality Program OpenGL ES 3.2 Module
3e5c31af7Sopenharmony_ci# -------------------------------------------------
4e5c31af7Sopenharmony_ci#
5e5c31af7Sopenharmony_ci# Copyright 2016 The Android Open Source Project
6e5c31af7Sopenharmony_ci#
7e5c31af7Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
8e5c31af7Sopenharmony_ci# you may not use this file except in compliance with the License.
9e5c31af7Sopenharmony_ci# You may obtain a copy of the License at
10e5c31af7Sopenharmony_ci#
11e5c31af7Sopenharmony_ci#      http://www.apache.org/licenses/LICENSE-2.0
12e5c31af7Sopenharmony_ci#
13e5c31af7Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
14e5c31af7Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
15e5c31af7Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16e5c31af7Sopenharmony_ci# See the License for the specific language governing permissions and
17e5c31af7Sopenharmony_ci# limitations under the License.
18e5c31af7Sopenharmony_ci
19e5c31af7Sopenharmony_ci
20e5c31af7Sopenharmony_cigroup varying "Default block varying matching"
21e5c31af7Sopenharmony_ci
22e5c31af7Sopenharmony_ci	case missing_input
23e5c31af7Sopenharmony_ci		version 320 es
24e5c31af7Sopenharmony_ci		desc "Variable has no matching input"
25e5c31af7Sopenharmony_ci		expect validation_fail
26e5c31af7Sopenharmony_ci
27e5c31af7Sopenharmony_ci		pipeline_program
28e5c31af7Sopenharmony_ci			active_stages {vertex}
29e5c31af7Sopenharmony_ci			vertex ""
30e5c31af7Sopenharmony_ci				#version 320 es
31e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
32e5c31af7Sopenharmony_ci				out mediump float v_val;
33e5c31af7Sopenharmony_ci				out mediump float v_val_no_such_input;
34e5c31af7Sopenharmony_ci				void main()
35e5c31af7Sopenharmony_ci				{
36e5c31af7Sopenharmony_ci					v_val = float(gl_VertexID);
37e5c31af7Sopenharmony_ci					v_val_no_such_input = 1.0;
38e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
39e5c31af7Sopenharmony_ci				}
40e5c31af7Sopenharmony_ci			""
41e5c31af7Sopenharmony_ci		end
42e5c31af7Sopenharmony_ci		pipeline_program
43e5c31af7Sopenharmony_ci			active_stages {fragment}
44e5c31af7Sopenharmony_ci			fragment ""
45e5c31af7Sopenharmony_ci				#version 320 es
46e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
47e5c31af7Sopenharmony_ci				in mediump float v_val;
48e5c31af7Sopenharmony_ci				void main()
49e5c31af7Sopenharmony_ci				{
50e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val);
51e5c31af7Sopenharmony_ci				}
52e5c31af7Sopenharmony_ci			""
53e5c31af7Sopenharmony_ci		end
54e5c31af7Sopenharmony_ci	end
55e5c31af7Sopenharmony_ci
56e5c31af7Sopenharmony_ci	case missing_output
57e5c31af7Sopenharmony_ci		version 320 es
58e5c31af7Sopenharmony_ci		desc "Variable has no matching output"
59e5c31af7Sopenharmony_ci		expect validation_fail
60e5c31af7Sopenharmony_ci
61e5c31af7Sopenharmony_ci		pipeline_program
62e5c31af7Sopenharmony_ci			active_stages {vertex}
63e5c31af7Sopenharmony_ci			vertex ""
64e5c31af7Sopenharmony_ci				#version 320 es
65e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
66e5c31af7Sopenharmony_ci				out mediump float v_val;
67e5c31af7Sopenharmony_ci				void main()
68e5c31af7Sopenharmony_ci				{
69e5c31af7Sopenharmony_ci					v_val = float(gl_VertexID);
70e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
71e5c31af7Sopenharmony_ci				}
72e5c31af7Sopenharmony_ci			""
73e5c31af7Sopenharmony_ci		end
74e5c31af7Sopenharmony_ci		pipeline_program
75e5c31af7Sopenharmony_ci			active_stages {fragment}
76e5c31af7Sopenharmony_ci			fragment ""
77e5c31af7Sopenharmony_ci				#version 320 es
78e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
79e5c31af7Sopenharmony_ci				in mediump float v_val;
80e5c31af7Sopenharmony_ci				in mediump float v_val_no_such_output;
81e5c31af7Sopenharmony_ci				void main()
82e5c31af7Sopenharmony_ci				{
83e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val + v_val_no_such_output);
84e5c31af7Sopenharmony_ci				}
85e5c31af7Sopenharmony_ci			""
86e5c31af7Sopenharmony_ci		end
87e5c31af7Sopenharmony_ci	end
88e5c31af7Sopenharmony_ci
89e5c31af7Sopenharmony_ci	case mismatch_type
90e5c31af7Sopenharmony_ci		version 320 es
91e5c31af7Sopenharmony_ci		desc "Variable type mismatch"
92e5c31af7Sopenharmony_ci		expect validation_fail
93e5c31af7Sopenharmony_ci
94e5c31af7Sopenharmony_ci		pipeline_program
95e5c31af7Sopenharmony_ci			active_stages {vertex}
96e5c31af7Sopenharmony_ci			vertex ""
97e5c31af7Sopenharmony_ci				#version 320 es
98e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
99e5c31af7Sopenharmony_ci				out mediump vec3 v_val;
100e5c31af7Sopenharmony_ci				void main()
101e5c31af7Sopenharmony_ci				{
102e5c31af7Sopenharmony_ci					v_val = vec3(float(gl_VertexID));
103e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
104e5c31af7Sopenharmony_ci				}
105e5c31af7Sopenharmony_ci			""
106e5c31af7Sopenharmony_ci		end
107e5c31af7Sopenharmony_ci		pipeline_program
108e5c31af7Sopenharmony_ci			active_stages {fragment}
109e5c31af7Sopenharmony_ci			fragment ""
110e5c31af7Sopenharmony_ci				#version 320 es
111e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
112e5c31af7Sopenharmony_ci				in mediump vec4 v_val;
113e5c31af7Sopenharmony_ci				void main()
114e5c31af7Sopenharmony_ci				{
115e5c31af7Sopenharmony_ci					${FRAG_COLOR} = v_val;
116e5c31af7Sopenharmony_ci				}
117e5c31af7Sopenharmony_ci			""
118e5c31af7Sopenharmony_ci		end
119e5c31af7Sopenharmony_ci	end
120e5c31af7Sopenharmony_ci
121e5c31af7Sopenharmony_ci	case mismatch_precision
122e5c31af7Sopenharmony_ci		version 320 es
123e5c31af7Sopenharmony_ci		desc "Variable precision mismatch"
124e5c31af7Sopenharmony_ci		expect validation_fail
125e5c31af7Sopenharmony_ci
126e5c31af7Sopenharmony_ci		pipeline_program
127e5c31af7Sopenharmony_ci			active_stages {vertex}
128e5c31af7Sopenharmony_ci			vertex ""
129e5c31af7Sopenharmony_ci				#version 320 es
130e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
131e5c31af7Sopenharmony_ci				out mediump float v_val;
132e5c31af7Sopenharmony_ci				void main()
133e5c31af7Sopenharmony_ci				{
134e5c31af7Sopenharmony_ci					v_val = float(gl_VertexID);
135e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
136e5c31af7Sopenharmony_ci				}
137e5c31af7Sopenharmony_ci			""
138e5c31af7Sopenharmony_ci		end
139e5c31af7Sopenharmony_ci		pipeline_program
140e5c31af7Sopenharmony_ci			active_stages {fragment}
141e5c31af7Sopenharmony_ci			fragment ""
142e5c31af7Sopenharmony_ci				#version 320 es
143e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
144e5c31af7Sopenharmony_ci				in highp float v_val;
145e5c31af7Sopenharmony_ci				void main()
146e5c31af7Sopenharmony_ci				{
147e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val);
148e5c31af7Sopenharmony_ci				}
149e5c31af7Sopenharmony_ci			""
150e5c31af7Sopenharmony_ci		end
151e5c31af7Sopenharmony_ci	end
152e5c31af7Sopenharmony_ci
153e5c31af7Sopenharmony_ci	case mismatch_explicit_location_type
154e5c31af7Sopenharmony_ci		version 320 es
155e5c31af7Sopenharmony_ci		desc "Variable type mismatch, explicit varying locations"
156e5c31af7Sopenharmony_ci		expect validation_fail
157e5c31af7Sopenharmony_ci
158e5c31af7Sopenharmony_ci		pipeline_program
159e5c31af7Sopenharmony_ci			active_stages {vertex}
160e5c31af7Sopenharmony_ci			vertex ""
161e5c31af7Sopenharmony_ci				#version 320 es
162e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
163e5c31af7Sopenharmony_ci				layout(location = 3) out mediump vec4 v_val;
164e5c31af7Sopenharmony_ci				void main()
165e5c31af7Sopenharmony_ci				{
166e5c31af7Sopenharmony_ci					v_val = vec4(float(gl_VertexID));
167e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
168e5c31af7Sopenharmony_ci				}
169e5c31af7Sopenharmony_ci			""
170e5c31af7Sopenharmony_ci		end
171e5c31af7Sopenharmony_ci		pipeline_program
172e5c31af7Sopenharmony_ci			active_stages {fragment}
173e5c31af7Sopenharmony_ci			fragment ""
174e5c31af7Sopenharmony_ci				#version 320 es
175e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
176e5c31af7Sopenharmony_ci				layout(location = 3) in mediump vec2 v_val;
177e5c31af7Sopenharmony_ci				void main()
178e5c31af7Sopenharmony_ci				{
179e5c31af7Sopenharmony_ci					${FRAG_COLOR} = v_val.xxyy;
180e5c31af7Sopenharmony_ci				}
181e5c31af7Sopenharmony_ci			""
182e5c31af7Sopenharmony_ci		end
183e5c31af7Sopenharmony_ci	end
184e5c31af7Sopenharmony_ci
185e5c31af7Sopenharmony_ci	case mismatch_explicit_location_precision
186e5c31af7Sopenharmony_ci		version 320 es
187e5c31af7Sopenharmony_ci		desc "Variable precision mismatch, explicit varying locations"
188e5c31af7Sopenharmony_ci		expect validation_fail
189e5c31af7Sopenharmony_ci
190e5c31af7Sopenharmony_ci		pipeline_program
191e5c31af7Sopenharmony_ci			active_stages {vertex}
192e5c31af7Sopenharmony_ci			vertex ""
193e5c31af7Sopenharmony_ci				#version 320 es
194e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
195e5c31af7Sopenharmony_ci				layout(location = 3) out mediump float v_val;
196e5c31af7Sopenharmony_ci				void main()
197e5c31af7Sopenharmony_ci				{
198e5c31af7Sopenharmony_ci					v_val = float(gl_VertexID);
199e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
200e5c31af7Sopenharmony_ci				}
201e5c31af7Sopenharmony_ci			""
202e5c31af7Sopenharmony_ci		end
203e5c31af7Sopenharmony_ci		pipeline_program
204e5c31af7Sopenharmony_ci			active_stages {fragment}
205e5c31af7Sopenharmony_ci			fragment ""
206e5c31af7Sopenharmony_ci				#version 320 es
207e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
208e5c31af7Sopenharmony_ci				layout(location = 3) in highp float v_val;
209e5c31af7Sopenharmony_ci				void main()
210e5c31af7Sopenharmony_ci				{
211e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val);
212e5c31af7Sopenharmony_ci				}
213e5c31af7Sopenharmony_ci			""
214e5c31af7Sopenharmony_ci		end
215e5c31af7Sopenharmony_ci	end
216e5c31af7Sopenharmony_ci
217e5c31af7Sopenharmony_ci	case mismatch_explicit_location
218e5c31af7Sopenharmony_ci		version 320 es
219e5c31af7Sopenharmony_ci		desc "Variable location mismatch"
220e5c31af7Sopenharmony_ci		expect validation_fail
221e5c31af7Sopenharmony_ci
222e5c31af7Sopenharmony_ci		pipeline_program
223e5c31af7Sopenharmony_ci			active_stages {vertex}
224e5c31af7Sopenharmony_ci			vertex ""
225e5c31af7Sopenharmony_ci				#version 320 es
226e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
227e5c31af7Sopenharmony_ci				layout(location = 3) out mediump float v_val;
228e5c31af7Sopenharmony_ci				void main()
229e5c31af7Sopenharmony_ci				{
230e5c31af7Sopenharmony_ci					v_val = float(gl_VertexID);
231e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
232e5c31af7Sopenharmony_ci				}
233e5c31af7Sopenharmony_ci			""
234e5c31af7Sopenharmony_ci		end
235e5c31af7Sopenharmony_ci		pipeline_program
236e5c31af7Sopenharmony_ci			active_stages {fragment}
237e5c31af7Sopenharmony_ci			fragment ""
238e5c31af7Sopenharmony_ci				#version 320 es
239e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
240e5c31af7Sopenharmony_ci				layout(location = 4) in mediump float v_val;
241e5c31af7Sopenharmony_ci				void main()
242e5c31af7Sopenharmony_ci				{
243e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val);
244e5c31af7Sopenharmony_ci				}
245e5c31af7Sopenharmony_ci			""
246e5c31af7Sopenharmony_ci		end
247e5c31af7Sopenharmony_ci	end
248e5c31af7Sopenharmony_ci
249e5c31af7Sopenharmony_ci	case mismatch_implicit_explicit_location_1
250e5c31af7Sopenharmony_ci		version 320 es
251e5c31af7Sopenharmony_ci		desc "Variable location mismatch"
252e5c31af7Sopenharmony_ci		expect validation_fail
253e5c31af7Sopenharmony_ci
254e5c31af7Sopenharmony_ci		pipeline_program
255e5c31af7Sopenharmony_ci			active_stages {vertex}
256e5c31af7Sopenharmony_ci			vertex ""
257e5c31af7Sopenharmony_ci				#version 320 es
258e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
259e5c31af7Sopenharmony_ci				out mediump float v_val;
260e5c31af7Sopenharmony_ci				void main()
261e5c31af7Sopenharmony_ci				{
262e5c31af7Sopenharmony_ci					v_val = float(gl_VertexID);
263e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
264e5c31af7Sopenharmony_ci				}
265e5c31af7Sopenharmony_ci			""
266e5c31af7Sopenharmony_ci		end
267e5c31af7Sopenharmony_ci		pipeline_program
268e5c31af7Sopenharmony_ci			active_stages {fragment}
269e5c31af7Sopenharmony_ci			fragment ""
270e5c31af7Sopenharmony_ci				#version 320 es
271e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
272e5c31af7Sopenharmony_ci				layout(location = 3) in mediump float v_val;
273e5c31af7Sopenharmony_ci				void main()
274e5c31af7Sopenharmony_ci				{
275e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val);
276e5c31af7Sopenharmony_ci				}
277e5c31af7Sopenharmony_ci			""
278e5c31af7Sopenharmony_ci		end
279e5c31af7Sopenharmony_ci	end
280e5c31af7Sopenharmony_ci
281e5c31af7Sopenharmony_ci	case mismatch_implicit_explicit_location_2
282e5c31af7Sopenharmony_ci		version 320 es
283e5c31af7Sopenharmony_ci		desc "Variable location mismatch"
284e5c31af7Sopenharmony_ci		expect validation_fail
285e5c31af7Sopenharmony_ci
286e5c31af7Sopenharmony_ci		pipeline_program
287e5c31af7Sopenharmony_ci			active_stages {vertex}
288e5c31af7Sopenharmony_ci			vertex ""
289e5c31af7Sopenharmony_ci				#version 320 es
290e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
291e5c31af7Sopenharmony_ci				layout(location = 3) out mediump float v_val;
292e5c31af7Sopenharmony_ci				void main()
293e5c31af7Sopenharmony_ci				{
294e5c31af7Sopenharmony_ci					v_val = float(gl_VertexID);
295e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
296e5c31af7Sopenharmony_ci				}
297e5c31af7Sopenharmony_ci			""
298e5c31af7Sopenharmony_ci		end
299e5c31af7Sopenharmony_ci		pipeline_program
300e5c31af7Sopenharmony_ci			active_stages {fragment}
301e5c31af7Sopenharmony_ci			fragment ""
302e5c31af7Sopenharmony_ci				#version 320 es
303e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
304e5c31af7Sopenharmony_ci				in mediump float v_val;
305e5c31af7Sopenharmony_ci				layout(location = 3) in mediump float v_val_other_name;
306e5c31af7Sopenharmony_ci				void main()
307e5c31af7Sopenharmony_ci				{
308e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val + v_val_other_name);
309e5c31af7Sopenharmony_ci				}
310e5c31af7Sopenharmony_ci			""
311e5c31af7Sopenharmony_ci		end
312e5c31af7Sopenharmony_ci	end
313e5c31af7Sopenharmony_ci
314e5c31af7Sopenharmony_ci	case mismatch_implicit_explicit_location_3
315e5c31af7Sopenharmony_ci		version 320 es
316e5c31af7Sopenharmony_ci		desc "Variable location mismatch"
317e5c31af7Sopenharmony_ci		expect validation_fail
318e5c31af7Sopenharmony_ci
319e5c31af7Sopenharmony_ci		pipeline_program
320e5c31af7Sopenharmony_ci			active_stages {vertex}
321e5c31af7Sopenharmony_ci			vertex ""
322e5c31af7Sopenharmony_ci				#version 320 es
323e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
324e5c31af7Sopenharmony_ci				out mediump float v_val;
325e5c31af7Sopenharmony_ci				layout(location = 3) out mediump float v_val_other_name;
326e5c31af7Sopenharmony_ci				void main()
327e5c31af7Sopenharmony_ci				{
328e5c31af7Sopenharmony_ci					v_val = float(gl_VertexID);
329e5c31af7Sopenharmony_ci					v_val_other_name = 1.0;
330e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
331e5c31af7Sopenharmony_ci				}
332e5c31af7Sopenharmony_ci			""
333e5c31af7Sopenharmony_ci		end
334e5c31af7Sopenharmony_ci		pipeline_program
335e5c31af7Sopenharmony_ci			active_stages {fragment}
336e5c31af7Sopenharmony_ci			fragment ""
337e5c31af7Sopenharmony_ci				#version 320 es
338e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
339e5c31af7Sopenharmony_ci				layout(location = 3) in mediump float v_val;
340e5c31af7Sopenharmony_ci				void main()
341e5c31af7Sopenharmony_ci				{
342e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val);
343e5c31af7Sopenharmony_ci				}
344e5c31af7Sopenharmony_ci			""
345e5c31af7Sopenharmony_ci		end
346e5c31af7Sopenharmony_ci	end
347e5c31af7Sopenharmony_ci
348e5c31af7Sopenharmony_ci	case match_different_struct_names
349e5c31af7Sopenharmony_ci		version 320 es
350e5c31af7Sopenharmony_ci		desc "Variable struct names different but otherwise identical"
351e5c31af7Sopenharmony_ci		expect validation_fail
352e5c31af7Sopenharmony_ci
353e5c31af7Sopenharmony_ci		pipeline_program
354e5c31af7Sopenharmony_ci			active_stages {vertex}
355e5c31af7Sopenharmony_ci			vertex ""
356e5c31af7Sopenharmony_ci				#version 320 es
357e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
358e5c31af7Sopenharmony_ci				struct StructureNameA
359e5c31af7Sopenharmony_ci				{
360e5c31af7Sopenharmony_ci					mediump float member;
361e5c31af7Sopenharmony_ci				};
362e5c31af7Sopenharmony_ci				out StructureNameA v_val;
363e5c31af7Sopenharmony_ci				void main()
364e5c31af7Sopenharmony_ci				{
365e5c31af7Sopenharmony_ci					v_val.member = float(gl_VertexID);
366e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
367e5c31af7Sopenharmony_ci				}
368e5c31af7Sopenharmony_ci			""
369e5c31af7Sopenharmony_ci		end
370e5c31af7Sopenharmony_ci		pipeline_program
371e5c31af7Sopenharmony_ci			active_stages {fragment}
372e5c31af7Sopenharmony_ci			fragment ""
373e5c31af7Sopenharmony_ci				#version 320 es
374e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
375e5c31af7Sopenharmony_ci				struct StructureNameB
376e5c31af7Sopenharmony_ci				{
377e5c31af7Sopenharmony_ci					mediump float member;
378e5c31af7Sopenharmony_ci				};
379e5c31af7Sopenharmony_ci				in StructureNameB v_val;
380e5c31af7Sopenharmony_ci				void main()
381e5c31af7Sopenharmony_ci				{
382e5c31af7Sopenharmony_ci					// should always produce white
383e5c31af7Sopenharmony_ci					${FRAG_COLOR} = (v_val.member > -1.0) ? (vec4(1.0)) : (vec4(0.0));
384e5c31af7Sopenharmony_ci				}
385e5c31af7Sopenharmony_ci			""
386e5c31af7Sopenharmony_ci		end
387e5c31af7Sopenharmony_ci	end
388e5c31af7Sopenharmony_ci
389e5c31af7Sopenharmony_ci	case mismatch_struct_member_name
390e5c31af7Sopenharmony_ci		version 320 es
391e5c31af7Sopenharmony_ci		desc "Struct member name mismatch"
392e5c31af7Sopenharmony_ci		expect validation_fail
393e5c31af7Sopenharmony_ci
394e5c31af7Sopenharmony_ci		pipeline_program
395e5c31af7Sopenharmony_ci			active_stages {vertex}
396e5c31af7Sopenharmony_ci			vertex ""
397e5c31af7Sopenharmony_ci				#version 320 es
398e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
399e5c31af7Sopenharmony_ci				struct StructureName
400e5c31af7Sopenharmony_ci				{
401e5c31af7Sopenharmony_ci					mediump float member;
402e5c31af7Sopenharmony_ci				};
403e5c31af7Sopenharmony_ci				out StructureName v_val;
404e5c31af7Sopenharmony_ci				void main()
405e5c31af7Sopenharmony_ci				{
406e5c31af7Sopenharmony_ci					v_val.member = float(gl_VertexID);
407e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
408e5c31af7Sopenharmony_ci				}
409e5c31af7Sopenharmony_ci			""
410e5c31af7Sopenharmony_ci		end
411e5c31af7Sopenharmony_ci		pipeline_program
412e5c31af7Sopenharmony_ci			active_stages {fragment}
413e5c31af7Sopenharmony_ci			fragment ""
414e5c31af7Sopenharmony_ci				#version 320 es
415e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
416e5c31af7Sopenharmony_ci				struct StructureName
417e5c31af7Sopenharmony_ci				{
418e5c31af7Sopenharmony_ci					mediump float member_different_name;
419e5c31af7Sopenharmony_ci				};
420e5c31af7Sopenharmony_ci				in StructureName v_val;
421e5c31af7Sopenharmony_ci				void main()
422e5c31af7Sopenharmony_ci				{
423e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val.member_different_name);
424e5c31af7Sopenharmony_ci				}
425e5c31af7Sopenharmony_ci			""
426e5c31af7Sopenharmony_ci		end
427e5c31af7Sopenharmony_ci	end
428e5c31af7Sopenharmony_ci
429e5c31af7Sopenharmony_ci	case mismatch_struct_member_type
430e5c31af7Sopenharmony_ci		version 320 es
431e5c31af7Sopenharmony_ci		desc "Struct member type mismatch"
432e5c31af7Sopenharmony_ci		expect validation_fail
433e5c31af7Sopenharmony_ci
434e5c31af7Sopenharmony_ci		pipeline_program
435e5c31af7Sopenharmony_ci			active_stages {vertex}
436e5c31af7Sopenharmony_ci			vertex ""
437e5c31af7Sopenharmony_ci				#version 320 es
438e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
439e5c31af7Sopenharmony_ci				struct StructureName
440e5c31af7Sopenharmony_ci				{
441e5c31af7Sopenharmony_ci					mediump float member;
442e5c31af7Sopenharmony_ci				};
443e5c31af7Sopenharmony_ci				out StructureName v_val;
444e5c31af7Sopenharmony_ci				void main()
445e5c31af7Sopenharmony_ci				{
446e5c31af7Sopenharmony_ci					v_val.member = float(gl_VertexID);
447e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
448e5c31af7Sopenharmony_ci				}
449e5c31af7Sopenharmony_ci			""
450e5c31af7Sopenharmony_ci		end
451e5c31af7Sopenharmony_ci		pipeline_program
452e5c31af7Sopenharmony_ci			active_stages {fragment}
453e5c31af7Sopenharmony_ci			fragment ""
454e5c31af7Sopenharmony_ci				#version 320 es
455e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
456e5c31af7Sopenharmony_ci				struct StructureName
457e5c31af7Sopenharmony_ci				{
458e5c31af7Sopenharmony_ci					mediump vec2 member;
459e5c31af7Sopenharmony_ci				};
460e5c31af7Sopenharmony_ci				in StructureName v_val;
461e5c31af7Sopenharmony_ci				void main()
462e5c31af7Sopenharmony_ci				{
463e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val.member.x);
464e5c31af7Sopenharmony_ci				}
465e5c31af7Sopenharmony_ci			""
466e5c31af7Sopenharmony_ci		end
467e5c31af7Sopenharmony_ci	end
468e5c31af7Sopenharmony_ci
469e5c31af7Sopenharmony_ci	case mismatch_struct_member_precision
470e5c31af7Sopenharmony_ci		version 320 es
471e5c31af7Sopenharmony_ci		desc "Struct member precision mismatch"
472e5c31af7Sopenharmony_ci		expect validation_fail
473e5c31af7Sopenharmony_ci
474e5c31af7Sopenharmony_ci		pipeline_program
475e5c31af7Sopenharmony_ci			active_stages {vertex}
476e5c31af7Sopenharmony_ci			vertex ""
477e5c31af7Sopenharmony_ci				#version 320 es
478e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
479e5c31af7Sopenharmony_ci				struct StructureName
480e5c31af7Sopenharmony_ci				{
481e5c31af7Sopenharmony_ci					mediump float member;
482e5c31af7Sopenharmony_ci				};
483e5c31af7Sopenharmony_ci				out StructureName v_val;
484e5c31af7Sopenharmony_ci				void main()
485e5c31af7Sopenharmony_ci				{
486e5c31af7Sopenharmony_ci					v_val.member = float(gl_VertexID);
487e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
488e5c31af7Sopenharmony_ci				}
489e5c31af7Sopenharmony_ci			""
490e5c31af7Sopenharmony_ci		end
491e5c31af7Sopenharmony_ci		pipeline_program
492e5c31af7Sopenharmony_ci			active_stages {fragment}
493e5c31af7Sopenharmony_ci			fragment ""
494e5c31af7Sopenharmony_ci				#version 320 es
495e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
496e5c31af7Sopenharmony_ci				struct StructureName
497e5c31af7Sopenharmony_ci				{
498e5c31af7Sopenharmony_ci					highp float member;
499e5c31af7Sopenharmony_ci				};
500e5c31af7Sopenharmony_ci				in StructureName v_val;
501e5c31af7Sopenharmony_ci				void main()
502e5c31af7Sopenharmony_ci				{
503e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val.member);
504e5c31af7Sopenharmony_ci				}
505e5c31af7Sopenharmony_ci			""
506e5c31af7Sopenharmony_ci		end
507e5c31af7Sopenharmony_ci	end
508e5c31af7Sopenharmony_ci
509e5c31af7Sopenharmony_ci	case mismatch_struct_member_order
510e5c31af7Sopenharmony_ci		version 320 es
511e5c31af7Sopenharmony_ci		desc "Struct member order mismatch"
512e5c31af7Sopenharmony_ci		expect validation_fail
513e5c31af7Sopenharmony_ci
514e5c31af7Sopenharmony_ci		pipeline_program
515e5c31af7Sopenharmony_ci			active_stages {vertex}
516e5c31af7Sopenharmony_ci			vertex ""
517e5c31af7Sopenharmony_ci				#version 320 es
518e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
519e5c31af7Sopenharmony_ci				struct StructureName
520e5c31af7Sopenharmony_ci				{
521e5c31af7Sopenharmony_ci					mediump float memberA;
522e5c31af7Sopenharmony_ci					mediump float memberB;
523e5c31af7Sopenharmony_ci				};
524e5c31af7Sopenharmony_ci				out StructureName v_val;
525e5c31af7Sopenharmony_ci				void main()
526e5c31af7Sopenharmony_ci				{
527e5c31af7Sopenharmony_ci					v_val.memberA = float(gl_VertexID);
528e5c31af7Sopenharmony_ci					v_val.memberB = 1.0;
529e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
530e5c31af7Sopenharmony_ci				}
531e5c31af7Sopenharmony_ci			""
532e5c31af7Sopenharmony_ci		end
533e5c31af7Sopenharmony_ci		pipeline_program
534e5c31af7Sopenharmony_ci			active_stages {fragment}
535e5c31af7Sopenharmony_ci			fragment ""
536e5c31af7Sopenharmony_ci				#version 320 es
537e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
538e5c31af7Sopenharmony_ci				struct StructureName
539e5c31af7Sopenharmony_ci				{
540e5c31af7Sopenharmony_ci					mediump float memberB;
541e5c31af7Sopenharmony_ci					mediump float memberA;
542e5c31af7Sopenharmony_ci				};
543e5c31af7Sopenharmony_ci				in StructureName v_val;
544e5c31af7Sopenharmony_ci				void main()
545e5c31af7Sopenharmony_ci				{
546e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val.memberA + v_val.memberB);
547e5c31af7Sopenharmony_ci				}
548e5c31af7Sopenharmony_ci			""
549e5c31af7Sopenharmony_ci		end
550e5c31af7Sopenharmony_ci	end
551e5c31af7Sopenharmony_ci
552e5c31af7Sopenharmony_ci	case mismatch_array_element_type
553e5c31af7Sopenharmony_ci		version 320 es
554e5c31af7Sopenharmony_ci		desc "Array element type mismatch"
555e5c31af7Sopenharmony_ci		expect validation_fail
556e5c31af7Sopenharmony_ci
557e5c31af7Sopenharmony_ci		pipeline_program
558e5c31af7Sopenharmony_ci			active_stages {vertex}
559e5c31af7Sopenharmony_ci			vertex ""
560e5c31af7Sopenharmony_ci				#version 320 es
561e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
562e5c31af7Sopenharmony_ci				out mediump float v_val[2];
563e5c31af7Sopenharmony_ci				void main()
564e5c31af7Sopenharmony_ci				{
565e5c31af7Sopenharmony_ci					v_val[0] = 1.0;
566e5c31af7Sopenharmony_ci					v_val[1] = 2.0;
567e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
568e5c31af7Sopenharmony_ci				}
569e5c31af7Sopenharmony_ci			""
570e5c31af7Sopenharmony_ci		end
571e5c31af7Sopenharmony_ci		pipeline_program
572e5c31af7Sopenharmony_ci			active_stages {fragment}
573e5c31af7Sopenharmony_ci			fragment ""
574e5c31af7Sopenharmony_ci				#version 320 es
575e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
576e5c31af7Sopenharmony_ci				in mediump vec2 v_val[2];
577e5c31af7Sopenharmony_ci				void main()
578e5c31af7Sopenharmony_ci				{
579e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val[0].x + v_val[1].y);
580e5c31af7Sopenharmony_ci				}
581e5c31af7Sopenharmony_ci			""
582e5c31af7Sopenharmony_ci		end
583e5c31af7Sopenharmony_ci	end
584e5c31af7Sopenharmony_ci
585e5c31af7Sopenharmony_ci	case mismatch_array_length
586e5c31af7Sopenharmony_ci		version 320 es
587e5c31af7Sopenharmony_ci		desc "Array length mismatch"
588e5c31af7Sopenharmony_ci		expect validation_fail
589e5c31af7Sopenharmony_ci
590e5c31af7Sopenharmony_ci		pipeline_program
591e5c31af7Sopenharmony_ci			active_stages {vertex}
592e5c31af7Sopenharmony_ci			vertex ""
593e5c31af7Sopenharmony_ci				#version 320 es
594e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
595e5c31af7Sopenharmony_ci				out mediump float v_val[2];
596e5c31af7Sopenharmony_ci				void main()
597e5c31af7Sopenharmony_ci				{
598e5c31af7Sopenharmony_ci					v_val[0] = 1.0;
599e5c31af7Sopenharmony_ci					v_val[1] = 2.0;
600e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
601e5c31af7Sopenharmony_ci				}
602e5c31af7Sopenharmony_ci			""
603e5c31af7Sopenharmony_ci		end
604e5c31af7Sopenharmony_ci		pipeline_program
605e5c31af7Sopenharmony_ci			active_stages {fragment}
606e5c31af7Sopenharmony_ci			fragment ""
607e5c31af7Sopenharmony_ci				#version 320 es
608e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
609e5c31af7Sopenharmony_ci				in mediump float v_val[3];
610e5c31af7Sopenharmony_ci				void main()
611e5c31af7Sopenharmony_ci				{
612e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val[0] + v_val[1] + v_val[2]);
613e5c31af7Sopenharmony_ci				}
614e5c31af7Sopenharmony_ci			""
615e5c31af7Sopenharmony_ci		end
616e5c31af7Sopenharmony_ci	end
617e5c31af7Sopenharmony_ci
618e5c31af7Sopenharmony_ci	case mismatch_array_precision
619e5c31af7Sopenharmony_ci		version 320 es
620e5c31af7Sopenharmony_ci		desc "Array length mismatch"
621e5c31af7Sopenharmony_ci		expect validation_fail
622e5c31af7Sopenharmony_ci
623e5c31af7Sopenharmony_ci		pipeline_program
624e5c31af7Sopenharmony_ci			active_stages {vertex}
625e5c31af7Sopenharmony_ci			vertex ""
626e5c31af7Sopenharmony_ci				#version 320 es
627e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
628e5c31af7Sopenharmony_ci				out mediump float v_val[2];
629e5c31af7Sopenharmony_ci				void main()
630e5c31af7Sopenharmony_ci				{
631e5c31af7Sopenharmony_ci					v_val[0] = 1.0;
632e5c31af7Sopenharmony_ci					v_val[1] = 2.0;
633e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
634e5c31af7Sopenharmony_ci				}
635e5c31af7Sopenharmony_ci			""
636e5c31af7Sopenharmony_ci		end
637e5c31af7Sopenharmony_ci		pipeline_program
638e5c31af7Sopenharmony_ci			active_stages {fragment}
639e5c31af7Sopenharmony_ci			fragment ""
640e5c31af7Sopenharmony_ci				#version 320 es
641e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
642e5c31af7Sopenharmony_ci				in highp float v_val[2];
643e5c31af7Sopenharmony_ci				void main()
644e5c31af7Sopenharmony_ci				{
645e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val[0] + v_val[1]);
646e5c31af7Sopenharmony_ci				}
647e5c31af7Sopenharmony_ci			""
648e5c31af7Sopenharmony_ci		end
649e5c31af7Sopenharmony_ci	end
650e5c31af7Sopenharmony_ci
651e5c31af7Sopenharmony_ci	case mismatch_qualifier_vertex_flat_fragment_none
652e5c31af7Sopenharmony_ci		version 320 es
653e5c31af7Sopenharmony_ci		desc "Interpolation qualifier mismatch"
654e5c31af7Sopenharmony_ci		expect validation_fail
655e5c31af7Sopenharmony_ci
656e5c31af7Sopenharmony_ci		pipeline_program
657e5c31af7Sopenharmony_ci			active_stages {vertex}
658e5c31af7Sopenharmony_ci			vertex ""
659e5c31af7Sopenharmony_ci				#version 320 es
660e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
661e5c31af7Sopenharmony_ci				out flat highp vec4 v_val;
662e5c31af7Sopenharmony_ci				void main()
663e5c31af7Sopenharmony_ci				{
664e5c31af7Sopenharmony_ci					v_val = vec4(float(gl_VertexID));
665e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
666e5c31af7Sopenharmony_ci				}
667e5c31af7Sopenharmony_ci			""
668e5c31af7Sopenharmony_ci		end
669e5c31af7Sopenharmony_ci		pipeline_program
670e5c31af7Sopenharmony_ci			active_stages {fragment}
671e5c31af7Sopenharmony_ci			fragment ""
672e5c31af7Sopenharmony_ci				#version 320 es
673e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
674e5c31af7Sopenharmony_ci				in highp vec4 v_val;
675e5c31af7Sopenharmony_ci				void main()
676e5c31af7Sopenharmony_ci				{
677e5c31af7Sopenharmony_ci					${FRAG_COLOR} = v_val;
678e5c31af7Sopenharmony_ci				}
679e5c31af7Sopenharmony_ci			""
680e5c31af7Sopenharmony_ci		end
681e5c31af7Sopenharmony_ci	end
682e5c31af7Sopenharmony_ci
683e5c31af7Sopenharmony_ci	case mismatch_qualifier_vertex_flat_fragment_smooth
684e5c31af7Sopenharmony_ci		version 320 es
685e5c31af7Sopenharmony_ci		desc "Interpolation qualifier mismatch"
686e5c31af7Sopenharmony_ci		expect validation_fail
687e5c31af7Sopenharmony_ci
688e5c31af7Sopenharmony_ci		pipeline_program
689e5c31af7Sopenharmony_ci			active_stages {vertex}
690e5c31af7Sopenharmony_ci			vertex ""
691e5c31af7Sopenharmony_ci				#version 320 es
692e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
693e5c31af7Sopenharmony_ci				out flat highp vec4 v_val;
694e5c31af7Sopenharmony_ci				void main()
695e5c31af7Sopenharmony_ci				{
696e5c31af7Sopenharmony_ci					v_val = vec4(float(gl_VertexID));
697e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
698e5c31af7Sopenharmony_ci				}
699e5c31af7Sopenharmony_ci			""
700e5c31af7Sopenharmony_ci		end
701e5c31af7Sopenharmony_ci		pipeline_program
702e5c31af7Sopenharmony_ci			active_stages {fragment}
703e5c31af7Sopenharmony_ci			fragment ""
704e5c31af7Sopenharmony_ci				#version 320 es
705e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
706e5c31af7Sopenharmony_ci				in smooth highp vec4 v_val;
707e5c31af7Sopenharmony_ci				void main()
708e5c31af7Sopenharmony_ci				{
709e5c31af7Sopenharmony_ci					${FRAG_COLOR} = v_val;
710e5c31af7Sopenharmony_ci				}
711e5c31af7Sopenharmony_ci			""
712e5c31af7Sopenharmony_ci		end
713e5c31af7Sopenharmony_ci	end
714e5c31af7Sopenharmony_ci
715e5c31af7Sopenharmony_ci	case mismatch_qualifier_vertex_flat_fragment_centroid
716e5c31af7Sopenharmony_ci		version 320 es
717e5c31af7Sopenharmony_ci		desc "Interpolation qualifier mismatch"
718e5c31af7Sopenharmony_ci		expect validation_fail
719e5c31af7Sopenharmony_ci
720e5c31af7Sopenharmony_ci		pipeline_program
721e5c31af7Sopenharmony_ci			active_stages {vertex}
722e5c31af7Sopenharmony_ci			vertex ""
723e5c31af7Sopenharmony_ci				#version 320 es
724e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
725e5c31af7Sopenharmony_ci				out flat highp vec4 v_val;
726e5c31af7Sopenharmony_ci				void main()
727e5c31af7Sopenharmony_ci				{
728e5c31af7Sopenharmony_ci					v_val = vec4(float(gl_VertexID));
729e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
730e5c31af7Sopenharmony_ci				}
731e5c31af7Sopenharmony_ci			""
732e5c31af7Sopenharmony_ci		end
733e5c31af7Sopenharmony_ci		pipeline_program
734e5c31af7Sopenharmony_ci			active_stages {fragment}
735e5c31af7Sopenharmony_ci			fragment ""
736e5c31af7Sopenharmony_ci				#version 320 es
737e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
738e5c31af7Sopenharmony_ci				in centroid highp vec4 v_val;
739e5c31af7Sopenharmony_ci				void main()
740e5c31af7Sopenharmony_ci				{
741e5c31af7Sopenharmony_ci					${FRAG_COLOR} = v_val;
742e5c31af7Sopenharmony_ci				}
743e5c31af7Sopenharmony_ci			""
744e5c31af7Sopenharmony_ci		end
745e5c31af7Sopenharmony_ci	end
746e5c31af7Sopenharmony_ci
747e5c31af7Sopenharmony_ci	case mismatch_qualifier_vertex_smooth_fragment_flat
748e5c31af7Sopenharmony_ci		version 320 es
749e5c31af7Sopenharmony_ci		desc "Interpolation qualifier mismatch"
750e5c31af7Sopenharmony_ci		expect validation_fail
751e5c31af7Sopenharmony_ci
752e5c31af7Sopenharmony_ci		pipeline_program
753e5c31af7Sopenharmony_ci			active_stages {vertex}
754e5c31af7Sopenharmony_ci			vertex ""
755e5c31af7Sopenharmony_ci				#version 320 es
756e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
757e5c31af7Sopenharmony_ci				out smooth highp vec4 v_val;
758e5c31af7Sopenharmony_ci				void main()
759e5c31af7Sopenharmony_ci				{
760e5c31af7Sopenharmony_ci					v_val = vec4(float(gl_VertexID));
761e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
762e5c31af7Sopenharmony_ci				}
763e5c31af7Sopenharmony_ci			""
764e5c31af7Sopenharmony_ci		end
765e5c31af7Sopenharmony_ci		pipeline_program
766e5c31af7Sopenharmony_ci			active_stages {fragment}
767e5c31af7Sopenharmony_ci			fragment ""
768e5c31af7Sopenharmony_ci				#version 320 es
769e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
770e5c31af7Sopenharmony_ci				in flat highp vec4 v_val;
771e5c31af7Sopenharmony_ci				void main()
772e5c31af7Sopenharmony_ci				{
773e5c31af7Sopenharmony_ci					${FRAG_COLOR} = v_val;
774e5c31af7Sopenharmony_ci				}
775e5c31af7Sopenharmony_ci			""
776e5c31af7Sopenharmony_ci		end
777e5c31af7Sopenharmony_ci	end
778e5c31af7Sopenharmony_ci
779e5c31af7Sopenharmony_ci	case mismatch_qualifier_vertex_centroid_fragment_flat
780e5c31af7Sopenharmony_ci		version 320 es
781e5c31af7Sopenharmony_ci		desc "Interpolation qualifier mismatch"
782e5c31af7Sopenharmony_ci		expect validation_fail
783e5c31af7Sopenharmony_ci
784e5c31af7Sopenharmony_ci		pipeline_program
785e5c31af7Sopenharmony_ci			active_stages {vertex}
786e5c31af7Sopenharmony_ci			vertex ""
787e5c31af7Sopenharmony_ci				#version 320 es
788e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
789e5c31af7Sopenharmony_ci				out centroid highp vec4 v_val;
790e5c31af7Sopenharmony_ci				void main()
791e5c31af7Sopenharmony_ci				{
792e5c31af7Sopenharmony_ci					v_val = vec4(float(gl_VertexID));
793e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
794e5c31af7Sopenharmony_ci				}
795e5c31af7Sopenharmony_ci			""
796e5c31af7Sopenharmony_ci		end
797e5c31af7Sopenharmony_ci		pipeline_program
798e5c31af7Sopenharmony_ci			active_stages {fragment}
799e5c31af7Sopenharmony_ci			fragment ""
800e5c31af7Sopenharmony_ci				#version 320 es
801e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
802e5c31af7Sopenharmony_ci				in flat highp vec4 v_val;
803e5c31af7Sopenharmony_ci				void main()
804e5c31af7Sopenharmony_ci				{
805e5c31af7Sopenharmony_ci					${FRAG_COLOR} = v_val;
806e5c31af7Sopenharmony_ci				}
807e5c31af7Sopenharmony_ci			""
808e5c31af7Sopenharmony_ci		end
809e5c31af7Sopenharmony_ci	end
810e5c31af7Sopenharmony_ciend
811e5c31af7Sopenharmony_ci
812e5c31af7Sopenharmony_cigroup io_blocks "shader io blocks"
813e5c31af7Sopenharmony_ci
814e5c31af7Sopenharmony_ci	case missing_input
815e5c31af7Sopenharmony_ci		version 320 es
816e5c31af7Sopenharmony_ci		desc "Missing input block"
817e5c31af7Sopenharmony_ci		expect validation_fail
818e5c31af7Sopenharmony_ci
819e5c31af7Sopenharmony_ci		pipeline_program
820e5c31af7Sopenharmony_ci			active_stages {vertex}
821e5c31af7Sopenharmony_ci			vertex ""
822e5c31af7Sopenharmony_ci				#version 320 es
823e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
824e5c31af7Sopenharmony_ci				out IOBlockName
825e5c31af7Sopenharmony_ci				{
826e5c31af7Sopenharmony_ci					mediump float v_val;
827e5c31af7Sopenharmony_ci				};
828e5c31af7Sopenharmony_ci				void main()
829e5c31af7Sopenharmony_ci				{
830e5c31af7Sopenharmony_ci					v_val = 1.0;
831e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
832e5c31af7Sopenharmony_ci				}
833e5c31af7Sopenharmony_ci			""
834e5c31af7Sopenharmony_ci		end
835e5c31af7Sopenharmony_ci		pipeline_program
836e5c31af7Sopenharmony_ci			active_stages {fragment}
837e5c31af7Sopenharmony_ci			fragment ""
838e5c31af7Sopenharmony_ci				#version 320 es
839e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
840e5c31af7Sopenharmony_ci				void main()
841e5c31af7Sopenharmony_ci				{
842e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(1.0);
843e5c31af7Sopenharmony_ci				}
844e5c31af7Sopenharmony_ci			""
845e5c31af7Sopenharmony_ci		end
846e5c31af7Sopenharmony_ci	end
847e5c31af7Sopenharmony_ci
848e5c31af7Sopenharmony_ci	case missing_output
849e5c31af7Sopenharmony_ci		version 320 es
850e5c31af7Sopenharmony_ci		desc "Missing output block"
851e5c31af7Sopenharmony_ci		expect validation_fail
852e5c31af7Sopenharmony_ci
853e5c31af7Sopenharmony_ci		pipeline_program
854e5c31af7Sopenharmony_ci			active_stages {vertex}
855e5c31af7Sopenharmony_ci			vertex ""
856e5c31af7Sopenharmony_ci				#version 320 es
857e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
858e5c31af7Sopenharmony_ci				void main()
859e5c31af7Sopenharmony_ci				{
860e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
861e5c31af7Sopenharmony_ci				}
862e5c31af7Sopenharmony_ci			""
863e5c31af7Sopenharmony_ci		end
864e5c31af7Sopenharmony_ci		pipeline_program
865e5c31af7Sopenharmony_ci			active_stages {fragment}
866e5c31af7Sopenharmony_ci			fragment ""
867e5c31af7Sopenharmony_ci				#version 320 es
868e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
869e5c31af7Sopenharmony_ci				in IOBlockName
870e5c31af7Sopenharmony_ci				{
871e5c31af7Sopenharmony_ci					mediump float v_val;
872e5c31af7Sopenharmony_ci				};
873e5c31af7Sopenharmony_ci				void main()
874e5c31af7Sopenharmony_ci				{
875e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val);
876e5c31af7Sopenharmony_ci				}
877e5c31af7Sopenharmony_ci			""
878e5c31af7Sopenharmony_ci		end
879e5c31af7Sopenharmony_ci	end
880e5c31af7Sopenharmony_ci
881e5c31af7Sopenharmony_ci	case mismatch_number_of_declarations
882e5c31af7Sopenharmony_ci		version 320 es
883e5c31af7Sopenharmony_ci		desc "IO-blocks do not match due to mismatch in number of declarations"
884e5c31af7Sopenharmony_ci		expect validation_fail
885e5c31af7Sopenharmony_ci
886e5c31af7Sopenharmony_ci		pipeline_program
887e5c31af7Sopenharmony_ci			active_stages {vertex}
888e5c31af7Sopenharmony_ci			vertex ""
889e5c31af7Sopenharmony_ci				#version 320 es
890e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
891e5c31af7Sopenharmony_ci				out IOBlockName
892e5c31af7Sopenharmony_ci				{
893e5c31af7Sopenharmony_ci					mediump float v_valA;
894e5c31af7Sopenharmony_ci					mediump float v_valB;
895e5c31af7Sopenharmony_ci				};
896e5c31af7Sopenharmony_ci				void main()
897e5c31af7Sopenharmony_ci				{
898e5c31af7Sopenharmony_ci					v_valA = 1.0;
899e5c31af7Sopenharmony_ci					v_valB = 2.0;
900e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
901e5c31af7Sopenharmony_ci				}
902e5c31af7Sopenharmony_ci			""
903e5c31af7Sopenharmony_ci		end
904e5c31af7Sopenharmony_ci		pipeline_program
905e5c31af7Sopenharmony_ci			active_stages {fragment}
906e5c31af7Sopenharmony_ci			fragment ""
907e5c31af7Sopenharmony_ci				#version 320 es
908e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
909e5c31af7Sopenharmony_ci				in IOBlockName
910e5c31af7Sopenharmony_ci				{
911e5c31af7Sopenharmony_ci					mediump float v_valA;
912e5c31af7Sopenharmony_ci				};
913e5c31af7Sopenharmony_ci				void main()
914e5c31af7Sopenharmony_ci				{
915e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_valA);
916e5c31af7Sopenharmony_ci				}
917e5c31af7Sopenharmony_ci			""
918e5c31af7Sopenharmony_ci		end
919e5c31af7Sopenharmony_ci	end
920e5c31af7Sopenharmony_ci
921e5c31af7Sopenharmony_ci	case mismatch_member_order
922e5c31af7Sopenharmony_ci		version 320 es
923e5c31af7Sopenharmony_ci		desc "IO-blocks do not match due to mismatch with member declaration order"
924e5c31af7Sopenharmony_ci		expect validation_fail
925e5c31af7Sopenharmony_ci
926e5c31af7Sopenharmony_ci		pipeline_program
927e5c31af7Sopenharmony_ci			active_stages {vertex}
928e5c31af7Sopenharmony_ci			vertex ""
929e5c31af7Sopenharmony_ci				#version 320 es
930e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
931e5c31af7Sopenharmony_ci				out IOBlockName
932e5c31af7Sopenharmony_ci				{
933e5c31af7Sopenharmony_ci					mediump float v_valA;
934e5c31af7Sopenharmony_ci					mediump float v_valB;
935e5c31af7Sopenharmony_ci				};
936e5c31af7Sopenharmony_ci				void main()
937e5c31af7Sopenharmony_ci				{
938e5c31af7Sopenharmony_ci					v_valA = 1.0;
939e5c31af7Sopenharmony_ci					v_valB = 2.0;
940e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
941e5c31af7Sopenharmony_ci				}
942e5c31af7Sopenharmony_ci			""
943e5c31af7Sopenharmony_ci		end
944e5c31af7Sopenharmony_ci		pipeline_program
945e5c31af7Sopenharmony_ci			active_stages {fragment}
946e5c31af7Sopenharmony_ci			fragment ""
947e5c31af7Sopenharmony_ci				#version 320 es
948e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
949e5c31af7Sopenharmony_ci				in IOBlockName
950e5c31af7Sopenharmony_ci				{
951e5c31af7Sopenharmony_ci					mediump float v_valB;
952e5c31af7Sopenharmony_ci					mediump float v_valA;
953e5c31af7Sopenharmony_ci				};
954e5c31af7Sopenharmony_ci				void main()
955e5c31af7Sopenharmony_ci				{
956e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_valA+v_valB);
957e5c31af7Sopenharmony_ci				}
958e5c31af7Sopenharmony_ci			""
959e5c31af7Sopenharmony_ci		end
960e5c31af7Sopenharmony_ci	end
961e5c31af7Sopenharmony_ci
962e5c31af7Sopenharmony_ci	case mismatch_member_type
963e5c31af7Sopenharmony_ci		version 320 es
964e5c31af7Sopenharmony_ci		desc "IO-blocks do not match due to mismatch with member types"
965e5c31af7Sopenharmony_ci		expect validation_fail
966e5c31af7Sopenharmony_ci
967e5c31af7Sopenharmony_ci		pipeline_program
968e5c31af7Sopenharmony_ci			active_stages {vertex}
969e5c31af7Sopenharmony_ci			vertex ""
970e5c31af7Sopenharmony_ci				#version 320 es
971e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
972e5c31af7Sopenharmony_ci				out IOBlockName
973e5c31af7Sopenharmony_ci				{
974e5c31af7Sopenharmony_ci					mediump float v_valA;
975e5c31af7Sopenharmony_ci				};
976e5c31af7Sopenharmony_ci				void main()
977e5c31af7Sopenharmony_ci				{
978e5c31af7Sopenharmony_ci					v_valA = 1.0;
979e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
980e5c31af7Sopenharmony_ci				}
981e5c31af7Sopenharmony_ci			""
982e5c31af7Sopenharmony_ci		end
983e5c31af7Sopenharmony_ci		pipeline_program
984e5c31af7Sopenharmony_ci			active_stages {fragment}
985e5c31af7Sopenharmony_ci			fragment ""
986e5c31af7Sopenharmony_ci				#version 320 es
987e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
988e5c31af7Sopenharmony_ci				in IOBlockName
989e5c31af7Sopenharmony_ci				{
990e5c31af7Sopenharmony_ci					mediump vec2 v_valA;
991e5c31af7Sopenharmony_ci				};
992e5c31af7Sopenharmony_ci				void main()
993e5c31af7Sopenharmony_ci				{
994e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_valA.xyxy);
995e5c31af7Sopenharmony_ci				}
996e5c31af7Sopenharmony_ci			""
997e5c31af7Sopenharmony_ci		end
998e5c31af7Sopenharmony_ci	end
999e5c31af7Sopenharmony_ci
1000e5c31af7Sopenharmony_ci	case mismatch_member_name
1001e5c31af7Sopenharmony_ci		version 320 es
1002e5c31af7Sopenharmony_ci		desc "IO-blocks do not match due to mismatch with member names"
1003e5c31af7Sopenharmony_ci		expect validation_fail
1004e5c31af7Sopenharmony_ci
1005e5c31af7Sopenharmony_ci		pipeline_program
1006e5c31af7Sopenharmony_ci			active_stages {vertex}
1007e5c31af7Sopenharmony_ci			vertex ""
1008e5c31af7Sopenharmony_ci				#version 320 es
1009e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1010e5c31af7Sopenharmony_ci				out IOBlockName
1011e5c31af7Sopenharmony_ci				{
1012e5c31af7Sopenharmony_ci					mediump float v_valA;
1013e5c31af7Sopenharmony_ci				};
1014e5c31af7Sopenharmony_ci				void main()
1015e5c31af7Sopenharmony_ci				{
1016e5c31af7Sopenharmony_ci					v_valA = 1.0;
1017e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1018e5c31af7Sopenharmony_ci				}
1019e5c31af7Sopenharmony_ci			""
1020e5c31af7Sopenharmony_ci		end
1021e5c31af7Sopenharmony_ci		pipeline_program
1022e5c31af7Sopenharmony_ci			active_stages {fragment}
1023e5c31af7Sopenharmony_ci			fragment ""
1024e5c31af7Sopenharmony_ci				#version 320 es
1025e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1026e5c31af7Sopenharmony_ci				in IOBlockName
1027e5c31af7Sopenharmony_ci				{
1028e5c31af7Sopenharmony_ci					mediump vec2 v_valB;
1029e5c31af7Sopenharmony_ci				};
1030e5c31af7Sopenharmony_ci				void main()
1031e5c31af7Sopenharmony_ci				{
1032e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_valB.y);
1033e5c31af7Sopenharmony_ci				}
1034e5c31af7Sopenharmony_ci			""
1035e5c31af7Sopenharmony_ci		end
1036e5c31af7Sopenharmony_ci	end
1037e5c31af7Sopenharmony_ci
1038e5c31af7Sopenharmony_ci	case mismatch_member_precision
1039e5c31af7Sopenharmony_ci		version 320 es
1040e5c31af7Sopenharmony_ci		desc "IO-blocks do not match due to mismatch with member precisions"
1041e5c31af7Sopenharmony_ci		expect validation_fail
1042e5c31af7Sopenharmony_ci
1043e5c31af7Sopenharmony_ci		pipeline_program
1044e5c31af7Sopenharmony_ci			active_stages {vertex}
1045e5c31af7Sopenharmony_ci			vertex ""
1046e5c31af7Sopenharmony_ci				#version 320 es
1047e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1048e5c31af7Sopenharmony_ci				out IOBlockName
1049e5c31af7Sopenharmony_ci				{
1050e5c31af7Sopenharmony_ci					mediump float v_valA;
1051e5c31af7Sopenharmony_ci				};
1052e5c31af7Sopenharmony_ci				void main()
1053e5c31af7Sopenharmony_ci				{
1054e5c31af7Sopenharmony_ci					v_valA = 1.0;
1055e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1056e5c31af7Sopenharmony_ci				}
1057e5c31af7Sopenharmony_ci			""
1058e5c31af7Sopenharmony_ci		end
1059e5c31af7Sopenharmony_ci		pipeline_program
1060e5c31af7Sopenharmony_ci			active_stages {fragment}
1061e5c31af7Sopenharmony_ci			fragment ""
1062e5c31af7Sopenharmony_ci				#version 320 es
1063e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1064e5c31af7Sopenharmony_ci				in IOBlockName
1065e5c31af7Sopenharmony_ci				{
1066e5c31af7Sopenharmony_ci					highp float v_valA;
1067e5c31af7Sopenharmony_ci				};
1068e5c31af7Sopenharmony_ci				void main()
1069e5c31af7Sopenharmony_ci				{
1070e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_valA);
1071e5c31af7Sopenharmony_ci				}
1072e5c31af7Sopenharmony_ci			""
1073e5c31af7Sopenharmony_ci		end
1074e5c31af7Sopenharmony_ci	end
1075e5c31af7Sopenharmony_ci
1076e5c31af7Sopenharmony_ci	case mismatch_different_member_interpolation
1077e5c31af7Sopenharmony_ci		version 320 es
1078e5c31af7Sopenharmony_ci		desc "IO-block members do not match due to different interpolation qualifiers"
1079e5c31af7Sopenharmony_ci		expect validation_fail
1080e5c31af7Sopenharmony_ci
1081e5c31af7Sopenharmony_ci		pipeline_program
1082e5c31af7Sopenharmony_ci			active_stages {vertex}
1083e5c31af7Sopenharmony_ci			vertex ""
1084e5c31af7Sopenharmony_ci				#version 320 es
1085e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1086e5c31af7Sopenharmony_ci				out IOBlockName
1087e5c31af7Sopenharmony_ci				{
1088e5c31af7Sopenharmony_ci					smooth out mediump float v_val;
1089e5c31af7Sopenharmony_ci				};
1090e5c31af7Sopenharmony_ci				void main()
1091e5c31af7Sopenharmony_ci				{
1092e5c31af7Sopenharmony_ci					v_val = 1.0;
1093e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1094e5c31af7Sopenharmony_ci				}
1095e5c31af7Sopenharmony_ci			""
1096e5c31af7Sopenharmony_ci		end
1097e5c31af7Sopenharmony_ci		pipeline_program
1098e5c31af7Sopenharmony_ci			active_stages {fragment}
1099e5c31af7Sopenharmony_ci			fragment ""
1100e5c31af7Sopenharmony_ci				#version 320 es
1101e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1102e5c31af7Sopenharmony_ci				in IOBlockName
1103e5c31af7Sopenharmony_ci				{
1104e5c31af7Sopenharmony_ci					flat in mediump float v_val;
1105e5c31af7Sopenharmony_ci				};
1106e5c31af7Sopenharmony_ci				void main()
1107e5c31af7Sopenharmony_ci				{
1108e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val);
1109e5c31af7Sopenharmony_ci				}
1110e5c31af7Sopenharmony_ci			""
1111e5c31af7Sopenharmony_ci		end
1112e5c31af7Sopenharmony_ci	end
1113e5c31af7Sopenharmony_ci
1114e5c31af7Sopenharmony_ci	case mismatch_member_array_size
1115e5c31af7Sopenharmony_ci		version 320 es
1116e5c31af7Sopenharmony_ci		desc "IO-blocks do not match due to mismatch with member array size"
1117e5c31af7Sopenharmony_ci		expect validation_fail
1118e5c31af7Sopenharmony_ci
1119e5c31af7Sopenharmony_ci		pipeline_program
1120e5c31af7Sopenharmony_ci			active_stages {vertex}
1121e5c31af7Sopenharmony_ci			vertex ""
1122e5c31af7Sopenharmony_ci				#version 320 es
1123e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1124e5c31af7Sopenharmony_ci				out IOBlockName
1125e5c31af7Sopenharmony_ci				{
1126e5c31af7Sopenharmony_ci					mediump float v_val_arr[2];
1127e5c31af7Sopenharmony_ci				};
1128e5c31af7Sopenharmony_ci				void main()
1129e5c31af7Sopenharmony_ci				{
1130e5c31af7Sopenharmony_ci					v_val_arr[0] = 1.0;
1131e5c31af7Sopenharmony_ci					v_val_arr[1] = 2.0;
1132e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1133e5c31af7Sopenharmony_ci				}
1134e5c31af7Sopenharmony_ci			""
1135e5c31af7Sopenharmony_ci		end
1136e5c31af7Sopenharmony_ci		pipeline_program
1137e5c31af7Sopenharmony_ci			active_stages {fragment}
1138e5c31af7Sopenharmony_ci			fragment ""
1139e5c31af7Sopenharmony_ci				#version 320 es
1140e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1141e5c31af7Sopenharmony_ci				in IOBlockName
1142e5c31af7Sopenharmony_ci				{
1143e5c31af7Sopenharmony_ci					mediump float v_val_arr[1];
1144e5c31af7Sopenharmony_ci				};
1145e5c31af7Sopenharmony_ci				void main()
1146e5c31af7Sopenharmony_ci				{
1147e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val_arr[0]);
1148e5c31af7Sopenharmony_ci				}
1149e5c31af7Sopenharmony_ci			""
1150e5c31af7Sopenharmony_ci		end
1151e5c31af7Sopenharmony_ci	end
1152e5c31af7Sopenharmony_ci
1153e5c31af7Sopenharmony_ci	case match_different_member_struct_names
1154e5c31af7Sopenharmony_ci		version 320 es
1155e5c31af7Sopenharmony_ci		desc "IO-blocks match with structs with different names"
1156e5c31af7Sopenharmony_ci		expect validation_fail
1157e5c31af7Sopenharmony_ci
1158e5c31af7Sopenharmony_ci		pipeline_program
1159e5c31af7Sopenharmony_ci			active_stages {vertex}
1160e5c31af7Sopenharmony_ci			vertex ""
1161e5c31af7Sopenharmony_ci				#version 320 es
1162e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1163e5c31af7Sopenharmony_ci				struct StructNameA
1164e5c31af7Sopenharmony_ci				{
1165e5c31af7Sopenharmony_ci					mediump float v;
1166e5c31af7Sopenharmony_ci				};
1167e5c31af7Sopenharmony_ci				out IOBlockName
1168e5c31af7Sopenharmony_ci				{
1169e5c31af7Sopenharmony_ci					StructNameA v_val;
1170e5c31af7Sopenharmony_ci				};
1171e5c31af7Sopenharmony_ci
1172e5c31af7Sopenharmony_ci				void main()
1173e5c31af7Sopenharmony_ci				{
1174e5c31af7Sopenharmony_ci					v_val.v = 1.0;
1175e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1176e5c31af7Sopenharmony_ci				}
1177e5c31af7Sopenharmony_ci			""
1178e5c31af7Sopenharmony_ci		end
1179e5c31af7Sopenharmony_ci		pipeline_program
1180e5c31af7Sopenharmony_ci			active_stages {fragment}
1181e5c31af7Sopenharmony_ci			fragment ""
1182e5c31af7Sopenharmony_ci				#version 320 es
1183e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1184e5c31af7Sopenharmony_ci				struct StructNameB
1185e5c31af7Sopenharmony_ci				{
1186e5c31af7Sopenharmony_ci					mediump float v;
1187e5c31af7Sopenharmony_ci				};
1188e5c31af7Sopenharmony_ci				in IOBlockName
1189e5c31af7Sopenharmony_ci				{
1190e5c31af7Sopenharmony_ci					StructNameB v_val;
1191e5c31af7Sopenharmony_ci				};
1192e5c31af7Sopenharmony_ci				void main()
1193e5c31af7Sopenharmony_ci				{
1194e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val.v);
1195e5c31af7Sopenharmony_ci				}
1196e5c31af7Sopenharmony_ci			""
1197e5c31af7Sopenharmony_ci		end
1198e5c31af7Sopenharmony_ci	end
1199e5c31af7Sopenharmony_ci
1200e5c31af7Sopenharmony_ci	case mismatch_member_struct_member_name
1201e5c31af7Sopenharmony_ci		version 320 es
1202e5c31af7Sopenharmony_ci		desc "IO-blocks do not match due to mismatch with member structs"
1203e5c31af7Sopenharmony_ci		expect validation_fail
1204e5c31af7Sopenharmony_ci
1205e5c31af7Sopenharmony_ci		pipeline_program
1206e5c31af7Sopenharmony_ci			active_stages {vertex}
1207e5c31af7Sopenharmony_ci			vertex ""
1208e5c31af7Sopenharmony_ci				#version 320 es
1209e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1210e5c31af7Sopenharmony_ci				struct StructName
1211e5c31af7Sopenharmony_ci				{
1212e5c31af7Sopenharmony_ci					mediump float v;
1213e5c31af7Sopenharmony_ci				};
1214e5c31af7Sopenharmony_ci				out IOBlockName
1215e5c31af7Sopenharmony_ci				{
1216e5c31af7Sopenharmony_ci					StructName v_val;
1217e5c31af7Sopenharmony_ci				};
1218e5c31af7Sopenharmony_ci
1219e5c31af7Sopenharmony_ci				void main()
1220e5c31af7Sopenharmony_ci				{
1221e5c31af7Sopenharmony_ci					v_val.v = 1.0;
1222e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1223e5c31af7Sopenharmony_ci				}
1224e5c31af7Sopenharmony_ci			""
1225e5c31af7Sopenharmony_ci		end
1226e5c31af7Sopenharmony_ci		pipeline_program
1227e5c31af7Sopenharmony_ci			active_stages {fragment}
1228e5c31af7Sopenharmony_ci			fragment ""
1229e5c31af7Sopenharmony_ci				#version 320 es
1230e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1231e5c31af7Sopenharmony_ci				struct StructName
1232e5c31af7Sopenharmony_ci				{
1233e5c31af7Sopenharmony_ci					mediump float v_alt_name;
1234e5c31af7Sopenharmony_ci				};
1235e5c31af7Sopenharmony_ci				in IOBlockName
1236e5c31af7Sopenharmony_ci				{
1237e5c31af7Sopenharmony_ci					StructName v_val;
1238e5c31af7Sopenharmony_ci				};
1239e5c31af7Sopenharmony_ci				void main()
1240e5c31af7Sopenharmony_ci				{
1241e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val.v_alt_name);
1242e5c31af7Sopenharmony_ci				}
1243e5c31af7Sopenharmony_ci			""
1244e5c31af7Sopenharmony_ci		end
1245e5c31af7Sopenharmony_ci	end
1246e5c31af7Sopenharmony_ci
1247e5c31af7Sopenharmony_ci	case mismatch_member_struct_member_type
1248e5c31af7Sopenharmony_ci		version 320 es
1249e5c31af7Sopenharmony_ci		desc "IO-blocks do not match due to mismatch with member structs"
1250e5c31af7Sopenharmony_ci		expect validation_fail
1251e5c31af7Sopenharmony_ci
1252e5c31af7Sopenharmony_ci		pipeline_program
1253e5c31af7Sopenharmony_ci			active_stages {vertex}
1254e5c31af7Sopenharmony_ci			vertex ""
1255e5c31af7Sopenharmony_ci				#version 320 es
1256e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1257e5c31af7Sopenharmony_ci				struct StructName
1258e5c31af7Sopenharmony_ci				{
1259e5c31af7Sopenharmony_ci					mediump float v;
1260e5c31af7Sopenharmony_ci				};
1261e5c31af7Sopenharmony_ci				out IOBlockName
1262e5c31af7Sopenharmony_ci				{
1263e5c31af7Sopenharmony_ci					StructName v_val;
1264e5c31af7Sopenharmony_ci				};
1265e5c31af7Sopenharmony_ci
1266e5c31af7Sopenharmony_ci				void main()
1267e5c31af7Sopenharmony_ci				{
1268e5c31af7Sopenharmony_ci					v_val.v = 1.0;
1269e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1270e5c31af7Sopenharmony_ci				}
1271e5c31af7Sopenharmony_ci			""
1272e5c31af7Sopenharmony_ci		end
1273e5c31af7Sopenharmony_ci		pipeline_program
1274e5c31af7Sopenharmony_ci			active_stages {fragment}
1275e5c31af7Sopenharmony_ci			fragment ""
1276e5c31af7Sopenharmony_ci				#version 320 es
1277e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1278e5c31af7Sopenharmony_ci				struct StructName
1279e5c31af7Sopenharmony_ci				{
1280e5c31af7Sopenharmony_ci					mediump vec2 v;
1281e5c31af7Sopenharmony_ci				};
1282e5c31af7Sopenharmony_ci				in IOBlockName
1283e5c31af7Sopenharmony_ci				{
1284e5c31af7Sopenharmony_ci					StructName v_val;
1285e5c31af7Sopenharmony_ci				};
1286e5c31af7Sopenharmony_ci				void main()
1287e5c31af7Sopenharmony_ci				{
1288e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val.v.x);
1289e5c31af7Sopenharmony_ci				}
1290e5c31af7Sopenharmony_ci			""
1291e5c31af7Sopenharmony_ci		end
1292e5c31af7Sopenharmony_ci	end
1293e5c31af7Sopenharmony_ci
1294e5c31af7Sopenharmony_ci	case mismatch_member_struct_member_precision
1295e5c31af7Sopenharmony_ci		version 320 es
1296e5c31af7Sopenharmony_ci		desc "IO-blocks do not match due to mismatch with member structs"
1297e5c31af7Sopenharmony_ci		expect validation_fail
1298e5c31af7Sopenharmony_ci
1299e5c31af7Sopenharmony_ci		pipeline_program
1300e5c31af7Sopenharmony_ci			active_stages {vertex}
1301e5c31af7Sopenharmony_ci			vertex ""
1302e5c31af7Sopenharmony_ci				#version 320 es
1303e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1304e5c31af7Sopenharmony_ci				struct StructName
1305e5c31af7Sopenharmony_ci				{
1306e5c31af7Sopenharmony_ci					mediump float v;
1307e5c31af7Sopenharmony_ci				};
1308e5c31af7Sopenharmony_ci				out IOBlockName
1309e5c31af7Sopenharmony_ci				{
1310e5c31af7Sopenharmony_ci					StructName v_val;
1311e5c31af7Sopenharmony_ci				};
1312e5c31af7Sopenharmony_ci
1313e5c31af7Sopenharmony_ci				void main()
1314e5c31af7Sopenharmony_ci				{
1315e5c31af7Sopenharmony_ci					v_val.v = 1.0;
1316e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1317e5c31af7Sopenharmony_ci				}
1318e5c31af7Sopenharmony_ci			""
1319e5c31af7Sopenharmony_ci		end
1320e5c31af7Sopenharmony_ci		pipeline_program
1321e5c31af7Sopenharmony_ci			active_stages {fragment}
1322e5c31af7Sopenharmony_ci			fragment ""
1323e5c31af7Sopenharmony_ci				#version 320 es
1324e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1325e5c31af7Sopenharmony_ci				struct StructName
1326e5c31af7Sopenharmony_ci				{
1327e5c31af7Sopenharmony_ci					highp float v;
1328e5c31af7Sopenharmony_ci				};
1329e5c31af7Sopenharmony_ci				in IOBlockName
1330e5c31af7Sopenharmony_ci				{
1331e5c31af7Sopenharmony_ci					StructName v_val;
1332e5c31af7Sopenharmony_ci				};
1333e5c31af7Sopenharmony_ci				void main()
1334e5c31af7Sopenharmony_ci				{
1335e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val.v);
1336e5c31af7Sopenharmony_ci				}
1337e5c31af7Sopenharmony_ci			""
1338e5c31af7Sopenharmony_ci		end
1339e5c31af7Sopenharmony_ci	end
1340e5c31af7Sopenharmony_ci
1341e5c31af7Sopenharmony_ci	case mismatch_member_struct_member_order
1342e5c31af7Sopenharmony_ci		version 320 es
1343e5c31af7Sopenharmony_ci		desc "IO-blocks do not match due to mismatch with member structs"
1344e5c31af7Sopenharmony_ci		expect validation_fail
1345e5c31af7Sopenharmony_ci
1346e5c31af7Sopenharmony_ci		pipeline_program
1347e5c31af7Sopenharmony_ci			active_stages {vertex}
1348e5c31af7Sopenharmony_ci			vertex ""
1349e5c31af7Sopenharmony_ci				#version 320 es
1350e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1351e5c31af7Sopenharmony_ci				struct StructName
1352e5c31af7Sopenharmony_ci				{
1353e5c31af7Sopenharmony_ci					mediump float v_a;
1354e5c31af7Sopenharmony_ci					mediump float v_b;
1355e5c31af7Sopenharmony_ci				};
1356e5c31af7Sopenharmony_ci				out IOBlockName
1357e5c31af7Sopenharmony_ci				{
1358e5c31af7Sopenharmony_ci					StructName v_val;
1359e5c31af7Sopenharmony_ci				};
1360e5c31af7Sopenharmony_ci
1361e5c31af7Sopenharmony_ci				void main()
1362e5c31af7Sopenharmony_ci				{
1363e5c31af7Sopenharmony_ci					v_val.v_a = 1.0;
1364e5c31af7Sopenharmony_ci					v_val.v_b = 1.0;
1365e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1366e5c31af7Sopenharmony_ci				}
1367e5c31af7Sopenharmony_ci			""
1368e5c31af7Sopenharmony_ci		end
1369e5c31af7Sopenharmony_ci		pipeline_program
1370e5c31af7Sopenharmony_ci			active_stages {fragment}
1371e5c31af7Sopenharmony_ci			fragment ""
1372e5c31af7Sopenharmony_ci				#version 320 es
1373e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1374e5c31af7Sopenharmony_ci				struct StructName
1375e5c31af7Sopenharmony_ci				{
1376e5c31af7Sopenharmony_ci					mediump float v_b;
1377e5c31af7Sopenharmony_ci					mediump float v_a;
1378e5c31af7Sopenharmony_ci				};
1379e5c31af7Sopenharmony_ci				in IOBlockName
1380e5c31af7Sopenharmony_ci				{
1381e5c31af7Sopenharmony_ci					StructName v_val;
1382e5c31af7Sopenharmony_ci				};
1383e5c31af7Sopenharmony_ci				void main()
1384e5c31af7Sopenharmony_ci				{
1385e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val.v_a);
1386e5c31af7Sopenharmony_ci				}
1387e5c31af7Sopenharmony_ci			""
1388e5c31af7Sopenharmony_ci		end
1389e5c31af7Sopenharmony_ci	end
1390e5c31af7Sopenharmony_ci
1391e5c31af7Sopenharmony_ci	case mismatch_array_size
1392e5c31af7Sopenharmony_ci		version 320 es
1393e5c31af7Sopenharmony_ci		desc "IO-blocks do not match due to mismatch with array sizes"
1394e5c31af7Sopenharmony_ci		expect validation_fail
1395e5c31af7Sopenharmony_ci
1396e5c31af7Sopenharmony_ci		pipeline_program
1397e5c31af7Sopenharmony_ci			active_stages {vertex}
1398e5c31af7Sopenharmony_ci			vertex ""
1399e5c31af7Sopenharmony_ci				#version 320 es
1400e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1401e5c31af7Sopenharmony_ci				out IOBlockName
1402e5c31af7Sopenharmony_ci				{
1403e5c31af7Sopenharmony_ci					mediump float v_val;
1404e5c31af7Sopenharmony_ci				} ioBlock[2];
1405e5c31af7Sopenharmony_ci				void main()
1406e5c31af7Sopenharmony_ci				{
1407e5c31af7Sopenharmony_ci					ioBlock[0].v_val = 1.0;
1408e5c31af7Sopenharmony_ci					ioBlock[1].v_val = 2.0;
1409e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1410e5c31af7Sopenharmony_ci				}
1411e5c31af7Sopenharmony_ci			""
1412e5c31af7Sopenharmony_ci		end
1413e5c31af7Sopenharmony_ci		pipeline_program
1414e5c31af7Sopenharmony_ci			active_stages {fragment}
1415e5c31af7Sopenharmony_ci			fragment ""
1416e5c31af7Sopenharmony_ci				#version 320 es
1417e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1418e5c31af7Sopenharmony_ci				in IOBlockName
1419e5c31af7Sopenharmony_ci				{
1420e5c31af7Sopenharmony_ci					mediump float v_val;
1421e5c31af7Sopenharmony_ci				} ioBlock[1];
1422e5c31af7Sopenharmony_ci				void main()
1423e5c31af7Sopenharmony_ci				{
1424e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(ioBlock[0].v_val);
1425e5c31af7Sopenharmony_ci				}
1426e5c31af7Sopenharmony_ci			""
1427e5c31af7Sopenharmony_ci		end
1428e5c31af7Sopenharmony_ci	end
1429e5c31af7Sopenharmony_ci
1430e5c31af7Sopenharmony_ci	case mismatch_variable_and_block_member_1
1431e5c31af7Sopenharmony_ci		version 320 es
1432e5c31af7Sopenharmony_ci		desc "IO-block does not match with variable"
1433e5c31af7Sopenharmony_ci		expect validation_fail
1434e5c31af7Sopenharmony_ci
1435e5c31af7Sopenharmony_ci		pipeline_program
1436e5c31af7Sopenharmony_ci			active_stages {vertex}
1437e5c31af7Sopenharmony_ci			vertex ""
1438e5c31af7Sopenharmony_ci				#version 320 es
1439e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1440e5c31af7Sopenharmony_ci				out IOBlockName
1441e5c31af7Sopenharmony_ci				{
1442e5c31af7Sopenharmony_ci					mediump float v_val;
1443e5c31af7Sopenharmony_ci				};
1444e5c31af7Sopenharmony_ci
1445e5c31af7Sopenharmony_ci				void main()
1446e5c31af7Sopenharmony_ci				{
1447e5c31af7Sopenharmony_ci					v_val = 1.0;
1448e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1449e5c31af7Sopenharmony_ci				}
1450e5c31af7Sopenharmony_ci			""
1451e5c31af7Sopenharmony_ci		end
1452e5c31af7Sopenharmony_ci		pipeline_program
1453e5c31af7Sopenharmony_ci			active_stages {fragment}
1454e5c31af7Sopenharmony_ci			fragment ""
1455e5c31af7Sopenharmony_ci				#version 320 es
1456e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1457e5c31af7Sopenharmony_ci				in mediump float v_val;
1458e5c31af7Sopenharmony_ci				void main()
1459e5c31af7Sopenharmony_ci				{
1460e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(v_val);
1461e5c31af7Sopenharmony_ci				}
1462e5c31af7Sopenharmony_ci			""
1463e5c31af7Sopenharmony_ci		end
1464e5c31af7Sopenharmony_ci	end
1465e5c31af7Sopenharmony_ci
1466e5c31af7Sopenharmony_ci	case mismatch_variable_and_block_member_2
1467e5c31af7Sopenharmony_ci		version 320 es
1468e5c31af7Sopenharmony_ci		desc "IO-block does not match with variable"
1469e5c31af7Sopenharmony_ci		expect validation_fail
1470e5c31af7Sopenharmony_ci
1471e5c31af7Sopenharmony_ci		pipeline_program
1472e5c31af7Sopenharmony_ci			active_stages {vertex}
1473e5c31af7Sopenharmony_ci			vertex ""
1474e5c31af7Sopenharmony_ci				#version 320 es
1475e5c31af7Sopenharmony_ci				${VERTEX_DECLARATIONS}
1476e5c31af7Sopenharmony_ci				out VariableAndBlockName
1477e5c31af7Sopenharmony_ci				{
1478e5c31af7Sopenharmony_ci					mediump float v_val;
1479e5c31af7Sopenharmony_ci				};
1480e5c31af7Sopenharmony_ci
1481e5c31af7Sopenharmony_ci				void main()
1482e5c31af7Sopenharmony_ci				{
1483e5c31af7Sopenharmony_ci					v_val = 1.0;
1484e5c31af7Sopenharmony_ci					${VERTEX_OUTPUT}
1485e5c31af7Sopenharmony_ci				}
1486e5c31af7Sopenharmony_ci			""
1487e5c31af7Sopenharmony_ci		end
1488e5c31af7Sopenharmony_ci		pipeline_program
1489e5c31af7Sopenharmony_ci			active_stages {fragment}
1490e5c31af7Sopenharmony_ci			fragment ""
1491e5c31af7Sopenharmony_ci				#version 320 es
1492e5c31af7Sopenharmony_ci				${FRAGMENT_DECLARATIONS}
1493e5c31af7Sopenharmony_ci				in mediump float VariableAndBlockName;
1494e5c31af7Sopenharmony_ci				void main()
1495e5c31af7Sopenharmony_ci				{
1496e5c31af7Sopenharmony_ci					${FRAG_COLOR} = vec4(VariableAndBlockName);
1497e5c31af7Sopenharmony_ci				}
1498e5c31af7Sopenharmony_ci			""
1499e5c31af7Sopenharmony_ci		end
1500e5c31af7Sopenharmony_ci	end
1501e5c31af7Sopenharmony_ciend
1502