xref: /aosp_15_r20/external/deqp/data/gles3/shaders/functions.test (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker# Tests todo:
2*35238bceSAndroid Build Coastguard Worker# - inout with varyings, attributes, uniforms (and arrays of 'em)
3*35238bceSAndroid Build Coastguard Worker# - inout with arrays, array elements
4*35238bceSAndroid Build Coastguard Worker# - inout with array elements
5*35238bceSAndroid Build Coastguard Worker# - inout by-value semantics (arrays & elements & structs)
6*35238bceSAndroid Build Coastguard Worker
7*35238bceSAndroid Build Coastguard Worker# Done:
8*35238bceSAndroid Build Coastguard Worker# - control flow: return, return in loop, etc.
9*35238bceSAndroid Build Coastguard Worker
10*35238bceSAndroid Build Coastguard Workergroup datatypes "Function Parameter Data Types"
11*35238bceSAndroid Build Coastguard Worker
12*35238bceSAndroid Build Coastguard Worker    case float_float
13*35238bceSAndroid Build Coastguard Worker        version 300 es
14*35238bceSAndroid Build Coastguard Worker        values
15*35238bceSAndroid Build Coastguard Worker        {
16*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
17*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
18*35238bceSAndroid Build Coastguard Worker        }
19*35238bceSAndroid Build Coastguard Worker
20*35238bceSAndroid Build Coastguard Worker        both ""
21*35238bceSAndroid Build Coastguard Worker            #version 300 es
22*35238bceSAndroid Build Coastguard Worker            precision mediump float;
23*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
24*35238bceSAndroid Build Coastguard Worker
25*35238bceSAndroid Build Coastguard Worker            float func (float a)
26*35238bceSAndroid Build Coastguard Worker            {
27*35238bceSAndroid Build Coastguard Worker                return -a;
28*35238bceSAndroid Build Coastguard Worker            }
29*35238bceSAndroid Build Coastguard Worker
30*35238bceSAndroid Build Coastguard Worker            void main()
31*35238bceSAndroid Build Coastguard Worker            {
32*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
33*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
34*35238bceSAndroid Build Coastguard Worker            }
35*35238bceSAndroid Build Coastguard Worker        ""
36*35238bceSAndroid Build Coastguard Worker    end
37*35238bceSAndroid Build Coastguard Worker
38*35238bceSAndroid Build Coastguard Worker    case float_vec2
39*35238bceSAndroid Build Coastguard Worker        version 300 es
40*35238bceSAndroid Build Coastguard Worker        values
41*35238bceSAndroid Build Coastguard Worker        {
42*35238bceSAndroid Build Coastguard Worker            input vec2 in0 = [ vec2(0.0, 1.0) | vec2(2.0, 2.5) ];
43*35238bceSAndroid Build Coastguard Worker            output float out0 = [ -1.0 | -4.5 ];
44*35238bceSAndroid Build Coastguard Worker        }
45*35238bceSAndroid Build Coastguard Worker
46*35238bceSAndroid Build Coastguard Worker        both ""
47*35238bceSAndroid Build Coastguard Worker            #version 300 es
48*35238bceSAndroid Build Coastguard Worker            precision mediump float;
49*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
50*35238bceSAndroid Build Coastguard Worker
51*35238bceSAndroid Build Coastguard Worker            float func (vec2 a)
52*35238bceSAndroid Build Coastguard Worker            {
53*35238bceSAndroid Build Coastguard Worker                return -(a.x + a.y);
54*35238bceSAndroid Build Coastguard Worker            }
55*35238bceSAndroid Build Coastguard Worker
56*35238bceSAndroid Build Coastguard Worker            void main()
57*35238bceSAndroid Build Coastguard Worker            {
58*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
59*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
60*35238bceSAndroid Build Coastguard Worker            }
61*35238bceSAndroid Build Coastguard Worker        ""
62*35238bceSAndroid Build Coastguard Worker    end
63*35238bceSAndroid Build Coastguard Worker
64*35238bceSAndroid Build Coastguard Worker    case float_vec3
65*35238bceSAndroid Build Coastguard Worker        version 300 es
66*35238bceSAndroid Build Coastguard Worker        values
67*35238bceSAndroid Build Coastguard Worker        {
68*35238bceSAndroid Build Coastguard Worker            input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
69*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 1.0 | -0.5 ];
70*35238bceSAndroid Build Coastguard Worker        }
71*35238bceSAndroid Build Coastguard Worker
72*35238bceSAndroid Build Coastguard Worker        both ""
73*35238bceSAndroid Build Coastguard Worker            #version 300 es
74*35238bceSAndroid Build Coastguard Worker            precision mediump float;
75*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
76*35238bceSAndroid Build Coastguard Worker
77*35238bceSAndroid Build Coastguard Worker            float func (vec3 a)
78*35238bceSAndroid Build Coastguard Worker            {
79*35238bceSAndroid Build Coastguard Worker                return -(a.x + a.y + a.z);
80*35238bceSAndroid Build Coastguard Worker            }
81*35238bceSAndroid Build Coastguard Worker
82*35238bceSAndroid Build Coastguard Worker            void main()
83*35238bceSAndroid Build Coastguard Worker            {
84*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
85*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
86*35238bceSAndroid Build Coastguard Worker            }
87*35238bceSAndroid Build Coastguard Worker        ""
88*35238bceSAndroid Build Coastguard Worker    end
89*35238bceSAndroid Build Coastguard Worker
90*35238bceSAndroid Build Coastguard Worker    case float_vec4
91*35238bceSAndroid Build Coastguard Worker        version 300 es
92*35238bceSAndroid Build Coastguard Worker        values
93*35238bceSAndroid Build Coastguard Worker        {
94*35238bceSAndroid Build Coastguard Worker            input vec4 in0 = [ vec4(0.0, 1.0, -2.0, 0.5) | vec4(2.0, 2.5, 4.0, -7.0) ];
95*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
96*35238bceSAndroid Build Coastguard Worker        }
97*35238bceSAndroid Build Coastguard Worker
98*35238bceSAndroid Build Coastguard Worker        both ""
99*35238bceSAndroid Build Coastguard Worker            #version 300 es
100*35238bceSAndroid Build Coastguard Worker            precision mediump float;
101*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
102*35238bceSAndroid Build Coastguard Worker
103*35238bceSAndroid Build Coastguard Worker            float func (vec4 a)
104*35238bceSAndroid Build Coastguard Worker            {
105*35238bceSAndroid Build Coastguard Worker                return -(a.x + a.y + a.z + a.w);
106*35238bceSAndroid Build Coastguard Worker            }
107*35238bceSAndroid Build Coastguard Worker
108*35238bceSAndroid Build Coastguard Worker            void main()
109*35238bceSAndroid Build Coastguard Worker            {
110*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
111*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
112*35238bceSAndroid Build Coastguard Worker            }
113*35238bceSAndroid Build Coastguard Worker        ""
114*35238bceSAndroid Build Coastguard Worker    end
115*35238bceSAndroid Build Coastguard Worker
116*35238bceSAndroid Build Coastguard Worker    case float_mat2
117*35238bceSAndroid Build Coastguard Worker        version 300 es
118*35238bceSAndroid Build Coastguard Worker        values
119*35238bceSAndroid Build Coastguard Worker        {
120*35238bceSAndroid Build Coastguard Worker            input mat2 in0 = [ mat2(0.0, 1.0, -2.0, 0.5) | mat2(2.0, 2.5, 4.0, -7.0) ];
121*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
122*35238bceSAndroid Build Coastguard Worker        }
123*35238bceSAndroid Build Coastguard Worker
124*35238bceSAndroid Build Coastguard Worker        both ""
125*35238bceSAndroid Build Coastguard Worker            #version 300 es
126*35238bceSAndroid Build Coastguard Worker            precision mediump float;
127*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
128*35238bceSAndroid Build Coastguard Worker
129*35238bceSAndroid Build Coastguard Worker            float func (mat2 a)
130*35238bceSAndroid Build Coastguard Worker            {
131*35238bceSAndroid Build Coastguard Worker                return -(a[0][0] + a[0][1] + a[1][0] + a[1][1]);
132*35238bceSAndroid Build Coastguard Worker            }
133*35238bceSAndroid Build Coastguard Worker
134*35238bceSAndroid Build Coastguard Worker            void main()
135*35238bceSAndroid Build Coastguard Worker            {
136*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
137*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
138*35238bceSAndroid Build Coastguard Worker            }
139*35238bceSAndroid Build Coastguard Worker        ""
140*35238bceSAndroid Build Coastguard Worker    end
141*35238bceSAndroid Build Coastguard Worker
142*35238bceSAndroid Build Coastguard Worker    case float_mat3
143*35238bceSAndroid Build Coastguard Worker        version 300 es
144*35238bceSAndroid Build Coastguard Worker        values
145*35238bceSAndroid Build Coastguard Worker        {
146*35238bceSAndroid Build Coastguard Worker            input mat3 in0 = [ mat3(0.0, 1.0, -2.0, 0.5, 1.0, -1.0, 2.0, 4.0, -1.0) | mat3(2.0, 2.5, 4.0, -7.0, 2.5, 3.0, 0.5, -3.5, 1.0) ];
147*35238bceSAndroid Build Coastguard Worker            output float out0 = [ -4.5 | -5.0 ];
148*35238bceSAndroid Build Coastguard Worker        }
149*35238bceSAndroid Build Coastguard Worker
150*35238bceSAndroid Build Coastguard Worker        both ""
151*35238bceSAndroid Build Coastguard Worker            #version 300 es
152*35238bceSAndroid Build Coastguard Worker            precision mediump float;
153*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
154*35238bceSAndroid Build Coastguard Worker
155*35238bceSAndroid Build Coastguard Worker            float func (mat3 a)
156*35238bceSAndroid Build Coastguard Worker            {
157*35238bceSAndroid Build Coastguard Worker                return -(a[0][0] + a[0][1] + a[0][2] + a[1][0] + a[1][1] + a[1][2] + a[2][0] + a[2][1] + a[2][2]);
158*35238bceSAndroid Build Coastguard Worker            }
159*35238bceSAndroid Build Coastguard Worker
160*35238bceSAndroid Build Coastguard Worker            void main()
161*35238bceSAndroid Build Coastguard Worker            {
162*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
163*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
164*35238bceSAndroid Build Coastguard Worker            }
165*35238bceSAndroid Build Coastguard Worker        ""
166*35238bceSAndroid Build Coastguard Worker    end
167*35238bceSAndroid Build Coastguard Worker
168*35238bceSAndroid Build Coastguard Worker    case float_mat4
169*35238bceSAndroid Build Coastguard Worker        version 300 es
170*35238bceSAndroid Build Coastguard Worker        values
171*35238bceSAndroid Build Coastguard Worker        {
172*35238bceSAndroid Build Coastguard Worker            input mat4 in0 = [ mat4(0.0, 1.0, -2.0, 0.5, 1.0, -1.0, 2.0, 4.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -2.0, -2.0) | mat4(2.0, 2.5, 4.0, -7.0, 2.5, 3.0, 0.5, -3.5, 1.0, 0.0, 2.0, -1.0, 1.0, 0.0, -1.0, 3.0) ];
173*35238bceSAndroid Build Coastguard Worker            output float out0 = [ -5.5 | -9.0 ];
174*35238bceSAndroid Build Coastguard Worker        }
175*35238bceSAndroid Build Coastguard Worker
176*35238bceSAndroid Build Coastguard Worker        both ""
177*35238bceSAndroid Build Coastguard Worker            #version 300 es
178*35238bceSAndroid Build Coastguard Worker            precision mediump float;
179*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
180*35238bceSAndroid Build Coastguard Worker
181*35238bceSAndroid Build Coastguard Worker            float func (mat4 a)
182*35238bceSAndroid Build Coastguard Worker            {
183*35238bceSAndroid Build Coastguard Worker                return -(a[0][0] + a[0][1] + a[0][2] + a[0][3] + a[1][0] + a[1][1] + a[1][2] + a[1][3] + a[2][0] + a[2][1] + a[2][2] + a[2][3] + a[3][0] + a[3][1] + a[3][2] + a[3][3]);
184*35238bceSAndroid Build Coastguard Worker            }
185*35238bceSAndroid Build Coastguard Worker
186*35238bceSAndroid Build Coastguard Worker            void main()
187*35238bceSAndroid Build Coastguard Worker            {
188*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
189*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
190*35238bceSAndroid Build Coastguard Worker            }
191*35238bceSAndroid Build Coastguard Worker        ""
192*35238bceSAndroid Build Coastguard Worker    end
193*35238bceSAndroid Build Coastguard Worker
194*35238bceSAndroid Build Coastguard Worker    case int_int
195*35238bceSAndroid Build Coastguard Worker        version 300 es
196*35238bceSAndroid Build Coastguard Worker        values
197*35238bceSAndroid Build Coastguard Worker        {
198*35238bceSAndroid Build Coastguard Worker            input int in0 = [ -1 | 0 | 1 | 4 ];
199*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 1 | 0 | -1 | -4 ];
200*35238bceSAndroid Build Coastguard Worker        }
201*35238bceSAndroid Build Coastguard Worker
202*35238bceSAndroid Build Coastguard Worker        both ""
203*35238bceSAndroid Build Coastguard Worker            #version 300 es
204*35238bceSAndroid Build Coastguard Worker            precision mediump float;
205*35238bceSAndroid Build Coastguard Worker            precision mediump int;
206*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
207*35238bceSAndroid Build Coastguard Worker
208*35238bceSAndroid Build Coastguard Worker            int func (int a)
209*35238bceSAndroid Build Coastguard Worker            {
210*35238bceSAndroid Build Coastguard Worker                return -a;
211*35238bceSAndroid Build Coastguard Worker            }
212*35238bceSAndroid Build Coastguard Worker
213*35238bceSAndroid Build Coastguard Worker            void main()
214*35238bceSAndroid Build Coastguard Worker            {
215*35238bceSAndroid Build Coastguard Worker                ${SETUP}
216*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
217*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
218*35238bceSAndroid Build Coastguard Worker            }
219*35238bceSAndroid Build Coastguard Worker        ""
220*35238bceSAndroid Build Coastguard Worker    end
221*35238bceSAndroid Build Coastguard Worker
222*35238bceSAndroid Build Coastguard Worker    case int_ivec2
223*35238bceSAndroid Build Coastguard Worker        version 300 es
224*35238bceSAndroid Build Coastguard Worker        values
225*35238bceSAndroid Build Coastguard Worker        {
226*35238bceSAndroid Build Coastguard Worker            input ivec2 in0 = [ ivec2(-1, 0) | ivec2(1, 4) ];
227*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 1 | -5 ];
228*35238bceSAndroid Build Coastguard Worker        }
229*35238bceSAndroid Build Coastguard Worker
230*35238bceSAndroid Build Coastguard Worker        both ""
231*35238bceSAndroid Build Coastguard Worker            #version 300 es
232*35238bceSAndroid Build Coastguard Worker            precision mediump float;
233*35238bceSAndroid Build Coastguard Worker            precision mediump int;
234*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
235*35238bceSAndroid Build Coastguard Worker
236*35238bceSAndroid Build Coastguard Worker            int func (ivec2 a)
237*35238bceSAndroid Build Coastguard Worker            {
238*35238bceSAndroid Build Coastguard Worker                return -(a.x + a.y);
239*35238bceSAndroid Build Coastguard Worker            }
240*35238bceSAndroid Build Coastguard Worker
241*35238bceSAndroid Build Coastguard Worker            void main()
242*35238bceSAndroid Build Coastguard Worker            {
243*35238bceSAndroid Build Coastguard Worker                ${SETUP}
244*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
245*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
246*35238bceSAndroid Build Coastguard Worker            }
247*35238bceSAndroid Build Coastguard Worker        ""
248*35238bceSAndroid Build Coastguard Worker    end
249*35238bceSAndroid Build Coastguard Worker
250*35238bceSAndroid Build Coastguard Worker    case int_ivec3
251*35238bceSAndroid Build Coastguard Worker        version 300 es
252*35238bceSAndroid Build Coastguard Worker        values
253*35238bceSAndroid Build Coastguard Worker        {
254*35238bceSAndroid Build Coastguard Worker            input ivec3 in0 = [ ivec3(-1, 0, 2) | ivec3(1, 4, -8) ];
255*35238bceSAndroid Build Coastguard Worker            output int out0 = [ -1 | 3 ];
256*35238bceSAndroid Build Coastguard Worker        }
257*35238bceSAndroid Build Coastguard Worker
258*35238bceSAndroid Build Coastguard Worker        both ""
259*35238bceSAndroid Build Coastguard Worker            #version 300 es
260*35238bceSAndroid Build Coastguard Worker            precision mediump float;
261*35238bceSAndroid Build Coastguard Worker            precision mediump int;
262*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
263*35238bceSAndroid Build Coastguard Worker
264*35238bceSAndroid Build Coastguard Worker            int func (ivec3 a)
265*35238bceSAndroid Build Coastguard Worker            {
266*35238bceSAndroid Build Coastguard Worker                return -(a.x + a.y + a.z);
267*35238bceSAndroid Build Coastguard Worker            }
268*35238bceSAndroid Build Coastguard Worker
269*35238bceSAndroid Build Coastguard Worker            void main()
270*35238bceSAndroid Build Coastguard Worker            {
271*35238bceSAndroid Build Coastguard Worker                ${SETUP}
272*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
273*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
274*35238bceSAndroid Build Coastguard Worker            }
275*35238bceSAndroid Build Coastguard Worker        ""
276*35238bceSAndroid Build Coastguard Worker    end
277*35238bceSAndroid Build Coastguard Worker
278*35238bceSAndroid Build Coastguard Worker    case int_ivec4
279*35238bceSAndroid Build Coastguard Worker        version 300 es
280*35238bceSAndroid Build Coastguard Worker        values
281*35238bceSAndroid Build Coastguard Worker        {
282*35238bceSAndroid Build Coastguard Worker            input ivec4 in0 = [ ivec4(-1, 0, 2, 2) | ivec4(1, 4, -8, 2) ];
283*35238bceSAndroid Build Coastguard Worker            output int out0 = [ -3 | 1 ];
284*35238bceSAndroid Build Coastguard Worker        }
285*35238bceSAndroid Build Coastguard Worker
286*35238bceSAndroid Build Coastguard Worker        both ""
287*35238bceSAndroid Build Coastguard Worker            #version 300 es
288*35238bceSAndroid Build Coastguard Worker            precision mediump float;
289*35238bceSAndroid Build Coastguard Worker            precision mediump int;
290*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
291*35238bceSAndroid Build Coastguard Worker
292*35238bceSAndroid Build Coastguard Worker            int func (ivec4 a)
293*35238bceSAndroid Build Coastguard Worker            {
294*35238bceSAndroid Build Coastguard Worker                return -(a.x + a.y + a.z + a.w);
295*35238bceSAndroid Build Coastguard Worker            }
296*35238bceSAndroid Build Coastguard Worker
297*35238bceSAndroid Build Coastguard Worker            void main()
298*35238bceSAndroid Build Coastguard Worker            {
299*35238bceSAndroid Build Coastguard Worker                ${SETUP}
300*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
301*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
302*35238bceSAndroid Build Coastguard Worker            }
303*35238bceSAndroid Build Coastguard Worker        ""
304*35238bceSAndroid Build Coastguard Worker    end
305*35238bceSAndroid Build Coastguard Worker
306*35238bceSAndroid Build Coastguard Worker    case uint_uint
307*35238bceSAndroid Build Coastguard Worker        version 300 es
308*35238bceSAndroid Build Coastguard Worker        values
309*35238bceSAndroid Build Coastguard Worker        {
310*35238bceSAndroid Build Coastguard Worker            input uint in0 = [ 1 | 0 | 2 | 4 ];
311*35238bceSAndroid Build Coastguard Worker            output uint out0 = [ 1 | 0 | 4 | 16 ];
312*35238bceSAndroid Build Coastguard Worker        }
313*35238bceSAndroid Build Coastguard Worker
314*35238bceSAndroid Build Coastguard Worker        both ""
315*35238bceSAndroid Build Coastguard Worker            #version 300 es
316*35238bceSAndroid Build Coastguard Worker            precision mediump float;
317*35238bceSAndroid Build Coastguard Worker            precision mediump int;
318*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
319*35238bceSAndroid Build Coastguard Worker
320*35238bceSAndroid Build Coastguard Worker            uint func (uint a)
321*35238bceSAndroid Build Coastguard Worker            {
322*35238bceSAndroid Build Coastguard Worker                return a*a;
323*35238bceSAndroid Build Coastguard Worker            }
324*35238bceSAndroid Build Coastguard Worker
325*35238bceSAndroid Build Coastguard Worker            void main()
326*35238bceSAndroid Build Coastguard Worker            {
327*35238bceSAndroid Build Coastguard Worker                ${SETUP}
328*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
329*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
330*35238bceSAndroid Build Coastguard Worker            }
331*35238bceSAndroid Build Coastguard Worker        ""
332*35238bceSAndroid Build Coastguard Worker    end
333*35238bceSAndroid Build Coastguard Worker
334*35238bceSAndroid Build Coastguard Worker    case uint_uvec2
335*35238bceSAndroid Build Coastguard Worker        version 300 es
336*35238bceSAndroid Build Coastguard Worker        values
337*35238bceSAndroid Build Coastguard Worker        {
338*35238bceSAndroid Build Coastguard Worker            input uvec2 in0 = [ uvec2(1, 0) | uvec2(2, 4) ];
339*35238bceSAndroid Build Coastguard Worker            output uint out0 = [ 1 | 6 ];
340*35238bceSAndroid Build Coastguard Worker        }
341*35238bceSAndroid Build Coastguard Worker
342*35238bceSAndroid Build Coastguard Worker        both ""
343*35238bceSAndroid Build Coastguard Worker            #version 300 es
344*35238bceSAndroid Build Coastguard Worker            precision mediump float;
345*35238bceSAndroid Build Coastguard Worker            precision mediump int;
346*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
347*35238bceSAndroid Build Coastguard Worker
348*35238bceSAndroid Build Coastguard Worker            uint func (uvec2 a)
349*35238bceSAndroid Build Coastguard Worker            {
350*35238bceSAndroid Build Coastguard Worker                return (a.x + a.y);
351*35238bceSAndroid Build Coastguard Worker            }
352*35238bceSAndroid Build Coastguard Worker
353*35238bceSAndroid Build Coastguard Worker            void main()
354*35238bceSAndroid Build Coastguard Worker            {
355*35238bceSAndroid Build Coastguard Worker                ${SETUP}
356*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
357*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
358*35238bceSAndroid Build Coastguard Worker            }
359*35238bceSAndroid Build Coastguard Worker        ""
360*35238bceSAndroid Build Coastguard Worker    end
361*35238bceSAndroid Build Coastguard Worker
362*35238bceSAndroid Build Coastguard Worker    case uint_uvec3
363*35238bceSAndroid Build Coastguard Worker        version 300 es
364*35238bceSAndroid Build Coastguard Worker        values
365*35238bceSAndroid Build Coastguard Worker        {
366*35238bceSAndroid Build Coastguard Worker            input uvec3 in0 = [ uvec3(1, 0, 2) | uvec3(1, 4, 8) ];
367*35238bceSAndroid Build Coastguard Worker            output uint out0 = [ 3 | 13 ];
368*35238bceSAndroid Build Coastguard Worker        }
369*35238bceSAndroid Build Coastguard Worker
370*35238bceSAndroid Build Coastguard Worker        both ""
371*35238bceSAndroid Build Coastguard Worker            #version 300 es
372*35238bceSAndroid Build Coastguard Worker            precision mediump float;
373*35238bceSAndroid Build Coastguard Worker            precision mediump int;
374*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
375*35238bceSAndroid Build Coastguard Worker
376*35238bceSAndroid Build Coastguard Worker            uint func (uvec3 a)
377*35238bceSAndroid Build Coastguard Worker            {
378*35238bceSAndroid Build Coastguard Worker                return (a.x + a.y + a.z);
379*35238bceSAndroid Build Coastguard Worker            }
380*35238bceSAndroid Build Coastguard Worker
381*35238bceSAndroid Build Coastguard Worker            void main()
382*35238bceSAndroid Build Coastguard Worker            {
383*35238bceSAndroid Build Coastguard Worker                ${SETUP}
384*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
385*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
386*35238bceSAndroid Build Coastguard Worker            }
387*35238bceSAndroid Build Coastguard Worker        ""
388*35238bceSAndroid Build Coastguard Worker    end
389*35238bceSAndroid Build Coastguard Worker
390*35238bceSAndroid Build Coastguard Worker    case uint_uvec4
391*35238bceSAndroid Build Coastguard Worker        version 300 es
392*35238bceSAndroid Build Coastguard Worker        values
393*35238bceSAndroid Build Coastguard Worker        {
394*35238bceSAndroid Build Coastguard Worker            input uvec4 in0 = [ uvec4(1, 0, 2, 2) | uvec4(1, 4, 8, 2) ];
395*35238bceSAndroid Build Coastguard Worker            output uint out0 = [ 5 | 15 ];
396*35238bceSAndroid Build Coastguard Worker        }
397*35238bceSAndroid Build Coastguard Worker
398*35238bceSAndroid Build Coastguard Worker        both ""
399*35238bceSAndroid Build Coastguard Worker            #version 300 es
400*35238bceSAndroid Build Coastguard Worker            precision mediump float;
401*35238bceSAndroid Build Coastguard Worker            precision mediump int;
402*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
403*35238bceSAndroid Build Coastguard Worker
404*35238bceSAndroid Build Coastguard Worker            uint func (uvec4 a)
405*35238bceSAndroid Build Coastguard Worker            {
406*35238bceSAndroid Build Coastguard Worker                return (a.x + a.y + a.z + a.w);
407*35238bceSAndroid Build Coastguard Worker            }
408*35238bceSAndroid Build Coastguard Worker
409*35238bceSAndroid Build Coastguard Worker            void main()
410*35238bceSAndroid Build Coastguard Worker            {
411*35238bceSAndroid Build Coastguard Worker                ${SETUP}
412*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
413*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
414*35238bceSAndroid Build Coastguard Worker            }
415*35238bceSAndroid Build Coastguard Worker        ""
416*35238bceSAndroid Build Coastguard Worker    end
417*35238bceSAndroid Build Coastguard Worker
418*35238bceSAndroid Build Coastguard Worker    case bool_bool
419*35238bceSAndroid Build Coastguard Worker        version 300 es
420*35238bceSAndroid Build Coastguard Worker        values
421*35238bceSAndroid Build Coastguard Worker        {
422*35238bceSAndroid Build Coastguard Worker            input bool in0 = [ true | false ];
423*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true ];
424*35238bceSAndroid Build Coastguard Worker        }
425*35238bceSAndroid Build Coastguard Worker
426*35238bceSAndroid Build Coastguard Worker        both ""
427*35238bceSAndroid Build Coastguard Worker            #version 300 es
428*35238bceSAndroid Build Coastguard Worker            precision mediump float;
429*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
430*35238bceSAndroid Build Coastguard Worker
431*35238bceSAndroid Build Coastguard Worker            bool func (bool a)
432*35238bceSAndroid Build Coastguard Worker            {
433*35238bceSAndroid Build Coastguard Worker                return !a;
434*35238bceSAndroid Build Coastguard Worker            }
435*35238bceSAndroid Build Coastguard Worker
436*35238bceSAndroid Build Coastguard Worker            void main()
437*35238bceSAndroid Build Coastguard Worker            {
438*35238bceSAndroid Build Coastguard Worker                ${SETUP}
439*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
440*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
441*35238bceSAndroid Build Coastguard Worker            }
442*35238bceSAndroid Build Coastguard Worker        ""
443*35238bceSAndroid Build Coastguard Worker    end
444*35238bceSAndroid Build Coastguard Worker
445*35238bceSAndroid Build Coastguard Worker    case bool_bvec2
446*35238bceSAndroid Build Coastguard Worker        version 300 es
447*35238bceSAndroid Build Coastguard Worker        values
448*35238bceSAndroid Build Coastguard Worker        {
449*35238bceSAndroid Build Coastguard Worker            input bvec2 in0 = [ bvec2(true, true) | bvec2(false, true) ];
450*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true ];
451*35238bceSAndroid Build Coastguard Worker        }
452*35238bceSAndroid Build Coastguard Worker
453*35238bceSAndroid Build Coastguard Worker        both ""
454*35238bceSAndroid Build Coastguard Worker            #version 300 es
455*35238bceSAndroid Build Coastguard Worker            precision mediump float;
456*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
457*35238bceSAndroid Build Coastguard Worker
458*35238bceSAndroid Build Coastguard Worker            bool func (bvec2 a)
459*35238bceSAndroid Build Coastguard Worker            {
460*35238bceSAndroid Build Coastguard Worker                return !(a.x == a.y);
461*35238bceSAndroid Build Coastguard Worker            }
462*35238bceSAndroid Build Coastguard Worker
463*35238bceSAndroid Build Coastguard Worker            void main()
464*35238bceSAndroid Build Coastguard Worker            {
465*35238bceSAndroid Build Coastguard Worker                ${SETUP}
466*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
467*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
468*35238bceSAndroid Build Coastguard Worker            }
469*35238bceSAndroid Build Coastguard Worker        ""
470*35238bceSAndroid Build Coastguard Worker    end
471*35238bceSAndroid Build Coastguard Worker
472*35238bceSAndroid Build Coastguard Worker    case bool_bvec3
473*35238bceSAndroid Build Coastguard Worker        version 300 es
474*35238bceSAndroid Build Coastguard Worker        values
475*35238bceSAndroid Build Coastguard Worker        {
476*35238bceSAndroid Build Coastguard Worker            input bvec3 in0 = [ bvec3(true, true, false) | bvec3(true, false, false) ];
477*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true ];
478*35238bceSAndroid Build Coastguard Worker        }
479*35238bceSAndroid Build Coastguard Worker
480*35238bceSAndroid Build Coastguard Worker        both ""
481*35238bceSAndroid Build Coastguard Worker            #version 300 es
482*35238bceSAndroid Build Coastguard Worker            precision mediump float;
483*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
484*35238bceSAndroid Build Coastguard Worker
485*35238bceSAndroid Build Coastguard Worker            bool func (bvec3 a)
486*35238bceSAndroid Build Coastguard Worker            {
487*35238bceSAndroid Build Coastguard Worker                return (a.x == a.y) == a.z;
488*35238bceSAndroid Build Coastguard Worker            }
489*35238bceSAndroid Build Coastguard Worker
490*35238bceSAndroid Build Coastguard Worker            void main()
491*35238bceSAndroid Build Coastguard Worker            {
492*35238bceSAndroid Build Coastguard Worker                ${SETUP}
493*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
494*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
495*35238bceSAndroid Build Coastguard Worker            }
496*35238bceSAndroid Build Coastguard Worker        ""
497*35238bceSAndroid Build Coastguard Worker    end
498*35238bceSAndroid Build Coastguard Worker
499*35238bceSAndroid Build Coastguard Worker    case bool_bvec4
500*35238bceSAndroid Build Coastguard Worker        version 300 es
501*35238bceSAndroid Build Coastguard Worker        values
502*35238bceSAndroid Build Coastguard Worker        {
503*35238bceSAndroid Build Coastguard Worker            input bvec4 in0 = [ bvec4(true, true, true, false) | bvec4(false, false, true, true) | bvec4(true, false, false, true) ];
504*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true | true ];
505*35238bceSAndroid Build Coastguard Worker        }
506*35238bceSAndroid Build Coastguard Worker
507*35238bceSAndroid Build Coastguard Worker        both ""
508*35238bceSAndroid Build Coastguard Worker            #version 300 es
509*35238bceSAndroid Build Coastguard Worker            precision mediump float;
510*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
511*35238bceSAndroid Build Coastguard Worker
512*35238bceSAndroid Build Coastguard Worker            bool func (bvec4 a)
513*35238bceSAndroid Build Coastguard Worker            {
514*35238bceSAndroid Build Coastguard Worker                return ((a.x == a.y) == (a.z == a.w));
515*35238bceSAndroid Build Coastguard Worker            }
516*35238bceSAndroid Build Coastguard Worker
517*35238bceSAndroid Build Coastguard Worker            void main()
518*35238bceSAndroid Build Coastguard Worker            {
519*35238bceSAndroid Build Coastguard Worker                ${SETUP}
520*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
521*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
522*35238bceSAndroid Build Coastguard Worker            }
523*35238bceSAndroid Build Coastguard Worker        ""
524*35238bceSAndroid Build Coastguard Worker    end
525*35238bceSAndroid Build Coastguard Worker
526*35238bceSAndroid Build Coastguard Worker    case mat2
527*35238bceSAndroid Build Coastguard Worker        version 300 es
528*35238bceSAndroid Build Coastguard Worker        values
529*35238bceSAndroid Build Coastguard Worker        {
530*35238bceSAndroid Build Coastguard Worker            input mat2 in0 = [ mat2(-2.0, 0.5, -1.0, 1.0) | mat2(1.0, -3.5, -3.5, 2.5) | mat2(-2.0, -2.0, 3.5, 0.0) ];
531*35238bceSAndroid Build Coastguard Worker            output mat2 out0 = [ mat2(4.0, -1.0, 2.0, -2.0) | mat2(-2.0, 7.0, 7.0, -5.0) | mat2(4.0, 4.0, -7.0, -0.0) ];
532*35238bceSAndroid Build Coastguard Worker        }
533*35238bceSAndroid Build Coastguard Worker
534*35238bceSAndroid Build Coastguard Worker        both ""
535*35238bceSAndroid Build Coastguard Worker            #version 300 es
536*35238bceSAndroid Build Coastguard Worker            precision mediump float;
537*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
538*35238bceSAndroid Build Coastguard Worker
539*35238bceSAndroid Build Coastguard Worker            mat2 func (mat2 a)
540*35238bceSAndroid Build Coastguard Worker            {
541*35238bceSAndroid Build Coastguard Worker                return -2.0*a;
542*35238bceSAndroid Build Coastguard Worker            }
543*35238bceSAndroid Build Coastguard Worker
544*35238bceSAndroid Build Coastguard Worker            void main()
545*35238bceSAndroid Build Coastguard Worker            {
546*35238bceSAndroid Build Coastguard Worker                ${SETUP}
547*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
548*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
549*35238bceSAndroid Build Coastguard Worker            }
550*35238bceSAndroid Build Coastguard Worker        ""
551*35238bceSAndroid Build Coastguard Worker    end
552*35238bceSAndroid Build Coastguard Worker
553*35238bceSAndroid Build Coastguard Worker
554*35238bceSAndroid Build Coastguard Worker    case mat2x3
555*35238bceSAndroid Build Coastguard Worker        version 300 es
556*35238bceSAndroid Build Coastguard Worker        values
557*35238bceSAndroid Build Coastguard Worker        {
558*35238bceSAndroid Build Coastguard Worker            input mat2x3 in0 = [ mat2x3(2.5, 0.0, 1.0, -2.5, 1.0, 3.0) | mat2x3(0.0, 2.0, 1.5, -3.5, 2.0, 0.5) | mat2x3(-1.5, -3.5, 2.5, 0.0, 1.5, 3.0) ];
559*35238bceSAndroid Build Coastguard Worker            output mat2x3 out0 = [ mat2x3(-5.0, -0.0, -2.0, 5.0, -2.0, -6.0) | mat2x3(-0.0, -4.0, -3.0, 7.0, -4.0, -1.0) | mat2x3(3.0, 7.0, -5.0, -0.0, -3.0, -6.0) ];
560*35238bceSAndroid Build Coastguard Worker        }
561*35238bceSAndroid Build Coastguard Worker
562*35238bceSAndroid Build Coastguard Worker        both ""
563*35238bceSAndroid Build Coastguard Worker            #version 300 es
564*35238bceSAndroid Build Coastguard Worker            precision mediump float;
565*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
566*35238bceSAndroid Build Coastguard Worker
567*35238bceSAndroid Build Coastguard Worker            mat2x3 func (mat2x3 a)
568*35238bceSAndroid Build Coastguard Worker            {
569*35238bceSAndroid Build Coastguard Worker                return -2.0*a;
570*35238bceSAndroid Build Coastguard Worker            }
571*35238bceSAndroid Build Coastguard Worker
572*35238bceSAndroid Build Coastguard Worker            void main()
573*35238bceSAndroid Build Coastguard Worker            {
574*35238bceSAndroid Build Coastguard Worker                ${SETUP}
575*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
576*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
577*35238bceSAndroid Build Coastguard Worker            }
578*35238bceSAndroid Build Coastguard Worker        ""
579*35238bceSAndroid Build Coastguard Worker    end
580*35238bceSAndroid Build Coastguard Worker
581*35238bceSAndroid Build Coastguard Worker
582*35238bceSAndroid Build Coastguard Worker    case mat2x4
583*35238bceSAndroid Build Coastguard Worker        version 300 es
584*35238bceSAndroid Build Coastguard Worker        values
585*35238bceSAndroid Build Coastguard Worker        {
586*35238bceSAndroid Build Coastguard Worker            input mat2x4 in0 = [ mat2x4(1.5, 3.0, -1.0, 2.5, -0.5, 3.5, 3.0, -3.0) | mat2x4(-2.5, -2.0, 3.5, -0.5, 1.0, -1.5, 0.0, -1.0) | mat2x4(-1.0, 0.5, 0.5, 3.0, 1.5, 3.0, 2.5, 3.5) ];
587*35238bceSAndroid Build Coastguard Worker            output mat2x4 out0 = [ mat2x4(-3.0, -6.0, 2.0, -5.0, 1.0, -7.0, -6.0, 6.0) | mat2x4(5.0, 4.0, -7.0, 1.0, -2.0, 3.0, -0.0, 2.0) | mat2x4(2.0, -1.0, -1.0, -6.0, -3.0, -6.0, -5.0, -7.0) ];
588*35238bceSAndroid Build Coastguard Worker        }
589*35238bceSAndroid Build Coastguard Worker
590*35238bceSAndroid Build Coastguard Worker        both ""
591*35238bceSAndroid Build Coastguard Worker            #version 300 es
592*35238bceSAndroid Build Coastguard Worker            precision mediump float;
593*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
594*35238bceSAndroid Build Coastguard Worker
595*35238bceSAndroid Build Coastguard Worker            mat2x4 func (mat2x4 a)
596*35238bceSAndroid Build Coastguard Worker            {
597*35238bceSAndroid Build Coastguard Worker                return -2.0*a;
598*35238bceSAndroid Build Coastguard Worker            }
599*35238bceSAndroid Build Coastguard Worker
600*35238bceSAndroid Build Coastguard Worker            void main()
601*35238bceSAndroid Build Coastguard Worker            {
602*35238bceSAndroid Build Coastguard Worker                ${SETUP}
603*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
604*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
605*35238bceSAndroid Build Coastguard Worker            }
606*35238bceSAndroid Build Coastguard Worker        ""
607*35238bceSAndroid Build Coastguard Worker    end
608*35238bceSAndroid Build Coastguard Worker
609*35238bceSAndroid Build Coastguard Worker
610*35238bceSAndroid Build Coastguard Worker    case mat3x2
611*35238bceSAndroid Build Coastguard Worker        version 300 es
612*35238bceSAndroid Build Coastguard Worker        values
613*35238bceSAndroid Build Coastguard Worker        {
614*35238bceSAndroid Build Coastguard Worker            input mat3x2 in0 = [ mat3x2(1.5, -2.5, 2.5, 3.5, 3.0, 0.5) | mat3x2(1.5, -2.0, 2.5, 0.5, -1.5, -3.5) | mat3x2(2.5, 3.5, -3.0, 2.5, -0.5, -2.5) ];
615*35238bceSAndroid Build Coastguard Worker            output mat3x2 out0 = [ mat3x2(-3.0, 5.0, -5.0, -7.0, -6.0, -1.0) | mat3x2(-3.0, 4.0, -5.0, -1.0, 3.0, 7.0) | mat3x2(-5.0, -7.0, 6.0, -5.0, 1.0, 5.0) ];
616*35238bceSAndroid Build Coastguard Worker        }
617*35238bceSAndroid Build Coastguard Worker
618*35238bceSAndroid Build Coastguard Worker        both ""
619*35238bceSAndroid Build Coastguard Worker            #version 300 es
620*35238bceSAndroid Build Coastguard Worker            precision mediump float;
621*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
622*35238bceSAndroid Build Coastguard Worker
623*35238bceSAndroid Build Coastguard Worker            mat3x2 func (mat3x2 a)
624*35238bceSAndroid Build Coastguard Worker            {
625*35238bceSAndroid Build Coastguard Worker                return -2.0*a;
626*35238bceSAndroid Build Coastguard Worker            }
627*35238bceSAndroid Build Coastguard Worker
628*35238bceSAndroid Build Coastguard Worker            void main()
629*35238bceSAndroid Build Coastguard Worker            {
630*35238bceSAndroid Build Coastguard Worker                ${SETUP}
631*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
632*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
633*35238bceSAndroid Build Coastguard Worker            }
634*35238bceSAndroid Build Coastguard Worker        ""
635*35238bceSAndroid Build Coastguard Worker    end
636*35238bceSAndroid Build Coastguard Worker
637*35238bceSAndroid Build Coastguard Worker
638*35238bceSAndroid Build Coastguard Worker    case mat3
639*35238bceSAndroid Build Coastguard Worker        version 300 es
640*35238bceSAndroid Build Coastguard Worker        values
641*35238bceSAndroid Build Coastguard Worker        {
642*35238bceSAndroid Build Coastguard Worker            input mat3 in0 = [ mat3(-1.5, 2.0, 3.0, -3.5, 1.0, -3.5, 1.5, -1.5, 3.0) | mat3(3.5, 0.0, 3.5, -1.5, -3.0, 0.5, -3.5, -2.5, -0.5) | mat3(1.0, -2.5, -3.5, 3.0, -1.5, 3.5, 3.0, -1.0, -0.5) ];
643*35238bceSAndroid Build Coastguard Worker            output mat3 out0 = [ mat3(3.0, -4.0, -6.0, 7.0, -2.0, 7.0, -3.0, 3.0, -6.0) | mat3(-7.0, -0.0, -7.0, 3.0, 6.0, -1.0, 7.0, 5.0, 1.0) | mat3(-2.0, 5.0, 7.0, -6.0, 3.0, -7.0, -6.0, 2.0, 1.0) ];
644*35238bceSAndroid Build Coastguard Worker        }
645*35238bceSAndroid Build Coastguard Worker
646*35238bceSAndroid Build Coastguard Worker        both ""
647*35238bceSAndroid Build Coastguard Worker            #version 300 es
648*35238bceSAndroid Build Coastguard Worker            precision mediump float;
649*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
650*35238bceSAndroid Build Coastguard Worker
651*35238bceSAndroid Build Coastguard Worker            mat3 func (mat3 a)
652*35238bceSAndroid Build Coastguard Worker            {
653*35238bceSAndroid Build Coastguard Worker                return -2.0*a;
654*35238bceSAndroid Build Coastguard Worker            }
655*35238bceSAndroid Build Coastguard Worker
656*35238bceSAndroid Build Coastguard Worker            void main()
657*35238bceSAndroid Build Coastguard Worker            {
658*35238bceSAndroid Build Coastguard Worker                ${SETUP}
659*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
660*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
661*35238bceSAndroid Build Coastguard Worker            }
662*35238bceSAndroid Build Coastguard Worker        ""
663*35238bceSAndroid Build Coastguard Worker    end
664*35238bceSAndroid Build Coastguard Worker
665*35238bceSAndroid Build Coastguard Worker
666*35238bceSAndroid Build Coastguard Worker    case mat3x4
667*35238bceSAndroid Build Coastguard Worker        version 300 es
668*35238bceSAndroid Build Coastguard Worker        values
669*35238bceSAndroid Build Coastguard Worker        {
670*35238bceSAndroid Build Coastguard Worker            input mat3x4 in0 = [ mat3x4(0.0, 1.0, 0.5, 0.5, 1.0, 3.5, 0.0, -0.5, 1.5, -2.0, -1.5, 3.5) | mat3x4(0.0, 0.5, -3.5, -0.5, 0.5, -3.5, 1.0, 1.0, -3.5, 1.0, -0.5, 1.5) | mat3x4(-1.0, 1.5, 2.0, -3.5, -3.5, 1.5, 3.5, -2.0, -0.5, 0.5, -1.5, -1.0) ];
671*35238bceSAndroid Build Coastguard Worker            output mat3x4 out0 = [ mat3x4(-0.0, -2.0, -1.0, -1.0, -2.0, -7.0, -0.0, 1.0, -3.0, 4.0, 3.0, -7.0) | mat3x4(-0.0, -1.0, 7.0, 1.0, -1.0, 7.0, -2.0, -2.0, 7.0, -2.0, 1.0, -3.0) | mat3x4(2.0, -3.0, -4.0, 7.0, 7.0, -3.0, -7.0, 4.0, 1.0, -1.0, 3.0, 2.0) ];
672*35238bceSAndroid Build Coastguard Worker        }
673*35238bceSAndroid Build Coastguard Worker
674*35238bceSAndroid Build Coastguard Worker        both ""
675*35238bceSAndroid Build Coastguard Worker            #version 300 es
676*35238bceSAndroid Build Coastguard Worker            precision mediump float;
677*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
678*35238bceSAndroid Build Coastguard Worker
679*35238bceSAndroid Build Coastguard Worker            mat3x4 func (mat3x4 a)
680*35238bceSAndroid Build Coastguard Worker            {
681*35238bceSAndroid Build Coastguard Worker                return -2.0*a;
682*35238bceSAndroid Build Coastguard Worker            }
683*35238bceSAndroid Build Coastguard Worker
684*35238bceSAndroid Build Coastguard Worker            void main()
685*35238bceSAndroid Build Coastguard Worker            {
686*35238bceSAndroid Build Coastguard Worker                ${SETUP}
687*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
688*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
689*35238bceSAndroid Build Coastguard Worker            }
690*35238bceSAndroid Build Coastguard Worker        ""
691*35238bceSAndroid Build Coastguard Worker    end
692*35238bceSAndroid Build Coastguard Worker
693*35238bceSAndroid Build Coastguard Worker
694*35238bceSAndroid Build Coastguard Worker    case mat4x2
695*35238bceSAndroid Build Coastguard Worker        version 300 es
696*35238bceSAndroid Build Coastguard Worker        values
697*35238bceSAndroid Build Coastguard Worker        {
698*35238bceSAndroid Build Coastguard Worker            input mat4x2 in0 = [ mat4x2(-1.5, -1.0, 0.5, -1.5, -1.0, 2.0, -3.5, 0.5) | mat4x2(2.0, -1.5, -2.0, 2.5, -2.0, -2.5, -0.5, 1.5) | mat4x2(-3.0, -1.5, -1.0, 2.5, -0.5, 2.5, -2.5, -1.0) ];
699*35238bceSAndroid Build Coastguard Worker            output mat4x2 out0 = [ mat4x2(3.0, 2.0, -1.0, 3.0, 2.0, -4.0, 7.0, -1.0) | mat4x2(-4.0, 3.0, 4.0, -5.0, 4.0, 5.0, 1.0, -3.0) | mat4x2(6.0, 3.0, 2.0, -5.0, 1.0, -5.0, 5.0, 2.0) ];
700*35238bceSAndroid Build Coastguard Worker        }
701*35238bceSAndroid Build Coastguard Worker
702*35238bceSAndroid Build Coastguard Worker        both ""
703*35238bceSAndroid Build Coastguard Worker            #version 300 es
704*35238bceSAndroid Build Coastguard Worker            precision mediump float;
705*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
706*35238bceSAndroid Build Coastguard Worker
707*35238bceSAndroid Build Coastguard Worker            mat4x2 func (mat4x2 a)
708*35238bceSAndroid Build Coastguard Worker            {
709*35238bceSAndroid Build Coastguard Worker                return -2.0*a;
710*35238bceSAndroid Build Coastguard Worker            }
711*35238bceSAndroid Build Coastguard Worker
712*35238bceSAndroid Build Coastguard Worker            void main()
713*35238bceSAndroid Build Coastguard Worker            {
714*35238bceSAndroid Build Coastguard Worker                ${SETUP}
715*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
716*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
717*35238bceSAndroid Build Coastguard Worker            }
718*35238bceSAndroid Build Coastguard Worker        ""
719*35238bceSAndroid Build Coastguard Worker    end
720*35238bceSAndroid Build Coastguard Worker
721*35238bceSAndroid Build Coastguard Worker
722*35238bceSAndroid Build Coastguard Worker    case mat4x3
723*35238bceSAndroid Build Coastguard Worker        version 300 es
724*35238bceSAndroid Build Coastguard Worker        values
725*35238bceSAndroid Build Coastguard Worker        {
726*35238bceSAndroid Build Coastguard Worker            input mat4x3 in0 = [ mat4x3(1.0, 3.0, -0.5, -2.0, -3.0, 0.0, -2.5, 2.5, 2.5, -2.5, -1.5, 2.5) | mat4x3(1.0, 2.5, -1.0, -3.0, -1.5, 2.0, -1.5, -1.0, -0.5, -0.5, -0.5, 3.0) | mat4x3(-2.5, -3.5, 3.5, 3.0, 3.5, -0.5, 3.5, 3.0, -2.0, 2.0, 2.5, 1.0) ];
727*35238bceSAndroid Build Coastguard Worker            output mat4x3 out0 = [ mat4x3(-2.0, -6.0, 1.0, 4.0, 6.0, -0.0, 5.0, -5.0, -5.0, 5.0, 3.0, -5.0) | mat4x3(-2.0, -5.0, 2.0, 6.0, 3.0, -4.0, 3.0, 2.0, 1.0, 1.0, 1.0, -6.0) | mat4x3(5.0, 7.0, -7.0, -6.0, -7.0, 1.0, -7.0, -6.0, 4.0, -4.0, -5.0, -2.0) ];
728*35238bceSAndroid Build Coastguard Worker        }
729*35238bceSAndroid Build Coastguard Worker
730*35238bceSAndroid Build Coastguard Worker        both ""
731*35238bceSAndroid Build Coastguard Worker            #version 300 es
732*35238bceSAndroid Build Coastguard Worker            precision mediump float;
733*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
734*35238bceSAndroid Build Coastguard Worker
735*35238bceSAndroid Build Coastguard Worker            mat4x3 func (mat4x3 a)
736*35238bceSAndroid Build Coastguard Worker            {
737*35238bceSAndroid Build Coastguard Worker                return -2.0*a;
738*35238bceSAndroid Build Coastguard Worker            }
739*35238bceSAndroid Build Coastguard Worker
740*35238bceSAndroid Build Coastguard Worker            void main()
741*35238bceSAndroid Build Coastguard Worker            {
742*35238bceSAndroid Build Coastguard Worker                ${SETUP}
743*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
744*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
745*35238bceSAndroid Build Coastguard Worker            }
746*35238bceSAndroid Build Coastguard Worker        ""
747*35238bceSAndroid Build Coastguard Worker    end
748*35238bceSAndroid Build Coastguard Worker
749*35238bceSAndroid Build Coastguard Worker
750*35238bceSAndroid Build Coastguard Worker    case mat4
751*35238bceSAndroid Build Coastguard Worker        version 300 es
752*35238bceSAndroid Build Coastguard Worker        values
753*35238bceSAndroid Build Coastguard Worker        {
754*35238bceSAndroid Build Coastguard Worker            input mat4 in0 = [ mat4(0.0, -1.5, -1.0, -2.0, -3.0, 0.5, -1.5, 2.5, -3.5, 3.0, 1.5, 3.0, 3.0, 3.0, 0.5, -3.5) | mat4(2.0, -2.5, -1.5, 1.0, 0.0, -0.5, 3.5, 1.0, -1.0, -2.0, 2.5, 0.0, 2.0, -1.0, -2.5, 0.5) | mat4(2.5, -2.5, 2.0, 3.0, 2.5, 2.5, -3.5, 1.0, 2.5, -3.5, -1.5, -1.5, 0.0, -0.5, 0.0, 2.0) ];
755*35238bceSAndroid Build Coastguard Worker            output mat4 out0 = [ mat4(-0.0, 3.0, 2.0, 4.0, 6.0, -1.0, 3.0, -5.0, 7.0, -6.0, -3.0, -6.0, -6.0, -6.0, -1.0, 7.0) | mat4(-4.0, 5.0, 3.0, -2.0, -0.0, 1.0, -7.0, -2.0, 2.0, 4.0, -5.0, -0.0, -4.0, 2.0, 5.0, -1.0) | mat4(-5.0, 5.0, -4.0, -6.0, -5.0, -5.0, 7.0, -2.0, -5.0, 7.0, 3.0, 3.0, -0.0, 1.0, -0.0, -4.0) ];
756*35238bceSAndroid Build Coastguard Worker        }
757*35238bceSAndroid Build Coastguard Worker
758*35238bceSAndroid Build Coastguard Worker        both ""
759*35238bceSAndroid Build Coastguard Worker            #version 300 es
760*35238bceSAndroid Build Coastguard Worker            precision mediump float;
761*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
762*35238bceSAndroid Build Coastguard Worker
763*35238bceSAndroid Build Coastguard Worker            mat4 func (mat4 a)
764*35238bceSAndroid Build Coastguard Worker            {
765*35238bceSAndroid Build Coastguard Worker                return -2.0*a;
766*35238bceSAndroid Build Coastguard Worker            }
767*35238bceSAndroid Build Coastguard Worker
768*35238bceSAndroid Build Coastguard Worker            void main()
769*35238bceSAndroid Build Coastguard Worker            {
770*35238bceSAndroid Build Coastguard Worker                ${SETUP}
771*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
772*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
773*35238bceSAndroid Build Coastguard Worker            }
774*35238bceSAndroid Build Coastguard Worker        ""
775*35238bceSAndroid Build Coastguard Worker    end
776*35238bceSAndroid Build Coastguard Worker
777*35238bceSAndroid Build Coastguard Worker    case float_struct
778*35238bceSAndroid Build Coastguard Worker        version 300 es
779*35238bceSAndroid Build Coastguard Worker        values
780*35238bceSAndroid Build Coastguard Worker        {
781*35238bceSAndroid Build Coastguard Worker            input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
782*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 1.0 | -0.5 ];
783*35238bceSAndroid Build Coastguard Worker        }
784*35238bceSAndroid Build Coastguard Worker
785*35238bceSAndroid Build Coastguard Worker        both ""
786*35238bceSAndroid Build Coastguard Worker            #version 300 es
787*35238bceSAndroid Build Coastguard Worker            precision mediump float;
788*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
789*35238bceSAndroid Build Coastguard Worker
790*35238bceSAndroid Build Coastguard Worker            struct Pos { float a, b, c; };
791*35238bceSAndroid Build Coastguard Worker
792*35238bceSAndroid Build Coastguard Worker            float func (Pos p)
793*35238bceSAndroid Build Coastguard Worker            {
794*35238bceSAndroid Build Coastguard Worker                return -(p.a + p.b + p.c);
795*35238bceSAndroid Build Coastguard Worker            }
796*35238bceSAndroid Build Coastguard Worker
797*35238bceSAndroid Build Coastguard Worker            void main()
798*35238bceSAndroid Build Coastguard Worker            {
799*35238bceSAndroid Build Coastguard Worker                Pos p = Pos(in0.x, in0.y, in0.z);
800*35238bceSAndroid Build Coastguard Worker                out0 = func(p);
801*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
802*35238bceSAndroid Build Coastguard Worker            }
803*35238bceSAndroid Build Coastguard Worker        ""
804*35238bceSAndroid Build Coastguard Worker    end
805*35238bceSAndroid Build Coastguard Worker
806*35238bceSAndroid Build Coastguard Worker    case struct_struct
807*35238bceSAndroid Build Coastguard Worker        version 300 es
808*35238bceSAndroid Build Coastguard Worker        values
809*35238bceSAndroid Build Coastguard Worker        {
810*35238bceSAndroid Build Coastguard Worker            input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
811*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 1.0 | -0.5 ];
812*35238bceSAndroid Build Coastguard Worker        }
813*35238bceSAndroid Build Coastguard Worker
814*35238bceSAndroid Build Coastguard Worker        both ""
815*35238bceSAndroid Build Coastguard Worker            #version 300 es
816*35238bceSAndroid Build Coastguard Worker            precision mediump float;
817*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
818*35238bceSAndroid Build Coastguard Worker
819*35238bceSAndroid Build Coastguard Worker            struct Pos { float a, b, c; };
820*35238bceSAndroid Build Coastguard Worker
821*35238bceSAndroid Build Coastguard Worker            Pos func (Pos p)
822*35238bceSAndroid Build Coastguard Worker            {
823*35238bceSAndroid Build Coastguard Worker                return Pos(-p.a, -p.b, -p.c);
824*35238bceSAndroid Build Coastguard Worker            }
825*35238bceSAndroid Build Coastguard Worker
826*35238bceSAndroid Build Coastguard Worker            void main()
827*35238bceSAndroid Build Coastguard Worker            {
828*35238bceSAndroid Build Coastguard Worker                Pos p = Pos(in0.x, in0.y, in0.z);
829*35238bceSAndroid Build Coastguard Worker                p = func(p);
830*35238bceSAndroid Build Coastguard Worker                out0 = p.a + p.b + p.c;
831*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
832*35238bceSAndroid Build Coastguard Worker            }
833*35238bceSAndroid Build Coastguard Worker        ""
834*35238bceSAndroid Build Coastguard Worker    end
835*35238bceSAndroid Build Coastguard Worker
836*35238bceSAndroid Build Coastguard Worker    case struct_nested_struct
837*35238bceSAndroid Build Coastguard Worker        version 300 es
838*35238bceSAndroid Build Coastguard Worker        values
839*35238bceSAndroid Build Coastguard Worker        {
840*35238bceSAndroid Build Coastguard Worker            input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
841*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 1.0 | -0.5 ];
842*35238bceSAndroid Build Coastguard Worker        }
843*35238bceSAndroid Build Coastguard Worker
844*35238bceSAndroid Build Coastguard Worker        both ""
845*35238bceSAndroid Build Coastguard Worker            #version 300 es
846*35238bceSAndroid Build Coastguard Worker            precision mediump float;
847*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
848*35238bceSAndroid Build Coastguard Worker
849*35238bceSAndroid Build Coastguard Worker            struct Pos { float a, b, c; };
850*35238bceSAndroid Build Coastguard Worker            struct Line { Pos start, end; };
851*35238bceSAndroid Build Coastguard Worker
852*35238bceSAndroid Build Coastguard Worker            Line func (Pos p)
853*35238bceSAndroid Build Coastguard Worker            {
854*35238bceSAndroid Build Coastguard Worker                return Line(p, Pos(-p.a, -p.b, -p.c));
855*35238bceSAndroid Build Coastguard Worker            }
856*35238bceSAndroid Build Coastguard Worker
857*35238bceSAndroid Build Coastguard Worker            float sum (Pos p)
858*35238bceSAndroid Build Coastguard Worker            {
859*35238bceSAndroid Build Coastguard Worker                return (p.a + p.b + p.c);
860*35238bceSAndroid Build Coastguard Worker            }
861*35238bceSAndroid Build Coastguard Worker
862*35238bceSAndroid Build Coastguard Worker            void main()
863*35238bceSAndroid Build Coastguard Worker            {
864*35238bceSAndroid Build Coastguard Worker                Pos p = Pos(in0.x, in0.y, in0.z);
865*35238bceSAndroid Build Coastguard Worker                Line line = func(p);
866*35238bceSAndroid Build Coastguard Worker                out0 = sum(line.start) + (2.0 * sum(line.end));
867*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
868*35238bceSAndroid Build Coastguard Worker            }
869*35238bceSAndroid Build Coastguard Worker        ""
870*35238bceSAndroid Build Coastguard Worker    end
871*35238bceSAndroid Build Coastguard Worker
872*35238bceSAndroid Build Coastguard Worker    case struct_constructor_highp_in_fragment
873*35238bceSAndroid Build Coastguard Worker        version 300 es
874*35238bceSAndroid Build Coastguard Worker        desc "passing highp vector to struct constructor in fragment shader yields all zeros"
875*35238bceSAndroid Build Coastguard Worker        vertex ""
876*35238bceSAndroid Build Coastguard Worker            #version 300 es
877*35238bceSAndroid Build Coastguard Worker            ${VERTEX_DECLARATIONS}
878*35238bceSAndroid Build Coastguard Worker            void main()
879*35238bceSAndroid Build Coastguard Worker            {
880*35238bceSAndroid Build Coastguard Worker                ${VERTEX_OUTPUT}
881*35238bceSAndroid Build Coastguard Worker            }
882*35238bceSAndroid Build Coastguard Worker        ""
883*35238bceSAndroid Build Coastguard Worker        fragment ""
884*35238bceSAndroid Build Coastguard Worker            #version 300 es
885*35238bceSAndroid Build Coastguard Worker            ${FRAGMENT_DECLARATIONS}
886*35238bceSAndroid Build Coastguard Worker            #ifdef GL_FRAGMENT_PRECISION_HIGH
887*35238bceSAndroid Build Coastguard Worker            #define PRECISION highp
888*35238bceSAndroid Build Coastguard Worker            #else
889*35238bceSAndroid Build Coastguard Worker            #define PRECISION mediump
890*35238bceSAndroid Build Coastguard Worker            #endif
891*35238bceSAndroid Build Coastguard Worker            struct Test {
892*35238bceSAndroid Build Coastguard Worker                PRECISION vec3 color;
893*35238bceSAndroid Build Coastguard Worker            } ;
894*35238bceSAndroid Build Coastguard Worker            void main() {
895*35238bceSAndroid Build Coastguard Worker                PRECISION vec3 color = vec3(0.2, 2.0, 0.1);
896*35238bceSAndroid Build Coastguard Worker                Test test = Test(color);
897*35238bceSAndroid Build Coastguard Worker                // Bias the color so all components are guaranteed > 1.0.
898*35238bceSAndroid Build Coastguard Worker                ${FRAG_COLOR} = vec4(vec3(0.25, 0.55, 0.65) + vec3(4.0, 0.25, 4.0) * test.color, 1.0);
899*35238bceSAndroid Build Coastguard Worker            }
900*35238bceSAndroid Build Coastguard Worker        ""
901*35238bceSAndroid Build Coastguard Worker    end
902*35238bceSAndroid Build Coastguard Worker
903*35238bceSAndroid Build Coastguard Worker
904*35238bceSAndroid Build Coastguard Workerend # datatypes
905*35238bceSAndroid Build Coastguard Worker
906*35238bceSAndroid Build Coastguard Workergroup qualifiers "Function Parameter Qualifiers"
907*35238bceSAndroid Build Coastguard Worker
908*35238bceSAndroid Build Coastguard Worker    case in_float
909*35238bceSAndroid Build Coastguard Worker        version 300 es
910*35238bceSAndroid Build Coastguard Worker        values
911*35238bceSAndroid Build Coastguard Worker        {
912*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
913*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
914*35238bceSAndroid Build Coastguard Worker        }
915*35238bceSAndroid Build Coastguard Worker
916*35238bceSAndroid Build Coastguard Worker        both ""
917*35238bceSAndroid Build Coastguard Worker            #version 300 es
918*35238bceSAndroid Build Coastguard Worker            precision mediump float;
919*35238bceSAndroid Build Coastguard Worker            precision mediump int;
920*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
921*35238bceSAndroid Build Coastguard Worker
922*35238bceSAndroid Build Coastguard Worker            float func (in float a)
923*35238bceSAndroid Build Coastguard Worker            {
924*35238bceSAndroid Build Coastguard Worker                a = -a;
925*35238bceSAndroid Build Coastguard Worker                return 2.0 * a;
926*35238bceSAndroid Build Coastguard Worker            }
927*35238bceSAndroid Build Coastguard Worker
928*35238bceSAndroid Build Coastguard Worker            void main()
929*35238bceSAndroid Build Coastguard Worker            {
930*35238bceSAndroid Build Coastguard Worker                ${SETUP}
931*35238bceSAndroid Build Coastguard Worker                float f = in0;
932*35238bceSAndroid Build Coastguard Worker                float g = func(f);
933*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
934*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
935*35238bceSAndroid Build Coastguard Worker            }
936*35238bceSAndroid Build Coastguard Worker        ""
937*35238bceSAndroid Build Coastguard Worker    end
938*35238bceSAndroid Build Coastguard Worker
939*35238bceSAndroid Build Coastguard Worker    case out_float
940*35238bceSAndroid Build Coastguard Worker        version 300 es
941*35238bceSAndroid Build Coastguard Worker        values
942*35238bceSAndroid Build Coastguard Worker        {
943*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
944*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
945*35238bceSAndroid Build Coastguard Worker        }
946*35238bceSAndroid Build Coastguard Worker
947*35238bceSAndroid Build Coastguard Worker        both ""
948*35238bceSAndroid Build Coastguard Worker            #version 300 es
949*35238bceSAndroid Build Coastguard Worker            precision mediump float;
950*35238bceSAndroid Build Coastguard Worker            precision mediump int;
951*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
952*35238bceSAndroid Build Coastguard Worker
953*35238bceSAndroid Build Coastguard Worker            void func (out float a)
954*35238bceSAndroid Build Coastguard Worker            {
955*35238bceSAndroid Build Coastguard Worker                a = -1.0;
956*35238bceSAndroid Build Coastguard Worker            }
957*35238bceSAndroid Build Coastguard Worker
958*35238bceSAndroid Build Coastguard Worker            void main()
959*35238bceSAndroid Build Coastguard Worker            {
960*35238bceSAndroid Build Coastguard Worker                ${SETUP}
961*35238bceSAndroid Build Coastguard Worker                float f = 1.0;
962*35238bceSAndroid Build Coastguard Worker                func(f);
963*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
964*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
965*35238bceSAndroid Build Coastguard Worker            }
966*35238bceSAndroid Build Coastguard Worker        ""
967*35238bceSAndroid Build Coastguard Worker    end
968*35238bceSAndroid Build Coastguard Worker
969*35238bceSAndroid Build Coastguard Worker    case inout_float
970*35238bceSAndroid Build Coastguard Worker        version 300 es
971*35238bceSAndroid Build Coastguard Worker        values
972*35238bceSAndroid Build Coastguard Worker        {
973*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
974*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
975*35238bceSAndroid Build Coastguard Worker        }
976*35238bceSAndroid Build Coastguard Worker
977*35238bceSAndroid Build Coastguard Worker        both ""
978*35238bceSAndroid Build Coastguard Worker            #version 300 es
979*35238bceSAndroid Build Coastguard Worker            precision mediump float;
980*35238bceSAndroid Build Coastguard Worker            precision mediump int;
981*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
982*35238bceSAndroid Build Coastguard Worker
983*35238bceSAndroid Build Coastguard Worker            void func (inout float a)
984*35238bceSAndroid Build Coastguard Worker            {
985*35238bceSAndroid Build Coastguard Worker                a = -a;
986*35238bceSAndroid Build Coastguard Worker            }
987*35238bceSAndroid Build Coastguard Worker
988*35238bceSAndroid Build Coastguard Worker            void main()
989*35238bceSAndroid Build Coastguard Worker            {
990*35238bceSAndroid Build Coastguard Worker                ${SETUP}
991*35238bceSAndroid Build Coastguard Worker                float f = 1.0;
992*35238bceSAndroid Build Coastguard Worker                func(f);
993*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
994*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
995*35238bceSAndroid Build Coastguard Worker            }
996*35238bceSAndroid Build Coastguard Worker        ""
997*35238bceSAndroid Build Coastguard Worker    end
998*35238bceSAndroid Build Coastguard Worker
999*35238bceSAndroid Build Coastguard Worker    case in_lowp_float
1000*35238bceSAndroid Build Coastguard Worker        version 300 es
1001*35238bceSAndroid Build Coastguard Worker        values
1002*35238bceSAndroid Build Coastguard Worker        {
1003*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1004*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1005*35238bceSAndroid Build Coastguard Worker        }
1006*35238bceSAndroid Build Coastguard Worker
1007*35238bceSAndroid Build Coastguard Worker        both ""
1008*35238bceSAndroid Build Coastguard Worker            #version 300 es
1009*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1010*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1011*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1012*35238bceSAndroid Build Coastguard Worker
1013*35238bceSAndroid Build Coastguard Worker            float func (in lowp float a)
1014*35238bceSAndroid Build Coastguard Worker            {
1015*35238bceSAndroid Build Coastguard Worker                a = -a;
1016*35238bceSAndroid Build Coastguard Worker                return 2.0 * a;
1017*35238bceSAndroid Build Coastguard Worker            }
1018*35238bceSAndroid Build Coastguard Worker
1019*35238bceSAndroid Build Coastguard Worker            void main()
1020*35238bceSAndroid Build Coastguard Worker            {
1021*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1022*35238bceSAndroid Build Coastguard Worker                float f = in0;
1023*35238bceSAndroid Build Coastguard Worker                float g = func(f);
1024*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
1025*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1026*35238bceSAndroid Build Coastguard Worker            }
1027*35238bceSAndroid Build Coastguard Worker        ""
1028*35238bceSAndroid Build Coastguard Worker    end
1029*35238bceSAndroid Build Coastguard Worker
1030*35238bceSAndroid Build Coastguard Worker    case out_lowp_float
1031*35238bceSAndroid Build Coastguard Worker        version 300 es
1032*35238bceSAndroid Build Coastguard Worker        values
1033*35238bceSAndroid Build Coastguard Worker        {
1034*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1035*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1036*35238bceSAndroid Build Coastguard Worker        }
1037*35238bceSAndroid Build Coastguard Worker
1038*35238bceSAndroid Build Coastguard Worker        both ""
1039*35238bceSAndroid Build Coastguard Worker            #version 300 es
1040*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1041*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1042*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1043*35238bceSAndroid Build Coastguard Worker
1044*35238bceSAndroid Build Coastguard Worker            void func (out lowp float a)
1045*35238bceSAndroid Build Coastguard Worker            {
1046*35238bceSAndroid Build Coastguard Worker                a = -1.0;
1047*35238bceSAndroid Build Coastguard Worker            }
1048*35238bceSAndroid Build Coastguard Worker
1049*35238bceSAndroid Build Coastguard Worker            void main()
1050*35238bceSAndroid Build Coastguard Worker            {
1051*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1052*35238bceSAndroid Build Coastguard Worker                float f = 1.0;
1053*35238bceSAndroid Build Coastguard Worker                func(f);
1054*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
1055*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1056*35238bceSAndroid Build Coastguard Worker            }
1057*35238bceSAndroid Build Coastguard Worker        ""
1058*35238bceSAndroid Build Coastguard Worker    end
1059*35238bceSAndroid Build Coastguard Worker
1060*35238bceSAndroid Build Coastguard Worker    case inout_lowp_float
1061*35238bceSAndroid Build Coastguard Worker        version 300 es
1062*35238bceSAndroid Build Coastguard Worker        values
1063*35238bceSAndroid Build Coastguard Worker        {
1064*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1065*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1066*35238bceSAndroid Build Coastguard Worker        }
1067*35238bceSAndroid Build Coastguard Worker
1068*35238bceSAndroid Build Coastguard Worker        both ""
1069*35238bceSAndroid Build Coastguard Worker            #version 300 es
1070*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1071*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1072*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1073*35238bceSAndroid Build Coastguard Worker
1074*35238bceSAndroid Build Coastguard Worker            void func (inout lowp float a)
1075*35238bceSAndroid Build Coastguard Worker            {
1076*35238bceSAndroid Build Coastguard Worker                a = -a;
1077*35238bceSAndroid Build Coastguard Worker            }
1078*35238bceSAndroid Build Coastguard Worker
1079*35238bceSAndroid Build Coastguard Worker            void main()
1080*35238bceSAndroid Build Coastguard Worker            {
1081*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1082*35238bceSAndroid Build Coastguard Worker                float f = 1.0;
1083*35238bceSAndroid Build Coastguard Worker                func(f);
1084*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
1085*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1086*35238bceSAndroid Build Coastguard Worker            }
1087*35238bceSAndroid Build Coastguard Worker        ""
1088*35238bceSAndroid Build Coastguard Worker    end
1089*35238bceSAndroid Build Coastguard Worker
1090*35238bceSAndroid Build Coastguard Worker    case in_highp_float
1091*35238bceSAndroid Build Coastguard Worker        version 300 es
1092*35238bceSAndroid Build Coastguard Worker        values
1093*35238bceSAndroid Build Coastguard Worker        {
1094*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1095*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1096*35238bceSAndroid Build Coastguard Worker        }
1097*35238bceSAndroid Build Coastguard Worker
1098*35238bceSAndroid Build Coastguard Worker        both ""
1099*35238bceSAndroid Build Coastguard Worker            #version 300 es
1100*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1101*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1102*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1103*35238bceSAndroid Build Coastguard Worker
1104*35238bceSAndroid Build Coastguard Worker            float func (in highp float a)
1105*35238bceSAndroid Build Coastguard Worker            {
1106*35238bceSAndroid Build Coastguard Worker                a = -a;
1107*35238bceSAndroid Build Coastguard Worker                return 2.0 * a;
1108*35238bceSAndroid Build Coastguard Worker            }
1109*35238bceSAndroid Build Coastguard Worker
1110*35238bceSAndroid Build Coastguard Worker            void main()
1111*35238bceSAndroid Build Coastguard Worker            {
1112*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1113*35238bceSAndroid Build Coastguard Worker                float f = in0;
1114*35238bceSAndroid Build Coastguard Worker                float g = func(f);
1115*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
1116*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1117*35238bceSAndroid Build Coastguard Worker            }
1118*35238bceSAndroid Build Coastguard Worker        ""
1119*35238bceSAndroid Build Coastguard Worker    end
1120*35238bceSAndroid Build Coastguard Worker
1121*35238bceSAndroid Build Coastguard Worker    case out_highp_float
1122*35238bceSAndroid Build Coastguard Worker        version 300 es
1123*35238bceSAndroid Build Coastguard Worker        values
1124*35238bceSAndroid Build Coastguard Worker        {
1125*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1126*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1127*35238bceSAndroid Build Coastguard Worker        }
1128*35238bceSAndroid Build Coastguard Worker
1129*35238bceSAndroid Build Coastguard Worker        both ""
1130*35238bceSAndroid Build Coastguard Worker            #version 300 es
1131*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1132*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1133*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1134*35238bceSAndroid Build Coastguard Worker
1135*35238bceSAndroid Build Coastguard Worker            void func (out highp float a)
1136*35238bceSAndroid Build Coastguard Worker            {
1137*35238bceSAndroid Build Coastguard Worker                a = -1.0;
1138*35238bceSAndroid Build Coastguard Worker            }
1139*35238bceSAndroid Build Coastguard Worker
1140*35238bceSAndroid Build Coastguard Worker            void main()
1141*35238bceSAndroid Build Coastguard Worker            {
1142*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1143*35238bceSAndroid Build Coastguard Worker                float f = 1.0;
1144*35238bceSAndroid Build Coastguard Worker                func(f);
1145*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
1146*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1147*35238bceSAndroid Build Coastguard Worker            }
1148*35238bceSAndroid Build Coastguard Worker        ""
1149*35238bceSAndroid Build Coastguard Worker    end
1150*35238bceSAndroid Build Coastguard Worker
1151*35238bceSAndroid Build Coastguard Worker    case inout_highp_float
1152*35238bceSAndroid Build Coastguard Worker        version 300 es
1153*35238bceSAndroid Build Coastguard Worker        values
1154*35238bceSAndroid Build Coastguard Worker        {
1155*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1156*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1157*35238bceSAndroid Build Coastguard Worker        }
1158*35238bceSAndroid Build Coastguard Worker
1159*35238bceSAndroid Build Coastguard Worker        both ""
1160*35238bceSAndroid Build Coastguard Worker            #version 300 es
1161*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1162*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1163*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1164*35238bceSAndroid Build Coastguard Worker
1165*35238bceSAndroid Build Coastguard Worker            void func (inout highp float a)
1166*35238bceSAndroid Build Coastguard Worker            {
1167*35238bceSAndroid Build Coastguard Worker                a = -a;
1168*35238bceSAndroid Build Coastguard Worker            }
1169*35238bceSAndroid Build Coastguard Worker
1170*35238bceSAndroid Build Coastguard Worker            void main()
1171*35238bceSAndroid Build Coastguard Worker            {
1172*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1173*35238bceSAndroid Build Coastguard Worker                float f = 1.0;
1174*35238bceSAndroid Build Coastguard Worker                func(f);
1175*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
1176*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1177*35238bceSAndroid Build Coastguard Worker            }
1178*35238bceSAndroid Build Coastguard Worker        ""
1179*35238bceSAndroid Build Coastguard Worker    end
1180*35238bceSAndroid Build Coastguard Worker
1181*35238bceSAndroid Build Coastguard Worker    case const_float
1182*35238bceSAndroid Build Coastguard Worker        version 300 es
1183*35238bceSAndroid Build Coastguard Worker        values
1184*35238bceSAndroid Build Coastguard Worker        {
1185*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1186*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1187*35238bceSAndroid Build Coastguard Worker        }
1188*35238bceSAndroid Build Coastguard Worker
1189*35238bceSAndroid Build Coastguard Worker        both ""
1190*35238bceSAndroid Build Coastguard Worker            #version 300 es
1191*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1192*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1193*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1194*35238bceSAndroid Build Coastguard Worker
1195*35238bceSAndroid Build Coastguard Worker            float func (const float a)
1196*35238bceSAndroid Build Coastguard Worker            {
1197*35238bceSAndroid Build Coastguard Worker                float b = -a;
1198*35238bceSAndroid Build Coastguard Worker                return 2.0 * b;
1199*35238bceSAndroid Build Coastguard Worker            }
1200*35238bceSAndroid Build Coastguard Worker
1201*35238bceSAndroid Build Coastguard Worker            void main()
1202*35238bceSAndroid Build Coastguard Worker            {
1203*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1204*35238bceSAndroid Build Coastguard Worker                float f = in0;
1205*35238bceSAndroid Build Coastguard Worker                float g = func(f);
1206*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
1207*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1208*35238bceSAndroid Build Coastguard Worker            }
1209*35238bceSAndroid Build Coastguard Worker        ""
1210*35238bceSAndroid Build Coastguard Worker    end
1211*35238bceSAndroid Build Coastguard Worker
1212*35238bceSAndroid Build Coastguard Worker    case const_in_float
1213*35238bceSAndroid Build Coastguard Worker        version 300 es
1214*35238bceSAndroid Build Coastguard Worker        values
1215*35238bceSAndroid Build Coastguard Worker        {
1216*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1217*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1218*35238bceSAndroid Build Coastguard Worker        }
1219*35238bceSAndroid Build Coastguard Worker
1220*35238bceSAndroid Build Coastguard Worker        both ""
1221*35238bceSAndroid Build Coastguard Worker            #version 300 es
1222*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1223*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1224*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1225*35238bceSAndroid Build Coastguard Worker
1226*35238bceSAndroid Build Coastguard Worker            float func (const in float a)
1227*35238bceSAndroid Build Coastguard Worker            {
1228*35238bceSAndroid Build Coastguard Worker                float b = -a;
1229*35238bceSAndroid Build Coastguard Worker                return 2.0 * b;
1230*35238bceSAndroid Build Coastguard Worker            }
1231*35238bceSAndroid Build Coastguard Worker
1232*35238bceSAndroid Build Coastguard Worker            void main()
1233*35238bceSAndroid Build Coastguard Worker            {
1234*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1235*35238bceSAndroid Build Coastguard Worker                float f = in0;
1236*35238bceSAndroid Build Coastguard Worker                float g = func(f);
1237*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
1238*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1239*35238bceSAndroid Build Coastguard Worker            }
1240*35238bceSAndroid Build Coastguard Worker        ""
1241*35238bceSAndroid Build Coastguard Worker    end
1242*35238bceSAndroid Build Coastguard Worker
1243*35238bceSAndroid Build Coastguard Worker    case in_int
1244*35238bceSAndroid Build Coastguard Worker        version 300 es
1245*35238bceSAndroid Build Coastguard Worker        values
1246*35238bceSAndroid Build Coastguard Worker        {
1247*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 4 ];
1248*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -4 ];
1249*35238bceSAndroid Build Coastguard Worker        }
1250*35238bceSAndroid Build Coastguard Worker
1251*35238bceSAndroid Build Coastguard Worker        both ""
1252*35238bceSAndroid Build Coastguard Worker            #version 300 es
1253*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1254*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1255*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1256*35238bceSAndroid Build Coastguard Worker
1257*35238bceSAndroid Build Coastguard Worker            int func (in int a)
1258*35238bceSAndroid Build Coastguard Worker            {
1259*35238bceSAndroid Build Coastguard Worker                a = -a;
1260*35238bceSAndroid Build Coastguard Worker                return 2 * a;
1261*35238bceSAndroid Build Coastguard Worker            }
1262*35238bceSAndroid Build Coastguard Worker
1263*35238bceSAndroid Build Coastguard Worker            void main()
1264*35238bceSAndroid Build Coastguard Worker            {
1265*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1266*35238bceSAndroid Build Coastguard Worker                int f = in0;
1267*35238bceSAndroid Build Coastguard Worker                int g = func(f);
1268*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
1269*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1270*35238bceSAndroid Build Coastguard Worker            }
1271*35238bceSAndroid Build Coastguard Worker        ""
1272*35238bceSAndroid Build Coastguard Worker    end
1273*35238bceSAndroid Build Coastguard Worker
1274*35238bceSAndroid Build Coastguard Worker    case out_int
1275*35238bceSAndroid Build Coastguard Worker        version 300 es
1276*35238bceSAndroid Build Coastguard Worker        values
1277*35238bceSAndroid Build Coastguard Worker        {
1278*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
1279*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
1280*35238bceSAndroid Build Coastguard Worker        }
1281*35238bceSAndroid Build Coastguard Worker
1282*35238bceSAndroid Build Coastguard Worker        both ""
1283*35238bceSAndroid Build Coastguard Worker            #version 300 es
1284*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1285*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1286*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1287*35238bceSAndroid Build Coastguard Worker
1288*35238bceSAndroid Build Coastguard Worker            void func (out int a)
1289*35238bceSAndroid Build Coastguard Worker            {
1290*35238bceSAndroid Build Coastguard Worker                a = -1;
1291*35238bceSAndroid Build Coastguard Worker            }
1292*35238bceSAndroid Build Coastguard Worker
1293*35238bceSAndroid Build Coastguard Worker            void main()
1294*35238bceSAndroid Build Coastguard Worker            {
1295*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1296*35238bceSAndroid Build Coastguard Worker                int f = 1;
1297*35238bceSAndroid Build Coastguard Worker                func(f);
1298*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
1299*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1300*35238bceSAndroid Build Coastguard Worker            }
1301*35238bceSAndroid Build Coastguard Worker        ""
1302*35238bceSAndroid Build Coastguard Worker    end
1303*35238bceSAndroid Build Coastguard Worker
1304*35238bceSAndroid Build Coastguard Worker    case inout_int
1305*35238bceSAndroid Build Coastguard Worker        version 300 es
1306*35238bceSAndroid Build Coastguard Worker        values
1307*35238bceSAndroid Build Coastguard Worker        {
1308*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
1309*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
1310*35238bceSAndroid Build Coastguard Worker        }
1311*35238bceSAndroid Build Coastguard Worker
1312*35238bceSAndroid Build Coastguard Worker        both ""
1313*35238bceSAndroid Build Coastguard Worker            #version 300 es
1314*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1315*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1316*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1317*35238bceSAndroid Build Coastguard Worker
1318*35238bceSAndroid Build Coastguard Worker            void func (inout int a)
1319*35238bceSAndroid Build Coastguard Worker            {
1320*35238bceSAndroid Build Coastguard Worker                a = -a;
1321*35238bceSAndroid Build Coastguard Worker            }
1322*35238bceSAndroid Build Coastguard Worker
1323*35238bceSAndroid Build Coastguard Worker            void main()
1324*35238bceSAndroid Build Coastguard Worker            {
1325*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1326*35238bceSAndroid Build Coastguard Worker                int f = 1;
1327*35238bceSAndroid Build Coastguard Worker                func(f);
1328*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
1329*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1330*35238bceSAndroid Build Coastguard Worker            }
1331*35238bceSAndroid Build Coastguard Worker        ""
1332*35238bceSAndroid Build Coastguard Worker    end
1333*35238bceSAndroid Build Coastguard Worker
1334*35238bceSAndroid Build Coastguard Worker    case in_lowp_int
1335*35238bceSAndroid Build Coastguard Worker        version 300 es
1336*35238bceSAndroid Build Coastguard Worker        values
1337*35238bceSAndroid Build Coastguard Worker        {
1338*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 4 ];
1339*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -4 ];
1340*35238bceSAndroid Build Coastguard Worker        }
1341*35238bceSAndroid Build Coastguard Worker
1342*35238bceSAndroid Build Coastguard Worker        both ""
1343*35238bceSAndroid Build Coastguard Worker            #version 300 es
1344*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1345*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1346*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1347*35238bceSAndroid Build Coastguard Worker
1348*35238bceSAndroid Build Coastguard Worker            int func (in lowp int a)
1349*35238bceSAndroid Build Coastguard Worker            {
1350*35238bceSAndroid Build Coastguard Worker                a = -a;
1351*35238bceSAndroid Build Coastguard Worker                return 2 * a;
1352*35238bceSAndroid Build Coastguard Worker            }
1353*35238bceSAndroid Build Coastguard Worker
1354*35238bceSAndroid Build Coastguard Worker            void main()
1355*35238bceSAndroid Build Coastguard Worker            {
1356*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1357*35238bceSAndroid Build Coastguard Worker                int f = in0;
1358*35238bceSAndroid Build Coastguard Worker                int g = func(f);
1359*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
1360*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1361*35238bceSAndroid Build Coastguard Worker            }
1362*35238bceSAndroid Build Coastguard Worker        ""
1363*35238bceSAndroid Build Coastguard Worker    end
1364*35238bceSAndroid Build Coastguard Worker
1365*35238bceSAndroid Build Coastguard Worker    case out_lowp_int
1366*35238bceSAndroid Build Coastguard Worker        version 300 es
1367*35238bceSAndroid Build Coastguard Worker        values
1368*35238bceSAndroid Build Coastguard Worker        {
1369*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
1370*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
1371*35238bceSAndroid Build Coastguard Worker        }
1372*35238bceSAndroid Build Coastguard Worker
1373*35238bceSAndroid Build Coastguard Worker        both ""
1374*35238bceSAndroid Build Coastguard Worker            #version 300 es
1375*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1376*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1377*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1378*35238bceSAndroid Build Coastguard Worker
1379*35238bceSAndroid Build Coastguard Worker            void func (out lowp int a)
1380*35238bceSAndroid Build Coastguard Worker            {
1381*35238bceSAndroid Build Coastguard Worker                a = -1;
1382*35238bceSAndroid Build Coastguard Worker            }
1383*35238bceSAndroid Build Coastguard Worker
1384*35238bceSAndroid Build Coastguard Worker            void main()
1385*35238bceSAndroid Build Coastguard Worker            {
1386*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1387*35238bceSAndroid Build Coastguard Worker                int f = 1;
1388*35238bceSAndroid Build Coastguard Worker                func(f);
1389*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
1390*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1391*35238bceSAndroid Build Coastguard Worker            }
1392*35238bceSAndroid Build Coastguard Worker        ""
1393*35238bceSAndroid Build Coastguard Worker    end
1394*35238bceSAndroid Build Coastguard Worker
1395*35238bceSAndroid Build Coastguard Worker    case inout_lowp_int
1396*35238bceSAndroid Build Coastguard Worker        version 300 es
1397*35238bceSAndroid Build Coastguard Worker        values
1398*35238bceSAndroid Build Coastguard Worker        {
1399*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
1400*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
1401*35238bceSAndroid Build Coastguard Worker        }
1402*35238bceSAndroid Build Coastguard Worker
1403*35238bceSAndroid Build Coastguard Worker        both ""
1404*35238bceSAndroid Build Coastguard Worker            #version 300 es
1405*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1406*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1407*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1408*35238bceSAndroid Build Coastguard Worker
1409*35238bceSAndroid Build Coastguard Worker            void func (inout lowp int a)
1410*35238bceSAndroid Build Coastguard Worker            {
1411*35238bceSAndroid Build Coastguard Worker                a = -a;
1412*35238bceSAndroid Build Coastguard Worker            }
1413*35238bceSAndroid Build Coastguard Worker
1414*35238bceSAndroid Build Coastguard Worker            void main()
1415*35238bceSAndroid Build Coastguard Worker            {
1416*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1417*35238bceSAndroid Build Coastguard Worker                int f = 1;
1418*35238bceSAndroid Build Coastguard Worker                func(f);
1419*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
1420*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1421*35238bceSAndroid Build Coastguard Worker            }
1422*35238bceSAndroid Build Coastguard Worker        ""
1423*35238bceSAndroid Build Coastguard Worker    end
1424*35238bceSAndroid Build Coastguard Worker
1425*35238bceSAndroid Build Coastguard Worker    case in_highp_int
1426*35238bceSAndroid Build Coastguard Worker        version 300 es
1427*35238bceSAndroid Build Coastguard Worker        values
1428*35238bceSAndroid Build Coastguard Worker        {
1429*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 4 ];
1430*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -4 ];
1431*35238bceSAndroid Build Coastguard Worker        }
1432*35238bceSAndroid Build Coastguard Worker
1433*35238bceSAndroid Build Coastguard Worker        both ""
1434*35238bceSAndroid Build Coastguard Worker            #version 300 es
1435*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1436*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1437*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1438*35238bceSAndroid Build Coastguard Worker
1439*35238bceSAndroid Build Coastguard Worker            int func (in highp int a)
1440*35238bceSAndroid Build Coastguard Worker            {
1441*35238bceSAndroid Build Coastguard Worker                a = -a;
1442*35238bceSAndroid Build Coastguard Worker                return 2 * a;
1443*35238bceSAndroid Build Coastguard Worker            }
1444*35238bceSAndroid Build Coastguard Worker
1445*35238bceSAndroid Build Coastguard Worker            void main()
1446*35238bceSAndroid Build Coastguard Worker            {
1447*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1448*35238bceSAndroid Build Coastguard Worker                int f = in0;
1449*35238bceSAndroid Build Coastguard Worker                int g = func(f);
1450*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
1451*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1452*35238bceSAndroid Build Coastguard Worker            }
1453*35238bceSAndroid Build Coastguard Worker        ""
1454*35238bceSAndroid Build Coastguard Worker    end
1455*35238bceSAndroid Build Coastguard Worker
1456*35238bceSAndroid Build Coastguard Worker    case out_highp_int
1457*35238bceSAndroid Build Coastguard Worker        version 300 es
1458*35238bceSAndroid Build Coastguard Worker        values
1459*35238bceSAndroid Build Coastguard Worker        {
1460*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
1461*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
1462*35238bceSAndroid Build Coastguard Worker        }
1463*35238bceSAndroid Build Coastguard Worker
1464*35238bceSAndroid Build Coastguard Worker        both ""
1465*35238bceSAndroid Build Coastguard Worker            #version 300 es
1466*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1467*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1468*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1469*35238bceSAndroid Build Coastguard Worker
1470*35238bceSAndroid Build Coastguard Worker            void func (out highp int a)
1471*35238bceSAndroid Build Coastguard Worker            {
1472*35238bceSAndroid Build Coastguard Worker                a = -1;
1473*35238bceSAndroid Build Coastguard Worker            }
1474*35238bceSAndroid Build Coastguard Worker
1475*35238bceSAndroid Build Coastguard Worker            void main()
1476*35238bceSAndroid Build Coastguard Worker            {
1477*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1478*35238bceSAndroid Build Coastguard Worker                int f = 1;
1479*35238bceSAndroid Build Coastguard Worker                func(f);
1480*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
1481*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1482*35238bceSAndroid Build Coastguard Worker            }
1483*35238bceSAndroid Build Coastguard Worker        ""
1484*35238bceSAndroid Build Coastguard Worker    end
1485*35238bceSAndroid Build Coastguard Worker
1486*35238bceSAndroid Build Coastguard Worker    case inout_highp_int
1487*35238bceSAndroid Build Coastguard Worker        version 300 es
1488*35238bceSAndroid Build Coastguard Worker        values
1489*35238bceSAndroid Build Coastguard Worker        {
1490*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
1491*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
1492*35238bceSAndroid Build Coastguard Worker        }
1493*35238bceSAndroid Build Coastguard Worker
1494*35238bceSAndroid Build Coastguard Worker        both ""
1495*35238bceSAndroid Build Coastguard Worker            #version 300 es
1496*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1497*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1498*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1499*35238bceSAndroid Build Coastguard Worker
1500*35238bceSAndroid Build Coastguard Worker            void func (inout highp int a)
1501*35238bceSAndroid Build Coastguard Worker            {
1502*35238bceSAndroid Build Coastguard Worker                a = -a;
1503*35238bceSAndroid Build Coastguard Worker            }
1504*35238bceSAndroid Build Coastguard Worker
1505*35238bceSAndroid Build Coastguard Worker            void main()
1506*35238bceSAndroid Build Coastguard Worker            {
1507*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1508*35238bceSAndroid Build Coastguard Worker                int f = 1;
1509*35238bceSAndroid Build Coastguard Worker                func(f);
1510*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
1511*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1512*35238bceSAndroid Build Coastguard Worker            }
1513*35238bceSAndroid Build Coastguard Worker        ""
1514*35238bceSAndroid Build Coastguard Worker    end
1515*35238bceSAndroid Build Coastguard Worker
1516*35238bceSAndroid Build Coastguard Worker    case const_int
1517*35238bceSAndroid Build Coastguard Worker        version 300 es
1518*35238bceSAndroid Build Coastguard Worker        values
1519*35238bceSAndroid Build Coastguard Worker        {
1520*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 4 ];
1521*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -4 ];
1522*35238bceSAndroid Build Coastguard Worker        }
1523*35238bceSAndroid Build Coastguard Worker
1524*35238bceSAndroid Build Coastguard Worker        both ""
1525*35238bceSAndroid Build Coastguard Worker            #version 300 es
1526*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1527*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1528*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1529*35238bceSAndroid Build Coastguard Worker
1530*35238bceSAndroid Build Coastguard Worker            int func (const int a)
1531*35238bceSAndroid Build Coastguard Worker            {
1532*35238bceSAndroid Build Coastguard Worker                int b = -a;
1533*35238bceSAndroid Build Coastguard Worker                return 2 * b;
1534*35238bceSAndroid Build Coastguard Worker            }
1535*35238bceSAndroid Build Coastguard Worker
1536*35238bceSAndroid Build Coastguard Worker            void main()
1537*35238bceSAndroid Build Coastguard Worker            {
1538*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1539*35238bceSAndroid Build Coastguard Worker                int f = in0;
1540*35238bceSAndroid Build Coastguard Worker                int g = func(f);
1541*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
1542*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1543*35238bceSAndroid Build Coastguard Worker            }
1544*35238bceSAndroid Build Coastguard Worker        ""
1545*35238bceSAndroid Build Coastguard Worker    end
1546*35238bceSAndroid Build Coastguard Worker
1547*35238bceSAndroid Build Coastguard Worker    case const_in_int
1548*35238bceSAndroid Build Coastguard Worker        version 300 es
1549*35238bceSAndroid Build Coastguard Worker        values
1550*35238bceSAndroid Build Coastguard Worker        {
1551*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 4 ];
1552*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -4 ];
1553*35238bceSAndroid Build Coastguard Worker        }
1554*35238bceSAndroid Build Coastguard Worker
1555*35238bceSAndroid Build Coastguard Worker        both ""
1556*35238bceSAndroid Build Coastguard Worker            #version 300 es
1557*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1558*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1559*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1560*35238bceSAndroid Build Coastguard Worker
1561*35238bceSAndroid Build Coastguard Worker            int func (const in int a)
1562*35238bceSAndroid Build Coastguard Worker            {
1563*35238bceSAndroid Build Coastguard Worker                int b = -a;
1564*35238bceSAndroid Build Coastguard Worker                return 2 * b;
1565*35238bceSAndroid Build Coastguard Worker            }
1566*35238bceSAndroid Build Coastguard Worker
1567*35238bceSAndroid Build Coastguard Worker            void main()
1568*35238bceSAndroid Build Coastguard Worker            {
1569*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1570*35238bceSAndroid Build Coastguard Worker                int f = in0;
1571*35238bceSAndroid Build Coastguard Worker                int g = func(f);
1572*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
1573*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1574*35238bceSAndroid Build Coastguard Worker            }
1575*35238bceSAndroid Build Coastguard Worker        ""
1576*35238bceSAndroid Build Coastguard Worker    end
1577*35238bceSAndroid Build Coastguard Worker
1578*35238bceSAndroid Build Coastguard Worker    case in_bool
1579*35238bceSAndroid Build Coastguard Worker        version 300 es
1580*35238bceSAndroid Build Coastguard Worker        values
1581*35238bceSAndroid Build Coastguard Worker        {
1582*35238bceSAndroid Build Coastguard Worker            input bool in0 = [ true | false ];
1583*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ true | true ];
1584*35238bceSAndroid Build Coastguard Worker        }
1585*35238bceSAndroid Build Coastguard Worker
1586*35238bceSAndroid Build Coastguard Worker        both ""
1587*35238bceSAndroid Build Coastguard Worker            #version 300 es
1588*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1589*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1590*35238bceSAndroid Build Coastguard Worker
1591*35238bceSAndroid Build Coastguard Worker            bool func (in bool a)
1592*35238bceSAndroid Build Coastguard Worker            {
1593*35238bceSAndroid Build Coastguard Worker                a = !a;
1594*35238bceSAndroid Build Coastguard Worker                return a;
1595*35238bceSAndroid Build Coastguard Worker            }
1596*35238bceSAndroid Build Coastguard Worker
1597*35238bceSAndroid Build Coastguard Worker            void main()
1598*35238bceSAndroid Build Coastguard Worker            {
1599*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1600*35238bceSAndroid Build Coastguard Worker                bool f = in0;
1601*35238bceSAndroid Build Coastguard Worker                bool g = func(f);
1602*35238bceSAndroid Build Coastguard Worker                out0 = (f != g);
1603*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1604*35238bceSAndroid Build Coastguard Worker            }
1605*35238bceSAndroid Build Coastguard Worker        ""
1606*35238bceSAndroid Build Coastguard Worker    end
1607*35238bceSAndroid Build Coastguard Worker
1608*35238bceSAndroid Build Coastguard Worker    case out_bool
1609*35238bceSAndroid Build Coastguard Worker        version 300 es
1610*35238bceSAndroid Build Coastguard Worker        values
1611*35238bceSAndroid Build Coastguard Worker        {
1612*35238bceSAndroid Build Coastguard Worker            input bool in0 = [ true | false ];
1613*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true ];
1614*35238bceSAndroid Build Coastguard Worker        }
1615*35238bceSAndroid Build Coastguard Worker
1616*35238bceSAndroid Build Coastguard Worker        both ""
1617*35238bceSAndroid Build Coastguard Worker            #version 300 es
1618*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1619*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1620*35238bceSAndroid Build Coastguard Worker
1621*35238bceSAndroid Build Coastguard Worker            void func (out bool a)
1622*35238bceSAndroid Build Coastguard Worker            {
1623*35238bceSAndroid Build Coastguard Worker                a = false;
1624*35238bceSAndroid Build Coastguard Worker            }
1625*35238bceSAndroid Build Coastguard Worker
1626*35238bceSAndroid Build Coastguard Worker            void main()
1627*35238bceSAndroid Build Coastguard Worker            {
1628*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1629*35238bceSAndroid Build Coastguard Worker                bool f = true;
1630*35238bceSAndroid Build Coastguard Worker                func(f);
1631*35238bceSAndroid Build Coastguard Worker                out0 = (in0 == f);
1632*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1633*35238bceSAndroid Build Coastguard Worker            }
1634*35238bceSAndroid Build Coastguard Worker        ""
1635*35238bceSAndroid Build Coastguard Worker    end
1636*35238bceSAndroid Build Coastguard Worker
1637*35238bceSAndroid Build Coastguard Worker    case inout_bool
1638*35238bceSAndroid Build Coastguard Worker        version 300 es
1639*35238bceSAndroid Build Coastguard Worker        values
1640*35238bceSAndroid Build Coastguard Worker        {
1641*35238bceSAndroid Build Coastguard Worker            input bool in0 = [ true | false ];
1642*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true ];
1643*35238bceSAndroid Build Coastguard Worker        }
1644*35238bceSAndroid Build Coastguard Worker
1645*35238bceSAndroid Build Coastguard Worker        both ""
1646*35238bceSAndroid Build Coastguard Worker            #version 300 es
1647*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1648*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1649*35238bceSAndroid Build Coastguard Worker
1650*35238bceSAndroid Build Coastguard Worker            void func (inout bool a)
1651*35238bceSAndroid Build Coastguard Worker            {
1652*35238bceSAndroid Build Coastguard Worker                a = !a;
1653*35238bceSAndroid Build Coastguard Worker            }
1654*35238bceSAndroid Build Coastguard Worker
1655*35238bceSAndroid Build Coastguard Worker            void main()
1656*35238bceSAndroid Build Coastguard Worker            {
1657*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1658*35238bceSAndroid Build Coastguard Worker                bool f = true;
1659*35238bceSAndroid Build Coastguard Worker                func(f);
1660*35238bceSAndroid Build Coastguard Worker                out0 = (in0 == f);
1661*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1662*35238bceSAndroid Build Coastguard Worker            }
1663*35238bceSAndroid Build Coastguard Worker        ""
1664*35238bceSAndroid Build Coastguard Worker    end
1665*35238bceSAndroid Build Coastguard Worker
1666*35238bceSAndroid Build Coastguard Worker    case const_bool
1667*35238bceSAndroid Build Coastguard Worker        version 300 es
1668*35238bceSAndroid Build Coastguard Worker        values
1669*35238bceSAndroid Build Coastguard Worker        {
1670*35238bceSAndroid Build Coastguard Worker            input bool in0 = [ true | false ];
1671*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ true | true ];
1672*35238bceSAndroid Build Coastguard Worker        }
1673*35238bceSAndroid Build Coastguard Worker
1674*35238bceSAndroid Build Coastguard Worker        both ""
1675*35238bceSAndroid Build Coastguard Worker            #version 300 es
1676*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1677*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1678*35238bceSAndroid Build Coastguard Worker
1679*35238bceSAndroid Build Coastguard Worker            bool func (const bool a)
1680*35238bceSAndroid Build Coastguard Worker            {
1681*35238bceSAndroid Build Coastguard Worker                bool b = !a;
1682*35238bceSAndroid Build Coastguard Worker                return b;
1683*35238bceSAndroid Build Coastguard Worker            }
1684*35238bceSAndroid Build Coastguard Worker
1685*35238bceSAndroid Build Coastguard Worker            void main()
1686*35238bceSAndroid Build Coastguard Worker            {
1687*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1688*35238bceSAndroid Build Coastguard Worker                bool f = in0;
1689*35238bceSAndroid Build Coastguard Worker                bool g = func(f);
1690*35238bceSAndroid Build Coastguard Worker                out0 = (f != g);
1691*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1692*35238bceSAndroid Build Coastguard Worker            }
1693*35238bceSAndroid Build Coastguard Worker        ""
1694*35238bceSAndroid Build Coastguard Worker    end
1695*35238bceSAndroid Build Coastguard Worker
1696*35238bceSAndroid Build Coastguard Workerend # qualifiers
1697*35238bceSAndroid Build Coastguard Worker
1698*35238bceSAndroid Build Coastguard Workergroup declarations "Function Declarations"
1699*35238bceSAndroid Build Coastguard Worker
1700*35238bceSAndroid Build Coastguard Worker    case basic
1701*35238bceSAndroid Build Coastguard Worker        version 300 es
1702*35238bceSAndroid Build Coastguard Worker        values
1703*35238bceSAndroid Build Coastguard Worker        {
1704*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1705*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1706*35238bceSAndroid Build Coastguard Worker        }
1707*35238bceSAndroid Build Coastguard Worker
1708*35238bceSAndroid Build Coastguard Worker        both ""
1709*35238bceSAndroid Build Coastguard Worker            #version 300 es
1710*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1711*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1712*35238bceSAndroid Build Coastguard Worker
1713*35238bceSAndroid Build Coastguard Worker            float func (void);
1714*35238bceSAndroid Build Coastguard Worker
1715*35238bceSAndroid Build Coastguard Worker            float func (void)
1716*35238bceSAndroid Build Coastguard Worker            {
1717*35238bceSAndroid Build Coastguard Worker                return -1.0;
1718*35238bceSAndroid Build Coastguard Worker            }
1719*35238bceSAndroid Build Coastguard Worker
1720*35238bceSAndroid Build Coastguard Worker            void main()
1721*35238bceSAndroid Build Coastguard Worker            {
1722*35238bceSAndroid Build Coastguard Worker                out0 = func() * in0;
1723*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1724*35238bceSAndroid Build Coastguard Worker            }
1725*35238bceSAndroid Build Coastguard Worker        ""
1726*35238bceSAndroid Build Coastguard Worker    end
1727*35238bceSAndroid Build Coastguard Worker
1728*35238bceSAndroid Build Coastguard Worker    case basic_arg
1729*35238bceSAndroid Build Coastguard Worker        version 300 es
1730*35238bceSAndroid Build Coastguard Worker        values
1731*35238bceSAndroid Build Coastguard Worker        {
1732*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1733*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1734*35238bceSAndroid Build Coastguard Worker        }
1735*35238bceSAndroid Build Coastguard Worker
1736*35238bceSAndroid Build Coastguard Worker        both ""
1737*35238bceSAndroid Build Coastguard Worker            #version 300 es
1738*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1739*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1740*35238bceSAndroid Build Coastguard Worker
1741*35238bceSAndroid Build Coastguard Worker            float func (float f);
1742*35238bceSAndroid Build Coastguard Worker
1743*35238bceSAndroid Build Coastguard Worker            float func (float f)
1744*35238bceSAndroid Build Coastguard Worker            {
1745*35238bceSAndroid Build Coastguard Worker                return -f;
1746*35238bceSAndroid Build Coastguard Worker            }
1747*35238bceSAndroid Build Coastguard Worker
1748*35238bceSAndroid Build Coastguard Worker            void main()
1749*35238bceSAndroid Build Coastguard Worker            {
1750*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
1751*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1752*35238bceSAndroid Build Coastguard Worker            }
1753*35238bceSAndroid Build Coastguard Worker        ""
1754*35238bceSAndroid Build Coastguard Worker    end
1755*35238bceSAndroid Build Coastguard Worker
1756*35238bceSAndroid Build Coastguard Worker    case define_after_use
1757*35238bceSAndroid Build Coastguard Worker        version 300 es
1758*35238bceSAndroid Build Coastguard Worker        values
1759*35238bceSAndroid Build Coastguard Worker        {
1760*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1761*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1762*35238bceSAndroid Build Coastguard Worker        }
1763*35238bceSAndroid Build Coastguard Worker
1764*35238bceSAndroid Build Coastguard Worker        both ""
1765*35238bceSAndroid Build Coastguard Worker            #version 300 es
1766*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1767*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1768*35238bceSAndroid Build Coastguard Worker
1769*35238bceSAndroid Build Coastguard Worker            float func (void);
1770*35238bceSAndroid Build Coastguard Worker
1771*35238bceSAndroid Build Coastguard Worker            void main()
1772*35238bceSAndroid Build Coastguard Worker            {
1773*35238bceSAndroid Build Coastguard Worker                out0 = func() * in0;
1774*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1775*35238bceSAndroid Build Coastguard Worker            }
1776*35238bceSAndroid Build Coastguard Worker
1777*35238bceSAndroid Build Coastguard Worker            float func (void)
1778*35238bceSAndroid Build Coastguard Worker            {
1779*35238bceSAndroid Build Coastguard Worker                return -1.0;
1780*35238bceSAndroid Build Coastguard Worker            }
1781*35238bceSAndroid Build Coastguard Worker        ""
1782*35238bceSAndroid Build Coastguard Worker    end
1783*35238bceSAndroid Build Coastguard Worker
1784*35238bceSAndroid Build Coastguard Worker    case double_declare
1785*35238bceSAndroid Build Coastguard Worker        version 300 es
1786*35238bceSAndroid Build Coastguard Worker        values
1787*35238bceSAndroid Build Coastguard Worker        {
1788*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1789*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1790*35238bceSAndroid Build Coastguard Worker        }
1791*35238bceSAndroid Build Coastguard Worker
1792*35238bceSAndroid Build Coastguard Worker        both ""
1793*35238bceSAndroid Build Coastguard Worker            #version 300 es
1794*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1795*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1796*35238bceSAndroid Build Coastguard Worker
1797*35238bceSAndroid Build Coastguard Worker            float func (void);
1798*35238bceSAndroid Build Coastguard Worker
1799*35238bceSAndroid Build Coastguard Worker            float func (void);
1800*35238bceSAndroid Build Coastguard Worker
1801*35238bceSAndroid Build Coastguard Worker            float func (void)
1802*35238bceSAndroid Build Coastguard Worker            {
1803*35238bceSAndroid Build Coastguard Worker                return -1.0;
1804*35238bceSAndroid Build Coastguard Worker            }
1805*35238bceSAndroid Build Coastguard Worker
1806*35238bceSAndroid Build Coastguard Worker            void main()
1807*35238bceSAndroid Build Coastguard Worker            {
1808*35238bceSAndroid Build Coastguard Worker                out0 = func() * in0;
1809*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1810*35238bceSAndroid Build Coastguard Worker            }
1811*35238bceSAndroid Build Coastguard Worker        ""
1812*35238bceSAndroid Build Coastguard Worker    end
1813*35238bceSAndroid Build Coastguard Worker
1814*35238bceSAndroid Build Coastguard Worker    case declare_after_define
1815*35238bceSAndroid Build Coastguard Worker        version 300 es
1816*35238bceSAndroid Build Coastguard Worker        values
1817*35238bceSAndroid Build Coastguard Worker        {
1818*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1819*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1820*35238bceSAndroid Build Coastguard Worker        }
1821*35238bceSAndroid Build Coastguard Worker
1822*35238bceSAndroid Build Coastguard Worker        both ""
1823*35238bceSAndroid Build Coastguard Worker            #version 300 es
1824*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1825*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1826*35238bceSAndroid Build Coastguard Worker
1827*35238bceSAndroid Build Coastguard Worker            float func (void)
1828*35238bceSAndroid Build Coastguard Worker            {
1829*35238bceSAndroid Build Coastguard Worker                return -1.0;
1830*35238bceSAndroid Build Coastguard Worker            }
1831*35238bceSAndroid Build Coastguard Worker
1832*35238bceSAndroid Build Coastguard Worker            float func (void);
1833*35238bceSAndroid Build Coastguard Worker
1834*35238bceSAndroid Build Coastguard Worker            void main()
1835*35238bceSAndroid Build Coastguard Worker            {
1836*35238bceSAndroid Build Coastguard Worker                out0 = func() * in0;
1837*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1838*35238bceSAndroid Build Coastguard Worker            }
1839*35238bceSAndroid Build Coastguard Worker        ""
1840*35238bceSAndroid Build Coastguard Worker    end
1841*35238bceSAndroid Build Coastguard Worker
1842*35238bceSAndroid Build Coastguard Worker    case void_vs_no_void
1843*35238bceSAndroid Build Coastguard Worker        version 300 es
1844*35238bceSAndroid Build Coastguard Worker        values
1845*35238bceSAndroid Build Coastguard Worker        {
1846*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1847*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1848*35238bceSAndroid Build Coastguard Worker        }
1849*35238bceSAndroid Build Coastguard Worker
1850*35238bceSAndroid Build Coastguard Worker        both ""
1851*35238bceSAndroid Build Coastguard Worker            #version 300 es
1852*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1853*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1854*35238bceSAndroid Build Coastguard Worker
1855*35238bceSAndroid Build Coastguard Worker            float func ();
1856*35238bceSAndroid Build Coastguard Worker
1857*35238bceSAndroid Build Coastguard Worker            void main()
1858*35238bceSAndroid Build Coastguard Worker            {
1859*35238bceSAndroid Build Coastguard Worker                out0 = func() * in0;
1860*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1861*35238bceSAndroid Build Coastguard Worker            }
1862*35238bceSAndroid Build Coastguard Worker
1863*35238bceSAndroid Build Coastguard Worker            float func (void)
1864*35238bceSAndroid Build Coastguard Worker            {
1865*35238bceSAndroid Build Coastguard Worker                return -1.0;
1866*35238bceSAndroid Build Coastguard Worker            }
1867*35238bceSAndroid Build Coastguard Worker        ""
1868*35238bceSAndroid Build Coastguard Worker    end
1869*35238bceSAndroid Build Coastguard Worker
1870*35238bceSAndroid Build Coastguard Worker    case in_vs_no_in
1871*35238bceSAndroid Build Coastguard Worker        version 300 es
1872*35238bceSAndroid Build Coastguard Worker        values
1873*35238bceSAndroid Build Coastguard Worker        {
1874*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1875*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1876*35238bceSAndroid Build Coastguard Worker        }
1877*35238bceSAndroid Build Coastguard Worker
1878*35238bceSAndroid Build Coastguard Worker        both ""
1879*35238bceSAndroid Build Coastguard Worker            #version 300 es
1880*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1881*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1882*35238bceSAndroid Build Coastguard Worker
1883*35238bceSAndroid Build Coastguard Worker            float func (float f);
1884*35238bceSAndroid Build Coastguard Worker
1885*35238bceSAndroid Build Coastguard Worker            void main()
1886*35238bceSAndroid Build Coastguard Worker            {
1887*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
1888*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1889*35238bceSAndroid Build Coastguard Worker            }
1890*35238bceSAndroid Build Coastguard Worker
1891*35238bceSAndroid Build Coastguard Worker            float func (in float f)
1892*35238bceSAndroid Build Coastguard Worker            {
1893*35238bceSAndroid Build Coastguard Worker                return -f;
1894*35238bceSAndroid Build Coastguard Worker            }
1895*35238bceSAndroid Build Coastguard Worker        ""
1896*35238bceSAndroid Build Coastguard Worker    end
1897*35238bceSAndroid Build Coastguard Worker
1898*35238bceSAndroid Build Coastguard Worker    case default_vs_explicit_precision
1899*35238bceSAndroid Build Coastguard Worker        version 300 es
1900*35238bceSAndroid Build Coastguard Worker        values
1901*35238bceSAndroid Build Coastguard Worker        {
1902*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1903*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1904*35238bceSAndroid Build Coastguard Worker        }
1905*35238bceSAndroid Build Coastguard Worker
1906*35238bceSAndroid Build Coastguard Worker        both ""
1907*35238bceSAndroid Build Coastguard Worker            #version 300 es
1908*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1909*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1910*35238bceSAndroid Build Coastguard Worker
1911*35238bceSAndroid Build Coastguard Worker            float func (float f);
1912*35238bceSAndroid Build Coastguard Worker
1913*35238bceSAndroid Build Coastguard Worker            void main()
1914*35238bceSAndroid Build Coastguard Worker            {
1915*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
1916*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1917*35238bceSAndroid Build Coastguard Worker            }
1918*35238bceSAndroid Build Coastguard Worker
1919*35238bceSAndroid Build Coastguard Worker            float func (mediump float f)
1920*35238bceSAndroid Build Coastguard Worker            {
1921*35238bceSAndroid Build Coastguard Worker                return -f;
1922*35238bceSAndroid Build Coastguard Worker            }
1923*35238bceSAndroid Build Coastguard Worker        ""
1924*35238bceSAndroid Build Coastguard Worker    end
1925*35238bceSAndroid Build Coastguard Worker
1926*35238bceSAndroid Build Coastguard Worker
1927*35238bceSAndroid Build Coastguard Workerend # declarations
1928*35238bceSAndroid Build Coastguard Worker
1929*35238bceSAndroid Build Coastguard Workergroup overloading "Function Overloading"
1930*35238bceSAndroid Build Coastguard Worker
1931*35238bceSAndroid Build Coastguard Worker    case user_func_arg_type_simple
1932*35238bceSAndroid Build Coastguard Worker        version 300 es
1933*35238bceSAndroid Build Coastguard Worker        values
1934*35238bceSAndroid Build Coastguard Worker        {
1935*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1936*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1937*35238bceSAndroid Build Coastguard Worker        }
1938*35238bceSAndroid Build Coastguard Worker
1939*35238bceSAndroid Build Coastguard Worker        both ""
1940*35238bceSAndroid Build Coastguard Worker            #version 300 es
1941*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1942*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1943*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1944*35238bceSAndroid Build Coastguard Worker
1945*35238bceSAndroid Build Coastguard Worker            float func (float a)
1946*35238bceSAndroid Build Coastguard Worker            {
1947*35238bceSAndroid Build Coastguard Worker                return -a;
1948*35238bceSAndroid Build Coastguard Worker            }
1949*35238bceSAndroid Build Coastguard Worker
1950*35238bceSAndroid Build Coastguard Worker            int func (int a)
1951*35238bceSAndroid Build Coastguard Worker            {
1952*35238bceSAndroid Build Coastguard Worker                return -a;
1953*35238bceSAndroid Build Coastguard Worker            }
1954*35238bceSAndroid Build Coastguard Worker
1955*35238bceSAndroid Build Coastguard Worker            void main()
1956*35238bceSAndroid Build Coastguard Worker            {
1957*35238bceSAndroid Build Coastguard Worker                out0 = func(in0) * float(func(-1));
1958*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1959*35238bceSAndroid Build Coastguard Worker            }
1960*35238bceSAndroid Build Coastguard Worker        ""
1961*35238bceSAndroid Build Coastguard Worker    end
1962*35238bceSAndroid Build Coastguard Worker
1963*35238bceSAndroid Build Coastguard Worker    case user_func_arg_float_types
1964*35238bceSAndroid Build Coastguard Worker        version 300 es
1965*35238bceSAndroid Build Coastguard Worker        values
1966*35238bceSAndroid Build Coastguard Worker        {
1967*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1968*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1969*35238bceSAndroid Build Coastguard Worker        }
1970*35238bceSAndroid Build Coastguard Worker
1971*35238bceSAndroid Build Coastguard Worker        both ""
1972*35238bceSAndroid Build Coastguard Worker            #version 300 es
1973*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1974*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1975*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1976*35238bceSAndroid Build Coastguard Worker
1977*35238bceSAndroid Build Coastguard Worker            float func (float a) { return -a; }
1978*35238bceSAndroid Build Coastguard Worker            vec2 func (vec2 a) { return a.yx; }
1979*35238bceSAndroid Build Coastguard Worker            vec3 func (vec3 a) { return a.xxx; }
1980*35238bceSAndroid Build Coastguard Worker            vec4 func (vec4 a) { return a.wwww; }
1981*35238bceSAndroid Build Coastguard Worker
1982*35238bceSAndroid Build Coastguard Worker            void main()
1983*35238bceSAndroid Build Coastguard Worker            {
1984*35238bceSAndroid Build Coastguard Worker                out0 = func(func(func(func(vec4(in0)).xyz).xy).x);
1985*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1986*35238bceSAndroid Build Coastguard Worker            }
1987*35238bceSAndroid Build Coastguard Worker        ""
1988*35238bceSAndroid Build Coastguard Worker    end
1989*35238bceSAndroid Build Coastguard Worker
1990*35238bceSAndroid Build Coastguard Worker    case user_func_arg_int_types
1991*35238bceSAndroid Build Coastguard Worker        version 300 es
1992*35238bceSAndroid Build Coastguard Worker        values
1993*35238bceSAndroid Build Coastguard Worker        {
1994*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
1995*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
1996*35238bceSAndroid Build Coastguard Worker        }
1997*35238bceSAndroid Build Coastguard Worker
1998*35238bceSAndroid Build Coastguard Worker        both ""
1999*35238bceSAndroid Build Coastguard Worker            #version 300 es
2000*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2001*35238bceSAndroid Build Coastguard Worker            precision mediump int;
2002*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2003*35238bceSAndroid Build Coastguard Worker
2004*35238bceSAndroid Build Coastguard Worker            int func (int a) { return -a; }
2005*35238bceSAndroid Build Coastguard Worker            ivec2 func (ivec2 a) { return a.yx; }
2006*35238bceSAndroid Build Coastguard Worker            ivec3 func (ivec3 a) { return a.xxx; }
2007*35238bceSAndroid Build Coastguard Worker            ivec4 func (ivec4 a) { return a.wwww; }
2008*35238bceSAndroid Build Coastguard Worker
2009*35238bceSAndroid Build Coastguard Worker            void main()
2010*35238bceSAndroid Build Coastguard Worker            {
2011*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2012*35238bceSAndroid Build Coastguard Worker                out0 = func(func(func(func(ivec4(in0)).xyz).xy).x);
2013*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2014*35238bceSAndroid Build Coastguard Worker            }
2015*35238bceSAndroid Build Coastguard Worker        ""
2016*35238bceSAndroid Build Coastguard Worker    end
2017*35238bceSAndroid Build Coastguard Worker
2018*35238bceSAndroid Build Coastguard Worker    case user_func_arg_bool_types
2019*35238bceSAndroid Build Coastguard Worker        version 300 es
2020*35238bceSAndroid Build Coastguard Worker        values
2021*35238bceSAndroid Build Coastguard Worker        {
2022*35238bceSAndroid Build Coastguard Worker            input bool in0 = [ true | false ];
2023*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true ];
2024*35238bceSAndroid Build Coastguard Worker        }
2025*35238bceSAndroid Build Coastguard Worker
2026*35238bceSAndroid Build Coastguard Worker        both ""
2027*35238bceSAndroid Build Coastguard Worker            #version 300 es
2028*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2029*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2030*35238bceSAndroid Build Coastguard Worker
2031*35238bceSAndroid Build Coastguard Worker            bool func (bool a) { return !a; }
2032*35238bceSAndroid Build Coastguard Worker            bvec2 func (bvec2 a) { return a.yx; }
2033*35238bceSAndroid Build Coastguard Worker            bvec3 func (bvec3 a) { return a.xxx; }
2034*35238bceSAndroid Build Coastguard Worker            bvec4 func (bvec4 a) { return a.wwww; }
2035*35238bceSAndroid Build Coastguard Worker
2036*35238bceSAndroid Build Coastguard Worker            void main()
2037*35238bceSAndroid Build Coastguard Worker            {
2038*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2039*35238bceSAndroid Build Coastguard Worker                out0 = func(func(func(func(bvec4(in0)).xyz).xy).x);
2040*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2041*35238bceSAndroid Build Coastguard Worker            }
2042*35238bceSAndroid Build Coastguard Worker        ""
2043*35238bceSAndroid Build Coastguard Worker    end
2044*35238bceSAndroid Build Coastguard Worker
2045*35238bceSAndroid Build Coastguard Worker    case user_func_arg_basic_types
2046*35238bceSAndroid Build Coastguard Worker        version 300 es
2047*35238bceSAndroid Build Coastguard Worker        values
2048*35238bceSAndroid Build Coastguard Worker        {
2049*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
2050*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
2051*35238bceSAndroid Build Coastguard Worker        }
2052*35238bceSAndroid Build Coastguard Worker
2053*35238bceSAndroid Build Coastguard Worker        both ""
2054*35238bceSAndroid Build Coastguard Worker            #version 300 es
2055*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2056*35238bceSAndroid Build Coastguard Worker            precision mediump int;
2057*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2058*35238bceSAndroid Build Coastguard Worker
2059*35238bceSAndroid Build Coastguard Worker            float func (float a) { return -a; }
2060*35238bceSAndroid Build Coastguard Worker            vec2 func (vec2 a) { return a.yx; }
2061*35238bceSAndroid Build Coastguard Worker            vec3 func (vec3 a) { return a.xxx; }
2062*35238bceSAndroid Build Coastguard Worker            vec4 func (vec4 a) { return a.wwww; }
2063*35238bceSAndroid Build Coastguard Worker            int func (int a) { return -a; }
2064*35238bceSAndroid Build Coastguard Worker            ivec2 func (ivec2 a) { return a.yx; }
2065*35238bceSAndroid Build Coastguard Worker            ivec3 func (ivec3 a) { return a.xxx; }
2066*35238bceSAndroid Build Coastguard Worker            ivec4 func (ivec4 a) { return a.wwww; }
2067*35238bceSAndroid Build Coastguard Worker            bool func (bool a) { return !a; }
2068*35238bceSAndroid Build Coastguard Worker            bvec2 func (bvec2 a) { return a.yx; }
2069*35238bceSAndroid Build Coastguard Worker            bvec3 func (bvec3 a) { return a.xxx; }
2070*35238bceSAndroid Build Coastguard Worker            bvec4 func (bvec4 a) { return a.wwww; }
2071*35238bceSAndroid Build Coastguard Worker
2072*35238bceSAndroid Build Coastguard Worker            void main()
2073*35238bceSAndroid Build Coastguard Worker            {
2074*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2075*35238bceSAndroid Build Coastguard Worker                if (func(func(bvec4(false)).x))
2076*35238bceSAndroid Build Coastguard Worker                    out0 = func(in0) * float(func(-1));
2077*35238bceSAndroid Build Coastguard Worker                else
2078*35238bceSAndroid Build Coastguard Worker                    out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x);
2079*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2080*35238bceSAndroid Build Coastguard Worker            }
2081*35238bceSAndroid Build Coastguard Worker        ""
2082*35238bceSAndroid Build Coastguard Worker    end
2083*35238bceSAndroid Build Coastguard Worker
2084*35238bceSAndroid Build Coastguard Worker    case user_func_arg_complex_types
2085*35238bceSAndroid Build Coastguard Worker        version 300 es
2086*35238bceSAndroid Build Coastguard Worker        values
2087*35238bceSAndroid Build Coastguard Worker        {
2088*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
2089*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
2090*35238bceSAndroid Build Coastguard Worker        }
2091*35238bceSAndroid Build Coastguard Worker
2092*35238bceSAndroid Build Coastguard Worker        both ""
2093*35238bceSAndroid Build Coastguard Worker            #version 300 es
2094*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2095*35238bceSAndroid Build Coastguard Worker            precision mediump int;
2096*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2097*35238bceSAndroid Build Coastguard Worker
2098*35238bceSAndroid Build Coastguard Worker            struct Pos { float a, b, c; };
2099*35238bceSAndroid Build Coastguard Worker            struct Line { Pos start, end; };
2100*35238bceSAndroid Build Coastguard Worker
2101*35238bceSAndroid Build Coastguard Worker            float func (float a) { return -a; }
2102*35238bceSAndroid Build Coastguard Worker            float func (float a[4]) { return a[0] + a[3]; }
2103*35238bceSAndroid Build Coastguard Worker            vec2 func (vec2 a) { return a.yx; }
2104*35238bceSAndroid Build Coastguard Worker            vec3 func (vec3 a) { return a.xxx; }
2105*35238bceSAndroid Build Coastguard Worker            vec4 func (vec4 a) { return a.wwww; }
2106*35238bceSAndroid Build Coastguard Worker            vec4 func (vec4 a[4]) { return a[1] + a[2]; }
2107*35238bceSAndroid Build Coastguard Worker            int func (int a) { return -a; }
2108*35238bceSAndroid Build Coastguard Worker            ivec2 func (ivec2 a) { return a.yx; }
2109*35238bceSAndroid Build Coastguard Worker            ivec3 func (ivec3 a) { return a.xxx; }
2110*35238bceSAndroid Build Coastguard Worker            ivec4 func (ivec4 a) { return a.wwww; }
2111*35238bceSAndroid Build Coastguard Worker            bool func (bool a) { return !a; }
2112*35238bceSAndroid Build Coastguard Worker            bvec2 func (bvec2 a) { return a.yx; }
2113*35238bceSAndroid Build Coastguard Worker            bvec3 func (bvec3 a) { return a.xxx; }
2114*35238bceSAndroid Build Coastguard Worker            bvec4 func (bvec4 a) { return a.wwww; }
2115*35238bceSAndroid Build Coastguard Worker            Pos func (Pos a) { return a; }
2116*35238bceSAndroid Build Coastguard Worker            Line func (Line a) { return Line(a.end, a.start); }
2117*35238bceSAndroid Build Coastguard Worker
2118*35238bceSAndroid Build Coastguard Worker            void main()
2119*35238bceSAndroid Build Coastguard Worker            {
2120*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2121*35238bceSAndroid Build Coastguard Worker                float arr[4];
2122*35238bceSAndroid Build Coastguard Worker                vec4 arr2[4];
2123*35238bceSAndroid Build Coastguard Worker                out0 = func(arr) + func(arr2).x;
2124*35238bceSAndroid Build Coastguard Worker                if (func(func(bvec4(false)).x))
2125*35238bceSAndroid Build Coastguard Worker                    out0 = func(in0) * float(func(-1));
2126*35238bceSAndroid Build Coastguard Worker                else
2127*35238bceSAndroid Build Coastguard Worker                    out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x);
2128*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2129*35238bceSAndroid Build Coastguard Worker            }
2130*35238bceSAndroid Build Coastguard Worker        ""
2131*35238bceSAndroid Build Coastguard Worker    end
2132*35238bceSAndroid Build Coastguard Worker
2133*35238bceSAndroid Build Coastguard Worker    case user_func_arguments
2134*35238bceSAndroid Build Coastguard Worker        version 300 es
2135*35238bceSAndroid Build Coastguard Worker        values
2136*35238bceSAndroid Build Coastguard Worker        {
2137*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
2138*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
2139*35238bceSAndroid Build Coastguard Worker        }
2140*35238bceSAndroid Build Coastguard Worker
2141*35238bceSAndroid Build Coastguard Worker        both ""
2142*35238bceSAndroid Build Coastguard Worker            #version 300 es
2143*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2144*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2145*35238bceSAndroid Build Coastguard Worker
2146*35238bceSAndroid Build Coastguard Worker            float func (float a)
2147*35238bceSAndroid Build Coastguard Worker            {
2148*35238bceSAndroid Build Coastguard Worker                return -a;
2149*35238bceSAndroid Build Coastguard Worker            }
2150*35238bceSAndroid Build Coastguard Worker
2151*35238bceSAndroid Build Coastguard Worker            float func (float a, float b)
2152*35238bceSAndroid Build Coastguard Worker            {
2153*35238bceSAndroid Build Coastguard Worker                return a * b;
2154*35238bceSAndroid Build Coastguard Worker            }
2155*35238bceSAndroid Build Coastguard Worker
2156*35238bceSAndroid Build Coastguard Worker            void main()
2157*35238bceSAndroid Build Coastguard Worker            {
2158*35238bceSAndroid Build Coastguard Worker                out0 = func(in0) * func(-0.5, -2.0);
2159*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2160*35238bceSAndroid Build Coastguard Worker            }
2161*35238bceSAndroid Build Coastguard Worker        ""
2162*35238bceSAndroid Build Coastguard Worker    end
2163*35238bceSAndroid Build Coastguard Worker
2164*35238bceSAndroid Build Coastguard Worker    case array_size
2165*35238bceSAndroid Build Coastguard Worker        version 300 es
2166*35238bceSAndroid Build Coastguard Worker        values
2167*35238bceSAndroid Build Coastguard Worker        {
2168*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 1.0 ];
2169*35238bceSAndroid Build Coastguard Worker        }
2170*35238bceSAndroid Build Coastguard Worker
2171*35238bceSAndroid Build Coastguard Worker        both ""
2172*35238bceSAndroid Build Coastguard Worker            #version 300 es
2173*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2174*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2175*35238bceSAndroid Build Coastguard Worker
2176*35238bceSAndroid Build Coastguard Worker            float func (float f[3])
2177*35238bceSAndroid Build Coastguard Worker            {
2178*35238bceSAndroid Build Coastguard Worker                return f[0];
2179*35238bceSAndroid Build Coastguard Worker            }
2180*35238bceSAndroid Build Coastguard Worker
2181*35238bceSAndroid Build Coastguard Worker            float func (float f[4])
2182*35238bceSAndroid Build Coastguard Worker            {
2183*35238bceSAndroid Build Coastguard Worker                return f[1];
2184*35238bceSAndroid Build Coastguard Worker            }
2185*35238bceSAndroid Build Coastguard Worker
2186*35238bceSAndroid Build Coastguard Worker            void main ()
2187*35238bceSAndroid Build Coastguard Worker            {
2188*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2189*35238bceSAndroid Build Coastguard Worker                float[4] x = float[4] (-1.0, 1.0, 0.0, 0.0);
2190*35238bceSAndroid Build Coastguard Worker                out0 = func(x);
2191*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2192*35238bceSAndroid Build Coastguard Worker            }
2193*35238bceSAndroid Build Coastguard Worker        ""
2194*35238bceSAndroid Build Coastguard Worker    end
2195*35238bceSAndroid Build Coastguard Worker
2196*35238bceSAndroid Build Coastguard Workerend # overloading
2197*35238bceSAndroid Build Coastguard Worker
2198*35238bceSAndroid Build Coastguard Workergroup array_arguments "Arrays as Arguments"
2199*35238bceSAndroid Build Coastguard Worker
2200*35238bceSAndroid Build Coastguard Worker    case local_in_float
2201*35238bceSAndroid Build Coastguard Worker        version 300 es
2202*35238bceSAndroid Build Coastguard Worker        values
2203*35238bceSAndroid Build Coastguard Worker        {
2204*35238bceSAndroid Build Coastguard Worker            input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2205*35238bceSAndroid Build Coastguard Worker            output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2206*35238bceSAndroid Build Coastguard Worker        }
2207*35238bceSAndroid Build Coastguard Worker
2208*35238bceSAndroid Build Coastguard Worker        both ""
2209*35238bceSAndroid Build Coastguard Worker            #version 300 es
2210*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2211*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2212*35238bceSAndroid Build Coastguard Worker
2213*35238bceSAndroid Build Coastguard Worker            float func (in float a[4])
2214*35238bceSAndroid Build Coastguard Worker            {
2215*35238bceSAndroid Build Coastguard Worker                a[0] = -1.0;
2216*35238bceSAndroid Build Coastguard Worker                a[2] = -4.0;
2217*35238bceSAndroid Build Coastguard Worker                a[3] = -3.0 * a[1];
2218*35238bceSAndroid Build Coastguard Worker                return a[0];
2219*35238bceSAndroid Build Coastguard Worker            }
2220*35238bceSAndroid Build Coastguard Worker
2221*35238bceSAndroid Build Coastguard Worker            void main()
2222*35238bceSAndroid Build Coastguard Worker            {
2223*35238bceSAndroid Build Coastguard Worker                float arr[4];
2224*35238bceSAndroid Build Coastguard Worker                arr[0] = in0.x;
2225*35238bceSAndroid Build Coastguard Worker                arr[1] = in0.y;
2226*35238bceSAndroid Build Coastguard Worker                arr[2] = in0.z;
2227*35238bceSAndroid Build Coastguard Worker                arr[3] = in0.w;
2228*35238bceSAndroid Build Coastguard Worker                float f = func(arr);
2229*35238bceSAndroid Build Coastguard Worker                out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]);
2230*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2231*35238bceSAndroid Build Coastguard Worker            }
2232*35238bceSAndroid Build Coastguard Worker        ""
2233*35238bceSAndroid Build Coastguard Worker    end
2234*35238bceSAndroid Build Coastguard Worker
2235*35238bceSAndroid Build Coastguard Worker    case global_in_float
2236*35238bceSAndroid Build Coastguard Worker        version 300 es
2237*35238bceSAndroid Build Coastguard Worker        values
2238*35238bceSAndroid Build Coastguard Worker        {
2239*35238bceSAndroid Build Coastguard Worker            input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2240*35238bceSAndroid Build Coastguard Worker            output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2241*35238bceSAndroid Build Coastguard Worker        }
2242*35238bceSAndroid Build Coastguard Worker
2243*35238bceSAndroid Build Coastguard Worker        both ""
2244*35238bceSAndroid Build Coastguard Worker            #version 300 es
2245*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2246*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2247*35238bceSAndroid Build Coastguard Worker
2248*35238bceSAndroid Build Coastguard Worker            float func (in float a[4])
2249*35238bceSAndroid Build Coastguard Worker            {
2250*35238bceSAndroid Build Coastguard Worker                a[0] = -1.0;
2251*35238bceSAndroid Build Coastguard Worker                a[2] = -4.0;
2252*35238bceSAndroid Build Coastguard Worker                a[3] = -3.0 * a[1];
2253*35238bceSAndroid Build Coastguard Worker                return a[0];
2254*35238bceSAndroid Build Coastguard Worker            }
2255*35238bceSAndroid Build Coastguard Worker
2256*35238bceSAndroid Build Coastguard Worker            float arr[4];
2257*35238bceSAndroid Build Coastguard Worker
2258*35238bceSAndroid Build Coastguard Worker            void main()
2259*35238bceSAndroid Build Coastguard Worker            {
2260*35238bceSAndroid Build Coastguard Worker                arr[0] = in0.x;
2261*35238bceSAndroid Build Coastguard Worker                arr[1] = in0.y;
2262*35238bceSAndroid Build Coastguard Worker                arr[2] = in0.z;
2263*35238bceSAndroid Build Coastguard Worker                arr[3] = in0.w;
2264*35238bceSAndroid Build Coastguard Worker                float f = func(arr);
2265*35238bceSAndroid Build Coastguard Worker                out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]);
2266*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2267*35238bceSAndroid Build Coastguard Worker            }
2268*35238bceSAndroid Build Coastguard Worker        ""
2269*35238bceSAndroid Build Coastguard Worker    end
2270*35238bceSAndroid Build Coastguard Worker
2271*35238bceSAndroid Build Coastguard Worker    case local_in_int
2272*35238bceSAndroid Build Coastguard Worker        version 300 es
2273*35238bceSAndroid Build Coastguard Worker        values
2274*35238bceSAndroid Build Coastguard Worker        {
2275*35238bceSAndroid Build Coastguard Worker            input ivec4 in0 = [ ivec4(0, 1, 2, -4) | ivec4(-7, -11, 13, 19) ];
2276*35238bceSAndroid Build Coastguard Worker            output ivec4 out0 = [ ivec4(0, -1, -2, 4) | ivec4(7, 11, -13, -19) ];
2277*35238bceSAndroid Build Coastguard Worker        }
2278*35238bceSAndroid Build Coastguard Worker
2279*35238bceSAndroid Build Coastguard Worker        both ""
2280*35238bceSAndroid Build Coastguard Worker            #version 300 es
2281*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2282*35238bceSAndroid Build Coastguard Worker            precision mediump int;
2283*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2284*35238bceSAndroid Build Coastguard Worker
2285*35238bceSAndroid Build Coastguard Worker            int func (in int a[4])
2286*35238bceSAndroid Build Coastguard Worker            {
2287*35238bceSAndroid Build Coastguard Worker                a[0] = -1;
2288*35238bceSAndroid Build Coastguard Worker                a[2] = -4;
2289*35238bceSAndroid Build Coastguard Worker                a[3] = -3 * a[1];
2290*35238bceSAndroid Build Coastguard Worker                return a[0];
2291*35238bceSAndroid Build Coastguard Worker            }
2292*35238bceSAndroid Build Coastguard Worker
2293*35238bceSAndroid Build Coastguard Worker            void main()
2294*35238bceSAndroid Build Coastguard Worker            {
2295*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2296*35238bceSAndroid Build Coastguard Worker                int arr[4];
2297*35238bceSAndroid Build Coastguard Worker                arr[0] = in0.x;
2298*35238bceSAndroid Build Coastguard Worker                arr[1] = in0.y;
2299*35238bceSAndroid Build Coastguard Worker                arr[2] = in0.z;
2300*35238bceSAndroid Build Coastguard Worker                arr[3] = in0.w;
2301*35238bceSAndroid Build Coastguard Worker                int f = func(arr);
2302*35238bceSAndroid Build Coastguard Worker                out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]);
2303*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2304*35238bceSAndroid Build Coastguard Worker            }
2305*35238bceSAndroid Build Coastguard Worker        ""
2306*35238bceSAndroid Build Coastguard Worker    end
2307*35238bceSAndroid Build Coastguard Worker
2308*35238bceSAndroid Build Coastguard Worker    case global_in_int
2309*35238bceSAndroid Build Coastguard Worker        version 300 es
2310*35238bceSAndroid Build Coastguard Worker        values
2311*35238bceSAndroid Build Coastguard Worker        {
2312*35238bceSAndroid Build Coastguard Worker            input ivec4 in0 = [ ivec4(0, 1, 2, 4) | ivec4(-7, -11, 13, 19) ];
2313*35238bceSAndroid Build Coastguard Worker            output ivec4 out0 = [ ivec4(0, -1, -2, -4) | ivec4(7, 11, -13, -19) ];
2314*35238bceSAndroid Build Coastguard Worker        }
2315*35238bceSAndroid Build Coastguard Worker
2316*35238bceSAndroid Build Coastguard Worker        both ""
2317*35238bceSAndroid Build Coastguard Worker            #version 300 es
2318*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2319*35238bceSAndroid Build Coastguard Worker            precision mediump int;
2320*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2321*35238bceSAndroid Build Coastguard Worker
2322*35238bceSAndroid Build Coastguard Worker            int func (in int a[4])
2323*35238bceSAndroid Build Coastguard Worker            {
2324*35238bceSAndroid Build Coastguard Worker                a[0] = -1;
2325*35238bceSAndroid Build Coastguard Worker                a[2] = -4;
2326*35238bceSAndroid Build Coastguard Worker                a[3] = -3 * a[1];
2327*35238bceSAndroid Build Coastguard Worker                return a[0];
2328*35238bceSAndroid Build Coastguard Worker            }
2329*35238bceSAndroid Build Coastguard Worker
2330*35238bceSAndroid Build Coastguard Worker            int arr[4];
2331*35238bceSAndroid Build Coastguard Worker
2332*35238bceSAndroid Build Coastguard Worker            void main()
2333*35238bceSAndroid Build Coastguard Worker            {
2334*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2335*35238bceSAndroid Build Coastguard Worker                arr[0] = in0.x;
2336*35238bceSAndroid Build Coastguard Worker                arr[1] = in0.y;
2337*35238bceSAndroid Build Coastguard Worker                arr[2] = in0.z;
2338*35238bceSAndroid Build Coastguard Worker                arr[3] = in0.w;
2339*35238bceSAndroid Build Coastguard Worker                int f = func(arr);
2340*35238bceSAndroid Build Coastguard Worker                out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]);
2341*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2342*35238bceSAndroid Build Coastguard Worker            }
2343*35238bceSAndroid Build Coastguard Worker
2344*35238bceSAndroid Build Coastguard Worker        ""
2345*35238bceSAndroid Build Coastguard Worker    end
2346*35238bceSAndroid Build Coastguard Worker
2347*35238bceSAndroid Build Coastguard Worker    case local_in_bool
2348*35238bceSAndroid Build Coastguard Worker        version 300 es
2349*35238bceSAndroid Build Coastguard Worker        values
2350*35238bceSAndroid Build Coastguard Worker        {
2351*35238bceSAndroid Build Coastguard Worker            input bvec4 in0 = [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ];
2352*35238bceSAndroid Build Coastguard Worker            output bvec4 out0 = [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ];
2353*35238bceSAndroid Build Coastguard Worker        }
2354*35238bceSAndroid Build Coastguard Worker
2355*35238bceSAndroid Build Coastguard Worker        both ""
2356*35238bceSAndroid Build Coastguard Worker            #version 300 es
2357*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2358*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2359*35238bceSAndroid Build Coastguard Worker
2360*35238bceSAndroid Build Coastguard Worker            bool func (in bool a[4])
2361*35238bceSAndroid Build Coastguard Worker            {
2362*35238bceSAndroid Build Coastguard Worker                a[0] = false;
2363*35238bceSAndroid Build Coastguard Worker                a[2] = true;
2364*35238bceSAndroid Build Coastguard Worker                a[3] = !a[1];
2365*35238bceSAndroid Build Coastguard Worker                return a[0];
2366*35238bceSAndroid Build Coastguard Worker            }
2367*35238bceSAndroid Build Coastguard Worker
2368*35238bceSAndroid Build Coastguard Worker            void main()
2369*35238bceSAndroid Build Coastguard Worker            {
2370*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2371*35238bceSAndroid Build Coastguard Worker                bool arr[4];
2372*35238bceSAndroid Build Coastguard Worker                arr[0] = !in0.x;
2373*35238bceSAndroid Build Coastguard Worker                arr[1] = !in0.y;
2374*35238bceSAndroid Build Coastguard Worker                arr[2] = !in0.z;
2375*35238bceSAndroid Build Coastguard Worker                arr[3] = !in0.w;
2376*35238bceSAndroid Build Coastguard Worker                func(arr);
2377*35238bceSAndroid Build Coastguard Worker                out0 = bvec4(arr[0], arr[1], arr[2], arr[3]);
2378*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2379*35238bceSAndroid Build Coastguard Worker            }
2380*35238bceSAndroid Build Coastguard Worker        ""
2381*35238bceSAndroid Build Coastguard Worker    end
2382*35238bceSAndroid Build Coastguard Worker
2383*35238bceSAndroid Build Coastguard Worker    case global_in_bool
2384*35238bceSAndroid Build Coastguard Worker        version 300 es
2385*35238bceSAndroid Build Coastguard Worker        values
2386*35238bceSAndroid Build Coastguard Worker        {
2387*35238bceSAndroid Build Coastguard Worker            input bvec4 in0 = [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ];
2388*35238bceSAndroid Build Coastguard Worker            output bvec4 out0 = [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ];
2389*35238bceSAndroid Build Coastguard Worker        }
2390*35238bceSAndroid Build Coastguard Worker
2391*35238bceSAndroid Build Coastguard Worker        both ""
2392*35238bceSAndroid Build Coastguard Worker            #version 300 es
2393*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2394*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2395*35238bceSAndroid Build Coastguard Worker
2396*35238bceSAndroid Build Coastguard Worker            bool func (in bool a[4])
2397*35238bceSAndroid Build Coastguard Worker            {
2398*35238bceSAndroid Build Coastguard Worker                a[0] = false;
2399*35238bceSAndroid Build Coastguard Worker                a[2] = true;
2400*35238bceSAndroid Build Coastguard Worker                a[3] = !a[1];
2401*35238bceSAndroid Build Coastguard Worker                return a[0];
2402*35238bceSAndroid Build Coastguard Worker            }
2403*35238bceSAndroid Build Coastguard Worker
2404*35238bceSAndroid Build Coastguard Worker            bool arr[4];
2405*35238bceSAndroid Build Coastguard Worker
2406*35238bceSAndroid Build Coastguard Worker            void main()
2407*35238bceSAndroid Build Coastguard Worker            {
2408*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2409*35238bceSAndroid Build Coastguard Worker                arr[0] = !in0.x;
2410*35238bceSAndroid Build Coastguard Worker                arr[1] = !in0.y;
2411*35238bceSAndroid Build Coastguard Worker                arr[2] = !in0.z;
2412*35238bceSAndroid Build Coastguard Worker                arr[3] = !in0.w;
2413*35238bceSAndroid Build Coastguard Worker                func(arr);
2414*35238bceSAndroid Build Coastguard Worker                out0 = bvec4(arr[0], arr[1], arr[2], arr[3]);
2415*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2416*35238bceSAndroid Build Coastguard Worker            }
2417*35238bceSAndroid Build Coastguard Worker        ""
2418*35238bceSAndroid Build Coastguard Worker    end
2419*35238bceSAndroid Build Coastguard Worker
2420*35238bceSAndroid Build Coastguard Worker    case test_helpers
2421*35238bceSAndroid Build Coastguard Worker        version 300 es
2422*35238bceSAndroid Build Coastguard Worker        desc "Check that helper functions are supported properly."
2423*35238bceSAndroid Build Coastguard Worker        values
2424*35238bceSAndroid Build Coastguard Worker        {
2425*35238bceSAndroid Build Coastguard Worker            input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2426*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 1.0 | 1.0 ];
2427*35238bceSAndroid Build Coastguard Worker        }
2428*35238bceSAndroid Build Coastguard Worker
2429*35238bceSAndroid Build Coastguard Worker        both ""
2430*35238bceSAndroid Build Coastguard Worker            #version 300 es
2431*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2432*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2433*35238bceSAndroid Build Coastguard Worker
2434*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]);
2435*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val);
2436*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]);
2437*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref);
2438*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]);
2439*35238bceSAndroid Build Coastguard Worker
2440*35238bceSAndroid Build Coastguard Worker            void main()
2441*35238bceSAndroid Build Coastguard Worker            {
2442*35238bceSAndroid Build Coastguard Worker                float arr[4];
2443*35238bceSAndroid Build Coastguard Worker                set(arr, in0);
2444*35238bceSAndroid Build Coastguard Worker                negate(arr);
2445*35238bceSAndroid Build Coastguard Worker                out0 = float(test(arr, -in0));
2446*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2447*35238bceSAndroid Build Coastguard Worker            }
2448*35238bceSAndroid Build Coastguard Worker
2449*35238bceSAndroid Build Coastguard Worker            float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2450*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2451*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2452*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]) { set(arr, -get(arr)); }
2453*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2454*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2455*35238bceSAndroid Build Coastguard Worker        ""
2456*35238bceSAndroid Build Coastguard Worker    end
2457*35238bceSAndroid Build Coastguard Worker
2458*35238bceSAndroid Build Coastguard Worker    case copy_local_in_on_call
2459*35238bceSAndroid Build Coastguard Worker        version 300 es
2460*35238bceSAndroid Build Coastguard Worker        desc "Check that local 'in' arguments are copied on call and don't alias."
2461*35238bceSAndroid Build Coastguard Worker        values
2462*35238bceSAndroid Build Coastguard Worker        {
2463*35238bceSAndroid Build Coastguard Worker            input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2464*35238bceSAndroid Build Coastguard Worker            output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2465*35238bceSAndroid Build Coastguard Worker        }
2466*35238bceSAndroid Build Coastguard Worker
2467*35238bceSAndroid Build Coastguard Worker        both ""
2468*35238bceSAndroid Build Coastguard Worker            #version 300 es
2469*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2470*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2471*35238bceSAndroid Build Coastguard Worker
2472*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]);
2473*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val);
2474*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]);
2475*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref);
2476*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]);
2477*35238bceSAndroid Build Coastguard Worker
2478*35238bceSAndroid Build Coastguard Worker            float func (in float a[4], in float b[4])
2479*35238bceSAndroid Build Coastguard Worker            {
2480*35238bceSAndroid Build Coastguard Worker                a[0] = 2.123;
2481*35238bceSAndroid Build Coastguard Worker                a[2] = -4.123;
2482*35238bceSAndroid Build Coastguard Worker                return isEqual(a, b) ? 1.0 : -1.0;
2483*35238bceSAndroid Build Coastguard Worker            }
2484*35238bceSAndroid Build Coastguard Worker
2485*35238bceSAndroid Build Coastguard Worker            void main()
2486*35238bceSAndroid Build Coastguard Worker            {
2487*35238bceSAndroid Build Coastguard Worker                float arr[4];
2488*35238bceSAndroid Build Coastguard Worker                set(arr, in0);
2489*35238bceSAndroid Build Coastguard Worker                out0 = in0 * func(arr, arr);
2490*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2491*35238bceSAndroid Build Coastguard Worker            }
2492*35238bceSAndroid Build Coastguard Worker
2493*35238bceSAndroid Build Coastguard Worker            float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2494*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2495*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2496*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]) { set(arr, -get(arr)); }
2497*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2498*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2499*35238bceSAndroid Build Coastguard Worker        ""
2500*35238bceSAndroid Build Coastguard Worker    end
2501*35238bceSAndroid Build Coastguard Worker
2502*35238bceSAndroid Build Coastguard Worker    case copy_global_in_on_call
2503*35238bceSAndroid Build Coastguard Worker        version 300 es
2504*35238bceSAndroid Build Coastguard Worker        desc "Check that global 'in' arguments are copied on call and don't alias."
2505*35238bceSAndroid Build Coastguard Worker        values
2506*35238bceSAndroid Build Coastguard Worker        {
2507*35238bceSAndroid Build Coastguard Worker            input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2508*35238bceSAndroid Build Coastguard Worker            output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2509*35238bceSAndroid Build Coastguard Worker        }
2510*35238bceSAndroid Build Coastguard Worker
2511*35238bceSAndroid Build Coastguard Worker        both ""
2512*35238bceSAndroid Build Coastguard Worker            #version 300 es
2513*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2514*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2515*35238bceSAndroid Build Coastguard Worker
2516*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]);
2517*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val);
2518*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]);
2519*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref);
2520*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]);
2521*35238bceSAndroid Build Coastguard Worker
2522*35238bceSAndroid Build Coastguard Worker            float func (in float a[4], in float b[4])
2523*35238bceSAndroid Build Coastguard Worker            {
2524*35238bceSAndroid Build Coastguard Worker                a[0] = 2.123;
2525*35238bceSAndroid Build Coastguard Worker                a[2] = -4.123;
2526*35238bceSAndroid Build Coastguard Worker                return isEqual(a, b) ? 1.0 : -1.0;
2527*35238bceSAndroid Build Coastguard Worker            }
2528*35238bceSAndroid Build Coastguard Worker
2529*35238bceSAndroid Build Coastguard Worker            float arr[4];
2530*35238bceSAndroid Build Coastguard Worker
2531*35238bceSAndroid Build Coastguard Worker            void main()
2532*35238bceSAndroid Build Coastguard Worker            {
2533*35238bceSAndroid Build Coastguard Worker                set(arr, in0);
2534*35238bceSAndroid Build Coastguard Worker                out0 = in0 * func(arr, arr);
2535*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2536*35238bceSAndroid Build Coastguard Worker            }
2537*35238bceSAndroid Build Coastguard Worker
2538*35238bceSAndroid Build Coastguard Worker            float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2539*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2540*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2541*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]) { set(arr, -get(arr)); }
2542*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2543*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2544*35238bceSAndroid Build Coastguard Worker        ""
2545*35238bceSAndroid Build Coastguard Worker    end
2546*35238bceSAndroid Build Coastguard Worker
2547*35238bceSAndroid Build Coastguard Worker    case copy_local_inout_on_call
2548*35238bceSAndroid Build Coastguard Worker        version 300 es
2549*35238bceSAndroid Build Coastguard Worker        desc "Check that local 'in' arguments are copied on call and don't alias."
2550*35238bceSAndroid Build Coastguard Worker        values
2551*35238bceSAndroid Build Coastguard Worker        {
2552*35238bceSAndroid Build Coastguard Worker            input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2553*35238bceSAndroid Build Coastguard Worker            output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2554*35238bceSAndroid Build Coastguard Worker        }
2555*35238bceSAndroid Build Coastguard Worker
2556*35238bceSAndroid Build Coastguard Worker        both ""
2557*35238bceSAndroid Build Coastguard Worker            #version 300 es
2558*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2559*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2560*35238bceSAndroid Build Coastguard Worker
2561*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]);
2562*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val);
2563*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]);
2564*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref);
2565*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]);
2566*35238bceSAndroid Build Coastguard Worker
2567*35238bceSAndroid Build Coastguard Worker            float func (inout float a[4], inout float b[4])
2568*35238bceSAndroid Build Coastguard Worker            {
2569*35238bceSAndroid Build Coastguard Worker                negate(a);
2570*35238bceSAndroid Build Coastguard Worker                return isEqual(a, b) ? 1.0 : -1.0;
2571*35238bceSAndroid Build Coastguard Worker            }
2572*35238bceSAndroid Build Coastguard Worker
2573*35238bceSAndroid Build Coastguard Worker            void main()
2574*35238bceSAndroid Build Coastguard Worker            {
2575*35238bceSAndroid Build Coastguard Worker                float arr[4];
2576*35238bceSAndroid Build Coastguard Worker                set(arr, in0);
2577*35238bceSAndroid Build Coastguard Worker                float m = func(arr, arr); // returns -1.0
2578*35238bceSAndroid Build Coastguard Worker                float n = float(test(arr, in0) || test(arr, -in0));
2579*35238bceSAndroid Build Coastguard Worker                out0 = in0 * m * n;
2580*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2581*35238bceSAndroid Build Coastguard Worker            }
2582*35238bceSAndroid Build Coastguard Worker
2583*35238bceSAndroid Build Coastguard Worker            float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2584*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2585*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2586*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]) { set(arr, -get(arr)); }
2587*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2588*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2589*35238bceSAndroid Build Coastguard Worker        ""
2590*35238bceSAndroid Build Coastguard Worker    end
2591*35238bceSAndroid Build Coastguard Worker
2592*35238bceSAndroid Build Coastguard Worker    case copy_global_inout_on_call
2593*35238bceSAndroid Build Coastguard Worker        version 300 es
2594*35238bceSAndroid Build Coastguard Worker        desc "Check that global 'in' arguments are copied on call and don't alias."
2595*35238bceSAndroid Build Coastguard Worker        values
2596*35238bceSAndroid Build Coastguard Worker        {
2597*35238bceSAndroid Build Coastguard Worker            input vec4 in0 = [ vec4(0.0, 1.0, 2.0, -4.0) | vec4(-7.5, 12.125, -0.25, 16.0) ];
2598*35238bceSAndroid Build Coastguard Worker            output vec4 out0 = [ vec4(0.0, -1.0, -2.0, 4.0) | vec4(7.5, -12.125, 0.25, -16.0) ];
2599*35238bceSAndroid Build Coastguard Worker        }
2600*35238bceSAndroid Build Coastguard Worker
2601*35238bceSAndroid Build Coastguard Worker        both ""
2602*35238bceSAndroid Build Coastguard Worker            #version 300 es
2603*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2604*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2605*35238bceSAndroid Build Coastguard Worker
2606*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]);
2607*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val);
2608*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]);
2609*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref);
2610*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]);
2611*35238bceSAndroid Build Coastguard Worker
2612*35238bceSAndroid Build Coastguard Worker            float func (in float a[4], in float b[4])
2613*35238bceSAndroid Build Coastguard Worker            {
2614*35238bceSAndroid Build Coastguard Worker                negate(a);
2615*35238bceSAndroid Build Coastguard Worker                return isEqual(a, b) ? 1.0 : -1.0;
2616*35238bceSAndroid Build Coastguard Worker            }
2617*35238bceSAndroid Build Coastguard Worker
2618*35238bceSAndroid Build Coastguard Worker            float arr[4];
2619*35238bceSAndroid Build Coastguard Worker
2620*35238bceSAndroid Build Coastguard Worker            void main()
2621*35238bceSAndroid Build Coastguard Worker            {
2622*35238bceSAndroid Build Coastguard Worker                set(arr, in0);
2623*35238bceSAndroid Build Coastguard Worker                float m = func(arr, arr); // returns -1.0
2624*35238bceSAndroid Build Coastguard Worker                float n = float(test(arr, in0) || test(arr, -in0));
2625*35238bceSAndroid Build Coastguard Worker                out0 = in0 * m * n;
2626*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2627*35238bceSAndroid Build Coastguard Worker            }
2628*35238bceSAndroid Build Coastguard Worker
2629*35238bceSAndroid Build Coastguard Worker            float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2630*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2631*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2632*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]) { set(arr, -get(arr)); }
2633*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2634*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2635*35238bceSAndroid Build Coastguard Worker        ""
2636*35238bceSAndroid Build Coastguard Worker    end
2637*35238bceSAndroid Build Coastguard Worker
2638*35238bceSAndroid Build Coastguard Worker#            vec4 get (in float arr[4]);
2639*35238bceSAndroid Build Coastguard Worker#            void set (out float arr[4], vec4 val);
2640*35238bceSAndroid Build Coastguard Worker#            void negate (inout float arr[4]);
2641*35238bceSAndroid Build Coastguard Worker#            bool test (in float arr[4], vec4 ref);
2642*35238bceSAndroid Build Coastguard Worker#            bool isEqual (in float a[4], in float b[4]);
2643*35238bceSAndroid Build Coastguard Worker
2644*35238bceSAndroid Build Coastguard Worker#            float absDiff (vec4 a, vec4 b) { vec4 d = abs(a - b); return max(max(d.x, d.y), max(d.z, d.w)); }
2645*35238bceSAndroid Build Coastguard Worker#            vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2646*35238bceSAndroid Build Coastguard Worker#            void set (out float arr[4], vec4 val) { arr[0] = val.x; arr[1] = val.y; arr[2] = val.z; arr[3] = val.w; }
2647*35238bceSAndroid Build Coastguard Worker#            void negate (inout float arr[4]) { set(arr, -get(arr)); }
2648*35238bceSAndroid Build Coastguard Worker#            bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2649*35238bceSAndroid Build Coastguard Worker#            bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2650*35238bceSAndroid Build Coastguard Worker
2651*35238bceSAndroid Build Coastguard Workerend # array_arguments
2652*35238bceSAndroid Build Coastguard Worker
2653*35238bceSAndroid Build Coastguard Worker#group qualifiers "Function Parameter Qualifiers"
2654*35238bceSAndroid Build Coastguard Worker#
2655*35238bceSAndroid Build Coastguard Worker#end # qualifiers
2656*35238bceSAndroid Build Coastguard Worker
2657*35238bceSAndroid Build Coastguard Workergroup control_flow "Control Flow In Functions"
2658*35238bceSAndroid Build Coastguard Worker
2659*35238bceSAndroid Build Coastguard Worker    case simple_return
2660*35238bceSAndroid Build Coastguard Worker        version 300 es
2661*35238bceSAndroid Build Coastguard Worker        values
2662*35238bceSAndroid Build Coastguard Worker        {
2663*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2664*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2665*35238bceSAndroid Build Coastguard Worker        }
2666*35238bceSAndroid Build Coastguard Worker
2667*35238bceSAndroid Build Coastguard Worker        both ""
2668*35238bceSAndroid Build Coastguard Worker            #version 300 es
2669*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2670*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2671*35238bceSAndroid Build Coastguard Worker
2672*35238bceSAndroid Build Coastguard Worker            float func (float a)
2673*35238bceSAndroid Build Coastguard Worker            {
2674*35238bceSAndroid Build Coastguard Worker                return -a;
2675*35238bceSAndroid Build Coastguard Worker                a = a * -1.0;
2676*35238bceSAndroid Build Coastguard Worker                return 1.0;
2677*35238bceSAndroid Build Coastguard Worker            }
2678*35238bceSAndroid Build Coastguard Worker
2679*35238bceSAndroid Build Coastguard Worker            void main()
2680*35238bceSAndroid Build Coastguard Worker            {
2681*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2682*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2683*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2684*35238bceSAndroid Build Coastguard Worker            }
2685*35238bceSAndroid Build Coastguard Worker        ""
2686*35238bceSAndroid Build Coastguard Worker    end
2687*35238bceSAndroid Build Coastguard Worker
2688*35238bceSAndroid Build Coastguard Worker    case return_in_if
2689*35238bceSAndroid Build Coastguard Worker        version 300 es
2690*35238bceSAndroid Build Coastguard Worker        values
2691*35238bceSAndroid Build Coastguard Worker        {
2692*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2693*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2694*35238bceSAndroid Build Coastguard Worker        }
2695*35238bceSAndroid Build Coastguard Worker
2696*35238bceSAndroid Build Coastguard Worker        both ""
2697*35238bceSAndroid Build Coastguard Worker            #version 300 es
2698*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2699*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2700*35238bceSAndroid Build Coastguard Worker
2701*35238bceSAndroid Build Coastguard Worker            float func (float a)
2702*35238bceSAndroid Build Coastguard Worker            {
2703*35238bceSAndroid Build Coastguard Worker                if (a != 0.0)
2704*35238bceSAndroid Build Coastguard Worker                    return -a;
2705*35238bceSAndroid Build Coastguard Worker                return 1.0;
2706*35238bceSAndroid Build Coastguard Worker            }
2707*35238bceSAndroid Build Coastguard Worker
2708*35238bceSAndroid Build Coastguard Worker            void main()
2709*35238bceSAndroid Build Coastguard Worker            {
2710*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2711*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2712*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2713*35238bceSAndroid Build Coastguard Worker            }
2714*35238bceSAndroid Build Coastguard Worker        ""
2715*35238bceSAndroid Build Coastguard Worker    end
2716*35238bceSAndroid Build Coastguard Worker
2717*35238bceSAndroid Build Coastguard Worker    case return_in_else
2718*35238bceSAndroid Build Coastguard Worker        version 300 es
2719*35238bceSAndroid Build Coastguard Worker        values
2720*35238bceSAndroid Build Coastguard Worker        {
2721*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2722*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2723*35238bceSAndroid Build Coastguard Worker        }
2724*35238bceSAndroid Build Coastguard Worker
2725*35238bceSAndroid Build Coastguard Worker        both ""
2726*35238bceSAndroid Build Coastguard Worker            #version 300 es
2727*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2728*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2729*35238bceSAndroid Build Coastguard Worker
2730*35238bceSAndroid Build Coastguard Worker            float func (float a)
2731*35238bceSAndroid Build Coastguard Worker            {
2732*35238bceSAndroid Build Coastguard Worker                if (a == 0.0)
2733*35238bceSAndroid Build Coastguard Worker                    return 1.0;
2734*35238bceSAndroid Build Coastguard Worker                else
2735*35238bceSAndroid Build Coastguard Worker                    return -a;
2736*35238bceSAndroid Build Coastguard Worker                return 1.0;
2737*35238bceSAndroid Build Coastguard Worker            }
2738*35238bceSAndroid Build Coastguard Worker
2739*35238bceSAndroid Build Coastguard Worker            void main()
2740*35238bceSAndroid Build Coastguard Worker            {
2741*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2742*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2743*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2744*35238bceSAndroid Build Coastguard Worker            }
2745*35238bceSAndroid Build Coastguard Worker        ""
2746*35238bceSAndroid Build Coastguard Worker    end
2747*35238bceSAndroid Build Coastguard Worker
2748*35238bceSAndroid Build Coastguard Worker    case return_in_loop
2749*35238bceSAndroid Build Coastguard Worker        version 300 es
2750*35238bceSAndroid Build Coastguard Worker        values
2751*35238bceSAndroid Build Coastguard Worker        {
2752*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2753*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2754*35238bceSAndroid Build Coastguard Worker        }
2755*35238bceSAndroid Build Coastguard Worker
2756*35238bceSAndroid Build Coastguard Worker        both ""
2757*35238bceSAndroid Build Coastguard Worker            #version 300 es
2758*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2759*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2760*35238bceSAndroid Build Coastguard Worker
2761*35238bceSAndroid Build Coastguard Worker            float func (float a)
2762*35238bceSAndroid Build Coastguard Worker            {
2763*35238bceSAndroid Build Coastguard Worker                while (a < 100.0)
2764*35238bceSAndroid Build Coastguard Worker                    return -a;
2765*35238bceSAndroid Build Coastguard Worker                return 1.0;
2766*35238bceSAndroid Build Coastguard Worker            }
2767*35238bceSAndroid Build Coastguard Worker
2768*35238bceSAndroid Build Coastguard Worker            void main()
2769*35238bceSAndroid Build Coastguard Worker            {
2770*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2771*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2772*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2773*35238bceSAndroid Build Coastguard Worker            }
2774*35238bceSAndroid Build Coastguard Worker        ""
2775*35238bceSAndroid Build Coastguard Worker    end
2776*35238bceSAndroid Build Coastguard Worker
2777*35238bceSAndroid Build Coastguard Worker    case return_in_loop_if
2778*35238bceSAndroid Build Coastguard Worker        version 300 es
2779*35238bceSAndroid Build Coastguard Worker        values
2780*35238bceSAndroid Build Coastguard Worker        {
2781*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2782*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2783*35238bceSAndroid Build Coastguard Worker        }
2784*35238bceSAndroid Build Coastguard Worker
2785*35238bceSAndroid Build Coastguard Worker        both ""
2786*35238bceSAndroid Build Coastguard Worker            #version 300 es
2787*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2788*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2789*35238bceSAndroid Build Coastguard Worker
2790*35238bceSAndroid Build Coastguard Worker            float func (float a)
2791*35238bceSAndroid Build Coastguard Worker            {
2792*35238bceSAndroid Build Coastguard Worker                while (a < 100.0)
2793*35238bceSAndroid Build Coastguard Worker                {
2794*35238bceSAndroid Build Coastguard Worker                    a = -a;
2795*35238bceSAndroid Build Coastguard Worker                    if (a != 0.0)
2796*35238bceSAndroid Build Coastguard Worker                        return a;
2797*35238bceSAndroid Build Coastguard Worker                    else
2798*35238bceSAndroid Build Coastguard Worker                        return -1.0;
2799*35238bceSAndroid Build Coastguard Worker                }
2800*35238bceSAndroid Build Coastguard Worker                return 1.0;
2801*35238bceSAndroid Build Coastguard Worker            }
2802*35238bceSAndroid Build Coastguard Worker
2803*35238bceSAndroid Build Coastguard Worker            void main()
2804*35238bceSAndroid Build Coastguard Worker            {
2805*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2806*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2807*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2808*35238bceSAndroid Build Coastguard Worker            }
2809*35238bceSAndroid Build Coastguard Worker        ""
2810*35238bceSAndroid Build Coastguard Worker    end
2811*35238bceSAndroid Build Coastguard Worker
2812*35238bceSAndroid Build Coastguard Worker    case return_after_loop
2813*35238bceSAndroid Build Coastguard Worker        version 300 es
2814*35238bceSAndroid Build Coastguard Worker        values
2815*35238bceSAndroid Build Coastguard Worker        {
2816*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2817*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2818*35238bceSAndroid Build Coastguard Worker        }
2819*35238bceSAndroid Build Coastguard Worker
2820*35238bceSAndroid Build Coastguard Worker        both ""
2821*35238bceSAndroid Build Coastguard Worker            #version 300 es
2822*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2823*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2824*35238bceSAndroid Build Coastguard Worker
2825*35238bceSAndroid Build Coastguard Worker            float func (float a)
2826*35238bceSAndroid Build Coastguard Worker            {
2827*35238bceSAndroid Build Coastguard Worker                for (int i = 0; i < 5; i++)
2828*35238bceSAndroid Build Coastguard Worker                    a = -a;
2829*35238bceSAndroid Build Coastguard Worker                return a;
2830*35238bceSAndroid Build Coastguard Worker            }
2831*35238bceSAndroid Build Coastguard Worker
2832*35238bceSAndroid Build Coastguard Worker            void main()
2833*35238bceSAndroid Build Coastguard Worker            {
2834*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2835*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2836*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2837*35238bceSAndroid Build Coastguard Worker            }
2838*35238bceSAndroid Build Coastguard Worker        ""
2839*35238bceSAndroid Build Coastguard Worker    end
2840*35238bceSAndroid Build Coastguard Worker
2841*35238bceSAndroid Build Coastguard Worker    case return_after_break
2842*35238bceSAndroid Build Coastguard Worker        version 300 es
2843*35238bceSAndroid Build Coastguard Worker        values
2844*35238bceSAndroid Build Coastguard Worker        {
2845*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2846*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2847*35238bceSAndroid Build Coastguard Worker        }
2848*35238bceSAndroid Build Coastguard Worker
2849*35238bceSAndroid Build Coastguard Worker        both ""
2850*35238bceSAndroid Build Coastguard Worker            #version 300 es
2851*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2852*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2853*35238bceSAndroid Build Coastguard Worker
2854*35238bceSAndroid Build Coastguard Worker            float func (float a)
2855*35238bceSAndroid Build Coastguard Worker            {
2856*35238bceSAndroid Build Coastguard Worker                for (int i = 0; i < 6; i++)
2857*35238bceSAndroid Build Coastguard Worker                {
2858*35238bceSAndroid Build Coastguard Worker                    a = -a;
2859*35238bceSAndroid Build Coastguard Worker                    if (i == 4)
2860*35238bceSAndroid Build Coastguard Worker                        break;
2861*35238bceSAndroid Build Coastguard Worker                }
2862*35238bceSAndroid Build Coastguard Worker                return a;
2863*35238bceSAndroid Build Coastguard Worker            }
2864*35238bceSAndroid Build Coastguard Worker
2865*35238bceSAndroid Build Coastguard Worker            void main()
2866*35238bceSAndroid Build Coastguard Worker            {
2867*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2868*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2869*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2870*35238bceSAndroid Build Coastguard Worker            }
2871*35238bceSAndroid Build Coastguard Worker        ""
2872*35238bceSAndroid Build Coastguard Worker    end
2873*35238bceSAndroid Build Coastguard Worker
2874*35238bceSAndroid Build Coastguard Worker    case return_after_continue
2875*35238bceSAndroid Build Coastguard Worker        version 300 es
2876*35238bceSAndroid Build Coastguard Worker        values
2877*35238bceSAndroid Build Coastguard Worker        {
2878*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2879*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2880*35238bceSAndroid Build Coastguard Worker        }
2881*35238bceSAndroid Build Coastguard Worker
2882*35238bceSAndroid Build Coastguard Worker        both ""
2883*35238bceSAndroid Build Coastguard Worker            #version 300 es
2884*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2885*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2886*35238bceSAndroid Build Coastguard Worker
2887*35238bceSAndroid Build Coastguard Worker            float func (float a)
2888*35238bceSAndroid Build Coastguard Worker            {
2889*35238bceSAndroid Build Coastguard Worker                for (int i = 0; i < 6; i++)
2890*35238bceSAndroid Build Coastguard Worker                {
2891*35238bceSAndroid Build Coastguard Worker                    if (i == 4)
2892*35238bceSAndroid Build Coastguard Worker                        continue;
2893*35238bceSAndroid Build Coastguard Worker                    a = -a;
2894*35238bceSAndroid Build Coastguard Worker                }
2895*35238bceSAndroid Build Coastguard Worker                return a;
2896*35238bceSAndroid Build Coastguard Worker            }
2897*35238bceSAndroid Build Coastguard Worker
2898*35238bceSAndroid Build Coastguard Worker            void main()
2899*35238bceSAndroid Build Coastguard Worker            {
2900*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2901*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2902*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2903*35238bceSAndroid Build Coastguard Worker            }
2904*35238bceSAndroid Build Coastguard Worker        ""
2905*35238bceSAndroid Build Coastguard Worker    end
2906*35238bceSAndroid Build Coastguard Worker
2907*35238bceSAndroid Build Coastguard Worker    case return_in_nested_loop
2908*35238bceSAndroid Build Coastguard Worker        version 300 es
2909*35238bceSAndroid Build Coastguard Worker        values
2910*35238bceSAndroid Build Coastguard Worker        {
2911*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2912*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2913*35238bceSAndroid Build Coastguard Worker        }
2914*35238bceSAndroid Build Coastguard Worker
2915*35238bceSAndroid Build Coastguard Worker        both ""
2916*35238bceSAndroid Build Coastguard Worker            #version 300 es
2917*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2918*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2919*35238bceSAndroid Build Coastguard Worker
2920*35238bceSAndroid Build Coastguard Worker            float func (float a)
2921*35238bceSAndroid Build Coastguard Worker            {
2922*35238bceSAndroid Build Coastguard Worker                for (int i = 0; i < 6; i++)
2923*35238bceSAndroid Build Coastguard Worker                {
2924*35238bceSAndroid Build Coastguard Worker                    a = -a;
2925*35238bceSAndroid Build Coastguard Worker                    for (int j = 0; j < 4; j++)
2926*35238bceSAndroid Build Coastguard Worker                    {
2927*35238bceSAndroid Build Coastguard Worker                        a = -a;
2928*35238bceSAndroid Build Coastguard Worker                        if (i == 1)
2929*35238bceSAndroid Build Coastguard Worker                            return a;
2930*35238bceSAndroid Build Coastguard Worker                    }
2931*35238bceSAndroid Build Coastguard Worker                    if (i == 4)
2932*35238bceSAndroid Build Coastguard Worker                        return 1.0;
2933*35238bceSAndroid Build Coastguard Worker                }
2934*35238bceSAndroid Build Coastguard Worker                return 1.0;
2935*35238bceSAndroid Build Coastguard Worker            }
2936*35238bceSAndroid Build Coastguard Worker
2937*35238bceSAndroid Build Coastguard Worker            void main()
2938*35238bceSAndroid Build Coastguard Worker            {
2939*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2940*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2941*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2942*35238bceSAndroid Build Coastguard Worker            }
2943*35238bceSAndroid Build Coastguard Worker        ""
2944*35238bceSAndroid Build Coastguard Worker    end
2945*35238bceSAndroid Build Coastguard Worker
2946*35238bceSAndroid Build Coastguard Worker    case return_after_loop_sequence
2947*35238bceSAndroid Build Coastguard Worker        version 300 es
2948*35238bceSAndroid Build Coastguard Worker        values
2949*35238bceSAndroid Build Coastguard Worker        {
2950*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2951*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2952*35238bceSAndroid Build Coastguard Worker        }
2953*35238bceSAndroid Build Coastguard Worker
2954*35238bceSAndroid Build Coastguard Worker        both ""
2955*35238bceSAndroid Build Coastguard Worker            #version 300 es
2956*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2957*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2958*35238bceSAndroid Build Coastguard Worker
2959*35238bceSAndroid Build Coastguard Worker            float func (float a)
2960*35238bceSAndroid Build Coastguard Worker            {
2961*35238bceSAndroid Build Coastguard Worker                int i;
2962*35238bceSAndroid Build Coastguard Worker                for (i = 0; i < 6; i++) // negate a
2963*35238bceSAndroid Build Coastguard Worker                {
2964*35238bceSAndroid Build Coastguard Worker                    a = -a;
2965*35238bceSAndroid Build Coastguard Worker                    if (i == 4)
2966*35238bceSAndroid Build Coastguard Worker                        a = -a;
2967*35238bceSAndroid Build Coastguard Worker                }
2968*35238bceSAndroid Build Coastguard Worker
2969*35238bceSAndroid Build Coastguard Worker                for (; i < 10; i++) // keep a
2970*35238bceSAndroid Build Coastguard Worker                {
2971*35238bceSAndroid Build Coastguard Worker                    if (i == 8)
2972*35238bceSAndroid Build Coastguard Worker                        continue;
2973*35238bceSAndroid Build Coastguard Worker                    else if (i == 9)
2974*35238bceSAndroid Build Coastguard Worker                        break;
2975*35238bceSAndroid Build Coastguard Worker                    a = -a;
2976*35238bceSAndroid Build Coastguard Worker                }
2977*35238bceSAndroid Build Coastguard Worker
2978*35238bceSAndroid Build Coastguard Worker                return a;
2979*35238bceSAndroid Build Coastguard Worker            }
2980*35238bceSAndroid Build Coastguard Worker
2981*35238bceSAndroid Build Coastguard Worker            void main()
2982*35238bceSAndroid Build Coastguard Worker            {
2983*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2984*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2985*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2986*35238bceSAndroid Build Coastguard Worker            }
2987*35238bceSAndroid Build Coastguard Worker        ""
2988*35238bceSAndroid Build Coastguard Worker    end
2989*35238bceSAndroid Build Coastguard Worker
2990*35238bceSAndroid Build Coastguard Worker    case mixed_return_break_continue
2991*35238bceSAndroid Build Coastguard Worker        version 300 es
2992*35238bceSAndroid Build Coastguard Worker        values
2993*35238bceSAndroid Build Coastguard Worker        {
2994*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2995*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2996*35238bceSAndroid Build Coastguard Worker        }
2997*35238bceSAndroid Build Coastguard Worker
2998*35238bceSAndroid Build Coastguard Worker        both ""
2999*35238bceSAndroid Build Coastguard Worker            #version 300 es
3000*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3001*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3002*35238bceSAndroid Build Coastguard Worker
3003*35238bceSAndroid Build Coastguard Worker            float func (float a)
3004*35238bceSAndroid Build Coastguard Worker            {
3005*35238bceSAndroid Build Coastguard Worker                int i;
3006*35238bceSAndroid Build Coastguard Worker                for (i = 0; i < 6; i++)
3007*35238bceSAndroid Build Coastguard Worker                {
3008*35238bceSAndroid Build Coastguard Worker                    if (i == 0)
3009*35238bceSAndroid Build Coastguard Worker                        continue;
3010*35238bceSAndroid Build Coastguard Worker                    else if (i == 1)
3011*35238bceSAndroid Build Coastguard Worker                    {
3012*35238bceSAndroid Build Coastguard Worker                    }
3013*35238bceSAndroid Build Coastguard Worker                    else if (i == 3)
3014*35238bceSAndroid Build Coastguard Worker                        break;
3015*35238bceSAndroid Build Coastguard Worker                    else
3016*35238bceSAndroid Build Coastguard Worker                        return a;
3017*35238bceSAndroid Build Coastguard Worker                    a = -a;
3018*35238bceSAndroid Build Coastguard Worker                }
3019*35238bceSAndroid Build Coastguard Worker
3020*35238bceSAndroid Build Coastguard Worker                return 1.0;
3021*35238bceSAndroid Build Coastguard Worker            }
3022*35238bceSAndroid Build Coastguard Worker
3023*35238bceSAndroid Build Coastguard Worker            void main()
3024*35238bceSAndroid Build Coastguard Worker            {
3025*35238bceSAndroid Build Coastguard Worker                ${SETUP}
3026*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
3027*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
3028*35238bceSAndroid Build Coastguard Worker            }
3029*35238bceSAndroid Build Coastguard Worker        ""
3030*35238bceSAndroid Build Coastguard Worker    end
3031*35238bceSAndroid Build Coastguard Worker
3032*35238bceSAndroid Build Coastguard Workerend # control_flow
3033*35238bceSAndroid Build Coastguard Worker
3034*35238bceSAndroid Build Coastguard Workergroup misc "Miscellaneous"
3035*35238bceSAndroid Build Coastguard Worker
3036*35238bceSAndroid Build Coastguard Worker    case multi_arg_float
3037*35238bceSAndroid Build Coastguard Worker        version 300 es
3038*35238bceSAndroid Build Coastguard Worker        values
3039*35238bceSAndroid Build Coastguard Worker        {
3040*35238bceSAndroid Build Coastguard Worker            input vec4 in0 = [ vec4(0.0, 1.0, -2.0, 0.5) | vec4(2.0, 2.5, 4.0, -7.0) ];
3041*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ]; # -sum(in0)
3042*35238bceSAndroid Build Coastguard Worker        }
3043*35238bceSAndroid Build Coastguard Worker
3044*35238bceSAndroid Build Coastguard Worker        both ""
3045*35238bceSAndroid Build Coastguard Worker            #version 300 es
3046*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3047*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3048*35238bceSAndroid Build Coastguard Worker
3049*35238bceSAndroid Build Coastguard Worker            float sum(vec4 v) { return (v.x + v.y + v.z + v.w); }
3050*35238bceSAndroid Build Coastguard Worker
3051*35238bceSAndroid Build Coastguard Worker            float func (float a, vec3 b, vec2 c, vec2 d, vec4 e)
3052*35238bceSAndroid Build Coastguard Worker            {
3053*35238bceSAndroid Build Coastguard Worker                return -sum(vec4(a, b) + vec4(c, d)) + sum(e);
3054*35238bceSAndroid Build Coastguard Worker            }
3055*35238bceSAndroid Build Coastguard Worker
3056*35238bceSAndroid Build Coastguard Worker            void main()
3057*35238bceSAndroid Build Coastguard Worker            {
3058*35238bceSAndroid Build Coastguard Worker                ${SETUP}
3059*35238bceSAndroid Build Coastguard Worker                out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0);
3060*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
3061*35238bceSAndroid Build Coastguard Worker            }
3062*35238bceSAndroid Build Coastguard Worker        ""
3063*35238bceSAndroid Build Coastguard Worker    end
3064*35238bceSAndroid Build Coastguard Worker
3065*35238bceSAndroid Build Coastguard Worker    case multi_arg_int
3066*35238bceSAndroid Build Coastguard Worker        version 300 es
3067*35238bceSAndroid Build Coastguard Worker        values
3068*35238bceSAndroid Build Coastguard Worker        {
3069*35238bceSAndroid Build Coastguard Worker            input ivec4 in0 = [ ivec4(-1, 0, 2, 2) | ivec4(1, 4, -8, 2) ];
3070*35238bceSAndroid Build Coastguard Worker            output int out0 = [ -3 | 1 ];
3071*35238bceSAndroid Build Coastguard Worker        }
3072*35238bceSAndroid Build Coastguard Worker
3073*35238bceSAndroid Build Coastguard Worker        both ""
3074*35238bceSAndroid Build Coastguard Worker            #version 300 es
3075*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3076*35238bceSAndroid Build Coastguard Worker            precision mediump int;
3077*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3078*35238bceSAndroid Build Coastguard Worker
3079*35238bceSAndroid Build Coastguard Worker            int sum(ivec4 v) { return (v.x + v.y + v.z + v.w); }
3080*35238bceSAndroid Build Coastguard Worker
3081*35238bceSAndroid Build Coastguard Worker            int func (int a, ivec3 b, ivec2 c, ivec2 d, ivec4 e)
3082*35238bceSAndroid Build Coastguard Worker            {
3083*35238bceSAndroid Build Coastguard Worker                return -sum(ivec4(a, b) + ivec4(c, d)) + sum(e);
3084*35238bceSAndroid Build Coastguard Worker            }
3085*35238bceSAndroid Build Coastguard Worker
3086*35238bceSAndroid Build Coastguard Worker            void main()
3087*35238bceSAndroid Build Coastguard Worker            {
3088*35238bceSAndroid Build Coastguard Worker                ${SETUP}
3089*35238bceSAndroid Build Coastguard Worker                out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0);
3090*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
3091*35238bceSAndroid Build Coastguard Worker            }
3092*35238bceSAndroid Build Coastguard Worker        ""
3093*35238bceSAndroid Build Coastguard Worker    end
3094*35238bceSAndroid Build Coastguard Worker
3095*35238bceSAndroid Build Coastguard Worker    case argument_eval_order_1
3096*35238bceSAndroid Build Coastguard Worker        version 300 es
3097*35238bceSAndroid Build Coastguard Worker        values
3098*35238bceSAndroid Build Coastguard Worker        {
3099*35238bceSAndroid Build Coastguard Worker            input int in0 = [  0 | 1 | 3 | 5 ];
3100*35238bceSAndroid Build Coastguard Worker            output int out0 = [ -1 | 5 | 11 | 17 ];
3101*35238bceSAndroid Build Coastguard Worker        }
3102*35238bceSAndroid Build Coastguard Worker
3103*35238bceSAndroid Build Coastguard Worker        both ""
3104*35238bceSAndroid Build Coastguard Worker            #version 300 es
3105*35238bceSAndroid Build Coastguard Worker            precision highp float;
3106*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3107*35238bceSAndroid Build Coastguard Worker
3108*35238bceSAndroid Build Coastguard Worker            int func (float a, int b, bool c, int d)
3109*35238bceSAndroid Build Coastguard Worker            {
3110*35238bceSAndroid Build Coastguard Worker                if (c)
3111*35238bceSAndroid Build Coastguard Worker                    return b + int(a) + d;
3112*35238bceSAndroid Build Coastguard Worker                else
3113*35238bceSAndroid Build Coastguard Worker                    return -1;
3114*35238bceSAndroid Build Coastguard Worker            }
3115*35238bceSAndroid Build Coastguard Worker
3116*35238bceSAndroid Build Coastguard Worker            void main ()
3117*35238bceSAndroid Build Coastguard Worker            {
3118*35238bceSAndroid Build Coastguard Worker                ${SETUP}
3119*35238bceSAndroid Build Coastguard Worker                float v0 = float(in0);
3120*35238bceSAndroid Build Coastguard Worker                int v1 = in0;
3121*35238bceSAndroid Build Coastguard Worker                out0 = func((v0 += 1.0), v1++, (v0 > 1.5), v1);
3122*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
3123*35238bceSAndroid Build Coastguard Worker            }
3124*35238bceSAndroid Build Coastguard Worker        ""
3125*35238bceSAndroid Build Coastguard Worker    end
3126*35238bceSAndroid Build Coastguard Worker
3127*35238bceSAndroid Build Coastguard Worker    case argument_eval_order_2
3128*35238bceSAndroid Build Coastguard Worker        version 300 es
3129*35238bceSAndroid Build Coastguard Worker        values
3130*35238bceSAndroid Build Coastguard Worker        {
3131*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | -1 | 3 | 5 ];
3132*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 3 | -1 | 9 | 13 ];
3133*35238bceSAndroid Build Coastguard Worker        }
3134*35238bceSAndroid Build Coastguard Worker
3135*35238bceSAndroid Build Coastguard Worker        both ""
3136*35238bceSAndroid Build Coastguard Worker            #version 300 es
3137*35238bceSAndroid Build Coastguard Worker            precision highp float;
3138*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3139*35238bceSAndroid Build Coastguard Worker
3140*35238bceSAndroid Build Coastguard Worker            int g;
3141*35238bceSAndroid Build Coastguard Worker
3142*35238bceSAndroid Build Coastguard Worker            int modG (int v)
3143*35238bceSAndroid Build Coastguard Worker            {
3144*35238bceSAndroid Build Coastguard Worker                g += v;
3145*35238bceSAndroid Build Coastguard Worker                return v;
3146*35238bceSAndroid Build Coastguard Worker            }
3147*35238bceSAndroid Build Coastguard Worker
3148*35238bceSAndroid Build Coastguard Worker            int func (float a, int b, bool c, int d)
3149*35238bceSAndroid Build Coastguard Worker            {
3150*35238bceSAndroid Build Coastguard Worker                if (c)
3151*35238bceSAndroid Build Coastguard Worker                    return b + int(a) + d;
3152*35238bceSAndroid Build Coastguard Worker                else
3153*35238bceSAndroid Build Coastguard Worker                    return -1;
3154*35238bceSAndroid Build Coastguard Worker            }
3155*35238bceSAndroid Build Coastguard Worker
3156*35238bceSAndroid Build Coastguard Worker            void main ()
3157*35238bceSAndroid Build Coastguard Worker            {
3158*35238bceSAndroid Build Coastguard Worker                ${SETUP}
3159*35238bceSAndroid Build Coastguard Worker                out0 = func(float(g = in0), modG(2), --g > 0, g);
3160*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
3161*35238bceSAndroid Build Coastguard Worker            }
3162*35238bceSAndroid Build Coastguard Worker        ""
3163*35238bceSAndroid Build Coastguard Worker    end
3164*35238bceSAndroid Build Coastguard Worker
3165*35238bceSAndroid Build Coastguard Workerend # misc
3166*35238bceSAndroid Build Coastguard Worker
3167*35238bceSAndroid Build Coastguard Workergroup invalid "Invalid Functions"
3168*35238bceSAndroid Build Coastguard Worker    case break_in_body
3169*35238bceSAndroid Build Coastguard Worker        version 300 es
3170*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3171*35238bceSAndroid Build Coastguard Worker        both ""
3172*35238bceSAndroid Build Coastguard Worker            #version 300 es
3173*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3174*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3175*35238bceSAndroid Build Coastguard Worker
3176*35238bceSAndroid Build Coastguard Worker            void func ()
3177*35238bceSAndroid Build Coastguard Worker            {
3178*35238bceSAndroid Build Coastguard Worker                break;
3179*35238bceSAndroid Build Coastguard Worker            }
3180*35238bceSAndroid Build Coastguard Worker
3181*35238bceSAndroid Build Coastguard Worker            void main ()
3182*35238bceSAndroid Build Coastguard Worker            {
3183*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3184*35238bceSAndroid Build Coastguard Worker            }
3185*35238bceSAndroid Build Coastguard Worker        ""
3186*35238bceSAndroid Build Coastguard Worker    end
3187*35238bceSAndroid Build Coastguard Worker
3188*35238bceSAndroid Build Coastguard Worker    case continue_in_body
3189*35238bceSAndroid Build Coastguard Worker        version 300 es
3190*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3191*35238bceSAndroid Build Coastguard Worker        both ""
3192*35238bceSAndroid Build Coastguard Worker            #version 300 es
3193*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3194*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3195*35238bceSAndroid Build Coastguard Worker
3196*35238bceSAndroid Build Coastguard Worker            void func ()
3197*35238bceSAndroid Build Coastguard Worker            {
3198*35238bceSAndroid Build Coastguard Worker                continue;
3199*35238bceSAndroid Build Coastguard Worker            }
3200*35238bceSAndroid Build Coastguard Worker
3201*35238bceSAndroid Build Coastguard Worker            void main ()
3202*35238bceSAndroid Build Coastguard Worker            {
3203*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3204*35238bceSAndroid Build Coastguard Worker            }
3205*35238bceSAndroid Build Coastguard Worker        ""
3206*35238bceSAndroid Build Coastguard Worker    end
3207*35238bceSAndroid Build Coastguard Worker
3208*35238bceSAndroid Build Coastguard Worker    case return_value_from_void_function
3209*35238bceSAndroid Build Coastguard Worker        version 300 es
3210*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3211*35238bceSAndroid Build Coastguard Worker        both ""
3212*35238bceSAndroid Build Coastguard Worker            #version 300 es
3213*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3214*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3215*35238bceSAndroid Build Coastguard Worker
3216*35238bceSAndroid Build Coastguard Worker            void func ()
3217*35238bceSAndroid Build Coastguard Worker            {
3218*35238bceSAndroid Build Coastguard Worker                return 1.0;
3219*35238bceSAndroid Build Coastguard Worker            }
3220*35238bceSAndroid Build Coastguard Worker
3221*35238bceSAndroid Build Coastguard Worker            void main ()
3222*35238bceSAndroid Build Coastguard Worker            {
3223*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3224*35238bceSAndroid Build Coastguard Worker            }
3225*35238bceSAndroid Build Coastguard Worker        ""
3226*35238bceSAndroid Build Coastguard Worker    end
3227*35238bceSAndroid Build Coastguard Worker
3228*35238bceSAndroid Build Coastguard Worker    case extra_arguments
3229*35238bceSAndroid Build Coastguard Worker        version 300 es
3230*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3231*35238bceSAndroid Build Coastguard Worker        both ""
3232*35238bceSAndroid Build Coastguard Worker            #version 300 es
3233*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3234*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3235*35238bceSAndroid Build Coastguard Worker
3236*35238bceSAndroid Build Coastguard Worker            void func (float f)
3237*35238bceSAndroid Build Coastguard Worker            {
3238*35238bceSAndroid Build Coastguard Worker            }
3239*35238bceSAndroid Build Coastguard Worker
3240*35238bceSAndroid Build Coastguard Worker            void main ()
3241*35238bceSAndroid Build Coastguard Worker            {
3242*35238bceSAndroid Build Coastguard Worker                func(1.0, 2.0);
3243*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3244*35238bceSAndroid Build Coastguard Worker            }
3245*35238bceSAndroid Build Coastguard Worker        ""
3246*35238bceSAndroid Build Coastguard Worker    end
3247*35238bceSAndroid Build Coastguard Worker
3248*35238bceSAndroid Build Coastguard Worker    case missing_arguments
3249*35238bceSAndroid Build Coastguard Worker        version 300 es
3250*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3251*35238bceSAndroid Build Coastguard Worker        both ""
3252*35238bceSAndroid Build Coastguard Worker            #version 300 es
3253*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3254*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3255*35238bceSAndroid Build Coastguard Worker
3256*35238bceSAndroid Build Coastguard Worker            void func (float f)
3257*35238bceSAndroid Build Coastguard Worker            {
3258*35238bceSAndroid Build Coastguard Worker            }
3259*35238bceSAndroid Build Coastguard Worker
3260*35238bceSAndroid Build Coastguard Worker            void main ()
3261*35238bceSAndroid Build Coastguard Worker            {
3262*35238bceSAndroid Build Coastguard Worker                func();
3263*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3264*35238bceSAndroid Build Coastguard Worker            }
3265*35238bceSAndroid Build Coastguard Worker        ""
3266*35238bceSAndroid Build Coastguard Worker    end
3267*35238bceSAndroid Build Coastguard Worker
3268*35238bceSAndroid Build Coastguard Worker    case missing_argument_type
3269*35238bceSAndroid Build Coastguard Worker        version 300 es
3270*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3271*35238bceSAndroid Build Coastguard Worker        both ""
3272*35238bceSAndroid Build Coastguard Worker            #version 300 es
3273*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3274*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3275*35238bceSAndroid Build Coastguard Worker
3276*35238bceSAndroid Build Coastguard Worker            void func (in f)
3277*35238bceSAndroid Build Coastguard Worker            {
3278*35238bceSAndroid Build Coastguard Worker            }
3279*35238bceSAndroid Build Coastguard Worker
3280*35238bceSAndroid Build Coastguard Worker            void main ()
3281*35238bceSAndroid Build Coastguard Worker            {
3282*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3283*35238bceSAndroid Build Coastguard Worker            }
3284*35238bceSAndroid Build Coastguard Worker        ""
3285*35238bceSAndroid Build Coastguard Worker    end
3286*35238bceSAndroid Build Coastguard Worker
3287*35238bceSAndroid Build Coastguard Worker    case argument_basetype_mismatch
3288*35238bceSAndroid Build Coastguard Worker        version 300 es
3289*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3290*35238bceSAndroid Build Coastguard Worker        both ""
3291*35238bceSAndroid Build Coastguard Worker            #version 300 es
3292*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3293*35238bceSAndroid Build Coastguard Worker            precision mediump int;
3294*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3295*35238bceSAndroid Build Coastguard Worker
3296*35238bceSAndroid Build Coastguard Worker            void func (float f)
3297*35238bceSAndroid Build Coastguard Worker            {
3298*35238bceSAndroid Build Coastguard Worker            }
3299*35238bceSAndroid Build Coastguard Worker
3300*35238bceSAndroid Build Coastguard Worker            void main ()
3301*35238bceSAndroid Build Coastguard Worker            {
3302*35238bceSAndroid Build Coastguard Worker                func(2);
3303*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3304*35238bceSAndroid Build Coastguard Worker            }
3305*35238bceSAndroid Build Coastguard Worker        ""
3306*35238bceSAndroid Build Coastguard Worker    end
3307*35238bceSAndroid Build Coastguard Worker
3308*35238bceSAndroid Build Coastguard Worker    case argument_scalar_vector_mismatch
3309*35238bceSAndroid Build Coastguard Worker        version 300 es
3310*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3311*35238bceSAndroid Build Coastguard Worker        both ""
3312*35238bceSAndroid Build Coastguard Worker            #version 300 es
3313*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3314*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3315*35238bceSAndroid Build Coastguard Worker
3316*35238bceSAndroid Build Coastguard Worker            void func (vec2 f)
3317*35238bceSAndroid Build Coastguard Worker            {
3318*35238bceSAndroid Build Coastguard Worker            }
3319*35238bceSAndroid Build Coastguard Worker
3320*35238bceSAndroid Build Coastguard Worker            void main ()
3321*35238bceSAndroid Build Coastguard Worker            {
3322*35238bceSAndroid Build Coastguard Worker                func(2.0);
3323*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3324*35238bceSAndroid Build Coastguard Worker            }
3325*35238bceSAndroid Build Coastguard Worker        ""
3326*35238bceSAndroid Build Coastguard Worker    end
3327*35238bceSAndroid Build Coastguard Worker
3328*35238bceSAndroid Build Coastguard Worker    case argument_vector_size_mismatch
3329*35238bceSAndroid Build Coastguard Worker        version 300 es
3330*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3331*35238bceSAndroid Build Coastguard Worker        both ""
3332*35238bceSAndroid Build Coastguard Worker            #version 300 es
3333*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3334*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3335*35238bceSAndroid Build Coastguard Worker
3336*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
3337*35238bceSAndroid Build Coastguard Worker            {
3338*35238bceSAndroid Build Coastguard Worker            }
3339*35238bceSAndroid Build Coastguard Worker
3340*35238bceSAndroid Build Coastguard Worker            void main ()
3341*35238bceSAndroid Build Coastguard Worker            {
3342*35238bceSAndroid Build Coastguard Worker                func(vec2(2.0));
3343*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3344*35238bceSAndroid Build Coastguard Worker            }
3345*35238bceSAndroid Build Coastguard Worker        ""
3346*35238bceSAndroid Build Coastguard Worker    end
3347*35238bceSAndroid Build Coastguard Worker
3348*35238bceSAndroid Build Coastguard Worker    case duplicate_function
3349*35238bceSAndroid Build Coastguard Worker        version 300 es
3350*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3351*35238bceSAndroid Build Coastguard Worker        both ""
3352*35238bceSAndroid Build Coastguard Worker            #version 300 es
3353*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3354*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3355*35238bceSAndroid Build Coastguard Worker
3356*35238bceSAndroid Build Coastguard Worker            void func (vec3 f);
3357*35238bceSAndroid Build Coastguard Worker
3358*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
3359*35238bceSAndroid Build Coastguard Worker            {
3360*35238bceSAndroid Build Coastguard Worker            }
3361*35238bceSAndroid Build Coastguard Worker
3362*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
3363*35238bceSAndroid Build Coastguard Worker            {
3364*35238bceSAndroid Build Coastguard Worker            }
3365*35238bceSAndroid Build Coastguard Worker
3366*35238bceSAndroid Build Coastguard Worker            void main ()
3367*35238bceSAndroid Build Coastguard Worker            {
3368*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3369*35238bceSAndroid Build Coastguard Worker            }
3370*35238bceSAndroid Build Coastguard Worker        ""
3371*35238bceSAndroid Build Coastguard Worker    end
3372*35238bceSAndroid Build Coastguard Worker
3373*35238bceSAndroid Build Coastguard Worker    case prototype_mismatch_return_type
3374*35238bceSAndroid Build Coastguard Worker        version 300 es
3375*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3376*35238bceSAndroid Build Coastguard Worker        both ""
3377*35238bceSAndroid Build Coastguard Worker            #version 300 es
3378*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3379*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3380*35238bceSAndroid Build Coastguard Worker
3381*35238bceSAndroid Build Coastguard Worker            void func (vec3 f);
3382*35238bceSAndroid Build Coastguard Worker
3383*35238bceSAndroid Build Coastguard Worker            void main ()
3384*35238bceSAndroid Build Coastguard Worker            {
3385*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3386*35238bceSAndroid Build Coastguard Worker            }
3387*35238bceSAndroid Build Coastguard Worker
3388*35238bceSAndroid Build Coastguard Worker            float func (vec3 f)
3389*35238bceSAndroid Build Coastguard Worker            {
3390*35238bceSAndroid Build Coastguard Worker                return f.x;
3391*35238bceSAndroid Build Coastguard Worker            }
3392*35238bceSAndroid Build Coastguard Worker        ""
3393*35238bceSAndroid Build Coastguard Worker    end
3394*35238bceSAndroid Build Coastguard Worker
3395*35238bceSAndroid Build Coastguard Worker    case prototype_unspecified_array_size
3396*35238bceSAndroid Build Coastguard Worker        version 300 es
3397*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3398*35238bceSAndroid Build Coastguard Worker        both ""
3399*35238bceSAndroid Build Coastguard Worker            #version 300 es
3400*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3401*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3402*35238bceSAndroid Build Coastguard Worker
3403*35238bceSAndroid Build Coastguard Worker            void func (vec3 f[]);
3404*35238bceSAndroid Build Coastguard Worker
3405*35238bceSAndroid Build Coastguard Worker            void main ()
3406*35238bceSAndroid Build Coastguard Worker            {
3407*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3408*35238bceSAndroid Build Coastguard Worker            }
3409*35238bceSAndroid Build Coastguard Worker        ""
3410*35238bceSAndroid Build Coastguard Worker    end
3411*35238bceSAndroid Build Coastguard Worker
3412*35238bceSAndroid Build Coastguard Worker    case call_mismatch_argument_array_size
3413*35238bceSAndroid Build Coastguard Worker        version 300 es
3414*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3415*35238bceSAndroid Build Coastguard Worker        both ""
3416*35238bceSAndroid Build Coastguard Worker            #version 300 es
3417*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3418*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3419*35238bceSAndroid Build Coastguard Worker
3420*35238bceSAndroid Build Coastguard Worker            void func (vec3 f[3]);
3421*35238bceSAndroid Build Coastguard Worker            void func (vec3 f[3])
3422*35238bceSAndroid Build Coastguard Worker            {
3423*35238bceSAndroid Build Coastguard Worker            }
3424*35238bceSAndroid Build Coastguard Worker
3425*35238bceSAndroid Build Coastguard Worker            void main ()
3426*35238bceSAndroid Build Coastguard Worker            {
3427*35238bceSAndroid Build Coastguard Worker                vec3 array[4];
3428*35238bceSAndroid Build Coastguard Worker                func(array);
3429*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3430*35238bceSAndroid Build Coastguard Worker            }
3431*35238bceSAndroid Build Coastguard Worker        ""
3432*35238bceSAndroid Build Coastguard Worker    end
3433*35238bceSAndroid Build Coastguard Worker
3434*35238bceSAndroid Build Coastguard Worker    case prototype_mismatch_argument_const
3435*35238bceSAndroid Build Coastguard Worker        version 300 es
3436*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3437*35238bceSAndroid Build Coastguard Worker        both ""
3438*35238bceSAndroid Build Coastguard Worker            #version 300 es
3439*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3440*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3441*35238bceSAndroid Build Coastguard Worker
3442*35238bceSAndroid Build Coastguard Worker            void func (vec3 f);
3443*35238bceSAndroid Build Coastguard Worker            void func (const vec3 f)
3444*35238bceSAndroid Build Coastguard Worker            {
3445*35238bceSAndroid Build Coastguard Worker            }
3446*35238bceSAndroid Build Coastguard Worker
3447*35238bceSAndroid Build Coastguard Worker            void main ()
3448*35238bceSAndroid Build Coastguard Worker            {
3449*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3450*35238bceSAndroid Build Coastguard Worker            }
3451*35238bceSAndroid Build Coastguard Worker        ""
3452*35238bceSAndroid Build Coastguard Worker    end
3453*35238bceSAndroid Build Coastguard Worker
3454*35238bceSAndroid Build Coastguard Worker    case prototype_mismatch_argument_array_const
3455*35238bceSAndroid Build Coastguard Worker        version 300 es
3456*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3457*35238bceSAndroid Build Coastguard Worker        both ""
3458*35238bceSAndroid Build Coastguard Worker            #version 300 es
3459*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3460*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3461*35238bceSAndroid Build Coastguard Worker
3462*35238bceSAndroid Build Coastguard Worker            void func (vec3 f[3]);
3463*35238bceSAndroid Build Coastguard Worker            void func (const vec3 f[3])
3464*35238bceSAndroid Build Coastguard Worker            {
3465*35238bceSAndroid Build Coastguard Worker            }
3466*35238bceSAndroid Build Coastguard Worker
3467*35238bceSAndroid Build Coastguard Worker            void main ()
3468*35238bceSAndroid Build Coastguard Worker            {
3469*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3470*35238bceSAndroid Build Coastguard Worker            }
3471*35238bceSAndroid Build Coastguard Worker        ""
3472*35238bceSAndroid Build Coastguard Worker    end
3473*35238bceSAndroid Build Coastguard Worker
3474*35238bceSAndroid Build Coastguard Worker    case prototype_mismatch_array_inout
3475*35238bceSAndroid Build Coastguard Worker        version 300 es
3476*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3477*35238bceSAndroid Build Coastguard Worker        both ""
3478*35238bceSAndroid Build Coastguard Worker            #version 300 es
3479*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3480*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3481*35238bceSAndroid Build Coastguard Worker
3482*35238bceSAndroid Build Coastguard Worker            void func (out vec3 f);
3483*35238bceSAndroid Build Coastguard Worker            void func (inout vec3 f)
3484*35238bceSAndroid Build Coastguard Worker            {
3485*35238bceSAndroid Build Coastguard Worker            }
3486*35238bceSAndroid Build Coastguard Worker
3487*35238bceSAndroid Build Coastguard Worker            void main ()
3488*35238bceSAndroid Build Coastguard Worker            {
3489*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3490*35238bceSAndroid Build Coastguard Worker            }
3491*35238bceSAndroid Build Coastguard Worker        ""
3492*35238bceSAndroid Build Coastguard Worker    end
3493*35238bceSAndroid Build Coastguard Worker
3494*35238bceSAndroid Build Coastguard Worker    case missing_return_type
3495*35238bceSAndroid Build Coastguard Worker        version 300 es
3496*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3497*35238bceSAndroid Build Coastguard Worker        both ""
3498*35238bceSAndroid Build Coastguard Worker            #version 300 es
3499*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3500*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3501*35238bceSAndroid Build Coastguard Worker
3502*35238bceSAndroid Build Coastguard Worker            func (float f);
3503*35238bceSAndroid Build Coastguard Worker            func (inout vec3 f[3])
3504*35238bceSAndroid Build Coastguard Worker            {
3505*35238bceSAndroid Build Coastguard Worker            }
3506*35238bceSAndroid Build Coastguard Worker
3507*35238bceSAndroid Build Coastguard Worker            void main ()
3508*35238bceSAndroid Build Coastguard Worker            {
3509*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3510*35238bceSAndroid Build Coastguard Worker            }
3511*35238bceSAndroid Build Coastguard Worker        ""
3512*35238bceSAndroid Build Coastguard Worker    end
3513*35238bceSAndroid Build Coastguard Worker
3514*35238bceSAndroid Build Coastguard Worker    case call_before_definition
3515*35238bceSAndroid Build Coastguard Worker        version 300 es
3516*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3517*35238bceSAndroid Build Coastguard Worker        both ""
3518*35238bceSAndroid Build Coastguard Worker            #version 300 es
3519*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3520*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3521*35238bceSAndroid Build Coastguard Worker
3522*35238bceSAndroid Build Coastguard Worker            void main ()
3523*35238bceSAndroid Build Coastguard Worker            {
3524*35238bceSAndroid Build Coastguard Worker                func(1.0);
3525*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3526*35238bceSAndroid Build Coastguard Worker            }
3527*35238bceSAndroid Build Coastguard Worker
3528*35238bceSAndroid Build Coastguard Worker            void func (float f)
3529*35238bceSAndroid Build Coastguard Worker            {
3530*35238bceSAndroid Build Coastguard Worker            }
3531*35238bceSAndroid Build Coastguard Worker
3532*35238bceSAndroid Build Coastguard Worker        ""
3533*35238bceSAndroid Build Coastguard Worker    end
3534*35238bceSAndroid Build Coastguard Worker
3535*35238bceSAndroid Build Coastguard Worker    case argument_precision_overload
3536*35238bceSAndroid Build Coastguard Worker        version 300 es
3537*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3538*35238bceSAndroid Build Coastguard Worker        both ""
3539*35238bceSAndroid Build Coastguard Worker            #version 300 es
3540*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3541*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3542*35238bceSAndroid Build Coastguard Worker
3543*35238bceSAndroid Build Coastguard Worker            float func (lowp float f)
3544*35238bceSAndroid Build Coastguard Worker            {
3545*35238bceSAndroid Build Coastguard Worker                return f;
3546*35238bceSAndroid Build Coastguard Worker            }
3547*35238bceSAndroid Build Coastguard Worker
3548*35238bceSAndroid Build Coastguard Worker            float func (mediump float f)
3549*35238bceSAndroid Build Coastguard Worker            {
3550*35238bceSAndroid Build Coastguard Worker                return f;
3551*35238bceSAndroid Build Coastguard Worker            }
3552*35238bceSAndroid Build Coastguard Worker
3553*35238bceSAndroid Build Coastguard Worker            void main ()
3554*35238bceSAndroid Build Coastguard Worker            {
3555*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3556*35238bceSAndroid Build Coastguard Worker            }
3557*35238bceSAndroid Build Coastguard Worker        ""
3558*35238bceSAndroid Build Coastguard Worker    end
3559*35238bceSAndroid Build Coastguard Worker
3560*35238bceSAndroid Build Coastguard Worker    case argument_in_out_overload
3561*35238bceSAndroid Build Coastguard Worker        version 300 es
3562*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3563*35238bceSAndroid Build Coastguard Worker        both ""
3564*35238bceSAndroid Build Coastguard Worker            #version 300 es
3565*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3566*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3567*35238bceSAndroid Build Coastguard Worker
3568*35238bceSAndroid Build Coastguard Worker            void func (in float f)
3569*35238bceSAndroid Build Coastguard Worker            {
3570*35238bceSAndroid Build Coastguard Worker            }
3571*35238bceSAndroid Build Coastguard Worker
3572*35238bceSAndroid Build Coastguard Worker            void func (out float f)
3573*35238bceSAndroid Build Coastguard Worker            {
3574*35238bceSAndroid Build Coastguard Worker                f = 1.0;
3575*35238bceSAndroid Build Coastguard Worker            }
3576*35238bceSAndroid Build Coastguard Worker
3577*35238bceSAndroid Build Coastguard Worker            void main ()
3578*35238bceSAndroid Build Coastguard Worker            {
3579*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3580*35238bceSAndroid Build Coastguard Worker            }
3581*35238bceSAndroid Build Coastguard Worker        ""
3582*35238bceSAndroid Build Coastguard Worker    end
3583*35238bceSAndroid Build Coastguard Worker
3584*35238bceSAndroid Build Coastguard Worker    case argument_in_inout_overload
3585*35238bceSAndroid Build Coastguard Worker        version 300 es
3586*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3587*35238bceSAndroid Build Coastguard Worker        both ""
3588*35238bceSAndroid Build Coastguard Worker            #version 300 es
3589*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3590*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3591*35238bceSAndroid Build Coastguard Worker
3592*35238bceSAndroid Build Coastguard Worker            void func (in float f)
3593*35238bceSAndroid Build Coastguard Worker            {
3594*35238bceSAndroid Build Coastguard Worker            }
3595*35238bceSAndroid Build Coastguard Worker
3596*35238bceSAndroid Build Coastguard Worker            void func (inout float f)
3597*35238bceSAndroid Build Coastguard Worker            {
3598*35238bceSAndroid Build Coastguard Worker                f = -f;
3599*35238bceSAndroid Build Coastguard Worker            }
3600*35238bceSAndroid Build Coastguard Worker
3601*35238bceSAndroid Build Coastguard Worker            void main ()
3602*35238bceSAndroid Build Coastguard Worker            {
3603*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3604*35238bceSAndroid Build Coastguard Worker            }
3605*35238bceSAndroid Build Coastguard Worker        ""
3606*35238bceSAndroid Build Coastguard Worker    end
3607*35238bceSAndroid Build Coastguard Worker
3608*35238bceSAndroid Build Coastguard Worker    case argument_out_inout_overload
3609*35238bceSAndroid Build Coastguard Worker        version 300 es
3610*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3611*35238bceSAndroid Build Coastguard Worker        both ""
3612*35238bceSAndroid Build Coastguard Worker            #version 300 es
3613*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3614*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3615*35238bceSAndroid Build Coastguard Worker
3616*35238bceSAndroid Build Coastguard Worker            void func (out float f)
3617*35238bceSAndroid Build Coastguard Worker            {
3618*35238bceSAndroid Build Coastguard Worker                f = -1.0;
3619*35238bceSAndroid Build Coastguard Worker            }
3620*35238bceSAndroid Build Coastguard Worker
3621*35238bceSAndroid Build Coastguard Worker            void func (inout float f)
3622*35238bceSAndroid Build Coastguard Worker            {
3623*35238bceSAndroid Build Coastguard Worker                f = -f;
3624*35238bceSAndroid Build Coastguard Worker            }
3625*35238bceSAndroid Build Coastguard Worker
3626*35238bceSAndroid Build Coastguard Worker            void main ()
3627*35238bceSAndroid Build Coastguard Worker            {
3628*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3629*35238bceSAndroid Build Coastguard Worker            }
3630*35238bceSAndroid Build Coastguard Worker        ""
3631*35238bceSAndroid Build Coastguard Worker    end
3632*35238bceSAndroid Build Coastguard Worker
3633*35238bceSAndroid Build Coastguard Worker    case return_type_overload
3634*35238bceSAndroid Build Coastguard Worker        version 300 es
3635*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3636*35238bceSAndroid Build Coastguard Worker        both ""
3637*35238bceSAndroid Build Coastguard Worker            #version 300 es
3638*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3639*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3640*35238bceSAndroid Build Coastguard Worker
3641*35238bceSAndroid Build Coastguard Worker            float func (float f)
3642*35238bceSAndroid Build Coastguard Worker            {
3643*35238bceSAndroid Build Coastguard Worker                return f;
3644*35238bceSAndroid Build Coastguard Worker            }
3645*35238bceSAndroid Build Coastguard Worker
3646*35238bceSAndroid Build Coastguard Worker            int func (float f)
3647*35238bceSAndroid Build Coastguard Worker            {
3648*35238bceSAndroid Build Coastguard Worker                return int(f);
3649*35238bceSAndroid Build Coastguard Worker            }
3650*35238bceSAndroid Build Coastguard Worker
3651*35238bceSAndroid Build Coastguard Worker            void main ()
3652*35238bceSAndroid Build Coastguard Worker            {
3653*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3654*35238bceSAndroid Build Coastguard Worker            }
3655*35238bceSAndroid Build Coastguard Worker        ""
3656*35238bceSAndroid Build Coastguard Worker    end
3657*35238bceSAndroid Build Coastguard Worker
3658*35238bceSAndroid Build Coastguard Worker    case return_type_precision_overload
3659*35238bceSAndroid Build Coastguard Worker        version 300 es
3660*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3661*35238bceSAndroid Build Coastguard Worker        both ""
3662*35238bceSAndroid Build Coastguard Worker            #version 300 es
3663*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3664*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3665*35238bceSAndroid Build Coastguard Worker
3666*35238bceSAndroid Build Coastguard Worker            lowp float func (float f)
3667*35238bceSAndroid Build Coastguard Worker            {
3668*35238bceSAndroid Build Coastguard Worker                return f;
3669*35238bceSAndroid Build Coastguard Worker            }
3670*35238bceSAndroid Build Coastguard Worker
3671*35238bceSAndroid Build Coastguard Worker            mediump float func (float f)
3672*35238bceSAndroid Build Coastguard Worker            {
3673*35238bceSAndroid Build Coastguard Worker                return f;
3674*35238bceSAndroid Build Coastguard Worker            }
3675*35238bceSAndroid Build Coastguard Worker
3676*35238bceSAndroid Build Coastguard Worker            void main ()
3677*35238bceSAndroid Build Coastguard Worker            {
3678*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3679*35238bceSAndroid Build Coastguard Worker            }
3680*35238bceSAndroid Build Coastguard Worker        ""
3681*35238bceSAndroid Build Coastguard Worker    end
3682*35238bceSAndroid Build Coastguard Worker
3683*35238bceSAndroid Build Coastguard Worker    case return_type_const_overload
3684*35238bceSAndroid Build Coastguard Worker        version 300 es
3685*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3686*35238bceSAndroid Build Coastguard Worker        both ""
3687*35238bceSAndroid Build Coastguard Worker            #version 300 es
3688*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3689*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3690*35238bceSAndroid Build Coastguard Worker
3691*35238bceSAndroid Build Coastguard Worker            float func (float f)
3692*35238bceSAndroid Build Coastguard Worker            {
3693*35238bceSAndroid Build Coastguard Worker                return f;
3694*35238bceSAndroid Build Coastguard Worker            }
3695*35238bceSAndroid Build Coastguard Worker
3696*35238bceSAndroid Build Coastguard Worker            const float func (float f)
3697*35238bceSAndroid Build Coastguard Worker            {
3698*35238bceSAndroid Build Coastguard Worker                return f;
3699*35238bceSAndroid Build Coastguard Worker            }
3700*35238bceSAndroid Build Coastguard Worker
3701*35238bceSAndroid Build Coastguard Worker            void main ()
3702*35238bceSAndroid Build Coastguard Worker            {
3703*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3704*35238bceSAndroid Build Coastguard Worker            }
3705*35238bceSAndroid Build Coastguard Worker        ""
3706*35238bceSAndroid Build Coastguard Worker    end
3707*35238bceSAndroid Build Coastguard Worker
3708*35238bceSAndroid Build Coastguard Worker    case return_without_value
3709*35238bceSAndroid Build Coastguard Worker        version 300 es
3710*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3711*35238bceSAndroid Build Coastguard Worker        both ""
3712*35238bceSAndroid Build Coastguard Worker            #version 300 es
3713*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3714*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3715*35238bceSAndroid Build Coastguard Worker
3716*35238bceSAndroid Build Coastguard Worker            float func (float f)
3717*35238bceSAndroid Build Coastguard Worker            {
3718*35238bceSAndroid Build Coastguard Worker                return;
3719*35238bceSAndroid Build Coastguard Worker                return 1.0;
3720*35238bceSAndroid Build Coastguard Worker            }
3721*35238bceSAndroid Build Coastguard Worker
3722*35238bceSAndroid Build Coastguard Worker            void main ()
3723*35238bceSAndroid Build Coastguard Worker            {
3724*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3725*35238bceSAndroid Build Coastguard Worker            }
3726*35238bceSAndroid Build Coastguard Worker        ""
3727*35238bceSAndroid Build Coastguard Worker    end
3728*35238bceSAndroid Build Coastguard Worker
3729*35238bceSAndroid Build Coastguard Worker    case local_function_prototype
3730*35238bceSAndroid Build Coastguard Worker        version 300 es
3731*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3732*35238bceSAndroid Build Coastguard Worker        both ""
3733*35238bceSAndroid Build Coastguard Worker            #version 300 es
3734*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3735*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3736*35238bceSAndroid Build Coastguard Worker
3737*35238bceSAndroid Build Coastguard Worker            void main ()
3738*35238bceSAndroid Build Coastguard Worker            {
3739*35238bceSAndroid Build Coastguard Worker                float func (float f);
3740*35238bceSAndroid Build Coastguard Worker
3741*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3742*35238bceSAndroid Build Coastguard Worker            }
3743*35238bceSAndroid Build Coastguard Worker        ""
3744*35238bceSAndroid Build Coastguard Worker    end
3745*35238bceSAndroid Build Coastguard Worker
3746*35238bceSAndroid Build Coastguard Worker    case local_function_definition
3747*35238bceSAndroid Build Coastguard Worker        version 300 es
3748*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3749*35238bceSAndroid Build Coastguard Worker        both ""
3750*35238bceSAndroid Build Coastguard Worker            #version 300 es
3751*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3752*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3753*35238bceSAndroid Build Coastguard Worker
3754*35238bceSAndroid Build Coastguard Worker            void main ()
3755*35238bceSAndroid Build Coastguard Worker            {
3756*35238bceSAndroid Build Coastguard Worker                float func (float f)
3757*35238bceSAndroid Build Coastguard Worker                {
3758*35238bceSAndroid Build Coastguard Worker                    return 1.0;
3759*35238bceSAndroid Build Coastguard Worker                }
3760*35238bceSAndroid Build Coastguard Worker
3761*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3762*35238bceSAndroid Build Coastguard Worker            }
3763*35238bceSAndroid Build Coastguard Worker        ""
3764*35238bceSAndroid Build Coastguard Worker    end
3765*35238bceSAndroid Build Coastguard Worker
3766*35238bceSAndroid Build Coastguard Worker    case name_type_conflict
3767*35238bceSAndroid Build Coastguard Worker        version 300 es
3768*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3769*35238bceSAndroid Build Coastguard Worker        both ""
3770*35238bceSAndroid Build Coastguard Worker            #version 300 es
3771*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3772*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3773*35238bceSAndroid Build Coastguard Worker
3774*35238bceSAndroid Build Coastguard Worker            struct foo { float a; }
3775*35238bceSAndroid Build Coastguard Worker
3776*35238bceSAndroid Build Coastguard Worker            float foo (float f)
3777*35238bceSAndroid Build Coastguard Worker            {
3778*35238bceSAndroid Build Coastguard Worker                return 1.0;
3779*35238bceSAndroid Build Coastguard Worker            }
3780*35238bceSAndroid Build Coastguard Worker
3781*35238bceSAndroid Build Coastguard Worker            void main ()
3782*35238bceSAndroid Build Coastguard Worker            {
3783*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3784*35238bceSAndroid Build Coastguard Worker            }
3785*35238bceSAndroid Build Coastguard Worker        ""
3786*35238bceSAndroid Build Coastguard Worker    end
3787*35238bceSAndroid Build Coastguard Worker
3788*35238bceSAndroid Build Coastguard Worker    case const_overload
3789*35238bceSAndroid Build Coastguard Worker        version 300 es
3790*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3791*35238bceSAndroid Build Coastguard Worker        both ""
3792*35238bceSAndroid Build Coastguard Worker            #version 300 es
3793*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3794*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3795*35238bceSAndroid Build Coastguard Worker
3796*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
3797*35238bceSAndroid Build Coastguard Worker            {
3798*35238bceSAndroid Build Coastguard Worker            }
3799*35238bceSAndroid Build Coastguard Worker
3800*35238bceSAndroid Build Coastguard Worker            void func (const vec3 f)
3801*35238bceSAndroid Build Coastguard Worker            {
3802*35238bceSAndroid Build Coastguard Worker            }
3803*35238bceSAndroid Build Coastguard Worker
3804*35238bceSAndroid Build Coastguard Worker            void main ()
3805*35238bceSAndroid Build Coastguard Worker            {
3806*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3807*35238bceSAndroid Build Coastguard Worker            }
3808*35238bceSAndroid Build Coastguard Worker        ""
3809*35238bceSAndroid Build Coastguard Worker    end
3810*35238bceSAndroid Build Coastguard Worker
3811*35238bceSAndroid Build Coastguard Worker    case uniform_local
3812*35238bceSAndroid Build Coastguard Worker        version 300 es
3813*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3814*35238bceSAndroid Build Coastguard Worker        both ""
3815*35238bceSAndroid Build Coastguard Worker            #version 300 es
3816*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3817*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3818*35238bceSAndroid Build Coastguard Worker
3819*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
3820*35238bceSAndroid Build Coastguard Worker            {
3821*35238bceSAndroid Build Coastguard Worker                uniform float u;
3822*35238bceSAndroid Build Coastguard Worker            }
3823*35238bceSAndroid Build Coastguard Worker
3824*35238bceSAndroid Build Coastguard Worker            void main ()
3825*35238bceSAndroid Build Coastguard Worker            {
3826*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3827*35238bceSAndroid Build Coastguard Worker            }
3828*35238bceSAndroid Build Coastguard Worker        ""
3829*35238bceSAndroid Build Coastguard Worker    end
3830*35238bceSAndroid Build Coastguard Worker
3831*35238bceSAndroid Build Coastguard Worker    case in_local
3832*35238bceSAndroid Build Coastguard Worker        version 300 es
3833*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3834*35238bceSAndroid Build Coastguard Worker        both ""
3835*35238bceSAndroid Build Coastguard Worker            #version 300 es
3836*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3837*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3838*35238bceSAndroid Build Coastguard Worker
3839*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
3840*35238bceSAndroid Build Coastguard Worker            {
3841*35238bceSAndroid Build Coastguard Worker                in float v;
3842*35238bceSAndroid Build Coastguard Worker            }
3843*35238bceSAndroid Build Coastguard Worker
3844*35238bceSAndroid Build Coastguard Worker            void main ()
3845*35238bceSAndroid Build Coastguard Worker            {
3846*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3847*35238bceSAndroid Build Coastguard Worker            }
3848*35238bceSAndroid Build Coastguard Worker        ""
3849*35238bceSAndroid Build Coastguard Worker    end
3850*35238bceSAndroid Build Coastguard Worker
3851*35238bceSAndroid Build Coastguard Worker    case out_local
3852*35238bceSAndroid Build Coastguard Worker        version 300 es
3853*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3854*35238bceSAndroid Build Coastguard Worker        both ""
3855*35238bceSAndroid Build Coastguard Worker            #version 300 es
3856*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3857*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3858*35238bceSAndroid Build Coastguard Worker
3859*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
3860*35238bceSAndroid Build Coastguard Worker            {
3861*35238bceSAndroid Build Coastguard Worker                in float a;
3862*35238bceSAndroid Build Coastguard Worker            }
3863*35238bceSAndroid Build Coastguard Worker
3864*35238bceSAndroid Build Coastguard Worker            void main ()
3865*35238bceSAndroid Build Coastguard Worker            {
3866*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3867*35238bceSAndroid Build Coastguard Worker            }
3868*35238bceSAndroid Build Coastguard Worker        ""
3869*35238bceSAndroid Build Coastguard Worker    end
3870*35238bceSAndroid Build Coastguard Worker
3871*35238bceSAndroid Build Coastguard Worker    case inout_local
3872*35238bceSAndroid Build Coastguard Worker        version 300 es
3873*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3874*35238bceSAndroid Build Coastguard Worker        both ""
3875*35238bceSAndroid Build Coastguard Worker            #version 300 es
3876*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3877*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3878*35238bceSAndroid Build Coastguard Worker
3879*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
3880*35238bceSAndroid Build Coastguard Worker            {
3881*35238bceSAndroid Build Coastguard Worker                inout float a;
3882*35238bceSAndroid Build Coastguard Worker            }
3883*35238bceSAndroid Build Coastguard Worker
3884*35238bceSAndroid Build Coastguard Worker            void main ()
3885*35238bceSAndroid Build Coastguard Worker            {
3886*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3887*35238bceSAndroid Build Coastguard Worker            }
3888*35238bceSAndroid Build Coastguard Worker        ""
3889*35238bceSAndroid Build Coastguard Worker    end
3890*35238bceSAndroid Build Coastguard Worker
3891*35238bceSAndroid Build Coastguard Worker    case uniform_argument
3892*35238bceSAndroid Build Coastguard Worker        version 300 es
3893*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3894*35238bceSAndroid Build Coastguard Worker        both ""
3895*35238bceSAndroid Build Coastguard Worker            #version 300 es
3896*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3897*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3898*35238bceSAndroid Build Coastguard Worker
3899*35238bceSAndroid Build Coastguard Worker            void func (uniform vec3 f)
3900*35238bceSAndroid Build Coastguard Worker            {
3901*35238bceSAndroid Build Coastguard Worker            }
3902*35238bceSAndroid Build Coastguard Worker
3903*35238bceSAndroid Build Coastguard Worker            void main ()
3904*35238bceSAndroid Build Coastguard Worker            {
3905*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3906*35238bceSAndroid Build Coastguard Worker            }
3907*35238bceSAndroid Build Coastguard Worker        ""
3908*35238bceSAndroid Build Coastguard Worker    end
3909*35238bceSAndroid Build Coastguard Worker
3910*35238bceSAndroid Build Coastguard Worker    case uniform_return_type
3911*35238bceSAndroid Build Coastguard Worker        version 300 es
3912*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3913*35238bceSAndroid Build Coastguard Worker        both ""
3914*35238bceSAndroid Build Coastguard Worker            #version 300 es
3915*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3916*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3917*35238bceSAndroid Build Coastguard Worker
3918*35238bceSAndroid Build Coastguard Worker            uniform float func (vec3 f)
3919*35238bceSAndroid Build Coastguard Worker            {
3920*35238bceSAndroid Build Coastguard Worker                return f.x;
3921*35238bceSAndroid Build Coastguard Worker            }
3922*35238bceSAndroid Build Coastguard Worker
3923*35238bceSAndroid Build Coastguard Worker            void main ()
3924*35238bceSAndroid Build Coastguard Worker            {
3925*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3926*35238bceSAndroid Build Coastguard Worker            }
3927*35238bceSAndroid Build Coastguard Worker        ""
3928*35238bceSAndroid Build Coastguard Worker    end
3929*35238bceSAndroid Build Coastguard Worker
3930*35238bceSAndroid Build Coastguard Worker    case in_return_type
3931*35238bceSAndroid Build Coastguard Worker        version 300 es
3932*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3933*35238bceSAndroid Build Coastguard Worker        both ""
3934*35238bceSAndroid Build Coastguard Worker            #version 300 es
3935*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3936*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3937*35238bceSAndroid Build Coastguard Worker
3938*35238bceSAndroid Build Coastguard Worker            in float func (vec3 f)
3939*35238bceSAndroid Build Coastguard Worker            {
3940*35238bceSAndroid Build Coastguard Worker                return f.x;
3941*35238bceSAndroid Build Coastguard Worker            }
3942*35238bceSAndroid Build Coastguard Worker
3943*35238bceSAndroid Build Coastguard Worker            void main ()
3944*35238bceSAndroid Build Coastguard Worker            {
3945*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(func(vec3(1.0)));
3946*35238bceSAndroid Build Coastguard Worker            }
3947*35238bceSAndroid Build Coastguard Worker        ""
3948*35238bceSAndroid Build Coastguard Worker    end
3949*35238bceSAndroid Build Coastguard Worker
3950*35238bceSAndroid Build Coastguard Worker    case out_return_type
3951*35238bceSAndroid Build Coastguard Worker        version 300 es
3952*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3953*35238bceSAndroid Build Coastguard Worker        both ""
3954*35238bceSAndroid Build Coastguard Worker            #version 300 es
3955*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3956*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3957*35238bceSAndroid Build Coastguard Worker
3958*35238bceSAndroid Build Coastguard Worker            out float func (vec3 f)
3959*35238bceSAndroid Build Coastguard Worker            {
3960*35238bceSAndroid Build Coastguard Worker                return f.x;
3961*35238bceSAndroid Build Coastguard Worker            }
3962*35238bceSAndroid Build Coastguard Worker
3963*35238bceSAndroid Build Coastguard Worker            void main ()
3964*35238bceSAndroid Build Coastguard Worker            {
3965*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(func(vec3(1.0)));
3966*35238bceSAndroid Build Coastguard Worker            }
3967*35238bceSAndroid Build Coastguard Worker        ""
3968*35238bceSAndroid Build Coastguard Worker    end
3969*35238bceSAndroid Build Coastguard Worker
3970*35238bceSAndroid Build Coastguard Worker    case inout_return_type
3971*35238bceSAndroid Build Coastguard Worker        version 300 es
3972*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3973*35238bceSAndroid Build Coastguard Worker        both ""
3974*35238bceSAndroid Build Coastguard Worker            #version 300 es
3975*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3976*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3977*35238bceSAndroid Build Coastguard Worker
3978*35238bceSAndroid Build Coastguard Worker            inout float func (vec3 f)
3979*35238bceSAndroid Build Coastguard Worker            {
3980*35238bceSAndroid Build Coastguard Worker                return f.x;
3981*35238bceSAndroid Build Coastguard Worker            }
3982*35238bceSAndroid Build Coastguard Worker
3983*35238bceSAndroid Build Coastguard Worker            void main ()
3984*35238bceSAndroid Build Coastguard Worker            {
3985*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(func(vec3(1.0)));
3986*35238bceSAndroid Build Coastguard Worker            }
3987*35238bceSAndroid Build Coastguard Worker        ""
3988*35238bceSAndroid Build Coastguard Worker    end
3989*35238bceSAndroid Build Coastguard Worker
3990*35238bceSAndroid Build Coastguard Worker    case main_invalid_return_type
3991*35238bceSAndroid Build Coastguard Worker        version 300 es
3992*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3993*35238bceSAndroid Build Coastguard Worker        both ""
3994*35238bceSAndroid Build Coastguard Worker            #version 300 es
3995*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3996*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3997*35238bceSAndroid Build Coastguard Worker
3998*35238bceSAndroid Build Coastguard Worker            float main ()
3999*35238bceSAndroid Build Coastguard Worker            {
4000*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
4001*35238bceSAndroid Build Coastguard Worker            }
4002*35238bceSAndroid Build Coastguard Worker        ""
4003*35238bceSAndroid Build Coastguard Worker    end
4004*35238bceSAndroid Build Coastguard Worker
4005*35238bceSAndroid Build Coastguard Worker    case main_has_arguments
4006*35238bceSAndroid Build Coastguard Worker        version 300 es
4007*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4008*35238bceSAndroid Build Coastguard Worker        both ""
4009*35238bceSAndroid Build Coastguard Worker            #version 300 es
4010*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4011*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4012*35238bceSAndroid Build Coastguard Worker
4013*35238bceSAndroid Build Coastguard Worker            void main (float f)
4014*35238bceSAndroid Build Coastguard Worker            {
4015*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
4016*35238bceSAndroid Build Coastguard Worker            }
4017*35238bceSAndroid Build Coastguard Worker        ""
4018*35238bceSAndroid Build Coastguard Worker    end
4019*35238bceSAndroid Build Coastguard Worker
4020*35238bceSAndroid Build Coastguard Worker    case main_missing_return_type
4021*35238bceSAndroid Build Coastguard Worker        version 300 es
4022*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4023*35238bceSAndroid Build Coastguard Worker        both ""
4024*35238bceSAndroid Build Coastguard Worker            #version 300 es
4025*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4026*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4027*35238bceSAndroid Build Coastguard Worker
4028*35238bceSAndroid Build Coastguard Worker            main ()
4029*35238bceSAndroid Build Coastguard Worker            {
4030*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
4031*35238bceSAndroid Build Coastguard Worker            }
4032*35238bceSAndroid Build Coastguard Worker        ""
4033*35238bceSAndroid Build Coastguard Worker    end
4034*35238bceSAndroid Build Coastguard Worker
4035*35238bceSAndroid Build Coastguard Worker    case write_const_arg
4036*35238bceSAndroid Build Coastguard Worker        version 300 es
4037*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4038*35238bceSAndroid Build Coastguard Worker        both ""
4039*35238bceSAndroid Build Coastguard Worker            #version 300 es
4040*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4041*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4042*35238bceSAndroid Build Coastguard Worker
4043*35238bceSAndroid Build Coastguard Worker            float func (const float f)
4044*35238bceSAndroid Build Coastguard Worker            {
4045*35238bceSAndroid Build Coastguard Worker                f = 1.0;
4046*35238bceSAndroid Build Coastguard Worker            }
4047*35238bceSAndroid Build Coastguard Worker
4048*35238bceSAndroid Build Coastguard Worker            void main ()
4049*35238bceSAndroid Build Coastguard Worker            {
4050*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
4051*35238bceSAndroid Build Coastguard Worker            }
4052*35238bceSAndroid Build Coastguard Worker        ""
4053*35238bceSAndroid Build Coastguard Worker    end
4054*35238bceSAndroid Build Coastguard Worker
4055*35238bceSAndroid Build Coastguard Worker    case write_const_array_arg
4056*35238bceSAndroid Build Coastguard Worker        version 300 es
4057*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4058*35238bceSAndroid Build Coastguard Worker        both ""
4059*35238bceSAndroid Build Coastguard Worker            #version 300 es
4060*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4061*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4062*35238bceSAndroid Build Coastguard Worker
4063*35238bceSAndroid Build Coastguard Worker            float func (const float f[3])
4064*35238bceSAndroid Build Coastguard Worker            {
4065*35238bceSAndroid Build Coastguard Worker                f[0] = 1.0;
4066*35238bceSAndroid Build Coastguard Worker            }
4067*35238bceSAndroid Build Coastguard Worker
4068*35238bceSAndroid Build Coastguard Worker            void main ()
4069*35238bceSAndroid Build Coastguard Worker            {
4070*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
4071*35238bceSAndroid Build Coastguard Worker            }
4072*35238bceSAndroid Build Coastguard Worker        ""
4073*35238bceSAndroid Build Coastguard Worker    end
4074*35238bceSAndroid Build Coastguard Worker
4075*35238bceSAndroid Build Coastguard Worker    case use_const_arg_in_const_expr
4076*35238bceSAndroid Build Coastguard Worker        version 300 es
4077*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4078*35238bceSAndroid Build Coastguard Worker        both ""
4079*35238bceSAndroid Build Coastguard Worker            #version 300 es
4080*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4081*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4082*35238bceSAndroid Build Coastguard Worker
4083*35238bceSAndroid Build Coastguard Worker            float func (const int i)
4084*35238bceSAndroid Build Coastguard Worker            {
4085*35238bceSAndroid Build Coastguard Worker                const int z = i+1;
4086*35238bceSAndroid Build Coastguard Worker                return float(z);
4087*35238bceSAndroid Build Coastguard Worker            }
4088*35238bceSAndroid Build Coastguard Worker
4089*35238bceSAndroid Build Coastguard Worker            void main ()
4090*35238bceSAndroid Build Coastguard Worker            {
4091*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(func(1));
4092*35238bceSAndroid Build Coastguard Worker            }
4093*35238bceSAndroid Build Coastguard Worker        ""
4094*35238bceSAndroid Build Coastguard Worker    end
4095*35238bceSAndroid Build Coastguard Worker
4096*35238bceSAndroid Build Coastguard Worker    case use_const_arg_as_array_size
4097*35238bceSAndroid Build Coastguard Worker        version 300 es
4098*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4099*35238bceSAndroid Build Coastguard Worker        both ""
4100*35238bceSAndroid Build Coastguard Worker            #version 300 es
4101*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4102*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4103*35238bceSAndroid Build Coastguard Worker
4104*35238bceSAndroid Build Coastguard Worker            float func (const int i)
4105*35238bceSAndroid Build Coastguard Worker            {
4106*35238bceSAndroid Build Coastguard Worker                float f[i];
4107*35238bceSAndroid Build Coastguard Worker                f[0] = 1.0;
4108*35238bceSAndroid Build Coastguard Worker                return f[0];
4109*35238bceSAndroid Build Coastguard Worker            }
4110*35238bceSAndroid Build Coastguard Worker
4111*35238bceSAndroid Build Coastguard Worker            void main ()
4112*35238bceSAndroid Build Coastguard Worker            {
4113*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(func(1));
4114*35238bceSAndroid Build Coastguard Worker            }
4115*35238bceSAndroid Build Coastguard Worker        ""
4116*35238bceSAndroid Build Coastguard Worker    end
4117*35238bceSAndroid Build Coastguard Worker
4118*35238bceSAndroid Build Coastguard Worker    case overload_builtin_function
4119*35238bceSAndroid Build Coastguard Worker        version 300 es
4120*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4121*35238bceSAndroid Build Coastguard Worker        both ""
4122*35238bceSAndroid Build Coastguard Worker            #version 300 es
4123*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4124*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4125*35238bceSAndroid Build Coastguard Worker
4126*35238bceSAndroid Build Coastguard Worker            int sin (int x)
4127*35238bceSAndroid Build Coastguard Worker            {
4128*35238bceSAndroid Build Coastguard Worker                return int(sin(float(x)));
4129*35238bceSAndroid Build Coastguard Worker            }
4130*35238bceSAndroid Build Coastguard Worker
4131*35238bceSAndroid Build Coastguard Worker            void main ()
4132*35238bceSAndroid Build Coastguard Worker            {
4133*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(sin(1));
4134*35238bceSAndroid Build Coastguard Worker            }
4135*35238bceSAndroid Build Coastguard Worker        ""
4136*35238bceSAndroid Build Coastguard Worker    end
4137*35238bceSAndroid Build Coastguard Worker
4138*35238bceSAndroid Build Coastguard Worker    case redefine_builtin_function
4139*35238bceSAndroid Build Coastguard Worker        version 300 es
4140*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4141*35238bceSAndroid Build Coastguard Worker        both ""
4142*35238bceSAndroid Build Coastguard Worker            #version 300 es
4143*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4144*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4145*35238bceSAndroid Build Coastguard Worker
4146*35238bceSAndroid Build Coastguard Worker            float sin (float x)
4147*35238bceSAndroid Build Coastguard Worker            {
4148*35238bceSAndroid Build Coastguard Worker                return 0.0;
4149*35238bceSAndroid Build Coastguard Worker            }
4150*35238bceSAndroid Build Coastguard Worker
4151*35238bceSAndroid Build Coastguard Worker            void main ()
4152*35238bceSAndroid Build Coastguard Worker            {
4153*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(sin(1.0));
4154*35238bceSAndroid Build Coastguard Worker            }
4155*35238bceSAndroid Build Coastguard Worker        ""
4156*35238bceSAndroid Build Coastguard Worker    end
4157*35238bceSAndroid Build Coastguard Worker
4158*35238bceSAndroid Build Coastguard Worker    case basic_recursion
4159*35238bceSAndroid Build Coastguard Worker        version 300 es
4160*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4161*35238bceSAndroid Build Coastguard Worker        both ""
4162*35238bceSAndroid Build Coastguard Worker            #version 300 es
4163*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4164*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4165*35238bceSAndroid Build Coastguard Worker
4166*35238bceSAndroid Build Coastguard Worker            float fib (float x)
4167*35238bceSAndroid Build Coastguard Worker            {
4168*35238bceSAndroid Build Coastguard Worker                if (x <= 1.0)
4169*35238bceSAndroid Build Coastguard Worker                    return x;
4170*35238bceSAndroid Build Coastguard Worker                else
4171*35238bceSAndroid Build Coastguard Worker                    return fib(x-2.0) + fib(x-1.0);
4172*35238bceSAndroid Build Coastguard Worker            }
4173*35238bceSAndroid Build Coastguard Worker
4174*35238bceSAndroid Build Coastguard Worker            void main ()
4175*35238bceSAndroid Build Coastguard Worker            {
4176*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(fib(5.0));
4177*35238bceSAndroid Build Coastguard Worker            }
4178*35238bceSAndroid Build Coastguard Worker        ""
4179*35238bceSAndroid Build Coastguard Worker    end
4180*35238bceSAndroid Build Coastguard Worker
4181*35238bceSAndroid Build Coastguard Worker    case simple_tail_recursion
4182*35238bceSAndroid Build Coastguard Worker        version 300 es
4183*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4184*35238bceSAndroid Build Coastguard Worker        both ""
4185*35238bceSAndroid Build Coastguard Worker            #version 300 es
4186*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4187*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4188*35238bceSAndroid Build Coastguard Worker
4189*35238bceSAndroid Build Coastguard Worker            float rec (float x)
4190*35238bceSAndroid Build Coastguard Worker            {
4191*35238bceSAndroid Build Coastguard Worker                if (x <= 0.0)
4192*35238bceSAndroid Build Coastguard Worker                    return 0.0;
4193*35238bceSAndroid Build Coastguard Worker                else
4194*35238bceSAndroid Build Coastguard Worker                    return rec(x-1.0);
4195*35238bceSAndroid Build Coastguard Worker            }
4196*35238bceSAndroid Build Coastguard Worker
4197*35238bceSAndroid Build Coastguard Worker            void main ()
4198*35238bceSAndroid Build Coastguard Worker            {
4199*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(rec(5.0));
4200*35238bceSAndroid Build Coastguard Worker            }
4201*35238bceSAndroid Build Coastguard Worker        ""
4202*35238bceSAndroid Build Coastguard Worker    end
4203*35238bceSAndroid Build Coastguard Worker
4204*35238bceSAndroid Build Coastguard Worker    case dynamic_conditional_recursion
4205*35238bceSAndroid Build Coastguard Worker        version 300 es
4206*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4207*35238bceSAndroid Build Coastguard Worker        both ""
4208*35238bceSAndroid Build Coastguard Worker            #version 300 es
4209*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4210*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4211*35238bceSAndroid Build Coastguard Worker            uniform float ua;
4212*35238bceSAndroid Build Coastguard Worker            uniform float ub;
4213*35238bceSAndroid Build Coastguard Worker
4214*35238bceSAndroid Build Coastguard Worker            float funcA (float x);
4215*35238bceSAndroid Build Coastguard Worker            float funcB (float x);
4216*35238bceSAndroid Build Coastguard Worker
4217*35238bceSAndroid Build Coastguard Worker            float funcA (float x)
4218*35238bceSAndroid Build Coastguard Worker            {
4219*35238bceSAndroid Build Coastguard Worker                if (ub+x > 0.0)
4220*35238bceSAndroid Build Coastguard Worker                    funcB(x*2.0);
4221*35238bceSAndroid Build Coastguard Worker                else
4222*35238bceSAndroid Build Coastguard Worker                    return ub;
4223*35238bceSAndroid Build Coastguard Worker            }
4224*35238bceSAndroid Build Coastguard Worker
4225*35238bceSAndroid Build Coastguard Worker            float funcB (float x)
4226*35238bceSAndroid Build Coastguard Worker            {
4227*35238bceSAndroid Build Coastguard Worker                return sqrt(funcA(x));
4228*35238bceSAndroid Build Coastguard Worker            }
4229*35238bceSAndroid Build Coastguard Worker
4230*35238bceSAndroid Build Coastguard Worker            void main ()
4231*35238bceSAndroid Build Coastguard Worker            {
4232*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(funcB(ua));
4233*35238bceSAndroid Build Coastguard Worker            }
4234*35238bceSAndroid Build Coastguard Worker        ""
4235*35238bceSAndroid Build Coastguard Worker    end
4236*35238bceSAndroid Build Coastguard Worker
4237*35238bceSAndroid Build Coastguard Worker    case dynamic_loop_recursion
4238*35238bceSAndroid Build Coastguard Worker        version 300 es
4239*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4240*35238bceSAndroid Build Coastguard Worker        both ""
4241*35238bceSAndroid Build Coastguard Worker            #version 300 es
4242*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4243*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4244*35238bceSAndroid Build Coastguard Worker            uniform float ua;
4245*35238bceSAndroid Build Coastguard Worker            uniform float ub;
4246*35238bceSAndroid Build Coastguard Worker
4247*35238bceSAndroid Build Coastguard Worker            float funcA (float x);
4248*35238bceSAndroid Build Coastguard Worker            float funcB (float x);
4249*35238bceSAndroid Build Coastguard Worker
4250*35238bceSAndroid Build Coastguard Worker            float funcA (float x)
4251*35238bceSAndroid Build Coastguard Worker            {
4252*35238bceSAndroid Build Coastguard Worker                for (float z = 0.0; z < ub+x; z++)
4253*35238bceSAndroid Build Coastguard Worker                {
4254*35238bceSAndroid Build Coastguard Worker                    if (z > 2.0)
4255*35238bceSAndroid Build Coastguard Worker                        funcB(z*2.0);
4256*35238bceSAndroid Build Coastguard Worker                    else
4257*35238bceSAndroid Build Coastguard Worker                        return z;
4258*35238bceSAndroid Build Coastguard Worker                }
4259*35238bceSAndroid Build Coastguard Worker            }
4260*35238bceSAndroid Build Coastguard Worker
4261*35238bceSAndroid Build Coastguard Worker            float funcB (float x)
4262*35238bceSAndroid Build Coastguard Worker            {
4263*35238bceSAndroid Build Coastguard Worker                return sqrt(funcA(x));
4264*35238bceSAndroid Build Coastguard Worker            }
4265*35238bceSAndroid Build Coastguard Worker
4266*35238bceSAndroid Build Coastguard Worker            void main ()
4267*35238bceSAndroid Build Coastguard Worker            {
4268*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(funcB(ua));
4269*35238bceSAndroid Build Coastguard Worker            }
4270*35238bceSAndroid Build Coastguard Worker        ""
4271*35238bceSAndroid Build Coastguard Worker    end
4272*35238bceSAndroid Build Coastguard Worker
4273*35238bceSAndroid Build Coastguard Worker    case dynamic_switch_recursion
4274*35238bceSAndroid Build Coastguard Worker        version 300 es
4275*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4276*35238bceSAndroid Build Coastguard Worker        both ""
4277*35238bceSAndroid Build Coastguard Worker            #version 300 es
4278*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4279*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4280*35238bceSAndroid Build Coastguard Worker            uniform float ua;
4281*35238bceSAndroid Build Coastguard Worker            uniform mediump int ub;
4282*35238bceSAndroid Build Coastguard Worker
4283*35238bceSAndroid Build Coastguard Worker            float funcA (float x);
4284*35238bceSAndroid Build Coastguard Worker            float funcB (float x);
4285*35238bceSAndroid Build Coastguard Worker
4286*35238bceSAndroid Build Coastguard Worker            float funcA (float x)
4287*35238bceSAndroid Build Coastguard Worker            {
4288*35238bceSAndroid Build Coastguard Worker                switch (ub + int(x))
4289*35238bceSAndroid Build Coastguard Worker                {
4290*35238bceSAndroid Build Coastguard Worker                    case 0: return ua-1.0;
4291*35238bceSAndroid Build Coastguard Worker                    case 1: return ua;
4292*35238bceSAndroid Build Coastguard Worker                    case 2: return funcB(x*2.0);
4293*35238bceSAndroid Build Coastguard Worker                    default: return 0.0;
4294*35238bceSAndroid Build Coastguard Worker                }
4295*35238bceSAndroid Build Coastguard Worker            }
4296*35238bceSAndroid Build Coastguard Worker
4297*35238bceSAndroid Build Coastguard Worker            float funcB (float x)
4298*35238bceSAndroid Build Coastguard Worker            {
4299*35238bceSAndroid Build Coastguard Worker                return sqrt(funcA(x));
4300*35238bceSAndroid Build Coastguard Worker            }
4301*35238bceSAndroid Build Coastguard Worker
4302*35238bceSAndroid Build Coastguard Worker            void main ()
4303*35238bceSAndroid Build Coastguard Worker            {
4304*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(funcB(ua));
4305*35238bceSAndroid Build Coastguard Worker            }
4306*35238bceSAndroid Build Coastguard Worker        ""
4307*35238bceSAndroid Build Coastguard Worker    end
4308*35238bceSAndroid Build Coastguard Worker
4309*35238bceSAndroid Build Coastguard Worker    case modify_const_arg
4310*35238bceSAndroid Build Coastguard Worker        version 300 es
4311*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4312*35238bceSAndroid Build Coastguard Worker        both ""
4313*35238bceSAndroid Build Coastguard Worker            #version 300 es
4314*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4315*35238bceSAndroid Build Coastguard Worker            precision mediump int;
4316*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4317*35238bceSAndroid Build Coastguard Worker
4318*35238bceSAndroid Build Coastguard Worker            int func (const int a)
4319*35238bceSAndroid Build Coastguard Worker            {
4320*35238bceSAndroid Build Coastguard Worker                a = -a;
4321*35238bceSAndroid Build Coastguard Worker                return 2 * a;
4322*35238bceSAndroid Build Coastguard Worker            }
4323*35238bceSAndroid Build Coastguard Worker
4324*35238bceSAndroid Build Coastguard Worker            void main()
4325*35238bceSAndroid Build Coastguard Worker            {
4326*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(func(3));
4327*35238bceSAndroid Build Coastguard Worker            }
4328*35238bceSAndroid Build Coastguard Worker        ""
4329*35238bceSAndroid Build Coastguard Worker    end
4330*35238bceSAndroid Build Coastguard Worker
4331*35238bceSAndroid Build Coastguard Worker    case init_const_local_from_const_arg
4332*35238bceSAndroid Build Coastguard Worker        version 300 es
4333*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4334*35238bceSAndroid Build Coastguard Worker        both ""
4335*35238bceSAndroid Build Coastguard Worker            #version 300 es
4336*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4337*35238bceSAndroid Build Coastguard Worker            precision mediump int;
4338*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4339*35238bceSAndroid Build Coastguard Worker
4340*35238bceSAndroid Build Coastguard Worker            int func (const int a)
4341*35238bceSAndroid Build Coastguard Worker            {
4342*35238bceSAndroid Build Coastguard Worker                const int b = -a;
4343*35238bceSAndroid Build Coastguard Worker                return 2 * b;
4344*35238bceSAndroid Build Coastguard Worker            }
4345*35238bceSAndroid Build Coastguard Worker
4346*35238bceSAndroid Build Coastguard Worker            void main()
4347*35238bceSAndroid Build Coastguard Worker            {
4348*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(func(3));
4349*35238bceSAndroid Build Coastguard Worker            }
4350*35238bceSAndroid Build Coastguard Worker        ""
4351*35238bceSAndroid Build Coastguard Worker    end
4352*35238bceSAndroid Build Coastguard Worker
4353*35238bceSAndroid Build Coastguard Worker    case array_size_from_const_arg
4354*35238bceSAndroid Build Coastguard Worker        version 300 es
4355*35238bceSAndroid Build Coastguard Worker        expect compile_fail
4356*35238bceSAndroid Build Coastguard Worker        both ""
4357*35238bceSAndroid Build Coastguard Worker            #version 300 es
4358*35238bceSAndroid Build Coastguard Worker            precision mediump float;
4359*35238bceSAndroid Build Coastguard Worker            precision mediump int;
4360*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
4361*35238bceSAndroid Build Coastguard Worker
4362*35238bceSAndroid Build Coastguard Worker            int func (const int a)
4363*35238bceSAndroid Build Coastguard Worker            {
4364*35238bceSAndroid Build Coastguard Worker                int arr[a];
4365*35238bceSAndroid Build Coastguard Worker                arr[1] = 3;
4366*35238bceSAndroid Build Coastguard Worker                return arr[1];
4367*35238bceSAndroid Build Coastguard Worker            }
4368*35238bceSAndroid Build Coastguard Worker
4369*35238bceSAndroid Build Coastguard Worker            void main()
4370*35238bceSAndroid Build Coastguard Worker            {
4371*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(func(3));
4372*35238bceSAndroid Build Coastguard Worker            }
4373*35238bceSAndroid Build Coastguard Worker        ""
4374*35238bceSAndroid Build Coastguard Worker    end
4375*35238bceSAndroid Build Coastguard Worker
4376*35238bceSAndroid Build Coastguard Workerend # invalid
4377