1e5c31af7Sopenharmony_ci# not declared in vertex shader, declared in fragment shader
2e5c31af7Sopenharmony_cicase varying_1
3e5c31af7Sopenharmony_ci	desc "varying declared in fragment shader, no reference in vertex shader"
4e5c31af7Sopenharmony_ci	values { output float out0 = 1.0; }
5e5c31af7Sopenharmony_ci	vertex ""
6e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
7e5c31af7Sopenharmony_ci		void main()
8e5c31af7Sopenharmony_ci		{
9e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
10e5c31af7Sopenharmony_ci		}
11e5c31af7Sopenharmony_ci	""
12e5c31af7Sopenharmony_ci	fragment ""
13e5c31af7Sopenharmony_ci		precision mediump float;
14e5c31af7Sopenharmony_ci		varying mediump float var;
15e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
16e5c31af7Sopenharmony_ci		void main()
17e5c31af7Sopenharmony_ci		{
18e5c31af7Sopenharmony_ci			out0 = 1.0;
19e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
20e5c31af7Sopenharmony_ci		}
21e5c31af7Sopenharmony_ci	""
22e5c31af7Sopenharmony_ciend
23e5c31af7Sopenharmony_ci
24e5c31af7Sopenharmony_ci# declared in vertex shader, no reference in frag shader
25e5c31af7Sopenharmony_cicase varying_2
26e5c31af7Sopenharmony_ci	desc "varying declared in vertex shader, no reference in fragment shader"
27e5c31af7Sopenharmony_ci	vertex ""
28e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
29e5c31af7Sopenharmony_ci		varying mediump float var;
30e5c31af7Sopenharmony_ci		void main()
31e5c31af7Sopenharmony_ci		{
32e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
33e5c31af7Sopenharmony_ci		}
34e5c31af7Sopenharmony_ci	""
35e5c31af7Sopenharmony_ci	fragment ""
36e5c31af7Sopenharmony_ci		void main()
37e5c31af7Sopenharmony_ci		{
38e5c31af7Sopenharmony_ci			gl_FragColor = vec4(1.0);
39e5c31af7Sopenharmony_ci		}
40e5c31af7Sopenharmony_ci	""
41e5c31af7Sopenharmony_ciend
42e5c31af7Sopenharmony_ci
43e5c31af7Sopenharmony_ci# declared in vertex shader, declared in frag shader
44e5c31af7Sopenharmony_cicase varying_3
45e5c31af7Sopenharmony_ci	desc "varying declared in both vertex and fragment shader, but not used"
46e5c31af7Sopenharmony_ci	vertex ""
47e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
48e5c31af7Sopenharmony_ci		varying mediump float var;
49e5c31af7Sopenharmony_ci		void main()
50e5c31af7Sopenharmony_ci		{
51e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
52e5c31af7Sopenharmony_ci		}
53e5c31af7Sopenharmony_ci	""
54e5c31af7Sopenharmony_ci	fragment ""
55e5c31af7Sopenharmony_ci		varying mediump float var;
56e5c31af7Sopenharmony_ci		void main()
57e5c31af7Sopenharmony_ci		{
58e5c31af7Sopenharmony_ci			gl_FragColor = vec4(1.0);
59e5c31af7Sopenharmony_ci		}
60e5c31af7Sopenharmony_ci	""
61e5c31af7Sopenharmony_ciend
62e5c31af7Sopenharmony_ci
63e5c31af7Sopenharmony_ci# declared in vertex shader, static use in frag shader
64e5c31af7Sopenharmony_cicase varying_4
65e5c31af7Sopenharmony_ci	desc "varying declared in both shaders, statically used in fragment shader"
66e5c31af7Sopenharmony_ci	values { uniform bool u_false = false; }
67e5c31af7Sopenharmony_ci	vertex ""
68e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
69e5c31af7Sopenharmony_ci		varying mediump float var;
70e5c31af7Sopenharmony_ci		void main()
71e5c31af7Sopenharmony_ci		{
72e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
73e5c31af7Sopenharmony_ci		}
74e5c31af7Sopenharmony_ci	""
75e5c31af7Sopenharmony_ci	fragment ""
76e5c31af7Sopenharmony_ci		varying mediump float var;
77e5c31af7Sopenharmony_ci		uniform bool u_false;
78e5c31af7Sopenharmony_ci		void main()
79e5c31af7Sopenharmony_ci		{
80e5c31af7Sopenharmony_ci			if (u_false)
81e5c31af7Sopenharmony_ci				gl_FragColor = vec4(var);
82e5c31af7Sopenharmony_ci			else
83e5c31af7Sopenharmony_ci				gl_FragColor = vec4(1.0);
84e5c31af7Sopenharmony_ci		}
85e5c31af7Sopenharmony_ci	""
86e5c31af7Sopenharmony_ciend
87e5c31af7Sopenharmony_ci
88e5c31af7Sopenharmony_ci# static use in vertex shader, no reference in fragment shader
89e5c31af7Sopenharmony_cicase varying_5
90e5c31af7Sopenharmony_ci	desc "varying declared and statically used in vertex shader, no reference in fragment shader"
91e5c31af7Sopenharmony_ci	values { uniform bool u_false = false; }
92e5c31af7Sopenharmony_ci	vertex ""
93e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
94e5c31af7Sopenharmony_ci		varying mediump float var;
95e5c31af7Sopenharmony_ci		void main()
96e5c31af7Sopenharmony_ci		{
97e5c31af7Sopenharmony_ci			if (u_false)
98e5c31af7Sopenharmony_ci				var = 1.0;
99e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
100e5c31af7Sopenharmony_ci		}
101e5c31af7Sopenharmony_ci	""
102e5c31af7Sopenharmony_ci	fragment ""
103e5c31af7Sopenharmony_ci		void main()
104e5c31af7Sopenharmony_ci		{
105e5c31af7Sopenharmony_ci			gl_FragColor = vec4(1.0);
106e5c31af7Sopenharmony_ci		}
107e5c31af7Sopenharmony_ci	""
108e5c31af7Sopenharmony_ciend
109e5c31af7Sopenharmony_ci
110e5c31af7Sopenharmony_ci# static use in vertex shader, declared in fragment shader
111e5c31af7Sopenharmony_cicase varying_6
112e5c31af7Sopenharmony_ci	desc "varying declared and statically used in vertex shader, only declared in fragment shader"
113e5c31af7Sopenharmony_ci	values { uniform bool u_false = false; }
114e5c31af7Sopenharmony_ci	vertex ""
115e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
116e5c31af7Sopenharmony_ci		varying mediump float var;
117e5c31af7Sopenharmony_ci		void main()
118e5c31af7Sopenharmony_ci		{
119e5c31af7Sopenharmony_ci			if (u_false)
120e5c31af7Sopenharmony_ci				var = 1.0;
121e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
122e5c31af7Sopenharmony_ci		}
123e5c31af7Sopenharmony_ci	""
124e5c31af7Sopenharmony_ci	fragment ""
125e5c31af7Sopenharmony_ci		varying mediump float var;
126e5c31af7Sopenharmony_ci		void main()
127e5c31af7Sopenharmony_ci		{
128e5c31af7Sopenharmony_ci			gl_FragColor = vec4(1.0);
129e5c31af7Sopenharmony_ci		}
130e5c31af7Sopenharmony_ci	""
131e5c31af7Sopenharmony_ciend
132e5c31af7Sopenharmony_ci
133e5c31af7Sopenharmony_ci# static use in vertex shader, used in fragment shader
134e5c31af7Sopenharmony_cicase varying_7
135e5c31af7Sopenharmony_ci	desc "varying statically used in both vertex and fragment shader"
136e5c31af7Sopenharmony_ci	values { uniform bool u_false = false; }
137e5c31af7Sopenharmony_ci	vertex ""
138e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
139e5c31af7Sopenharmony_ci		varying mediump float var;
140e5c31af7Sopenharmony_ci		void main()
141e5c31af7Sopenharmony_ci		{
142e5c31af7Sopenharmony_ci			if (u_false)
143e5c31af7Sopenharmony_ci				var = 1.0;
144e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
145e5c31af7Sopenharmony_ci		}
146e5c31af7Sopenharmony_ci	""
147e5c31af7Sopenharmony_ci	fragment ""
148e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
149e5c31af7Sopenharmony_ci		varying mediump float var;
150e5c31af7Sopenharmony_ci		void main()
151e5c31af7Sopenharmony_ci		{
152e5c31af7Sopenharmony_ci			if (u_false)
153e5c31af7Sopenharmony_ci				gl_FragColor = vec4(var);
154e5c31af7Sopenharmony_ci			else
155e5c31af7Sopenharmony_ci				gl_FragColor = vec4(1.0);
156e5c31af7Sopenharmony_ci		}
157e5c31af7Sopenharmony_ci	""
158e5c31af7Sopenharmony_ciend
159e5c31af7Sopenharmony_ci
160e5c31af7Sopenharmony_cicase varying_type_float
161e5c31af7Sopenharmony_ci	desc "varying of type float"
162e5c31af7Sopenharmony_ci	values
163e5c31af7Sopenharmony_ci	{
164e5c31af7Sopenharmony_ci		input float in0		= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
165e5c31af7Sopenharmony_ci		output float out0	= [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ];
166e5c31af7Sopenharmony_ci	}
167e5c31af7Sopenharmony_ci	vertex ""
168e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
169e5c31af7Sopenharmony_ci		varying mediump float var;
170e5c31af7Sopenharmony_ci		void main()
171e5c31af7Sopenharmony_ci		{
172e5c31af7Sopenharmony_ci			var = in0;
173e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
174e5c31af7Sopenharmony_ci		}
175e5c31af7Sopenharmony_ci	""
176e5c31af7Sopenharmony_ci	fragment ""
177e5c31af7Sopenharmony_ci		precision mediump float;
178e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
179e5c31af7Sopenharmony_ci		varying float var;
180e5c31af7Sopenharmony_ci		void main()
181e5c31af7Sopenharmony_ci		{
182e5c31af7Sopenharmony_ci			out0 = var;
183e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
184e5c31af7Sopenharmony_ci		}
185e5c31af7Sopenharmony_ci	""
186e5c31af7Sopenharmony_ciend
187e5c31af7Sopenharmony_ci
188e5c31af7Sopenharmony_cicase varying_type_vec2
189e5c31af7Sopenharmony_ci	desc "varying of type vec2"
190e5c31af7Sopenharmony_ci	values
191e5c31af7Sopenharmony_ci	{
192e5c31af7Sopenharmony_ci		input vec2 in0		= [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
193e5c31af7Sopenharmony_ci		output vec2 out0	= [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ];
194e5c31af7Sopenharmony_ci	}
195e5c31af7Sopenharmony_ci	vertex ""
196e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
197e5c31af7Sopenharmony_ci		varying mediump vec2 var;
198e5c31af7Sopenharmony_ci		void main()
199e5c31af7Sopenharmony_ci		{
200e5c31af7Sopenharmony_ci			var = in0;
201e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
202e5c31af7Sopenharmony_ci		}
203e5c31af7Sopenharmony_ci	""
204e5c31af7Sopenharmony_ci	fragment ""
205e5c31af7Sopenharmony_ci		precision mediump float;
206e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
207e5c31af7Sopenharmony_ci		varying vec2 var;
208e5c31af7Sopenharmony_ci		void main()
209e5c31af7Sopenharmony_ci		{
210e5c31af7Sopenharmony_ci			out0 = var;
211e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
212e5c31af7Sopenharmony_ci		}
213e5c31af7Sopenharmony_ci	""
214e5c31af7Sopenharmony_ciend
215e5c31af7Sopenharmony_ci
216e5c31af7Sopenharmony_cicase varying_type_vec3
217e5c31af7Sopenharmony_ci	desc "varying of type vec3"
218e5c31af7Sopenharmony_ci	values
219e5c31af7Sopenharmony_ci	{
220e5c31af7Sopenharmony_ci		input vec3 in0		= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
221e5c31af7Sopenharmony_ci		output vec3 out0	= [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ];
222e5c31af7Sopenharmony_ci	}
223e5c31af7Sopenharmony_ci	vertex ""
224e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
225e5c31af7Sopenharmony_ci		varying mediump vec3 var;
226e5c31af7Sopenharmony_ci		void main()
227e5c31af7Sopenharmony_ci		{
228e5c31af7Sopenharmony_ci			var = in0;
229e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
230e5c31af7Sopenharmony_ci		}
231e5c31af7Sopenharmony_ci	""
232e5c31af7Sopenharmony_ci	fragment ""
233e5c31af7Sopenharmony_ci		precision mediump float;
234e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
235e5c31af7Sopenharmony_ci		varying vec3 var;
236e5c31af7Sopenharmony_ci		void main()
237e5c31af7Sopenharmony_ci		{
238e5c31af7Sopenharmony_ci			out0 = var;
239e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
240e5c31af7Sopenharmony_ci		}
241e5c31af7Sopenharmony_ci	""
242e5c31af7Sopenharmony_ciend
243e5c31af7Sopenharmony_ci
244e5c31af7Sopenharmony_cicase varying_type_vec4
245e5c31af7Sopenharmony_ci	desc "varying of type vec4"
246e5c31af7Sopenharmony_ci	values
247e5c31af7Sopenharmony_ci	{
248e5c31af7Sopenharmony_ci		input vec4 in0		= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
249e5c31af7Sopenharmony_ci		output vec4 out0	= [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ];
250e5c31af7Sopenharmony_ci	}
251e5c31af7Sopenharmony_ci	vertex ""
252e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
253e5c31af7Sopenharmony_ci		varying mediump vec4 var;
254e5c31af7Sopenharmony_ci		void main()
255e5c31af7Sopenharmony_ci		{
256e5c31af7Sopenharmony_ci			var = in0;
257e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
258e5c31af7Sopenharmony_ci		}
259e5c31af7Sopenharmony_ci	""
260e5c31af7Sopenharmony_ci	fragment ""
261e5c31af7Sopenharmony_ci		precision mediump float;
262e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
263e5c31af7Sopenharmony_ci		varying vec4 var;
264e5c31af7Sopenharmony_ci		void main()
265e5c31af7Sopenharmony_ci		{
266e5c31af7Sopenharmony_ci			out0 = var;
267e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
268e5c31af7Sopenharmony_ci		}
269e5c31af7Sopenharmony_ci	""
270e5c31af7Sopenharmony_ciend
271e5c31af7Sopenharmony_ci
272e5c31af7Sopenharmony_cicase varying_type_mat2
273e5c31af7Sopenharmony_ci	desc "varying of type mat2"
274e5c31af7Sopenharmony_ci	values
275e5c31af7Sopenharmony_ci	{
276e5c31af7Sopenharmony_ci		input mat2 in0		= [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
277e5c31af7Sopenharmony_ci		output mat2 out0	= [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ];
278e5c31af7Sopenharmony_ci	}
279e5c31af7Sopenharmony_ci	vertex ""
280e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
281e5c31af7Sopenharmony_ci		varying mediump mat2 var;
282e5c31af7Sopenharmony_ci		void main()
283e5c31af7Sopenharmony_ci		{
284e5c31af7Sopenharmony_ci			var = in0;
285e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
286e5c31af7Sopenharmony_ci		}
287e5c31af7Sopenharmony_ci	""
288e5c31af7Sopenharmony_ci	fragment ""
289e5c31af7Sopenharmony_ci		precision mediump float;
290e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
291e5c31af7Sopenharmony_ci		varying mat2 var;
292e5c31af7Sopenharmony_ci		void main()
293e5c31af7Sopenharmony_ci		{
294e5c31af7Sopenharmony_ci			out0 = var;
295e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
296e5c31af7Sopenharmony_ci		}
297e5c31af7Sopenharmony_ci	""
298e5c31af7Sopenharmony_ciend
299e5c31af7Sopenharmony_ci
300e5c31af7Sopenharmony_cicase varying_type_mat3
301e5c31af7Sopenharmony_ci	desc "varying of type mat3"
302e5c31af7Sopenharmony_ci	values
303e5c31af7Sopenharmony_ci	{
304e5c31af7Sopenharmony_ci		input mat3 in0		= [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
305e5c31af7Sopenharmony_ci		output mat3 out0	= [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ];
306e5c31af7Sopenharmony_ci	}
307e5c31af7Sopenharmony_ci	vertex ""
308e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
309e5c31af7Sopenharmony_ci		varying mediump mat3 var;
310e5c31af7Sopenharmony_ci		void main()
311e5c31af7Sopenharmony_ci		{
312e5c31af7Sopenharmony_ci			var = in0;
313e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
314e5c31af7Sopenharmony_ci		}
315e5c31af7Sopenharmony_ci	""
316e5c31af7Sopenharmony_ci	fragment ""
317e5c31af7Sopenharmony_ci		precision mediump float;
318e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
319e5c31af7Sopenharmony_ci		varying mat3 var;
320e5c31af7Sopenharmony_ci		void main()
321e5c31af7Sopenharmony_ci		{
322e5c31af7Sopenharmony_ci			out0 = var;
323e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
324e5c31af7Sopenharmony_ci		}
325e5c31af7Sopenharmony_ci	""
326e5c31af7Sopenharmony_ciend
327e5c31af7Sopenharmony_ci
328e5c31af7Sopenharmony_cicase varying_type_mat4
329e5c31af7Sopenharmony_ci	desc "varying of type mat4"
330e5c31af7Sopenharmony_ci	values
331e5c31af7Sopenharmony_ci	{
332e5c31af7Sopenharmony_ci		input mat4 in0		= [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
333e5c31af7Sopenharmony_ci		output mat4 out0	= [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ];
334e5c31af7Sopenharmony_ci	}
335e5c31af7Sopenharmony_ci	vertex ""
336e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
337e5c31af7Sopenharmony_ci		varying mediump mat4 var;
338e5c31af7Sopenharmony_ci		void main()
339e5c31af7Sopenharmony_ci		{
340e5c31af7Sopenharmony_ci			var = in0;
341e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
342e5c31af7Sopenharmony_ci		}
343e5c31af7Sopenharmony_ci	""
344e5c31af7Sopenharmony_ci	fragment ""
345e5c31af7Sopenharmony_ci		precision mediump float;
346e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
347e5c31af7Sopenharmony_ci		varying mat4 var;
348e5c31af7Sopenharmony_ci		void main()
349e5c31af7Sopenharmony_ci		{
350e5c31af7Sopenharmony_ci			out0 = var;
351e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
352e5c31af7Sopenharmony_ci		}
353e5c31af7Sopenharmony_ci	""
354e5c31af7Sopenharmony_ciend
355e5c31af7Sopenharmony_ci
356e5c31af7Sopenharmony_ci# differing precision tests
357e5c31af7Sopenharmony_cicase varying_differing_precision_1
358e5c31af7Sopenharmony_ci	desc "varying declared as highp in vertex shader, but mediump in fragment shader"
359e5c31af7Sopenharmony_ci	values
360e5c31af7Sopenharmony_ci	{
361e5c31af7Sopenharmony_ci		input float in0		= [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
362e5c31af7Sopenharmony_ci		output float out0	= [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ];
363e5c31af7Sopenharmony_ci	}
364e5c31af7Sopenharmony_ci
365e5c31af7Sopenharmony_ci	vertex ""
366e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
367e5c31af7Sopenharmony_ci		varying highp float var;
368e5c31af7Sopenharmony_ci		void main()
369e5c31af7Sopenharmony_ci		{
370e5c31af7Sopenharmony_ci			var = in0;
371e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
372e5c31af7Sopenharmony_ci		}
373e5c31af7Sopenharmony_ci	""
374e5c31af7Sopenharmony_ci	fragment ""
375e5c31af7Sopenharmony_ci		precision mediump float;
376e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
377e5c31af7Sopenharmony_ci		varying mediump float var;
378e5c31af7Sopenharmony_ci		void main()
379e5c31af7Sopenharmony_ci		{
380e5c31af7Sopenharmony_ci			out0 = var;
381e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
382e5c31af7Sopenharmony_ci		}
383e5c31af7Sopenharmony_ci	""
384e5c31af7Sopenharmony_ciend
385e5c31af7Sopenharmony_ci
386e5c31af7Sopenharmony_ci# differing precision tests
387e5c31af7Sopenharmony_cicase varying_differing_precision_2
388e5c31af7Sopenharmony_ci	desc "varying declared as highp in vertex shader, but lowp in fragment shader"
389e5c31af7Sopenharmony_ci	values
390e5c31af7Sopenharmony_ci	{
391e5c31af7Sopenharmony_ci		input float in0		= [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
392e5c31af7Sopenharmony_ci		output float out0	= [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ];
393e5c31af7Sopenharmony_ci	}
394e5c31af7Sopenharmony_ci
395e5c31af7Sopenharmony_ci	vertex ""
396e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
397e5c31af7Sopenharmony_ci		varying highp vec2 var;
398e5c31af7Sopenharmony_ci		void main()
399e5c31af7Sopenharmony_ci		{
400e5c31af7Sopenharmony_ci			var = vec2(in0, 2.0*in0);
401e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
402e5c31af7Sopenharmony_ci		}
403e5c31af7Sopenharmony_ci	""
404e5c31af7Sopenharmony_ci	fragment ""
405e5c31af7Sopenharmony_ci		precision mediump float;
406e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
407e5c31af7Sopenharmony_ci		varying lowp vec2 var;
408e5c31af7Sopenharmony_ci		void main()
409e5c31af7Sopenharmony_ci		{
410e5c31af7Sopenharmony_ci			out0 = var.y - var.x;
411e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
412e5c31af7Sopenharmony_ci		}
413e5c31af7Sopenharmony_ci	""
414e5c31af7Sopenharmony_ciend
415e5c31af7Sopenharmony_ci
416e5c31af7Sopenharmony_ci# differing precision tests
417e5c31af7Sopenharmony_cicase varying_differing_precision_3
418e5c31af7Sopenharmony_ci	desc "varying declared as lowp in vertex shader, but mediump in fragment shader"
419e5c31af7Sopenharmony_ci	values
420e5c31af7Sopenharmony_ci	{
421e5c31af7Sopenharmony_ci		input float in0		= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
422e5c31af7Sopenharmony_ci		output float out0	= [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ];
423e5c31af7Sopenharmony_ci	}
424e5c31af7Sopenharmony_ci
425e5c31af7Sopenharmony_ci	vertex ""
426e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
427e5c31af7Sopenharmony_ci		varying lowp vec4 var;
428e5c31af7Sopenharmony_ci		void main()
429e5c31af7Sopenharmony_ci		{
430e5c31af7Sopenharmony_ci			var = vec4(in0, 2.0*in0, -in0, -in0);
431e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
432e5c31af7Sopenharmony_ci		}
433e5c31af7Sopenharmony_ci	""
434e5c31af7Sopenharmony_ci	fragment ""
435e5c31af7Sopenharmony_ci		precision mediump float;
436e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
437e5c31af7Sopenharmony_ci		varying mediump vec4 var;
438e5c31af7Sopenharmony_ci		void main()
439e5c31af7Sopenharmony_ci		{
440e5c31af7Sopenharmony_ci			out0 = var.x + var.y + var.z + var.w;
441e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
442e5c31af7Sopenharmony_ci		}
443e5c31af7Sopenharmony_ci	""
444e5c31af7Sopenharmony_ciend
445e5c31af7Sopenharmony_ci
446e5c31af7Sopenharmony_ci# mismatched type, static use but no runtime use in the fragment shader
447e5c31af7Sopenharmony_cicase varying_type_mismatch_1
448e5c31af7Sopenharmony_ci	desc "varying type mismatch (float vs. vec2), static use but no runtime use in the fragment shader"
449e5c31af7Sopenharmony_ci	expect link_fail
450e5c31af7Sopenharmony_ci	vertex ""
451e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
452e5c31af7Sopenharmony_ci		varying mediump float var;
453e5c31af7Sopenharmony_ci		void main()
454e5c31af7Sopenharmony_ci		{
455e5c31af7Sopenharmony_ci			var = 2.0;
456e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
457e5c31af7Sopenharmony_ci		}
458e5c31af7Sopenharmony_ci	""
459e5c31af7Sopenharmony_ci	fragment ""
460e5c31af7Sopenharmony_ci		varying mediump vec2 var;
461e5c31af7Sopenharmony_ci		void main()
462e5c31af7Sopenharmony_ci		{
463e5c31af7Sopenharmony_ci			if (false)
464e5c31af7Sopenharmony_ci			{
465e5c31af7Sopenharmony_ci				gl_FragColor = vec4(var.y);
466e5c31af7Sopenharmony_ci			}
467e5c31af7Sopenharmony_ci			else
468e5c31af7Sopenharmony_ci			{
469e5c31af7Sopenharmony_ci				${FRAG_COLOR} = vec4(1.0);
470e5c31af7Sopenharmony_ci			}
471e5c31af7Sopenharmony_ci		}
472e5c31af7Sopenharmony_ci	""
473e5c31af7Sopenharmony_ciend
474e5c31af7Sopenharmony_ci
475e5c31af7Sopenharmony_ci# mismatched type, varyings used
476e5c31af7Sopenharmony_cicase varying_type_mismatch_2
477e5c31af7Sopenharmony_ci	desc "varying type mismatch (float vs. vec2)"
478e5c31af7Sopenharmony_ci	expect link_fail
479e5c31af7Sopenharmony_ci	vertex ""
480e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
481e5c31af7Sopenharmony_ci		varying mediump float var;
482e5c31af7Sopenharmony_ci		void main()
483e5c31af7Sopenharmony_ci		{
484e5c31af7Sopenharmony_ci			var = 2.0;
485e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
486e5c31af7Sopenharmony_ci		}
487e5c31af7Sopenharmony_ci	""
488e5c31af7Sopenharmony_ci	fragment ""
489e5c31af7Sopenharmony_ci		varying mediump vec2 var;
490e5c31af7Sopenharmony_ci		void main()
491e5c31af7Sopenharmony_ci		{
492e5c31af7Sopenharmony_ci			gl_FragColor = var.xyyx;
493e5c31af7Sopenharmony_ci		}
494e5c31af7Sopenharmony_ci	""
495e5c31af7Sopenharmony_ciend
496e5c31af7Sopenharmony_ci
497e5c31af7Sopenharmony_ci# no declaration in vertex shader, but static use in fragment
498e5c31af7Sopenharmony_cicase varying_illegal_usage_1
499e5c31af7Sopenharmony_ci	desc "varying not declared in vertex shader, but statically used in fragment shader"
500e5c31af7Sopenharmony_ci	expect link_fail
501e5c31af7Sopenharmony_ci	vertex ""
502e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
503e5c31af7Sopenharmony_ci		void main()
504e5c31af7Sopenharmony_ci		{
505e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
506e5c31af7Sopenharmony_ci		}
507e5c31af7Sopenharmony_ci	""
508e5c31af7Sopenharmony_ci	fragment ""
509e5c31af7Sopenharmony_ci		varying mediump float var;
510e5c31af7Sopenharmony_ci		void main()
511e5c31af7Sopenharmony_ci		{
512e5c31af7Sopenharmony_ci			gl_FragColor = vec4(var);
513e5c31af7Sopenharmony_ci		}
514e5c31af7Sopenharmony_ci	""
515e5c31af7Sopenharmony_ciend
516e5c31af7Sopenharmony_ci
517e5c31af7Sopenharmony_ci# integer varyings not allowed
518e5c31af7Sopenharmony_cicase invalid_varying_type_int
519e5c31af7Sopenharmony_ci	desc "integer varying used"
520e5c31af7Sopenharmony_ci	expect compile_fail
521e5c31af7Sopenharmony_ci	vertex ""
522e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
523e5c31af7Sopenharmony_ci		varying mediump int var;
524e5c31af7Sopenharmony_ci		void main()
525e5c31af7Sopenharmony_ci		{
526e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
527e5c31af7Sopenharmony_ci		}
528e5c31af7Sopenharmony_ci	""
529e5c31af7Sopenharmony_ci	fragment ""
530e5c31af7Sopenharmony_ci		varying mediump int var;
531e5c31af7Sopenharmony_ci		void main()
532e5c31af7Sopenharmony_ci		{
533e5c31af7Sopenharmony_ci			gl_FragColor = vec4(1.0);
534e5c31af7Sopenharmony_ci		}
535e5c31af7Sopenharmony_ci	""
536e5c31af7Sopenharmony_ciend
537e5c31af7Sopenharmony_ci
538e5c31af7Sopenharmony_ci# bool varyings not allowed
539e5c31af7Sopenharmony_cicase invalid_varying_type_bool
540e5c31af7Sopenharmony_ci	desc "boolean varying used"
541e5c31af7Sopenharmony_ci	expect compile_fail
542e5c31af7Sopenharmony_ci	vertex ""
543e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
544e5c31af7Sopenharmony_ci		varying bool var;
545e5c31af7Sopenharmony_ci		void main()
546e5c31af7Sopenharmony_ci		{
547e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
548e5c31af7Sopenharmony_ci		}
549e5c31af7Sopenharmony_ci	""
550e5c31af7Sopenharmony_ci	fragment ""
551e5c31af7Sopenharmony_ci		varying bool var;
552e5c31af7Sopenharmony_ci		void main()
553e5c31af7Sopenharmony_ci		{
554e5c31af7Sopenharmony_ci			gl_FragColor = vec4(1.0);
555e5c31af7Sopenharmony_ci		}
556e5c31af7Sopenharmony_ci	""
557e5c31af7Sopenharmony_ciend
558e5c31af7Sopenharmony_ci
559e5c31af7Sopenharmony_ci# struct varyings not allowed
560e5c31af7Sopenharmony_cicase invalid_varying_type_struct
561e5c31af7Sopenharmony_ci	desc "struct varying used"
562e5c31af7Sopenharmony_ci	expect compile_fail
563e5c31af7Sopenharmony_ci	vertex ""
564e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
565e5c31af7Sopenharmony_ci		varying struct { mediump float foo; } var;
566e5c31af7Sopenharmony_ci		void main()
567e5c31af7Sopenharmony_ci		{
568e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
569e5c31af7Sopenharmony_ci		}
570e5c31af7Sopenharmony_ci	""
571e5c31af7Sopenharmony_ci	fragment ""
572e5c31af7Sopenharmony_ci		varying struct { mediump float foo; } var;
573e5c31af7Sopenharmony_ci		void main()
574e5c31af7Sopenharmony_ci		{
575e5c31af7Sopenharmony_ci			gl_FragColor = vec4(1.0);
576e5c31af7Sopenharmony_ci		}
577e5c31af7Sopenharmony_ci	""
578e5c31af7Sopenharmony_ciend
579e5c31af7Sopenharmony_ci
580e5c31af7Sopenharmony_cicase varying_readback_1
581e5c31af7Sopenharmony_ci	desc "read back (an already written) varying in the vertex shader"
582e5c31af7Sopenharmony_ci	values
583e5c31af7Sopenharmony_ci	{
584e5c31af7Sopenharmony_ci		input float in0		= [ 1.0 | 0.0 | -2.0 | 10.0 ];
585e5c31af7Sopenharmony_ci		output float out0	= [ 3.0 | 0.0 | -6.0 | 30.0 ];
586e5c31af7Sopenharmony_ci	}
587e5c31af7Sopenharmony_ci	vertex ""
588e5c31af7Sopenharmony_ci		precision mediump float;
589e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
590e5c31af7Sopenharmony_ci		varying float var1;
591e5c31af7Sopenharmony_ci		varying float var2;
592e5c31af7Sopenharmony_ci
593e5c31af7Sopenharmony_ci		void main()
594e5c31af7Sopenharmony_ci		{
595e5c31af7Sopenharmony_ci			var1 = in0;
596e5c31af7Sopenharmony_ci			var2 = var1 + in0;
597e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
598e5c31af7Sopenharmony_ci		}
599e5c31af7Sopenharmony_ci	""
600e5c31af7Sopenharmony_ci	fragment ""
601e5c31af7Sopenharmony_ci		precision mediump float;
602e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
603e5c31af7Sopenharmony_ci		varying float var1;
604e5c31af7Sopenharmony_ci		varying float var2;
605e5c31af7Sopenharmony_ci
606e5c31af7Sopenharmony_ci		void main()
607e5c31af7Sopenharmony_ci		{
608e5c31af7Sopenharmony_ci			out0 = var1 + var2;
609e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
610e5c31af7Sopenharmony_ci		}
611e5c31af7Sopenharmony_ci	""
612e5c31af7Sopenharmony_ciend
613e5c31af7Sopenharmony_ci
614e5c31af7Sopenharmony_cicase varying_writeback_1
615e5c31af7Sopenharmony_ci	desc "write back a varying in the fragment shader"
616e5c31af7Sopenharmony_ci	expect compile_fail
617e5c31af7Sopenharmony_ci	vertex ""
618e5c31af7Sopenharmony_ci		precision mediump float;
619e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
620e5c31af7Sopenharmony_ci		varying float var1;
621e5c31af7Sopenharmony_ci		varying float var2;
622e5c31af7Sopenharmony_ci
623e5c31af7Sopenharmony_ci		void main()
624e5c31af7Sopenharmony_ci		{
625e5c31af7Sopenharmony_ci			var1 = in0;
626e5c31af7Sopenharmony_ci			var2 = var1 + in0;
627e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
628e5c31af7Sopenharmony_ci		}
629e5c31af7Sopenharmony_ci	""
630e5c31af7Sopenharmony_ci	fragment ""
631e5c31af7Sopenharmony_ci		precision mediump float;
632e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
633e5c31af7Sopenharmony_ci		varying float var1;
634e5c31af7Sopenharmony_ci		varying float var2;
635e5c31af7Sopenharmony_ci
636e5c31af7Sopenharmony_ci		void main()
637e5c31af7Sopenharmony_ci		{
638e5c31af7Sopenharmony_ci			var2 = var1;
639e5c31af7Sopenharmony_ci			out0 = var1;
640e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
641e5c31af7Sopenharmony_ci		}
642e5c31af7Sopenharmony_ci	""
643e5c31af7Sopenharmony_ciend
644e5c31af7Sopenharmony_ci
645e5c31af7Sopenharmony_ci# Struct linkage handling
646e5c31af7Sopenharmony_cicase uniform_struct
647e5c31af7Sopenharmony_ci	desc "Same uniform struct in both shaders"
648e5c31af7Sopenharmony_ci	values {
649e5c31af7Sopenharmony_ci		uniform float val.a = 1.0;
650e5c31af7Sopenharmony_ci		uniform float val.b = 2.0;
651e5c31af7Sopenharmony_ci		output float out0 = 3.0;
652e5c31af7Sopenharmony_ci	}
653e5c31af7Sopenharmony_ci	vertex ""
654e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
655e5c31af7Sopenharmony_ci		struct Struct {mediump float a; mediump float b;};
656e5c31af7Sopenharmony_ci		uniform Struct val;
657e5c31af7Sopenharmony_ci		varying mediump float dummy;
658e5c31af7Sopenharmony_ci		void main()
659e5c31af7Sopenharmony_ci		{
660e5c31af7Sopenharmony_ci			dummy = val.a + val.b;
661e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
662e5c31af7Sopenharmony_ci		}
663e5c31af7Sopenharmony_ci	""
664e5c31af7Sopenharmony_ci	fragment ""
665e5c31af7Sopenharmony_ci	    precision mediump float;
666e5c31af7Sopenharmony_ci		struct Struct {mediump float a; mediump float b;};
667e5c31af7Sopenharmony_ci		uniform Struct val;
668e5c31af7Sopenharmony_ci		varying mediump float dummy;
669e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
670e5c31af7Sopenharmony_ci		void main()
671e5c31af7Sopenharmony_ci		{
672e5c31af7Sopenharmony_ci			out0 = val.b + val.a;
673e5c31af7Sopenharmony_ci			out0 = out0 + dummy;
674e5c31af7Sopenharmony_ci			out0 = out0 - dummy;
675e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
676e5c31af7Sopenharmony_ci		}
677e5c31af7Sopenharmony_ci	""
678e5c31af7Sopenharmony_ciend
679e5c31af7Sopenharmony_ci
680e5c31af7Sopenharmony_cicase uniform_struct_vertex_only
681e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used only in vertex."
682e5c31af7Sopenharmony_ci	values {
683e5c31af7Sopenharmony_ci		uniform float val.a = 1.0;
684e5c31af7Sopenharmony_ci		uniform float val.b = 2.0;
685e5c31af7Sopenharmony_ci		output float out0 = 3.0;
686e5c31af7Sopenharmony_ci	}
687e5c31af7Sopenharmony_ci	vertex ""
688e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
689e5c31af7Sopenharmony_ci		struct Struct {mediump float a; mediump float b;};
690e5c31af7Sopenharmony_ci		uniform Struct val;
691e5c31af7Sopenharmony_ci		varying mediump float res;
692e5c31af7Sopenharmony_ci		void main()
693e5c31af7Sopenharmony_ci		{
694e5c31af7Sopenharmony_ci			res = val.a + val.b;
695e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
696e5c31af7Sopenharmony_ci		}
697e5c31af7Sopenharmony_ci	""
698e5c31af7Sopenharmony_ci	fragment ""
699e5c31af7Sopenharmony_ci	    precision mediump float;
700e5c31af7Sopenharmony_ci		struct Struct {mediump float a; mediump float b;};
701e5c31af7Sopenharmony_ci		uniform Struct val;
702e5c31af7Sopenharmony_ci		varying mediump float res;
703e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
704e5c31af7Sopenharmony_ci		void main()
705e5c31af7Sopenharmony_ci		{
706e5c31af7Sopenharmony_ci			out0 = res;
707e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
708e5c31af7Sopenharmony_ci		}
709e5c31af7Sopenharmony_ci	""
710e5c31af7Sopenharmony_ciend
711e5c31af7Sopenharmony_ci
712e5c31af7Sopenharmony_cicase uniform_struct_fragment_only
713e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used only in fragment."
714e5c31af7Sopenharmony_ci	values {
715e5c31af7Sopenharmony_ci		uniform float val.a = 1.0;
716e5c31af7Sopenharmony_ci		uniform float val.b = 2.0;
717e5c31af7Sopenharmony_ci		output float out0 = 3.0;
718e5c31af7Sopenharmony_ci	}
719e5c31af7Sopenharmony_ci	vertex ""
720e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
721e5c31af7Sopenharmony_ci		struct Struct {mediump float a; mediump float b;};
722e5c31af7Sopenharmony_ci		uniform Struct val;
723e5c31af7Sopenharmony_ci		void main()
724e5c31af7Sopenharmony_ci		{
725e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
726e5c31af7Sopenharmony_ci		}
727e5c31af7Sopenharmony_ci	""
728e5c31af7Sopenharmony_ci	fragment ""
729e5c31af7Sopenharmony_ci	    precision mediump float;
730e5c31af7Sopenharmony_ci		struct Struct {mediump float a; mediump float b;};
731e5c31af7Sopenharmony_ci		uniform Struct val;
732e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
733e5c31af7Sopenharmony_ci		void main()
734e5c31af7Sopenharmony_ci		{
735e5c31af7Sopenharmony_ci			out0 = val.a + val.b;
736e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
737e5c31af7Sopenharmony_ci		}
738e5c31af7Sopenharmony_ci	""
739e5c31af7Sopenharmony_ciend
740e5c31af7Sopenharmony_ci
741e5c31af7Sopenharmony_cicase uniform_struct_partial
742e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used partially in both."
743e5c31af7Sopenharmony_ci	values {
744e5c31af7Sopenharmony_ci		uniform float val.a = 1.0;
745e5c31af7Sopenharmony_ci		uniform float val.b = 2.0;
746e5c31af7Sopenharmony_ci		output float out0 = 3.0;
747e5c31af7Sopenharmony_ci	}
748e5c31af7Sopenharmony_ci	vertex ""
749e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
750e5c31af7Sopenharmony_ci		struct Struct {mediump float a; mediump float b;};
751e5c31af7Sopenharmony_ci		uniform Struct val;
752e5c31af7Sopenharmony_ci		varying mediump float res;
753e5c31af7Sopenharmony_ci		void main()
754e5c31af7Sopenharmony_ci		{
755e5c31af7Sopenharmony_ci			res = val.a;
756e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
757e5c31af7Sopenharmony_ci		}
758e5c31af7Sopenharmony_ci	""
759e5c31af7Sopenharmony_ci	fragment ""
760e5c31af7Sopenharmony_ci	    precision mediump float;
761e5c31af7Sopenharmony_ci		struct Struct {mediump float a; mediump float b;};
762e5c31af7Sopenharmony_ci		uniform Struct val;
763e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
764e5c31af7Sopenharmony_ci		varying mediump float res;
765e5c31af7Sopenharmony_ci		void main()
766e5c31af7Sopenharmony_ci		{
767e5c31af7Sopenharmony_ci			out0 = res + val.b;
768e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
769e5c31af7Sopenharmony_ci		}
770e5c31af7Sopenharmony_ci	""
771e5c31af7Sopenharmony_ciend
772e5c31af7Sopenharmony_ci
773e5c31af7Sopenharmony_cicase uniform_struct_vec4
774e5c31af7Sopenharmony_ci	desc "Same uniform struct in both shaders. Datatype vec4"
775e5c31af7Sopenharmony_ci	values {
776e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
777e5c31af7Sopenharmony_ci		uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
778e5c31af7Sopenharmony_ci		output float out0 = 3.0;
779e5c31af7Sopenharmony_ci	}
780e5c31af7Sopenharmony_ci	vertex ""
781e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
782e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec4 b;};
783e5c31af7Sopenharmony_ci		uniform Struct val;
784e5c31af7Sopenharmony_ci		varying mediump float dummy;
785e5c31af7Sopenharmony_ci		void main()
786e5c31af7Sopenharmony_ci		{
787e5c31af7Sopenharmony_ci			dummy = val.a.x + val.b.y;
788e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
789e5c31af7Sopenharmony_ci		}
790e5c31af7Sopenharmony_ci	""
791e5c31af7Sopenharmony_ci	fragment ""
792e5c31af7Sopenharmony_ci	    precision mediump float;
793e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec4 b;};
794e5c31af7Sopenharmony_ci		uniform Struct val;
795e5c31af7Sopenharmony_ci		varying mediump float dummy;
796e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
797e5c31af7Sopenharmony_ci		void main()
798e5c31af7Sopenharmony_ci		{
799e5c31af7Sopenharmony_ci			out0 = val.b.y + val.a.x;
800e5c31af7Sopenharmony_ci			out0 = out0 + dummy;
801e5c31af7Sopenharmony_ci			out0 = out0 - dummy;
802e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
803e5c31af7Sopenharmony_ci		}
804e5c31af7Sopenharmony_ci	""
805e5c31af7Sopenharmony_ciend
806e5c31af7Sopenharmony_ci
807e5c31af7Sopenharmony_cicase uniform_struct_vertex_only_vec4
808e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used only in vertex. Datatype vec4	"
809e5c31af7Sopenharmony_ci	values {
810e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
811e5c31af7Sopenharmony_ci		uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
812e5c31af7Sopenharmony_ci		output float out0 = 3.0;
813e5c31af7Sopenharmony_ci	}
814e5c31af7Sopenharmony_ci	vertex ""
815e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
816e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec4 b;};
817e5c31af7Sopenharmony_ci		uniform Struct val;
818e5c31af7Sopenharmony_ci		varying mediump float res;
819e5c31af7Sopenharmony_ci		void main()
820e5c31af7Sopenharmony_ci		{
821e5c31af7Sopenharmony_ci			res = val.a.x + val.b.y;
822e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
823e5c31af7Sopenharmony_ci		}
824e5c31af7Sopenharmony_ci	""
825e5c31af7Sopenharmony_ci	fragment ""
826e5c31af7Sopenharmony_ci	    precision mediump float;
827e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec4 b;};
828e5c31af7Sopenharmony_ci		uniform Struct val;
829e5c31af7Sopenharmony_ci		varying mediump float res;
830e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
831e5c31af7Sopenharmony_ci		void main()
832e5c31af7Sopenharmony_ci		{
833e5c31af7Sopenharmony_ci			out0 = res;
834e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
835e5c31af7Sopenharmony_ci		}
836e5c31af7Sopenharmony_ci	""
837e5c31af7Sopenharmony_ciend
838e5c31af7Sopenharmony_ci
839e5c31af7Sopenharmony_cicase uniform_struct_fragment_only_vec4
840e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used only in fragment. Datatype vec4"
841e5c31af7Sopenharmony_ci	values {
842e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
843e5c31af7Sopenharmony_ci		uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
844e5c31af7Sopenharmony_ci		output float out0 = 3.0;
845e5c31af7Sopenharmony_ci	}
846e5c31af7Sopenharmony_ci	vertex ""
847e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
848e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec4 b;};
849e5c31af7Sopenharmony_ci		uniform Struct val;
850e5c31af7Sopenharmony_ci		void main()
851e5c31af7Sopenharmony_ci		{
852e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
853e5c31af7Sopenharmony_ci		}
854e5c31af7Sopenharmony_ci	""
855e5c31af7Sopenharmony_ci	fragment ""
856e5c31af7Sopenharmony_ci	    precision mediump float;
857e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec4 b;};
858e5c31af7Sopenharmony_ci		uniform Struct val;
859e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
860e5c31af7Sopenharmony_ci		void main()
861e5c31af7Sopenharmony_ci		{
862e5c31af7Sopenharmony_ci			out0 = val.a.x + val.b.y;
863e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
864e5c31af7Sopenharmony_ci		}
865e5c31af7Sopenharmony_ci	""
866e5c31af7Sopenharmony_ciend
867e5c31af7Sopenharmony_ci
868e5c31af7Sopenharmony_cicase uniform_struct_partial_vec4
869e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used partially in both. Datatype vec4"
870e5c31af7Sopenharmony_ci	values {
871e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
872e5c31af7Sopenharmony_ci		uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0);
873e5c31af7Sopenharmony_ci		output float out0 = 3.0;
874e5c31af7Sopenharmony_ci	}
875e5c31af7Sopenharmony_ci	vertex ""
876e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
877e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec4 b;};
878e5c31af7Sopenharmony_ci		uniform Struct val;
879e5c31af7Sopenharmony_ci		varying mediump float res;
880e5c31af7Sopenharmony_ci		void main()
881e5c31af7Sopenharmony_ci		{
882e5c31af7Sopenharmony_ci			res = val.a.x;
883e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
884e5c31af7Sopenharmony_ci		}
885e5c31af7Sopenharmony_ci	""
886e5c31af7Sopenharmony_ci	fragment ""
887e5c31af7Sopenharmony_ci	    precision mediump float;
888e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec4 b;};
889e5c31af7Sopenharmony_ci		uniform Struct val;
890e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
891e5c31af7Sopenharmony_ci		varying mediump float res;
892e5c31af7Sopenharmony_ci		void main()
893e5c31af7Sopenharmony_ci		{
894e5c31af7Sopenharmony_ci			out0 = res + val.b.y;
895e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
896e5c31af7Sopenharmony_ci		}
897e5c31af7Sopenharmony_ci	""
898e5c31af7Sopenharmony_ciend
899e5c31af7Sopenharmony_ci
900e5c31af7Sopenharmony_cicase uniform_struct_vec4_vec3
901e5c31af7Sopenharmony_ci	desc "Same uniform struct in both shaders. Datatype vec4 and vec3"
902e5c31af7Sopenharmony_ci	values {
903e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
904e5c31af7Sopenharmony_ci		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
905e5c31af7Sopenharmony_ci		output float out0 = 3.0;
906e5c31af7Sopenharmony_ci	}
907e5c31af7Sopenharmony_ci	vertex ""
908e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
909e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec3 b;};
910e5c31af7Sopenharmony_ci		uniform Struct val;
911e5c31af7Sopenharmony_ci		varying mediump float dummy;
912e5c31af7Sopenharmony_ci		void main()
913e5c31af7Sopenharmony_ci		{
914e5c31af7Sopenharmony_ci			dummy = val.a.x + val.b.y;
915e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
916e5c31af7Sopenharmony_ci		}
917e5c31af7Sopenharmony_ci	""
918e5c31af7Sopenharmony_ci	fragment ""
919e5c31af7Sopenharmony_ci	    precision mediump float;
920e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec3 b;};
921e5c31af7Sopenharmony_ci		uniform Struct val;
922e5c31af7Sopenharmony_ci		varying mediump float dummy;
923e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
924e5c31af7Sopenharmony_ci		void main()
925e5c31af7Sopenharmony_ci		{
926e5c31af7Sopenharmony_ci			out0 = val.b.y + val.a.x;
927e5c31af7Sopenharmony_ci			out0 = out0 + dummy;
928e5c31af7Sopenharmony_ci			out0 = out0 - dummy;
929e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
930e5c31af7Sopenharmony_ci		}
931e5c31af7Sopenharmony_ci	""
932e5c31af7Sopenharmony_ciend
933e5c31af7Sopenharmony_ci
934e5c31af7Sopenharmony_cicase uniform_struct_vertex_only_vec4_vec3
935e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and vec3"
936e5c31af7Sopenharmony_ci	values {
937e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
938e5c31af7Sopenharmony_ci		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
939e5c31af7Sopenharmony_ci		output float out0 = 3.0;
940e5c31af7Sopenharmony_ci	}
941e5c31af7Sopenharmony_ci	vertex ""
942e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
943e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec3 b;};
944e5c31af7Sopenharmony_ci		uniform Struct val;
945e5c31af7Sopenharmony_ci		varying mediump float res;
946e5c31af7Sopenharmony_ci		void main()
947e5c31af7Sopenharmony_ci		{
948e5c31af7Sopenharmony_ci			res = val.a.x + val.b.y;
949e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
950e5c31af7Sopenharmony_ci		}
951e5c31af7Sopenharmony_ci	""
952e5c31af7Sopenharmony_ci	fragment ""
953e5c31af7Sopenharmony_ci	    precision mediump float;
954e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec3 b;};
955e5c31af7Sopenharmony_ci		uniform Struct val;
956e5c31af7Sopenharmony_ci		varying mediump float res;
957e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
958e5c31af7Sopenharmony_ci		void main()
959e5c31af7Sopenharmony_ci		{
960e5c31af7Sopenharmony_ci			out0 = res;
961e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
962e5c31af7Sopenharmony_ci		}
963e5c31af7Sopenharmony_ci	""
964e5c31af7Sopenharmony_ciend
965e5c31af7Sopenharmony_ci
966e5c31af7Sopenharmony_cicase uniform_struct_fragment_only_vec4_vec3
967e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and vec3"
968e5c31af7Sopenharmony_ci	values {
969e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
970e5c31af7Sopenharmony_ci		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
971e5c31af7Sopenharmony_ci		output float out0 = 3.0;
972e5c31af7Sopenharmony_ci	}
973e5c31af7Sopenharmony_ci	vertex ""
974e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
975e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec3 b;};
976e5c31af7Sopenharmony_ci		uniform Struct val;
977e5c31af7Sopenharmony_ci		void main()
978e5c31af7Sopenharmony_ci		{
979e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
980e5c31af7Sopenharmony_ci		}
981e5c31af7Sopenharmony_ci	""
982e5c31af7Sopenharmony_ci	fragment ""
983e5c31af7Sopenharmony_ci	    precision mediump float;
984e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec3 b;};
985e5c31af7Sopenharmony_ci		uniform Struct val;
986e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
987e5c31af7Sopenharmony_ci		void main()
988e5c31af7Sopenharmony_ci		{
989e5c31af7Sopenharmony_ci			out0 = val.a.x + val.b.y;
990e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
991e5c31af7Sopenharmony_ci		}
992e5c31af7Sopenharmony_ci	""
993e5c31af7Sopenharmony_ciend
994e5c31af7Sopenharmony_ci
995e5c31af7Sopenharmony_cicase uniform_struct_partial_vec4_vec3
996e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used partially in both. Datatype vec4 and vec3"
997e5c31af7Sopenharmony_ci	values {
998e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
999e5c31af7Sopenharmony_ci		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
1000e5c31af7Sopenharmony_ci		output float out0 = 3.0;
1001e5c31af7Sopenharmony_ci	}
1002e5c31af7Sopenharmony_ci	vertex ""
1003e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1004e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec3 b;};
1005e5c31af7Sopenharmony_ci		uniform Struct val;
1006e5c31af7Sopenharmony_ci		varying mediump float res;
1007e5c31af7Sopenharmony_ci		void main()
1008e5c31af7Sopenharmony_ci		{
1009e5c31af7Sopenharmony_ci			res = val.a.x;
1010e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1011e5c31af7Sopenharmony_ci		}
1012e5c31af7Sopenharmony_ci	""
1013e5c31af7Sopenharmony_ci	fragment ""
1014e5c31af7Sopenharmony_ci	    precision mediump float;
1015e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump vec3 b;};
1016e5c31af7Sopenharmony_ci		uniform Struct val;
1017e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1018e5c31af7Sopenharmony_ci		varying mediump float res;
1019e5c31af7Sopenharmony_ci		void main()
1020e5c31af7Sopenharmony_ci		{
1021e5c31af7Sopenharmony_ci			out0 = res + val.b.y;
1022e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1023e5c31af7Sopenharmony_ci		}
1024e5c31af7Sopenharmony_ci	""
1025e5c31af7Sopenharmony_ciend
1026e5c31af7Sopenharmony_ci
1027e5c31af7Sopenharmony_cicase uniform_struct_vec4_float
1028e5c31af7Sopenharmony_ci	desc "Same uniform struct in both shaders. Datatype vec4 and float"
1029e5c31af7Sopenharmony_ci	values {
1030e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
1031e5c31af7Sopenharmony_ci		uniform float val.b = 2.0;
1032e5c31af7Sopenharmony_ci		output float out0 = 3.0;
1033e5c31af7Sopenharmony_ci	}
1034e5c31af7Sopenharmony_ci	vertex ""
1035e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1036e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump float b;};
1037e5c31af7Sopenharmony_ci		uniform Struct val;
1038e5c31af7Sopenharmony_ci		varying mediump float dummy;
1039e5c31af7Sopenharmony_ci		void main()
1040e5c31af7Sopenharmony_ci		{
1041e5c31af7Sopenharmony_ci			dummy = val.a.x + val.b;
1042e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1043e5c31af7Sopenharmony_ci		}
1044e5c31af7Sopenharmony_ci	""
1045e5c31af7Sopenharmony_ci	fragment ""
1046e5c31af7Sopenharmony_ci	    precision mediump float;
1047e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump float b;};
1048e5c31af7Sopenharmony_ci		uniform Struct val;
1049e5c31af7Sopenharmony_ci		varying mediump float dummy;
1050e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1051e5c31af7Sopenharmony_ci		void main()
1052e5c31af7Sopenharmony_ci		{
1053e5c31af7Sopenharmony_ci			out0 = val.b + val.a.x;
1054e5c31af7Sopenharmony_ci			out0 = out0 + dummy;
1055e5c31af7Sopenharmony_ci			out0 = out0 - dummy;
1056e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1057e5c31af7Sopenharmony_ci		}
1058e5c31af7Sopenharmony_ci	""
1059e5c31af7Sopenharmony_ciend
1060e5c31af7Sopenharmony_ci
1061e5c31af7Sopenharmony_cicase uniform_struct_vertex_only_vec4_float
1062e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and float"
1063e5c31af7Sopenharmony_ci	values {
1064e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
1065e5c31af7Sopenharmony_ci		uniform float val.b = 2.0;
1066e5c31af7Sopenharmony_ci		output float out0 = 3.0;
1067e5c31af7Sopenharmony_ci	}
1068e5c31af7Sopenharmony_ci	vertex ""
1069e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1070e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump float b;};
1071e5c31af7Sopenharmony_ci		uniform Struct val;
1072e5c31af7Sopenharmony_ci		varying mediump float res;
1073e5c31af7Sopenharmony_ci		void main()
1074e5c31af7Sopenharmony_ci		{
1075e5c31af7Sopenharmony_ci			res = val.a.x + val.b;
1076e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1077e5c31af7Sopenharmony_ci		}
1078e5c31af7Sopenharmony_ci	""
1079e5c31af7Sopenharmony_ci	fragment ""
1080e5c31af7Sopenharmony_ci	    precision mediump float;
1081e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump float b;};
1082e5c31af7Sopenharmony_ci		uniform Struct val;
1083e5c31af7Sopenharmony_ci		varying mediump float res;
1084e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1085e5c31af7Sopenharmony_ci		void main()
1086e5c31af7Sopenharmony_ci		{
1087e5c31af7Sopenharmony_ci			out0 = res;
1088e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1089e5c31af7Sopenharmony_ci		}
1090e5c31af7Sopenharmony_ci	""
1091e5c31af7Sopenharmony_ciend
1092e5c31af7Sopenharmony_ci
1093e5c31af7Sopenharmony_cicase uniform_struct_fragment_only_vec4_float
1094e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and float"
1095e5c31af7Sopenharmony_ci	values {
1096e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
1097e5c31af7Sopenharmony_ci		uniform float val.b = 2.0;
1098e5c31af7Sopenharmony_ci		output float out0 = 3.0;
1099e5c31af7Sopenharmony_ci	}
1100e5c31af7Sopenharmony_ci	vertex ""
1101e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1102e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump float b;};
1103e5c31af7Sopenharmony_ci		uniform Struct val;
1104e5c31af7Sopenharmony_ci		void main()
1105e5c31af7Sopenharmony_ci		{
1106e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1107e5c31af7Sopenharmony_ci		}
1108e5c31af7Sopenharmony_ci	""
1109e5c31af7Sopenharmony_ci	fragment ""
1110e5c31af7Sopenharmony_ci	    precision mediump float;
1111e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump float b;};
1112e5c31af7Sopenharmony_ci		uniform Struct val;
1113e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1114e5c31af7Sopenharmony_ci		void main()
1115e5c31af7Sopenharmony_ci		{
1116e5c31af7Sopenharmony_ci			out0 = val.a.x + val.b;
1117e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1118e5c31af7Sopenharmony_ci		}
1119e5c31af7Sopenharmony_ci	""
1120e5c31af7Sopenharmony_ciend
1121e5c31af7Sopenharmony_ci
1122e5c31af7Sopenharmony_cicase uniform_struct_partial_vec4_float
1123e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used partially in both. Datatype vec4 and float"
1124e5c31af7Sopenharmony_ci	values {
1125e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
1126e5c31af7Sopenharmony_ci		uniform float val.b = 2.0;
1127e5c31af7Sopenharmony_ci		output float out0 = 3.0;
1128e5c31af7Sopenharmony_ci	}
1129e5c31af7Sopenharmony_ci	vertex ""
1130e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1131e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump float b;};
1132e5c31af7Sopenharmony_ci		uniform Struct val;
1133e5c31af7Sopenharmony_ci		varying mediump float res;
1134e5c31af7Sopenharmony_ci		void main()
1135e5c31af7Sopenharmony_ci		{
1136e5c31af7Sopenharmony_ci			res = val.a.x;
1137e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1138e5c31af7Sopenharmony_ci		}
1139e5c31af7Sopenharmony_ci	""
1140e5c31af7Sopenharmony_ci	fragment ""
1141e5c31af7Sopenharmony_ci	    precision mediump float;
1142e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; mediump float b;};
1143e5c31af7Sopenharmony_ci		uniform Struct val;
1144e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1145e5c31af7Sopenharmony_ci		varying mediump float res;
1146e5c31af7Sopenharmony_ci		void main()
1147e5c31af7Sopenharmony_ci		{
1148e5c31af7Sopenharmony_ci			out0 = res + val.b;
1149e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1150e5c31af7Sopenharmony_ci		}
1151e5c31af7Sopenharmony_ci	""
1152e5c31af7Sopenharmony_ciend
1153e5c31af7Sopenharmony_ci
1154e5c31af7Sopenharmony_cicase uniform_struct_partial_vec4_struct
1155e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec4"
1156e5c31af7Sopenharmony_ci	values {
1157e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
1158e5c31af7Sopenharmony_ci		uniform vec4 val.b.c = vec4(1.0, 2.0, 3.0, 4.0);
1159e5c31af7Sopenharmony_ci		output float out0 = 3.0;
1160e5c31af7Sopenharmony_ci	}
1161e5c31af7Sopenharmony_ci	vertex ""
1162e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1163e5c31af7Sopenharmony_ci		struct Inner {mediump vec4 c;};
1164e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; Inner b;};
1165e5c31af7Sopenharmony_ci		uniform Struct val;
1166e5c31af7Sopenharmony_ci		varying mediump float res;
1167e5c31af7Sopenharmony_ci		void main()
1168e5c31af7Sopenharmony_ci		{
1169e5c31af7Sopenharmony_ci			res = val.a.x;
1170e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1171e5c31af7Sopenharmony_ci		}
1172e5c31af7Sopenharmony_ci	""
1173e5c31af7Sopenharmony_ci	fragment ""
1174e5c31af7Sopenharmony_ci	    precision mediump float;
1175e5c31af7Sopenharmony_ci		struct Inner {mediump vec4 c;};
1176e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; Inner b;};
1177e5c31af7Sopenharmony_ci		uniform Struct val;
1178e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1179e5c31af7Sopenharmony_ci		varying mediump float res;
1180e5c31af7Sopenharmony_ci		void main()
1181e5c31af7Sopenharmony_ci		{
1182e5c31af7Sopenharmony_ci			out0 = res + val.b.c.y;
1183e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1184e5c31af7Sopenharmony_ci		}
1185e5c31af7Sopenharmony_ci	""
1186e5c31af7Sopenharmony_ciend
1187e5c31af7Sopenharmony_ci
1188e5c31af7Sopenharmony_ci
1189e5c31af7Sopenharmony_ci
1190e5c31af7Sopenharmony_cicase uniform_struct_partial_vec4_vec3_struct
1191e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec3"
1192e5c31af7Sopenharmony_ci	values {
1193e5c31af7Sopenharmony_ci		uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0);
1194e5c31af7Sopenharmony_ci		uniform vec3 val.b.c = vec3(1.0, 2.0, 3.0);
1195e5c31af7Sopenharmony_ci		output float out0 = 3.0;
1196e5c31af7Sopenharmony_ci	}
1197e5c31af7Sopenharmony_ci	vertex ""
1198e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1199e5c31af7Sopenharmony_ci		struct Inner {mediump vec3 c;};
1200e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; Inner b;};
1201e5c31af7Sopenharmony_ci		uniform Struct val;
1202e5c31af7Sopenharmony_ci		varying mediump float res;
1203e5c31af7Sopenharmony_ci		void main()
1204e5c31af7Sopenharmony_ci		{
1205e5c31af7Sopenharmony_ci			res = val.a.x;
1206e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1207e5c31af7Sopenharmony_ci		}
1208e5c31af7Sopenharmony_ci	""
1209e5c31af7Sopenharmony_ci	fragment ""
1210e5c31af7Sopenharmony_ci	    precision mediump float;
1211e5c31af7Sopenharmony_ci		struct Inner {mediump vec3 c;};
1212e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a; Inner b;};
1213e5c31af7Sopenharmony_ci		uniform Struct val;
1214e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1215e5c31af7Sopenharmony_ci		varying mediump float res;
1216e5c31af7Sopenharmony_ci		void main()
1217e5c31af7Sopenharmony_ci		{
1218e5c31af7Sopenharmony_ci			out0 = res + val.b.c.y;
1219e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1220e5c31af7Sopenharmony_ci		}
1221e5c31af7Sopenharmony_ci	""
1222e5c31af7Sopenharmony_ciend
1223e5c31af7Sopenharmony_ci
1224e5c31af7Sopenharmony_cicase uniform_struct_partial_vec2_vec3
1225e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used partially in both. Datatype vec2 and vec3"
1226e5c31af7Sopenharmony_ci	values {
1227e5c31af7Sopenharmony_ci		uniform vec2 val.a = vec2(1.0, 2.0);
1228e5c31af7Sopenharmony_ci		uniform vec3 val.b = vec3(1.0, 2.0, 3.0);
1229e5c31af7Sopenharmony_ci		output float out0 = 3.0;
1230e5c31af7Sopenharmony_ci	}
1231e5c31af7Sopenharmony_ci	vertex ""
1232e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1233e5c31af7Sopenharmony_ci		struct Struct {mediump vec2 a; mediump vec3 b;};
1234e5c31af7Sopenharmony_ci		uniform Struct val;
1235e5c31af7Sopenharmony_ci		varying mediump float res;
1236e5c31af7Sopenharmony_ci		void main()
1237e5c31af7Sopenharmony_ci		{
1238e5c31af7Sopenharmony_ci			res = val.a.x;
1239e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1240e5c31af7Sopenharmony_ci		}
1241e5c31af7Sopenharmony_ci	""
1242e5c31af7Sopenharmony_ci	fragment ""
1243e5c31af7Sopenharmony_ci	    precision mediump float;
1244e5c31af7Sopenharmony_ci		struct Struct {mediump vec2 a; mediump vec3 b;};
1245e5c31af7Sopenharmony_ci		uniform Struct val;
1246e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1247e5c31af7Sopenharmony_ci		varying mediump float res;
1248e5c31af7Sopenharmony_ci		void main()
1249e5c31af7Sopenharmony_ci		{
1250e5c31af7Sopenharmony_ci			out0 = res + val.b.y;
1251e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1252e5c31af7Sopenharmony_ci		}
1253e5c31af7Sopenharmony_ci	""
1254e5c31af7Sopenharmony_ciend
1255e5c31af7Sopenharmony_ci
1256e5c31af7Sopenharmony_cicase uniform_struct_partial_vec2_int
1257e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used partially in both. Datatype vec2 and int"
1258e5c31af7Sopenharmony_ci	values {
1259e5c31af7Sopenharmony_ci		uniform vec2 val.a = vec2(1.0, 2.0);
1260e5c31af7Sopenharmony_ci		uniform int val.b = 2;
1261e5c31af7Sopenharmony_ci		output float out0 = 3.0;
1262e5c31af7Sopenharmony_ci	}
1263e5c31af7Sopenharmony_ci	vertex ""
1264e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1265e5c31af7Sopenharmony_ci		struct Struct {mediump vec2 a; mediump int b;};
1266e5c31af7Sopenharmony_ci		uniform Struct val;
1267e5c31af7Sopenharmony_ci		varying mediump float res;
1268e5c31af7Sopenharmony_ci		void main()
1269e5c31af7Sopenharmony_ci		{
1270e5c31af7Sopenharmony_ci			res = val.a.x;
1271e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1272e5c31af7Sopenharmony_ci		}
1273e5c31af7Sopenharmony_ci	""
1274e5c31af7Sopenharmony_ci	fragment ""
1275e5c31af7Sopenharmony_ci	    precision mediump float;
1276e5c31af7Sopenharmony_ci		struct Struct {mediump vec2 a; mediump int b;};
1277e5c31af7Sopenharmony_ci		uniform Struct val;
1278e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1279e5c31af7Sopenharmony_ci		varying mediump float res;
1280e5c31af7Sopenharmony_ci		void main()
1281e5c31af7Sopenharmony_ci		{
1282e5c31af7Sopenharmony_ci			out0 = res + float(val.b);
1283e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1284e5c31af7Sopenharmony_ci		}
1285e5c31af7Sopenharmony_ci	""
1286e5c31af7Sopenharmony_ciend
1287e5c31af7Sopenharmony_ci
1288e5c31af7Sopenharmony_cicase uniform_struct_partial_int_float
1289e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used partially in both. Datatype int and float"
1290e5c31af7Sopenharmony_ci	values {
1291e5c31af7Sopenharmony_ci		uniform float val.a = 1.0;
1292e5c31af7Sopenharmony_ci		uniform int val.b = 2;
1293e5c31af7Sopenharmony_ci		output float out0 = 3.0;
1294e5c31af7Sopenharmony_ci	}
1295e5c31af7Sopenharmony_ci	vertex ""
1296e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1297e5c31af7Sopenharmony_ci		struct Struct {mediump float a; mediump int b;};
1298e5c31af7Sopenharmony_ci		uniform Struct val;
1299e5c31af7Sopenharmony_ci		varying mediump float res;
1300e5c31af7Sopenharmony_ci		void main()
1301e5c31af7Sopenharmony_ci		{
1302e5c31af7Sopenharmony_ci			res = val.a;
1303e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1304e5c31af7Sopenharmony_ci		}
1305e5c31af7Sopenharmony_ci	""
1306e5c31af7Sopenharmony_ci	fragment ""
1307e5c31af7Sopenharmony_ci	    precision mediump float;
1308e5c31af7Sopenharmony_ci		struct Struct {mediump float a; mediump int b;};
1309e5c31af7Sopenharmony_ci		uniform Struct val;
1310e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1311e5c31af7Sopenharmony_ci		varying mediump float res;
1312e5c31af7Sopenharmony_ci		void main()
1313e5c31af7Sopenharmony_ci		{
1314e5c31af7Sopenharmony_ci			out0 = res + float(val.b);
1315e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1316e5c31af7Sopenharmony_ci		}
1317e5c31af7Sopenharmony_ci	""
1318e5c31af7Sopenharmony_ciend
1319e5c31af7Sopenharmony_ci
1320e5c31af7Sopenharmony_cicase uniform_struct_partial_bvec2_vec2
1321e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used partially in both. Datatype bvec2 and vec2"
1322e5c31af7Sopenharmony_ci	values {
1323e5c31af7Sopenharmony_ci		uniform bvec2 val.a = bvec2(true, true);
1324e5c31af7Sopenharmony_ci		uniform vec2 val.b = vec2(1.0, 2.0);
1325e5c31af7Sopenharmony_ci		output float out0 = 3.0;
1326e5c31af7Sopenharmony_ci	}
1327e5c31af7Sopenharmony_ci	vertex ""
1328e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1329e5c31af7Sopenharmony_ci		struct Struct {bvec2 a; mediump vec2 b;};
1330e5c31af7Sopenharmony_ci		uniform Struct val;
1331e5c31af7Sopenharmony_ci		varying mediump float res;
1332e5c31af7Sopenharmony_ci		void main()
1333e5c31af7Sopenharmony_ci		{
1334e5c31af7Sopenharmony_ci			res = float(val.a.x);
1335e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1336e5c31af7Sopenharmony_ci		}
1337e5c31af7Sopenharmony_ci	""
1338e5c31af7Sopenharmony_ci	fragment ""
1339e5c31af7Sopenharmony_ci	    precision mediump float;
1340e5c31af7Sopenharmony_ci		struct Struct {bvec2 a; mediump vec2 b;};
1341e5c31af7Sopenharmony_ci		uniform Struct val;
1342e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1343e5c31af7Sopenharmony_ci		varying mediump float res;
1344e5c31af7Sopenharmony_ci		void main()
1345e5c31af7Sopenharmony_ci		{
1346e5c31af7Sopenharmony_ci			out0 = res + val.b.y;
1347e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1348e5c31af7Sopenharmony_ci		}
1349e5c31af7Sopenharmony_ci	""
1350e5c31af7Sopenharmony_ciend
1351e5c31af7Sopenharmony_ci
1352e5c31af7Sopenharmony_cicase uniform_struct_partial_ivec2_vec2
1353e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and vec2"
1354e5c31af7Sopenharmony_ci	values {
1355e5c31af7Sopenharmony_ci		uniform ivec2 val.a = ivec2(1, 2);
1356e5c31af7Sopenharmony_ci		uniform vec2 val.b = vec2(1.0, 2.0);
1357e5c31af7Sopenharmony_ci		output float out0 = 3.0;
1358e5c31af7Sopenharmony_ci	}
1359e5c31af7Sopenharmony_ci	vertex ""
1360e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1361e5c31af7Sopenharmony_ci		struct Struct {mediump ivec2 a; mediump vec2 b;};
1362e5c31af7Sopenharmony_ci		uniform Struct val;
1363e5c31af7Sopenharmony_ci		varying mediump float res;
1364e5c31af7Sopenharmony_ci		void main()
1365e5c31af7Sopenharmony_ci		{
1366e5c31af7Sopenharmony_ci			res = vec2(val.a).x;
1367e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1368e5c31af7Sopenharmony_ci		}
1369e5c31af7Sopenharmony_ci	""
1370e5c31af7Sopenharmony_ci	fragment ""
1371e5c31af7Sopenharmony_ci	    precision mediump float;
1372e5c31af7Sopenharmony_ci		struct Struct {mediump ivec2 a; mediump vec2 b;};
1373e5c31af7Sopenharmony_ci		uniform Struct val;
1374e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1375e5c31af7Sopenharmony_ci		varying mediump float res;
1376e5c31af7Sopenharmony_ci		void main()
1377e5c31af7Sopenharmony_ci		{
1378e5c31af7Sopenharmony_ci			out0 = res + val.b.y;
1379e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1380e5c31af7Sopenharmony_ci		}
1381e5c31af7Sopenharmony_ci	""
1382e5c31af7Sopenharmony_ciend
1383e5c31af7Sopenharmony_ci
1384e5c31af7Sopenharmony_cicase uniform_struct_partial_ivec2_ivec2
1385e5c31af7Sopenharmony_ci	desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and ivec2"
1386e5c31af7Sopenharmony_ci	values {
1387e5c31af7Sopenharmony_ci		uniform ivec2 val.a = ivec2(1, 2);
1388e5c31af7Sopenharmony_ci		uniform ivec2 val.b = ivec2(1, 2);
1389e5c31af7Sopenharmony_ci		output float out0 = 3.0;
1390e5c31af7Sopenharmony_ci	}
1391e5c31af7Sopenharmony_ci	vertex ""
1392e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1393e5c31af7Sopenharmony_ci		struct Struct {mediump ivec2 a; mediump ivec2 b;};
1394e5c31af7Sopenharmony_ci		uniform Struct val;
1395e5c31af7Sopenharmony_ci		varying mediump float res;
1396e5c31af7Sopenharmony_ci		void main()
1397e5c31af7Sopenharmony_ci		{
1398e5c31af7Sopenharmony_ci			res = vec2(val.a).x;
1399e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1400e5c31af7Sopenharmony_ci		}
1401e5c31af7Sopenharmony_ci	""
1402e5c31af7Sopenharmony_ci	fragment ""
1403e5c31af7Sopenharmony_ci	    precision mediump float;
1404e5c31af7Sopenharmony_ci		struct Struct {mediump ivec2 a; mediump ivec2 b;};
1405e5c31af7Sopenharmony_ci		uniform Struct val;
1406e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1407e5c31af7Sopenharmony_ci		varying mediump float res;
1408e5c31af7Sopenharmony_ci		void main()
1409e5c31af7Sopenharmony_ci		{
1410e5c31af7Sopenharmony_ci			out0 = res + vec2(val.b).y;
1411e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1412e5c31af7Sopenharmony_ci		}
1413e5c31af7Sopenharmony_ci	""
1414e5c31af7Sopenharmony_ciend
1415e5c31af7Sopenharmony_ci
1416e5c31af7Sopenharmony_cicase uniform_struct_type_conflict_1
1417e5c31af7Sopenharmony_ci	desc "Fragment struct has one less member than fragment version"
1418e5c31af7Sopenharmony_ci	expect link_fail
1419e5c31af7Sopenharmony_ci	values {output float out0 = 3.0;}
1420e5c31af7Sopenharmony_ci	vertex ""
1421e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1422e5c31af7Sopenharmony_ci		struct Struct {mediump float a; mediump float b;};
1423e5c31af7Sopenharmony_ci		uniform Struct val;
1424e5c31af7Sopenharmony_ci		varying mediump float res;
1425e5c31af7Sopenharmony_ci		void main()
1426e5c31af7Sopenharmony_ci		{
1427e5c31af7Sopenharmony_ci			res = val.a;
1428e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1429e5c31af7Sopenharmony_ci		}
1430e5c31af7Sopenharmony_ci	""
1431e5c31af7Sopenharmony_ci	fragment ""
1432e5c31af7Sopenharmony_ci	    precision mediump float;
1433e5c31af7Sopenharmony_ci		struct Struct {mediump float a;};
1434e5c31af7Sopenharmony_ci		uniform Struct val;
1435e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1436e5c31af7Sopenharmony_ci		varying mediump float res;
1437e5c31af7Sopenharmony_ci		void main()
1438e5c31af7Sopenharmony_ci		{
1439e5c31af7Sopenharmony_ci			out0 = res + val.a;
1440e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1441e5c31af7Sopenharmony_ci		}
1442e5c31af7Sopenharmony_ci	""
1443e5c31af7Sopenharmony_ciend
1444e5c31af7Sopenharmony_ci
1445e5c31af7Sopenharmony_cicase uniform_struct_type_conflict_2
1446e5c31af7Sopenharmony_ci	desc "Vertex struct has int, fragment struct has float."
1447e5c31af7Sopenharmony_ci	expect link_fail
1448e5c31af7Sopenharmony_ci	values {output float out0 = 3.0;}
1449e5c31af7Sopenharmony_ci	vertex ""
1450e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1451e5c31af7Sopenharmony_ci		struct Struct {mediump int a;};
1452e5c31af7Sopenharmony_ci		uniform Struct val;
1453e5c31af7Sopenharmony_ci		varying mediump float res;
1454e5c31af7Sopenharmony_ci		void main()
1455e5c31af7Sopenharmony_ci		{
1456e5c31af7Sopenharmony_ci			res = float(val.a);
1457e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1458e5c31af7Sopenharmony_ci		}
1459e5c31af7Sopenharmony_ci	""
1460e5c31af7Sopenharmony_ci	fragment ""
1461e5c31af7Sopenharmony_ci	    precision mediump float;
1462e5c31af7Sopenharmony_ci		struct Struct {mediump float a;};
1463e5c31af7Sopenharmony_ci		uniform Struct val;
1464e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1465e5c31af7Sopenharmony_ci		varying mediump float res;
1466e5c31af7Sopenharmony_ci		void main()
1467e5c31af7Sopenharmony_ci		{
1468e5c31af7Sopenharmony_ci			out0 = val.a;
1469e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1470e5c31af7Sopenharmony_ci		}
1471e5c31af7Sopenharmony_ci	""
1472e5c31af7Sopenharmony_ciend
1473e5c31af7Sopenharmony_ci
1474e5c31af7Sopenharmony_cicase uniform_struct_type_conflict_3
1475e5c31af7Sopenharmony_ci	desc "Vertex struct has vec3, fragment struct has vec4."
1476e5c31af7Sopenharmony_ci	expect link_fail
1477e5c31af7Sopenharmony_ci	values {output float out0 = 3.0;}
1478e5c31af7Sopenharmony_ci	vertex ""
1479e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1480e5c31af7Sopenharmony_ci		struct Struct {mediump vec3 a;};
1481e5c31af7Sopenharmony_ci		uniform Struct val;
1482e5c31af7Sopenharmony_ci		varying mediump float res;
1483e5c31af7Sopenharmony_ci		void main()
1484e5c31af7Sopenharmony_ci		{
1485e5c31af7Sopenharmony_ci			res = float(val.a.x);
1486e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1487e5c31af7Sopenharmony_ci		}
1488e5c31af7Sopenharmony_ci	""
1489e5c31af7Sopenharmony_ci	fragment ""
1490e5c31af7Sopenharmony_ci	    precision mediump float;
1491e5c31af7Sopenharmony_ci		struct Struct {mediump vec4 a;};
1492e5c31af7Sopenharmony_ci		uniform Struct val;
1493e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1494e5c31af7Sopenharmony_ci		varying mediump float res;
1495e5c31af7Sopenharmony_ci		void main()
1496e5c31af7Sopenharmony_ci		{
1497e5c31af7Sopenharmony_ci			out0 = val.a.x;
1498e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1499e5c31af7Sopenharmony_ci		}
1500e5c31af7Sopenharmony_ci	""
1501e5c31af7Sopenharmony_ciend
1502e5c31af7Sopenharmony_ci
1503e5c31af7Sopenharmony_cicase uniform_struct_precision_conflict_1
1504e5c31af7Sopenharmony_ci	desc "Vertex side struct has highp, fragment side struct mediump."
1505e5c31af7Sopenharmony_ci	expect link_fail
1506e5c31af7Sopenharmony_ci	values {output float out0 = 3.0;}
1507e5c31af7Sopenharmony_ci	vertex ""
1508e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1509e5c31af7Sopenharmony_ci		struct Struct {highp float a;};
1510e5c31af7Sopenharmony_ci		uniform Struct val;
1511e5c31af7Sopenharmony_ci		varying mediump float res;
1512e5c31af7Sopenharmony_ci		void main()
1513e5c31af7Sopenharmony_ci		{
1514e5c31af7Sopenharmony_ci			res = val.a;
1515e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1516e5c31af7Sopenharmony_ci		}
1517e5c31af7Sopenharmony_ci	""
1518e5c31af7Sopenharmony_ci	fragment ""
1519e5c31af7Sopenharmony_ci	    precision mediump float;
1520e5c31af7Sopenharmony_ci		struct Struct {mediump float a;};
1521e5c31af7Sopenharmony_ci		uniform Struct val;
1522e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1523e5c31af7Sopenharmony_ci		varying mediump float res;
1524e5c31af7Sopenharmony_ci		void main()
1525e5c31af7Sopenharmony_ci		{
1526e5c31af7Sopenharmony_ci			out0 = val.a;
1527e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1528e5c31af7Sopenharmony_ci		}
1529e5c31af7Sopenharmony_ci	""
1530e5c31af7Sopenharmony_ciend
1531e5c31af7Sopenharmony_ci
1532e5c31af7Sopenharmony_cicase uniform_struct_precision_conflict_2
1533e5c31af7Sopenharmony_ci	desc "Vertex side struct has mediump, fragment side struct lowp."
1534e5c31af7Sopenharmony_ci	expect link_fail
1535e5c31af7Sopenharmony_ci	values {output float out0 = 3.0;}
1536e5c31af7Sopenharmony_ci	vertex ""
1537e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1538e5c31af7Sopenharmony_ci		struct Struct {mediump float a;};
1539e5c31af7Sopenharmony_ci		uniform Struct val;
1540e5c31af7Sopenharmony_ci		varying mediump float res;
1541e5c31af7Sopenharmony_ci		void main()
1542e5c31af7Sopenharmony_ci		{
1543e5c31af7Sopenharmony_ci			res = val.a;
1544e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1545e5c31af7Sopenharmony_ci		}
1546e5c31af7Sopenharmony_ci	""
1547e5c31af7Sopenharmony_ci	fragment ""
1548e5c31af7Sopenharmony_ci	    precision mediump float;
1549e5c31af7Sopenharmony_ci		struct Struct {lowp float a;};
1550e5c31af7Sopenharmony_ci		uniform Struct val;
1551e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1552e5c31af7Sopenharmony_ci		varying mediump float res;
1553e5c31af7Sopenharmony_ci		void main()
1554e5c31af7Sopenharmony_ci		{
1555e5c31af7Sopenharmony_ci			out0 = val.a;
1556e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1557e5c31af7Sopenharmony_ci		}
1558e5c31af7Sopenharmony_ci	""
1559e5c31af7Sopenharmony_ciend
1560e5c31af7Sopenharmony_ci
1561e5c31af7Sopenharmony_cicase uniform_struct_precision_conflict_3
1562e5c31af7Sopenharmony_ci	desc "Vertex side struct has lowp, fragment side struct mediump."
1563e5c31af7Sopenharmony_ci	expect link_fail
1564e5c31af7Sopenharmony_ci	values {output float out0 = 3.0;}
1565e5c31af7Sopenharmony_ci	vertex ""
1566e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1567e5c31af7Sopenharmony_ci		struct Struct {lowp float a;};
1568e5c31af7Sopenharmony_ci		uniform Struct val;
1569e5c31af7Sopenharmony_ci		varying mediump float res;
1570e5c31af7Sopenharmony_ci		void main()
1571e5c31af7Sopenharmony_ci		{
1572e5c31af7Sopenharmony_ci			res = val.a;
1573e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1574e5c31af7Sopenharmony_ci		}
1575e5c31af7Sopenharmony_ci	""
1576e5c31af7Sopenharmony_ci	fragment ""
1577e5c31af7Sopenharmony_ci	    precision mediump float;
1578e5c31af7Sopenharmony_ci		struct Struct {mediump float a;};
1579e5c31af7Sopenharmony_ci		uniform Struct val;
1580e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1581e5c31af7Sopenharmony_ci		varying mediump float res;
1582e5c31af7Sopenharmony_ci		void main()
1583e5c31af7Sopenharmony_ci		{
1584e5c31af7Sopenharmony_ci			out0 = val.a;
1585e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1586e5c31af7Sopenharmony_ci		}
1587e5c31af7Sopenharmony_ci	""
1588e5c31af7Sopenharmony_ciend
1589e5c31af7Sopenharmony_ci
1590e5c31af7Sopenharmony_cicase uniform_struct_precision_conflict_4
1591e5c31af7Sopenharmony_ci	desc "Vertex side struct has lowp, fragment side struct implicit mediump."
1592e5c31af7Sopenharmony_ci	expect link_fail
1593e5c31af7Sopenharmony_ci	values {output float out0 = 3.0;}
1594e5c31af7Sopenharmony_ci	vertex ""
1595e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1596e5c31af7Sopenharmony_ci		struct Struct {lowp float a;};
1597e5c31af7Sopenharmony_ci		uniform Struct val;
1598e5c31af7Sopenharmony_ci		varying mediump float res;
1599e5c31af7Sopenharmony_ci		void main()
1600e5c31af7Sopenharmony_ci		{
1601e5c31af7Sopenharmony_ci			res = val.a;
1602e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1603e5c31af7Sopenharmony_ci		}
1604e5c31af7Sopenharmony_ci	""
1605e5c31af7Sopenharmony_ci	fragment ""
1606e5c31af7Sopenharmony_ci	    precision mediump float;
1607e5c31af7Sopenharmony_ci		struct Struct {float a;};
1608e5c31af7Sopenharmony_ci		uniform Struct val;
1609e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1610e5c31af7Sopenharmony_ci		varying mediump float res;
1611e5c31af7Sopenharmony_ci		void main()
1612e5c31af7Sopenharmony_ci		{
1613e5c31af7Sopenharmony_ci			out0 = val.a;
1614e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1615e5c31af7Sopenharmony_ci		}
1616e5c31af7Sopenharmony_ci	""
1617e5c31af7Sopenharmony_ciend
1618e5c31af7Sopenharmony_ci
1619e5c31af7Sopenharmony_cicase uniform_struct_use_case_rip
1620e5c31af7Sopenharmony_ci	desc "Complex Light struct from use case tests."
1621e5c31af7Sopenharmony_ci	values {
1622e5c31af7Sopenharmony_ci		uniform float val.constantAttenuation = 1.0;
1623e5c31af7Sopenharmony_ci		uniform float val.quadraticAttenuation = 1.0;
1624e5c31af7Sopenharmony_ci	    output float out0 = 2.0;
1625e5c31af7Sopenharmony_ci    }
1626e5c31af7Sopenharmony_ci	vertex ""
1627e5c31af7Sopenharmony_ci		 struct Light
1628e5c31af7Sopenharmony_ci		 {
1629e5c31af7Sopenharmony_ci		     mediump vec3	color;
1630e5c31af7Sopenharmony_ci			 highp vec4		position;
1631e5c31af7Sopenharmony_ci			 highp vec3		direction;
1632e5c31af7Sopenharmony_ci			 mediump float	constantAttenuation;
1633e5c31af7Sopenharmony_ci			 mediump float	linearAttenuation;
1634e5c31af7Sopenharmony_ci			 mediump float	quadraticAttenuation;
1635e5c31af7Sopenharmony_ci	    };
1636e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1637e5c31af7Sopenharmony_ci		uniform Light val;
1638e5c31af7Sopenharmony_ci		varying mediump float res;
1639e5c31af7Sopenharmony_ci		void main()
1640e5c31af7Sopenharmony_ci		{
1641e5c31af7Sopenharmony_ci			res = val.constantAttenuation;
1642e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1643e5c31af7Sopenharmony_ci		}
1644e5c31af7Sopenharmony_ci	""
1645e5c31af7Sopenharmony_ci	fragment ""
1646e5c31af7Sopenharmony_ci	     precision mediump float;
1647e5c31af7Sopenharmony_ci		 struct Light
1648e5c31af7Sopenharmony_ci		 {
1649e5c31af7Sopenharmony_ci		     mediump vec3	color;
1650e5c31af7Sopenharmony_ci			 highp vec4		position;
1651e5c31af7Sopenharmony_ci			 highp vec3		direction;
1652e5c31af7Sopenharmony_ci			 mediump float	constantAttenuation;
1653e5c31af7Sopenharmony_ci			 mediump float	linearAttenuation;
1654e5c31af7Sopenharmony_ci			 mediump float	quadraticAttenuation;
1655e5c31af7Sopenharmony_ci	    };
1656e5c31af7Sopenharmony_ci		struct Struct {float a;};
1657e5c31af7Sopenharmony_ci		uniform Light val;
1658e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1659e5c31af7Sopenharmony_ci		varying mediump float res;
1660e5c31af7Sopenharmony_ci		void main()
1661e5c31af7Sopenharmony_ci		{
1662e5c31af7Sopenharmony_ci			out0 = res + val.quadraticAttenuation;
1663e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1664e5c31af7Sopenharmony_ci		}
1665e5c31af7Sopenharmony_ci	""
1666e5c31af7Sopenharmony_ciend
1667e5c31af7Sopenharmony_ci
1668e5c31af7Sopenharmony_cicase uniform_struct_use_case_rip_sans_highp
1669e5c31af7Sopenharmony_ci	desc "Complex Light struct from use case tests, without highp usage"
1670e5c31af7Sopenharmony_ci	values {
1671e5c31af7Sopenharmony_ci		uniform float val.constantAttenuation = 1.0;
1672e5c31af7Sopenharmony_ci		uniform float val.quadraticAttenuation = 1.0;
1673e5c31af7Sopenharmony_ci	    output float out0 = 2.0;
1674e5c31af7Sopenharmony_ci    }
1675e5c31af7Sopenharmony_ci	vertex ""
1676e5c31af7Sopenharmony_ci		 struct Light
1677e5c31af7Sopenharmony_ci		 {
1678e5c31af7Sopenharmony_ci		     mediump vec3	color;
1679e5c31af7Sopenharmony_ci			 mediump vec4	position;
1680e5c31af7Sopenharmony_ci			 mediump vec3	direction;
1681e5c31af7Sopenharmony_ci			 mediump float	constantAttenuation;
1682e5c31af7Sopenharmony_ci			 mediump float	linearAttenuation;
1683e5c31af7Sopenharmony_ci			 mediump float	quadraticAttenuation;
1684e5c31af7Sopenharmony_ci	    };
1685e5c31af7Sopenharmony_ci		${VERTEX_DECLARATIONS}
1686e5c31af7Sopenharmony_ci		uniform Light val;
1687e5c31af7Sopenharmony_ci		varying mediump float res;
1688e5c31af7Sopenharmony_ci		void main()
1689e5c31af7Sopenharmony_ci		{
1690e5c31af7Sopenharmony_ci			res = val.constantAttenuation;
1691e5c31af7Sopenharmony_ci			${VERTEX_OUTPUT}
1692e5c31af7Sopenharmony_ci		}
1693e5c31af7Sopenharmony_ci	""
1694e5c31af7Sopenharmony_ci	fragment ""
1695e5c31af7Sopenharmony_ci	     precision mediump float;
1696e5c31af7Sopenharmony_ci		 struct Light
1697e5c31af7Sopenharmony_ci		 {
1698e5c31af7Sopenharmony_ci		     mediump vec3	color;
1699e5c31af7Sopenharmony_ci			 mediump vec4	position;
1700e5c31af7Sopenharmony_ci			 mediump vec3	direction;
1701e5c31af7Sopenharmony_ci			 mediump float	constantAttenuation;
1702e5c31af7Sopenharmony_ci			 mediump float	linearAttenuation;
1703e5c31af7Sopenharmony_ci			 mediump float	quadraticAttenuation;
1704e5c31af7Sopenharmony_ci	    };
1705e5c31af7Sopenharmony_ci		struct Struct {float a;};
1706e5c31af7Sopenharmony_ci		uniform Light val;
1707e5c31af7Sopenharmony_ci		${FRAGMENT_DECLARATIONS}
1708e5c31af7Sopenharmony_ci		varying mediump float res;
1709e5c31af7Sopenharmony_ci		void main()
1710e5c31af7Sopenharmony_ci		{
1711e5c31af7Sopenharmony_ci			out0 = res + val.quadraticAttenuation;
1712e5c31af7Sopenharmony_ci			${FRAGMENT_OUTPUT}
1713e5c31af7Sopenharmony_ci		}
1714e5c31af7Sopenharmony_ci	""
1715e5c31af7Sopenharmony_ciend
1716