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