1e5c31af7Sopenharmony_cicase mismatch_number_of_declarations
2e5c31af7Sopenharmony_ci	version 310 es
3e5c31af7Sopenharmony_ci	desc "Shader io block mismatch: different number of declarations"
4e5c31af7Sopenharmony_ci	require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment }
5e5c31af7Sopenharmony_ci	expect link_fail
6e5c31af7Sopenharmony_ci	vertex ""
7e5c31af7Sopenharmony_ci		#version 310 es
8e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
9e5c31af7Sopenharmony_ci		out IOBlockName
10e5c31af7Sopenharmony_ci		{
11e5c31af7Sopenharmony_ci			mediump float variable1;
12e5c31af7Sopenharmony_ci		};
13e5c31af7Sopenharmony_ci
14e5c31af7Sopenharmony_ci		void main()
15e5c31af7Sopenharmony_ci		{
16e5c31af7Sopenharmony_ci			variable1 = float(gl_VertexID);
17e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
18e5c31af7Sopenharmony_ci		}
19e5c31af7Sopenharmony_ci	""
20e5c31af7Sopenharmony_ci	fragment ""
21e5c31af7Sopenharmony_ci		#version 310 es
22e5c31af7Sopenharmony_ci		precision mediump float;
23e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
24e5c31af7Sopenharmony_ci		in IOBlockName
25e5c31af7Sopenharmony_ci		{
26e5c31af7Sopenharmony_ci			mediump float variable1;
27e5c31af7Sopenharmony_ci			mediump float variable2;
28e5c31af7Sopenharmony_ci		};
29e5c31af7Sopenharmony_ci
30e5c31af7Sopenharmony_ci		void main()
31e5c31af7Sopenharmony_ci		{
32e5c31af7Sopenharmony_ci			${FRAG_COLOR} = vec4(variable1 + variable2);
33e5c31af7Sopenharmony_ci		}
34e5c31af7Sopenharmony_ci	""
35e5c31af7Sopenharmony_ciend
36e5c31af7Sopenharmony_ci
37e5c31af7Sopenharmony_cicase mismatch_order
38e5c31af7Sopenharmony_ci	version 310 es
39e5c31af7Sopenharmony_ci	desc "Shader io block mismatch: different member declaration order"
40e5c31af7Sopenharmony_ci	require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment }
41e5c31af7Sopenharmony_ci	expect link_fail
42e5c31af7Sopenharmony_ci	vertex ""
43e5c31af7Sopenharmony_ci		#version 310 es
44e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
45e5c31af7Sopenharmony_ci		out IOBlockName
46e5c31af7Sopenharmony_ci		{
47e5c31af7Sopenharmony_ci			mediump float variable1;
48e5c31af7Sopenharmony_ci			mediump float variable2;
49e5c31af7Sopenharmony_ci		};
50e5c31af7Sopenharmony_ci
51e5c31af7Sopenharmony_ci		void main()
52e5c31af7Sopenharmony_ci		{
53e5c31af7Sopenharmony_ci			variable1 = float(gl_VertexID);
54e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
55e5c31af7Sopenharmony_ci		}
56e5c31af7Sopenharmony_ci	""
57e5c31af7Sopenharmony_ci	fragment ""
58e5c31af7Sopenharmony_ci		#version 310 es
59e5c31af7Sopenharmony_ci		precision mediump float;
60e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
61e5c31af7Sopenharmony_ci		in IOBlockName
62e5c31af7Sopenharmony_ci		{
63e5c31af7Sopenharmony_ci			mediump float variable2;
64e5c31af7Sopenharmony_ci			mediump float variable1;
65e5c31af7Sopenharmony_ci		};
66e5c31af7Sopenharmony_ci
67e5c31af7Sopenharmony_ci		void main()
68e5c31af7Sopenharmony_ci		{
69e5c31af7Sopenharmony_ci			${FRAG_COLOR} = vec4(variable1 + variable2);
70e5c31af7Sopenharmony_ci		}
71e5c31af7Sopenharmony_ci	""
72e5c31af7Sopenharmony_ciend
73e5c31af7Sopenharmony_ci
74e5c31af7Sopenharmony_cicase mismatch_type
75e5c31af7Sopenharmony_ci	version 310 es
76e5c31af7Sopenharmony_ci	desc "Shader io block mismatch: different member type"
77e5c31af7Sopenharmony_ci	require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment }
78e5c31af7Sopenharmony_ci	expect link_fail
79e5c31af7Sopenharmony_ci	vertex ""
80e5c31af7Sopenharmony_ci		#version 310 es
81e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
82e5c31af7Sopenharmony_ci		out IOBlockName
83e5c31af7Sopenharmony_ci		{
84e5c31af7Sopenharmony_ci			mediump vec2 variable;
85e5c31af7Sopenharmony_ci		};
86e5c31af7Sopenharmony_ci
87e5c31af7Sopenharmony_ci		void main()
88e5c31af7Sopenharmony_ci		{
89e5c31af7Sopenharmony_ci			variable.x = float(gl_VertexID);
90e5c31af7Sopenharmony_ci			variable.y = float(gl_InstanceID);
91e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
92e5c31af7Sopenharmony_ci		}
93e5c31af7Sopenharmony_ci	""
94e5c31af7Sopenharmony_ci	fragment ""
95e5c31af7Sopenharmony_ci		#version 310 es
96e5c31af7Sopenharmony_ci		precision mediump float;
97e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
98e5c31af7Sopenharmony_ci		in IOBlockName
99e5c31af7Sopenharmony_ci		{
100e5c31af7Sopenharmony_ci			mediump float variable;
101e5c31af7Sopenharmony_ci		};
102e5c31af7Sopenharmony_ci
103e5c31af7Sopenharmony_ci		void main()
104e5c31af7Sopenharmony_ci		{
105e5c31af7Sopenharmony_ci			${FRAG_COLOR} = vec4(variable);
106e5c31af7Sopenharmony_ci		}
107e5c31af7Sopenharmony_ci	""
108e5c31af7Sopenharmony_ciend
109e5c31af7Sopenharmony_ci
110e5c31af7Sopenharmony_cicase mismatch_member_name
111e5c31af7Sopenharmony_ci	version 310 es
112e5c31af7Sopenharmony_ci	desc "Shader io block mismatch: different member name"
113e5c31af7Sopenharmony_ci	require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment }
114e5c31af7Sopenharmony_ci	expect link_fail
115e5c31af7Sopenharmony_ci	vertex ""
116e5c31af7Sopenharmony_ci		#version 310 es
117e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
118e5c31af7Sopenharmony_ci		out IOBlockName
119e5c31af7Sopenharmony_ci		{
120e5c31af7Sopenharmony_ci			mediump float variable1;
121e5c31af7Sopenharmony_ci		};
122e5c31af7Sopenharmony_ci
123e5c31af7Sopenharmony_ci		void main()
124e5c31af7Sopenharmony_ci		{
125e5c31af7Sopenharmony_ci			variable1 = float(gl_VertexID);
126e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
127e5c31af7Sopenharmony_ci		}
128e5c31af7Sopenharmony_ci	""
129e5c31af7Sopenharmony_ci	fragment ""
130e5c31af7Sopenharmony_ci		#version 310 es
131e5c31af7Sopenharmony_ci		precision mediump float;
132e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
133e5c31af7Sopenharmony_ci		in IOBlockName
134e5c31af7Sopenharmony_ci		{
135e5c31af7Sopenharmony_ci			mediump float variable2;
136e5c31af7Sopenharmony_ci		};
137e5c31af7Sopenharmony_ci
138e5c31af7Sopenharmony_ci		void main()
139e5c31af7Sopenharmony_ci		{
140e5c31af7Sopenharmony_ci			${FRAG_COLOR} = vec4(variable2);
141e5c31af7Sopenharmony_ci		}
142e5c31af7Sopenharmony_ci	""
143e5c31af7Sopenharmony_ciend
144e5c31af7Sopenharmony_ci
145e5c31af7Sopenharmony_cicase mismatch_member_array_size
146e5c31af7Sopenharmony_ci	version 310 es
147e5c31af7Sopenharmony_ci	desc "Shader io block mismatch: different member array size"
148e5c31af7Sopenharmony_ci	require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment }
149e5c31af7Sopenharmony_ci	expect link_fail
150e5c31af7Sopenharmony_ci	vertex ""
151e5c31af7Sopenharmony_ci		#version 310 es
152e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
153e5c31af7Sopenharmony_ci		out IOBlockName
154e5c31af7Sopenharmony_ci		{
155e5c31af7Sopenharmony_ci			mediump float variable[1];
156e5c31af7Sopenharmony_ci		};
157e5c31af7Sopenharmony_ci
158e5c31af7Sopenharmony_ci		void main()
159e5c31af7Sopenharmony_ci		{
160e5c31af7Sopenharmony_ci			variable[0] = float(gl_VertexID);
161e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
162e5c31af7Sopenharmony_ci		}
163e5c31af7Sopenharmony_ci	""
164e5c31af7Sopenharmony_ci	fragment ""
165e5c31af7Sopenharmony_ci		#version 310 es
166e5c31af7Sopenharmony_ci		precision mediump float;
167e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
168e5c31af7Sopenharmony_ci		in IOBlockName
169e5c31af7Sopenharmony_ci		{
170e5c31af7Sopenharmony_ci			mediump float variable[2];
171e5c31af7Sopenharmony_ci		};
172e5c31af7Sopenharmony_ci
173e5c31af7Sopenharmony_ci		void main()
174e5c31af7Sopenharmony_ci		{
175e5c31af7Sopenharmony_ci			${FRAG_COLOR} = vec4(variable[0] + variable[1]);
176e5c31af7Sopenharmony_ci		}
177e5c31af7Sopenharmony_ci	""
178e5c31af7Sopenharmony_ciend
179e5c31af7Sopenharmony_ci
180e5c31af7Sopenharmony_cicase with_and_without_instance_name
181e5c31af7Sopenharmony_ci	version 310 es
182e5c31af7Sopenharmony_ci	desc "Shader io block: with and without instance name"
183e5c31af7Sopenharmony_ci	require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment }
184e5c31af7Sopenharmony_ci	values
185e5c31af7Sopenharmony_ci	{
186e5c31af7Sopenharmony_ci		input float in0 = 1.0;
187e5c31af7Sopenharmony_ci		output float out0 = 1.0;
188e5c31af7Sopenharmony_ci	}
189e5c31af7Sopenharmony_ci	vertex ""
190e5c31af7Sopenharmony_ci		#version 310 es
191e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
192e5c31af7Sopenharmony_ci		out IOBlockName
193e5c31af7Sopenharmony_ci		{
194e5c31af7Sopenharmony_ci			mediump float variable;
195e5c31af7Sopenharmony_ci		} instanceName;
196e5c31af7Sopenharmony_ci
197e5c31af7Sopenharmony_ci		void main()
198e5c31af7Sopenharmony_ci		{
199e5c31af7Sopenharmony_ci			instanceName.variable = in0;
200e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
201e5c31af7Sopenharmony_ci		}
202e5c31af7Sopenharmony_ci	""
203e5c31af7Sopenharmony_ci	fragment ""
204e5c31af7Sopenharmony_ci		#version 310 es
205e5c31af7Sopenharmony_ci		precision mediump float;
206e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
207e5c31af7Sopenharmony_ci		in IOBlockName
208e5c31af7Sopenharmony_ci		{
209e5c31af7Sopenharmony_ci			mediump float variable;
210e5c31af7Sopenharmony_ci		};
211e5c31af7Sopenharmony_ci
212e5c31af7Sopenharmony_ci		void main()
213e5c31af7Sopenharmony_ci		{
214e5c31af7Sopenharmony_ci			out0 = variable;
215e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
216e5c31af7Sopenharmony_ci		}
217e5c31af7Sopenharmony_ci	""
218e5c31af7Sopenharmony_ciend
219e5c31af7Sopenharmony_ci
220e5c31af7Sopenharmony_cicase mismatch_block_array_size
221e5c31af7Sopenharmony_ci	version 310 es
222e5c31af7Sopenharmony_ci	desc "Shader io block mismatch: different array size"
223e5c31af7Sopenharmony_ci	require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment }
224e5c31af7Sopenharmony_ci	expect link_fail
225e5c31af7Sopenharmony_ci	vertex ""
226e5c31af7Sopenharmony_ci		#version 310 es
227e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
228e5c31af7Sopenharmony_ci		out IOBlockName
229e5c31af7Sopenharmony_ci		{
230e5c31af7Sopenharmony_ci			mediump float variable;
231e5c31af7Sopenharmony_ci		} instanceName[1];
232e5c31af7Sopenharmony_ci
233e5c31af7Sopenharmony_ci		void main()
234e5c31af7Sopenharmony_ci		{
235e5c31af7Sopenharmony_ci			instanceName[0].variable = float(gl_VertexID);
236e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
237e5c31af7Sopenharmony_ci		}
238e5c31af7Sopenharmony_ci	""
239e5c31af7Sopenharmony_ci	fragment ""
240e5c31af7Sopenharmony_ci		#version 310 es
241e5c31af7Sopenharmony_ci		precision mediump float;
242e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
243e5c31af7Sopenharmony_ci		in IOBlockName
244e5c31af7Sopenharmony_ci		{
245e5c31af7Sopenharmony_ci			mediump float variable;
246e5c31af7Sopenharmony_ci		} instanceName[2];
247e5c31af7Sopenharmony_ci
248e5c31af7Sopenharmony_ci		void main()
249e5c31af7Sopenharmony_ci		{
250e5c31af7Sopenharmony_ci			${FRAG_COLOR} = vec4(instanceName[0].variable + instanceName[1].variable);
251e5c31af7Sopenharmony_ci		}
252e5c31af7Sopenharmony_ci	""
253e5c31af7Sopenharmony_ciend
254e5c31af7Sopenharmony_ci
255e5c31af7Sopenharmony_cicase missing_output_block
256e5c31af7Sopenharmony_ci	version 310 es
257e5c31af7Sopenharmony_ci	desc "Shader io block mismatch: missing output block"
258e5c31af7Sopenharmony_ci	require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment }
259e5c31af7Sopenharmony_ci	expect link_fail
260e5c31af7Sopenharmony_ci	vertex ""
261e5c31af7Sopenharmony_ci		#version 310 es
262e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
263e5c31af7Sopenharmony_ci		void main()
264e5c31af7Sopenharmony_ci		{
265e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
266e5c31af7Sopenharmony_ci		}
267e5c31af7Sopenharmony_ci	""
268e5c31af7Sopenharmony_ci	fragment ""
269e5c31af7Sopenharmony_ci		#version 310 es
270e5c31af7Sopenharmony_ci		precision mediump float;
271e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
272e5c31af7Sopenharmony_ci		in IOBlockName
273e5c31af7Sopenharmony_ci		{
274e5c31af7Sopenharmony_ci			mediump float variable;
275e5c31af7Sopenharmony_ci		};
276e5c31af7Sopenharmony_ci
277e5c31af7Sopenharmony_ci		void main()
278e5c31af7Sopenharmony_ci		{
279e5c31af7Sopenharmony_ci			${FRAG_COLOR} = vec4(variable);
280e5c31af7Sopenharmony_ci		}
281e5c31af7Sopenharmony_ci	""
282e5c31af7Sopenharmony_ciend
283e5c31af7Sopenharmony_ci
284e5c31af7Sopenharmony_cicase ambiguous_variable_name_1
285e5c31af7Sopenharmony_ci	version 310 es
286e5c31af7Sopenharmony_ci	desc "Unnamed io block variable and global variable with identical names"
287e5c31af7Sopenharmony_ci	require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment }
288e5c31af7Sopenharmony_ci	expect compile_or_link_fail
289e5c31af7Sopenharmony_ci	vertex ""
290e5c31af7Sopenharmony_ci		#version 310 es
291e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
292e5c31af7Sopenharmony_ci		float variable;
293e5c31af7Sopenharmony_ci		out IOBlockName
294e5c31af7Sopenharmony_ci		{
295e5c31af7Sopenharmony_ci			mediump float variable;
296e5c31af7Sopenharmony_ci		};
297e5c31af7Sopenharmony_ci
298e5c31af7Sopenharmony_ci		void main()
299e5c31af7Sopenharmony_ci		{
300e5c31af7Sopenharmony_ci			variable = float(gl_VertexID);
301e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
302e5c31af7Sopenharmony_ci		}
303e5c31af7Sopenharmony_ci	""
304e5c31af7Sopenharmony_ci	fragment ""
305e5c31af7Sopenharmony_ci		#version 310 es
306e5c31af7Sopenharmony_ci		precision mediump float;
307e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
308e5c31af7Sopenharmony_ci		in IOBlockName
309e5c31af7Sopenharmony_ci		{
310e5c31af7Sopenharmony_ci			mediump float variable;
311e5c31af7Sopenharmony_ci		};
312e5c31af7Sopenharmony_ci
313e5c31af7Sopenharmony_ci		void main()
314e5c31af7Sopenharmony_ci		{
315e5c31af7Sopenharmony_ci			${FRAG_COLOR} = vec4(variable);
316e5c31af7Sopenharmony_ci		}
317e5c31af7Sopenharmony_ci	""
318e5c31af7Sopenharmony_ciend
319e5c31af7Sopenharmony_ci
320e5c31af7Sopenharmony_cicase ambiguous_variable_name_2
321e5c31af7Sopenharmony_ci	version 310 es
322e5c31af7Sopenharmony_ci	desc "Two unnamed io blocks with variables with identical names"
323e5c31af7Sopenharmony_ci	require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment }
324e5c31af7Sopenharmony_ci	expect compile_or_link_fail
325e5c31af7Sopenharmony_ci	vertex ""
326e5c31af7Sopenharmony_ci		#version 310 es
327e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
328e5c31af7Sopenharmony_ci		out IOBlockNameA
329e5c31af7Sopenharmony_ci		{
330e5c31af7Sopenharmony_ci			mediump float variable;
331e5c31af7Sopenharmony_ci		};
332e5c31af7Sopenharmony_ci		out IOBlockNameB
333e5c31af7Sopenharmony_ci		{
334e5c31af7Sopenharmony_ci			mediump float variable;
335e5c31af7Sopenharmony_ci		};
336e5c31af7Sopenharmony_ci
337e5c31af7Sopenharmony_ci		void main()
338e5c31af7Sopenharmony_ci		{
339e5c31af7Sopenharmony_ci			variable = float(gl_VertexID);
340e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
341e5c31af7Sopenharmony_ci		}
342e5c31af7Sopenharmony_ci	""
343e5c31af7Sopenharmony_ci	fragment ""
344e5c31af7Sopenharmony_ci		#version 310 es
345e5c31af7Sopenharmony_ci		precision mediump float;
346e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
347e5c31af7Sopenharmony_ci		in IOBlockNameA
348e5c31af7Sopenharmony_ci		{
349e5c31af7Sopenharmony_ci			mediump float variable;
350e5c31af7Sopenharmony_ci		};
351e5c31af7Sopenharmony_ci		in IOBlockNameB
352e5c31af7Sopenharmony_ci		{
353e5c31af7Sopenharmony_ci			mediump float variable;
354e5c31af7Sopenharmony_ci		};
355e5c31af7Sopenharmony_ci
356e5c31af7Sopenharmony_ci		void main()
357e5c31af7Sopenharmony_ci		{
358e5c31af7Sopenharmony_ci			${FRAG_COLOR} = vec4(variable);
359e5c31af7Sopenharmony_ci		}
360e5c31af7Sopenharmony_ci	""
361e5c31af7Sopenharmony_ciend
362