xref: /aosp_15_r20/external/deqp/data/gles2/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        values
14*35238bceSAndroid Build Coastguard Worker        {
15*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
16*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
17*35238bceSAndroid Build Coastguard Worker        }
18*35238bceSAndroid Build Coastguard Worker
19*35238bceSAndroid Build Coastguard Worker        both ""
20*35238bceSAndroid Build Coastguard Worker            precision mediump float;
21*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
22*35238bceSAndroid Build Coastguard Worker
23*35238bceSAndroid Build Coastguard Worker            float func (float a)
24*35238bceSAndroid Build Coastguard Worker            {
25*35238bceSAndroid Build Coastguard Worker                return -a;
26*35238bceSAndroid Build Coastguard Worker            }
27*35238bceSAndroid Build Coastguard Worker
28*35238bceSAndroid Build Coastguard Worker            void main()
29*35238bceSAndroid Build Coastguard Worker            {
30*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
31*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
32*35238bceSAndroid Build Coastguard Worker            }
33*35238bceSAndroid Build Coastguard Worker        ""
34*35238bceSAndroid Build Coastguard Worker    end
35*35238bceSAndroid Build Coastguard Worker
36*35238bceSAndroid Build Coastguard Worker    case float_vec2
37*35238bceSAndroid Build Coastguard Worker        values
38*35238bceSAndroid Build Coastguard Worker        {
39*35238bceSAndroid Build Coastguard Worker            input vec2 in0 = [ vec2(0.0, 1.0) | vec2(2.0, 2.5) ];
40*35238bceSAndroid Build Coastguard Worker            output float out0 = [ -1.0 | -4.5 ];
41*35238bceSAndroid Build Coastguard Worker        }
42*35238bceSAndroid Build Coastguard Worker
43*35238bceSAndroid Build Coastguard Worker        both ""
44*35238bceSAndroid Build Coastguard Worker            precision mediump float;
45*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
46*35238bceSAndroid Build Coastguard Worker
47*35238bceSAndroid Build Coastguard Worker            float func (vec2 a)
48*35238bceSAndroid Build Coastguard Worker            {
49*35238bceSAndroid Build Coastguard Worker                return -(a.x + a.y);
50*35238bceSAndroid Build Coastguard Worker            }
51*35238bceSAndroid Build Coastguard Worker
52*35238bceSAndroid Build Coastguard Worker            void main()
53*35238bceSAndroid Build Coastguard Worker            {
54*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
55*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
56*35238bceSAndroid Build Coastguard Worker            }
57*35238bceSAndroid Build Coastguard Worker        ""
58*35238bceSAndroid Build Coastguard Worker    end
59*35238bceSAndroid Build Coastguard Worker
60*35238bceSAndroid Build Coastguard Worker    case float_vec3
61*35238bceSAndroid Build Coastguard Worker        values
62*35238bceSAndroid Build Coastguard Worker        {
63*35238bceSAndroid Build Coastguard Worker            input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
64*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 1.0 | -0.5 ];
65*35238bceSAndroid Build Coastguard Worker        }
66*35238bceSAndroid Build Coastguard Worker
67*35238bceSAndroid Build Coastguard Worker        both ""
68*35238bceSAndroid Build Coastguard Worker            precision mediump float;
69*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
70*35238bceSAndroid Build Coastguard Worker
71*35238bceSAndroid Build Coastguard Worker            float func (vec3 a)
72*35238bceSAndroid Build Coastguard Worker            {
73*35238bceSAndroid Build Coastguard Worker                return -(a.x + a.y + a.z);
74*35238bceSAndroid Build Coastguard Worker            }
75*35238bceSAndroid Build Coastguard Worker
76*35238bceSAndroid Build Coastguard Worker            void main()
77*35238bceSAndroid Build Coastguard Worker            {
78*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
79*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
80*35238bceSAndroid Build Coastguard Worker            }
81*35238bceSAndroid Build Coastguard Worker        ""
82*35238bceSAndroid Build Coastguard Worker    end
83*35238bceSAndroid Build Coastguard Worker
84*35238bceSAndroid Build Coastguard Worker    case float_vec4
85*35238bceSAndroid Build Coastguard Worker        values
86*35238bceSAndroid Build Coastguard Worker        {
87*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) ];
88*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
89*35238bceSAndroid Build Coastguard Worker        }
90*35238bceSAndroid Build Coastguard Worker
91*35238bceSAndroid Build Coastguard Worker        both ""
92*35238bceSAndroid Build Coastguard Worker            precision mediump float;
93*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
94*35238bceSAndroid Build Coastguard Worker
95*35238bceSAndroid Build Coastguard Worker            float func (vec4 a)
96*35238bceSAndroid Build Coastguard Worker            {
97*35238bceSAndroid Build Coastguard Worker                return -(a.x + a.y + a.z + a.w);
98*35238bceSAndroid Build Coastguard Worker            }
99*35238bceSAndroid Build Coastguard Worker
100*35238bceSAndroid Build Coastguard Worker            void main()
101*35238bceSAndroid Build Coastguard Worker            {
102*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
103*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
104*35238bceSAndroid Build Coastguard Worker            }
105*35238bceSAndroid Build Coastguard Worker        ""
106*35238bceSAndroid Build Coastguard Worker    end
107*35238bceSAndroid Build Coastguard Worker
108*35238bceSAndroid Build Coastguard Worker    case float_mat2
109*35238bceSAndroid Build Coastguard Worker        values
110*35238bceSAndroid Build Coastguard Worker        {
111*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) ];
112*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
113*35238bceSAndroid Build Coastguard Worker        }
114*35238bceSAndroid Build Coastguard Worker
115*35238bceSAndroid Build Coastguard Worker        both ""
116*35238bceSAndroid Build Coastguard Worker            precision mediump float;
117*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
118*35238bceSAndroid Build Coastguard Worker
119*35238bceSAndroid Build Coastguard Worker            float func (mat2 a)
120*35238bceSAndroid Build Coastguard Worker            {
121*35238bceSAndroid Build Coastguard Worker                return -(a[0][0] + a[0][1] + a[1][0] + a[1][1]);
122*35238bceSAndroid Build Coastguard Worker            }
123*35238bceSAndroid Build Coastguard Worker
124*35238bceSAndroid Build Coastguard Worker            void main()
125*35238bceSAndroid Build Coastguard Worker            {
126*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
127*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
128*35238bceSAndroid Build Coastguard Worker            }
129*35238bceSAndroid Build Coastguard Worker        ""
130*35238bceSAndroid Build Coastguard Worker    end
131*35238bceSAndroid Build Coastguard Worker
132*35238bceSAndroid Build Coastguard Worker    case float_mat3
133*35238bceSAndroid Build Coastguard Worker        values
134*35238bceSAndroid Build Coastguard Worker        {
135*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) ];
136*35238bceSAndroid Build Coastguard Worker            output float out0 = [ -4.5 | -5.0 ];
137*35238bceSAndroid Build Coastguard Worker        }
138*35238bceSAndroid Build Coastguard Worker
139*35238bceSAndroid Build Coastguard Worker        both ""
140*35238bceSAndroid Build Coastguard Worker            precision mediump float;
141*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
142*35238bceSAndroid Build Coastguard Worker
143*35238bceSAndroid Build Coastguard Worker            float func (mat3 a)
144*35238bceSAndroid Build Coastguard Worker            {
145*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]);
146*35238bceSAndroid Build Coastguard Worker            }
147*35238bceSAndroid Build Coastguard Worker
148*35238bceSAndroid Build Coastguard Worker            void main()
149*35238bceSAndroid Build Coastguard Worker            {
150*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
151*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
152*35238bceSAndroid Build Coastguard Worker            }
153*35238bceSAndroid Build Coastguard Worker        ""
154*35238bceSAndroid Build Coastguard Worker    end
155*35238bceSAndroid Build Coastguard Worker
156*35238bceSAndroid Build Coastguard Worker    case float_mat4
157*35238bceSAndroid Build Coastguard Worker        values
158*35238bceSAndroid Build Coastguard Worker        {
159*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) ];
160*35238bceSAndroid Build Coastguard Worker            output float out0 = [ -5.5 | -9.0 ];
161*35238bceSAndroid Build Coastguard Worker        }
162*35238bceSAndroid Build Coastguard Worker
163*35238bceSAndroid Build Coastguard Worker        both ""
164*35238bceSAndroid Build Coastguard Worker            precision mediump float;
165*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
166*35238bceSAndroid Build Coastguard Worker
167*35238bceSAndroid Build Coastguard Worker            float func (mat4 a)
168*35238bceSAndroid Build Coastguard Worker            {
169*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]);
170*35238bceSAndroid Build Coastguard Worker            }
171*35238bceSAndroid Build Coastguard Worker
172*35238bceSAndroid Build Coastguard Worker            void main()
173*35238bceSAndroid Build Coastguard Worker            {
174*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
175*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
176*35238bceSAndroid Build Coastguard Worker            }
177*35238bceSAndroid Build Coastguard Worker        ""
178*35238bceSAndroid Build Coastguard Worker    end
179*35238bceSAndroid Build Coastguard Worker
180*35238bceSAndroid Build Coastguard Worker    case int_int
181*35238bceSAndroid Build Coastguard Worker        values
182*35238bceSAndroid Build Coastguard Worker        {
183*35238bceSAndroid Build Coastguard Worker            input int in0 = [ -1 | 0 | 1 | 4 ];
184*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 1 | 0 | -1 | -4 ];
185*35238bceSAndroid Build Coastguard Worker        }
186*35238bceSAndroid Build Coastguard Worker
187*35238bceSAndroid Build Coastguard Worker        both ""
188*35238bceSAndroid Build Coastguard Worker            precision mediump float;
189*35238bceSAndroid Build Coastguard Worker            precision mediump int;
190*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
191*35238bceSAndroid Build Coastguard Worker
192*35238bceSAndroid Build Coastguard Worker            int func (int a)
193*35238bceSAndroid Build Coastguard Worker            {
194*35238bceSAndroid Build Coastguard Worker                return -a;
195*35238bceSAndroid Build Coastguard Worker            }
196*35238bceSAndroid Build Coastguard Worker
197*35238bceSAndroid Build Coastguard Worker            void main()
198*35238bceSAndroid Build Coastguard Worker            {
199*35238bceSAndroid Build Coastguard Worker                ${SETUP}
200*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
201*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
202*35238bceSAndroid Build Coastguard Worker            }
203*35238bceSAndroid Build Coastguard Worker        ""
204*35238bceSAndroid Build Coastguard Worker    end
205*35238bceSAndroid Build Coastguard Worker
206*35238bceSAndroid Build Coastguard Worker    case int_ivec2
207*35238bceSAndroid Build Coastguard Worker        values
208*35238bceSAndroid Build Coastguard Worker        {
209*35238bceSAndroid Build Coastguard Worker            input ivec2 in0 = [ ivec2(-1, 0) | ivec2(1, 4) ];
210*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 1 | -5 ];
211*35238bceSAndroid Build Coastguard Worker        }
212*35238bceSAndroid Build Coastguard Worker
213*35238bceSAndroid Build Coastguard Worker        both ""
214*35238bceSAndroid Build Coastguard Worker            precision mediump float;
215*35238bceSAndroid Build Coastguard Worker            precision mediump int;
216*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
217*35238bceSAndroid Build Coastguard Worker
218*35238bceSAndroid Build Coastguard Worker            int func (ivec2 a)
219*35238bceSAndroid Build Coastguard Worker            {
220*35238bceSAndroid Build Coastguard Worker                return -(a.x + a.y);
221*35238bceSAndroid Build Coastguard Worker            }
222*35238bceSAndroid Build Coastguard Worker
223*35238bceSAndroid Build Coastguard Worker            void main()
224*35238bceSAndroid Build Coastguard Worker            {
225*35238bceSAndroid Build Coastguard Worker                ${SETUP}
226*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
227*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
228*35238bceSAndroid Build Coastguard Worker            }
229*35238bceSAndroid Build Coastguard Worker        ""
230*35238bceSAndroid Build Coastguard Worker    end
231*35238bceSAndroid Build Coastguard Worker
232*35238bceSAndroid Build Coastguard Worker    case int_ivec3
233*35238bceSAndroid Build Coastguard Worker        values
234*35238bceSAndroid Build Coastguard Worker        {
235*35238bceSAndroid Build Coastguard Worker            input ivec3 in0 = [ ivec3(-1, 0, 2) | ivec3(1, 4, -8) ];
236*35238bceSAndroid Build Coastguard Worker            output int out0 = [ -1 | 3 ];
237*35238bceSAndroid Build Coastguard Worker        }
238*35238bceSAndroid Build Coastguard Worker
239*35238bceSAndroid Build Coastguard Worker        both ""
240*35238bceSAndroid Build Coastguard Worker            precision mediump float;
241*35238bceSAndroid Build Coastguard Worker            precision mediump int;
242*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
243*35238bceSAndroid Build Coastguard Worker
244*35238bceSAndroid Build Coastguard Worker            int func (ivec3 a)
245*35238bceSAndroid Build Coastguard Worker            {
246*35238bceSAndroid Build Coastguard Worker                return -(a.x + a.y + a.z);
247*35238bceSAndroid Build Coastguard Worker            }
248*35238bceSAndroid Build Coastguard Worker
249*35238bceSAndroid Build Coastguard Worker            void main()
250*35238bceSAndroid Build Coastguard Worker            {
251*35238bceSAndroid Build Coastguard Worker                ${SETUP}
252*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
253*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
254*35238bceSAndroid Build Coastguard Worker            }
255*35238bceSAndroid Build Coastguard Worker        ""
256*35238bceSAndroid Build Coastguard Worker    end
257*35238bceSAndroid Build Coastguard Worker
258*35238bceSAndroid Build Coastguard Worker    case int_ivec4
259*35238bceSAndroid Build Coastguard Worker        values
260*35238bceSAndroid Build Coastguard Worker        {
261*35238bceSAndroid Build Coastguard Worker            input ivec4 in0 = [ ivec4(-1, 0, 2, 2) | ivec4(1, 4, -8, 2) ];
262*35238bceSAndroid Build Coastguard Worker            output int out0 = [ -3 | 1 ];
263*35238bceSAndroid Build Coastguard Worker        }
264*35238bceSAndroid Build Coastguard Worker
265*35238bceSAndroid Build Coastguard Worker        both ""
266*35238bceSAndroid Build Coastguard Worker            precision mediump float;
267*35238bceSAndroid Build Coastguard Worker            precision mediump int;
268*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
269*35238bceSAndroid Build Coastguard Worker
270*35238bceSAndroid Build Coastguard Worker            int func (ivec4 a)
271*35238bceSAndroid Build Coastguard Worker            {
272*35238bceSAndroid Build Coastguard Worker                return -(a.x + a.y + a.z + a.w);
273*35238bceSAndroid Build Coastguard Worker            }
274*35238bceSAndroid Build Coastguard Worker
275*35238bceSAndroid Build Coastguard Worker            void main()
276*35238bceSAndroid Build Coastguard Worker            {
277*35238bceSAndroid Build Coastguard Worker                ${SETUP}
278*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
279*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
280*35238bceSAndroid Build Coastguard Worker            }
281*35238bceSAndroid Build Coastguard Worker        ""
282*35238bceSAndroid Build Coastguard Worker    end
283*35238bceSAndroid Build Coastguard Worker
284*35238bceSAndroid Build Coastguard Worker    case bool_bool
285*35238bceSAndroid Build Coastguard Worker        values
286*35238bceSAndroid Build Coastguard Worker        {
287*35238bceSAndroid Build Coastguard Worker            input bool in0 = [ true | false ];
288*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true ];
289*35238bceSAndroid Build Coastguard Worker        }
290*35238bceSAndroid Build Coastguard Worker
291*35238bceSAndroid Build Coastguard Worker        both ""
292*35238bceSAndroid Build Coastguard Worker            precision mediump float;
293*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
294*35238bceSAndroid Build Coastguard Worker
295*35238bceSAndroid Build Coastguard Worker            bool func (bool a)
296*35238bceSAndroid Build Coastguard Worker            {
297*35238bceSAndroid Build Coastguard Worker                return !a;
298*35238bceSAndroid Build Coastguard Worker            }
299*35238bceSAndroid Build Coastguard Worker
300*35238bceSAndroid Build Coastguard Worker            void main()
301*35238bceSAndroid Build Coastguard Worker            {
302*35238bceSAndroid Build Coastguard Worker                ${SETUP}
303*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
304*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
305*35238bceSAndroid Build Coastguard Worker            }
306*35238bceSAndroid Build Coastguard Worker        ""
307*35238bceSAndroid Build Coastguard Worker    end
308*35238bceSAndroid Build Coastguard Worker
309*35238bceSAndroid Build Coastguard Worker    case bool_bvec2
310*35238bceSAndroid Build Coastguard Worker        values
311*35238bceSAndroid Build Coastguard Worker        {
312*35238bceSAndroid Build Coastguard Worker            input bvec2 in0 = [ bvec2(true, true) | bvec2(false, true) ];
313*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true ];
314*35238bceSAndroid Build Coastguard Worker        }
315*35238bceSAndroid Build Coastguard Worker
316*35238bceSAndroid Build Coastguard Worker        both ""
317*35238bceSAndroid Build Coastguard Worker            precision mediump float;
318*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
319*35238bceSAndroid Build Coastguard Worker
320*35238bceSAndroid Build Coastguard Worker            bool func (bvec2 a)
321*35238bceSAndroid Build Coastguard Worker            {
322*35238bceSAndroid Build Coastguard Worker                return !(a.x == a.y);
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 bool_bvec3
335*35238bceSAndroid Build Coastguard Worker        values
336*35238bceSAndroid Build Coastguard Worker        {
337*35238bceSAndroid Build Coastguard Worker            input bvec3 in0 = [ bvec3(true, true, false) | bvec3(true, false, false) ];
338*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true ];
339*35238bceSAndroid Build Coastguard Worker        }
340*35238bceSAndroid Build Coastguard Worker
341*35238bceSAndroid Build Coastguard Worker        both ""
342*35238bceSAndroid Build Coastguard Worker            precision mediump float;
343*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
344*35238bceSAndroid Build Coastguard Worker
345*35238bceSAndroid Build Coastguard Worker            bool func (bvec3 a)
346*35238bceSAndroid Build Coastguard Worker            {
347*35238bceSAndroid Build Coastguard Worker                return (a.x == a.y) == a.z;
348*35238bceSAndroid Build Coastguard Worker            }
349*35238bceSAndroid Build Coastguard Worker
350*35238bceSAndroid Build Coastguard Worker            void main()
351*35238bceSAndroid Build Coastguard Worker            {
352*35238bceSAndroid Build Coastguard Worker                ${SETUP}
353*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
354*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
355*35238bceSAndroid Build Coastguard Worker            }
356*35238bceSAndroid Build Coastguard Worker        ""
357*35238bceSAndroid Build Coastguard Worker    end
358*35238bceSAndroid Build Coastguard Worker
359*35238bceSAndroid Build Coastguard Worker    case bool_bvec4
360*35238bceSAndroid Build Coastguard Worker        values
361*35238bceSAndroid Build Coastguard Worker        {
362*35238bceSAndroid Build Coastguard Worker            input bvec4 in0 = [ bvec4(true, true, true, false) | bvec4(false, false, true, true) | bvec4(true, false, false, true) ];
363*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true | true ];
364*35238bceSAndroid Build Coastguard Worker        }
365*35238bceSAndroid Build Coastguard Worker
366*35238bceSAndroid Build Coastguard Worker        both ""
367*35238bceSAndroid Build Coastguard Worker            precision mediump float;
368*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
369*35238bceSAndroid Build Coastguard Worker
370*35238bceSAndroid Build Coastguard Worker            bool func (bvec4 a)
371*35238bceSAndroid Build Coastguard Worker            {
372*35238bceSAndroid Build Coastguard Worker                return ((a.x == a.y) == (a.z == a.w));
373*35238bceSAndroid Build Coastguard Worker            }
374*35238bceSAndroid Build Coastguard Worker
375*35238bceSAndroid Build Coastguard Worker            void main()
376*35238bceSAndroid Build Coastguard Worker            {
377*35238bceSAndroid Build Coastguard Worker                ${SETUP}
378*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
379*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
380*35238bceSAndroid Build Coastguard Worker            }
381*35238bceSAndroid Build Coastguard Worker        ""
382*35238bceSAndroid Build Coastguard Worker    end
383*35238bceSAndroid Build Coastguard Worker
384*35238bceSAndroid Build Coastguard Worker    case mat2
385*35238bceSAndroid Build Coastguard Worker        values
386*35238bceSAndroid Build Coastguard Worker        {
387*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) ];
388*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) ];
389*35238bceSAndroid Build Coastguard Worker        }
390*35238bceSAndroid Build Coastguard Worker
391*35238bceSAndroid Build Coastguard Worker        both ""
392*35238bceSAndroid Build Coastguard Worker            precision mediump float;
393*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
394*35238bceSAndroid Build Coastguard Worker
395*35238bceSAndroid Build Coastguard Worker            mat2 func (mat2 a)
396*35238bceSAndroid Build Coastguard Worker            {
397*35238bceSAndroid Build Coastguard Worker                return -2.0*a;
398*35238bceSAndroid Build Coastguard Worker            }
399*35238bceSAndroid Build Coastguard Worker
400*35238bceSAndroid Build Coastguard Worker            void main()
401*35238bceSAndroid Build Coastguard Worker            {
402*35238bceSAndroid Build Coastguard Worker                ${SETUP}
403*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
404*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
405*35238bceSAndroid Build Coastguard Worker            }
406*35238bceSAndroid Build Coastguard Worker        ""
407*35238bceSAndroid Build Coastguard Worker    end
408*35238bceSAndroid Build Coastguard Worker
409*35238bceSAndroid Build Coastguard Worker
410*35238bceSAndroid Build Coastguard Worker    case mat3
411*35238bceSAndroid Build Coastguard Worker        values
412*35238bceSAndroid Build Coastguard Worker        {
413*35238bceSAndroid Build Coastguard Worker            input mat3 in0 = [ mat3(2.5, 0.0, 1.0, -2.5, 1.0, 3.0, 0.0, 2.0, 1.5) | mat3(-3.5, 2.0, 0.5, -1.5, -3.5, 2.5, 0.0, 1.5, 3.0) | mat3(1.5, 3.0, -1.0, 2.5, -0.5, 3.5, 3.0, -3.0, -2.5) ];
414*35238bceSAndroid Build Coastguard Worker            output mat3 out0 = [ mat3(-5.0, -0.0, -2.0, 5.0, -2.0, -6.0, -0.0, -4.0, -3.0) | mat3(7.0, -4.0, -1.0, 3.0, 7.0, -5.0, -0.0, -3.0, -6.0) | mat3(-3.0, -6.0, 2.0, -5.0, 1.0, -7.0, -6.0, 6.0, 5.0) ];
415*35238bceSAndroid Build Coastguard Worker        }
416*35238bceSAndroid Build Coastguard Worker
417*35238bceSAndroid Build Coastguard Worker        both ""
418*35238bceSAndroid Build Coastguard Worker            precision mediump float;
419*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
420*35238bceSAndroid Build Coastguard Worker
421*35238bceSAndroid Build Coastguard Worker            mat3 func (mat3 a)
422*35238bceSAndroid Build Coastguard Worker            {
423*35238bceSAndroid Build Coastguard Worker                return -2.0*a;
424*35238bceSAndroid Build Coastguard Worker            }
425*35238bceSAndroid Build Coastguard Worker
426*35238bceSAndroid Build Coastguard Worker            void main()
427*35238bceSAndroid Build Coastguard Worker            {
428*35238bceSAndroid Build Coastguard Worker                ${SETUP}
429*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
430*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
431*35238bceSAndroid Build Coastguard Worker            }
432*35238bceSAndroid Build Coastguard Worker        ""
433*35238bceSAndroid Build Coastguard Worker    end
434*35238bceSAndroid Build Coastguard Worker
435*35238bceSAndroid Build Coastguard Worker
436*35238bceSAndroid Build Coastguard Worker    case mat4
437*35238bceSAndroid Build Coastguard Worker        values
438*35238bceSAndroid Build Coastguard Worker        {
439*35238bceSAndroid Build Coastguard Worker            input mat4 in0 = [ mat4(-2.0, 3.5, -0.5, 1.0, -1.5, 0.0, -1.0, -1.0, 0.5, 0.5, 3.0, 1.5, 3.0, 2.5, 3.5, 1.5) | mat4(-2.5, 2.5, 3.5, 3.0, 0.5, 1.5, -2.0, 2.5, 0.5, -1.5, -3.5, 2.5, 3.5, -3.0, 2.5, -0.5) | mat4(-2.5, -1.5, 2.0, 3.0, -3.5, 1.0, -3.5, 1.5, -1.5, 3.0, 3.5, 0.0, 3.5, -1.5, -3.0, 0.5) ];
440*35238bceSAndroid Build Coastguard Worker            output mat4 out0 = [ mat4(4.0, -7.0, 1.0, -2.0, 3.0, -0.0, 2.0, 2.0, -1.0, -1.0, -6.0, -3.0, -6.0, -5.0, -7.0, -3.0) | mat4(5.0, -5.0, -7.0, -6.0, -1.0, -3.0, 4.0, -5.0, -1.0, 3.0, 7.0, -5.0, -7.0, 6.0, -5.0, 1.0) | mat4(5.0, 3.0, -4.0, -6.0, 7.0, -2.0, 7.0, -3.0, 3.0, -6.0, -7.0, -0.0, -7.0, 3.0, 6.0, -1.0) ];
441*35238bceSAndroid Build Coastguard Worker        }
442*35238bceSAndroid Build Coastguard Worker
443*35238bceSAndroid Build Coastguard Worker        both ""
444*35238bceSAndroid Build Coastguard Worker            precision mediump float;
445*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
446*35238bceSAndroid Build Coastguard Worker
447*35238bceSAndroid Build Coastguard Worker            mat4 func (mat4 a)
448*35238bceSAndroid Build Coastguard Worker            {
449*35238bceSAndroid Build Coastguard Worker                return -2.0*a;
450*35238bceSAndroid Build Coastguard Worker            }
451*35238bceSAndroid Build Coastguard Worker
452*35238bceSAndroid Build Coastguard Worker            void main()
453*35238bceSAndroid Build Coastguard Worker            {
454*35238bceSAndroid Build Coastguard Worker                ${SETUP}
455*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
456*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
457*35238bceSAndroid Build Coastguard Worker            }
458*35238bceSAndroid Build Coastguard Worker        ""
459*35238bceSAndroid Build Coastguard Worker    end
460*35238bceSAndroid Build Coastguard Worker
461*35238bceSAndroid Build Coastguard Worker    case float_struct
462*35238bceSAndroid Build Coastguard Worker        values
463*35238bceSAndroid Build Coastguard Worker        {
464*35238bceSAndroid Build Coastguard Worker            input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
465*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 1.0 | -0.5 ];
466*35238bceSAndroid Build Coastguard Worker        }
467*35238bceSAndroid Build Coastguard Worker
468*35238bceSAndroid Build Coastguard Worker        both ""
469*35238bceSAndroid Build Coastguard Worker            precision mediump float;
470*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
471*35238bceSAndroid Build Coastguard Worker
472*35238bceSAndroid Build Coastguard Worker            struct Pos { float a, b, c; };
473*35238bceSAndroid Build Coastguard Worker
474*35238bceSAndroid Build Coastguard Worker            float func (Pos p)
475*35238bceSAndroid Build Coastguard Worker            {
476*35238bceSAndroid Build Coastguard Worker                return -(p.a + p.b + p.c);
477*35238bceSAndroid Build Coastguard Worker            }
478*35238bceSAndroid Build Coastguard Worker
479*35238bceSAndroid Build Coastguard Worker            void main()
480*35238bceSAndroid Build Coastguard Worker            {
481*35238bceSAndroid Build Coastguard Worker                Pos p = Pos(in0.x, in0.y, in0.z);
482*35238bceSAndroid Build Coastguard Worker                out0 = func(p);
483*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
484*35238bceSAndroid Build Coastguard Worker            }
485*35238bceSAndroid Build Coastguard Worker        ""
486*35238bceSAndroid Build Coastguard Worker    end
487*35238bceSAndroid Build Coastguard Worker
488*35238bceSAndroid Build Coastguard Worker    case struct_struct
489*35238bceSAndroid Build Coastguard Worker        values
490*35238bceSAndroid Build Coastguard Worker        {
491*35238bceSAndroid Build Coastguard Worker            input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
492*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 1.0 | -0.5 ];
493*35238bceSAndroid Build Coastguard Worker        }
494*35238bceSAndroid Build Coastguard Worker
495*35238bceSAndroid Build Coastguard Worker        both ""
496*35238bceSAndroid Build Coastguard Worker            precision mediump float;
497*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
498*35238bceSAndroid Build Coastguard Worker
499*35238bceSAndroid Build Coastguard Worker            struct Pos { float a, b, c; };
500*35238bceSAndroid Build Coastguard Worker
501*35238bceSAndroid Build Coastguard Worker            Pos func (Pos p)
502*35238bceSAndroid Build Coastguard Worker            {
503*35238bceSAndroid Build Coastguard Worker                return Pos(-p.a, -p.b, -p.c);
504*35238bceSAndroid Build Coastguard Worker            }
505*35238bceSAndroid Build Coastguard Worker
506*35238bceSAndroid Build Coastguard Worker            void main()
507*35238bceSAndroid Build Coastguard Worker            {
508*35238bceSAndroid Build Coastguard Worker                Pos p = Pos(in0.x, in0.y, in0.z);
509*35238bceSAndroid Build Coastguard Worker                p = func(p);
510*35238bceSAndroid Build Coastguard Worker                out0 = p.a + p.b + p.c;
511*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
512*35238bceSAndroid Build Coastguard Worker            }
513*35238bceSAndroid Build Coastguard Worker        ""
514*35238bceSAndroid Build Coastguard Worker    end
515*35238bceSAndroid Build Coastguard Worker
516*35238bceSAndroid Build Coastguard Worker    case struct_nested_struct
517*35238bceSAndroid Build Coastguard Worker        values
518*35238bceSAndroid Build Coastguard Worker        {
519*35238bceSAndroid Build Coastguard Worker            input vec3 in0 = [ vec3(0.0, 1.0, -2.0) | vec3(2.0, 2.5, -4.0) ];
520*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 1.0 | -0.5 ];
521*35238bceSAndroid Build Coastguard Worker        }
522*35238bceSAndroid Build Coastguard Worker
523*35238bceSAndroid Build Coastguard Worker        both ""
524*35238bceSAndroid Build Coastguard Worker            precision mediump float;
525*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
526*35238bceSAndroid Build Coastguard Worker
527*35238bceSAndroid Build Coastguard Worker            struct Pos { float a, b, c; };
528*35238bceSAndroid Build Coastguard Worker            struct Line { Pos start, end; };
529*35238bceSAndroid Build Coastguard Worker
530*35238bceSAndroid Build Coastguard Worker            Line func (Pos p)
531*35238bceSAndroid Build Coastguard Worker            {
532*35238bceSAndroid Build Coastguard Worker                return Line(p, Pos(-p.a, -p.b, -p.c));
533*35238bceSAndroid Build Coastguard Worker            }
534*35238bceSAndroid Build Coastguard Worker
535*35238bceSAndroid Build Coastguard Worker            float sum (Pos p)
536*35238bceSAndroid Build Coastguard Worker            {
537*35238bceSAndroid Build Coastguard Worker                return (p.a + p.b + p.c);
538*35238bceSAndroid Build Coastguard Worker            }
539*35238bceSAndroid Build Coastguard Worker
540*35238bceSAndroid Build Coastguard Worker            void main()
541*35238bceSAndroid Build Coastguard Worker            {
542*35238bceSAndroid Build Coastguard Worker                Pos p = Pos(in0.x, in0.y, in0.z);
543*35238bceSAndroid Build Coastguard Worker                Line line = func(p);
544*35238bceSAndroid Build Coastguard Worker                out0 = sum(line.start) + (2.0 * sum(line.end));
545*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
546*35238bceSAndroid Build Coastguard Worker            }
547*35238bceSAndroid Build Coastguard Worker        ""
548*35238bceSAndroid Build Coastguard Worker    end
549*35238bceSAndroid Build Coastguard Worker
550*35238bceSAndroid Build Coastguard Worker    case struct_constructor_highp_in_fragment
551*35238bceSAndroid Build Coastguard Worker        desc "passing highp vector to struct constructor in fragment shader yields all zeros"
552*35238bceSAndroid Build Coastguard Worker        vertex ""
553*35238bceSAndroid Build Coastguard Worker            ${VERTEX_DECLARATIONS}
554*35238bceSAndroid Build Coastguard Worker            void main()
555*35238bceSAndroid Build Coastguard Worker            {
556*35238bceSAndroid Build Coastguard Worker                ${VERTEX_OUTPUT}
557*35238bceSAndroid Build Coastguard Worker            }
558*35238bceSAndroid Build Coastguard Worker        ""
559*35238bceSAndroid Build Coastguard Worker        fragment ""
560*35238bceSAndroid Build Coastguard Worker            #ifdef GL_FRAGMENT_PRECISION_HIGH
561*35238bceSAndroid Build Coastguard Worker            #define PRECISION highp
562*35238bceSAndroid Build Coastguard Worker            #else
563*35238bceSAndroid Build Coastguard Worker            #define PRECISION mediump
564*35238bceSAndroid Build Coastguard Worker            #endif
565*35238bceSAndroid Build Coastguard Worker            struct Test {
566*35238bceSAndroid Build Coastguard Worker                PRECISION vec3 color;
567*35238bceSAndroid Build Coastguard Worker            } ;
568*35238bceSAndroid Build Coastguard Worker            void main() {
569*35238bceSAndroid Build Coastguard Worker                PRECISION vec3 color = vec3(0.2, 2.0, 0.1);
570*35238bceSAndroid Build Coastguard Worker                Test test = Test(color);
571*35238bceSAndroid Build Coastguard Worker                // Bias the color so all components are guaranteed > 1.0.
572*35238bceSAndroid Build Coastguard Worker                gl_FragColor = vec4(vec3(0.25, 0.55, 0.65) + vec3(4.0, 0.25, 4.0) * test.color, 1.0);
573*35238bceSAndroid Build Coastguard Worker            }
574*35238bceSAndroid Build Coastguard Worker        ""
575*35238bceSAndroid Build Coastguard Worker    end
576*35238bceSAndroid Build Coastguard Worker
577*35238bceSAndroid Build Coastguard Workerend # datatypes
578*35238bceSAndroid Build Coastguard Worker
579*35238bceSAndroid Build Coastguard Workergroup qualifiers "Function Parameter Qualifiers"
580*35238bceSAndroid Build Coastguard Worker
581*35238bceSAndroid Build Coastguard Worker    case in_float
582*35238bceSAndroid Build Coastguard Worker        values
583*35238bceSAndroid Build Coastguard Worker        {
584*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
585*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
586*35238bceSAndroid Build Coastguard Worker        }
587*35238bceSAndroid Build Coastguard Worker
588*35238bceSAndroid Build Coastguard Worker        both ""
589*35238bceSAndroid Build Coastguard Worker            precision mediump float;
590*35238bceSAndroid Build Coastguard Worker            precision mediump int;
591*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
592*35238bceSAndroid Build Coastguard Worker
593*35238bceSAndroid Build Coastguard Worker            float func (in float a)
594*35238bceSAndroid Build Coastguard Worker            {
595*35238bceSAndroid Build Coastguard Worker                a = -a;
596*35238bceSAndroid Build Coastguard Worker                return 2.0 * a;
597*35238bceSAndroid Build Coastguard Worker            }
598*35238bceSAndroid Build Coastguard Worker
599*35238bceSAndroid Build Coastguard Worker            void main()
600*35238bceSAndroid Build Coastguard Worker            {
601*35238bceSAndroid Build Coastguard Worker                ${SETUP}
602*35238bceSAndroid Build Coastguard Worker                float f = in0;
603*35238bceSAndroid Build Coastguard Worker                float g = func(f);
604*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
605*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
606*35238bceSAndroid Build Coastguard Worker            }
607*35238bceSAndroid Build Coastguard Worker        ""
608*35238bceSAndroid Build Coastguard Worker    end
609*35238bceSAndroid Build Coastguard Worker
610*35238bceSAndroid Build Coastguard Worker    case out_float
611*35238bceSAndroid Build Coastguard Worker        values
612*35238bceSAndroid Build Coastguard Worker        {
613*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
614*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
615*35238bceSAndroid Build Coastguard Worker        }
616*35238bceSAndroid Build Coastguard Worker
617*35238bceSAndroid Build Coastguard Worker        both ""
618*35238bceSAndroid Build Coastguard Worker            precision mediump float;
619*35238bceSAndroid Build Coastguard Worker            precision mediump int;
620*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
621*35238bceSAndroid Build Coastguard Worker
622*35238bceSAndroid Build Coastguard Worker            void func (out float a)
623*35238bceSAndroid Build Coastguard Worker            {
624*35238bceSAndroid Build Coastguard Worker                a = -1.0;
625*35238bceSAndroid Build Coastguard Worker            }
626*35238bceSAndroid Build Coastguard Worker
627*35238bceSAndroid Build Coastguard Worker            void main()
628*35238bceSAndroid Build Coastguard Worker            {
629*35238bceSAndroid Build Coastguard Worker                ${SETUP}
630*35238bceSAndroid Build Coastguard Worker                float f = 1.0;
631*35238bceSAndroid Build Coastguard Worker                func(f);
632*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
633*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
634*35238bceSAndroid Build Coastguard Worker            }
635*35238bceSAndroid Build Coastguard Worker        ""
636*35238bceSAndroid Build Coastguard Worker    end
637*35238bceSAndroid Build Coastguard Worker
638*35238bceSAndroid Build Coastguard Worker    case inout_float
639*35238bceSAndroid Build Coastguard Worker        values
640*35238bceSAndroid Build Coastguard Worker        {
641*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
642*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
643*35238bceSAndroid Build Coastguard Worker        }
644*35238bceSAndroid Build Coastguard Worker
645*35238bceSAndroid Build Coastguard Worker        both ""
646*35238bceSAndroid Build Coastguard Worker            precision mediump float;
647*35238bceSAndroid Build Coastguard Worker            precision mediump int;
648*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
649*35238bceSAndroid Build Coastguard Worker
650*35238bceSAndroid Build Coastguard Worker            void func (inout float a)
651*35238bceSAndroid Build Coastguard Worker            {
652*35238bceSAndroid Build Coastguard Worker                a = -a;
653*35238bceSAndroid Build Coastguard Worker            }
654*35238bceSAndroid Build Coastguard Worker
655*35238bceSAndroid Build Coastguard Worker            void main()
656*35238bceSAndroid Build Coastguard Worker            {
657*35238bceSAndroid Build Coastguard Worker                ${SETUP}
658*35238bceSAndroid Build Coastguard Worker                float f = 1.0;
659*35238bceSAndroid Build Coastguard Worker                func(f);
660*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
661*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
662*35238bceSAndroid Build Coastguard Worker            }
663*35238bceSAndroid Build Coastguard Worker        ""
664*35238bceSAndroid Build Coastguard Worker    end
665*35238bceSAndroid Build Coastguard Worker
666*35238bceSAndroid Build Coastguard Worker    case in_lowp_float
667*35238bceSAndroid Build Coastguard Worker        values
668*35238bceSAndroid Build Coastguard Worker        {
669*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
670*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
671*35238bceSAndroid Build Coastguard Worker        }
672*35238bceSAndroid Build Coastguard Worker
673*35238bceSAndroid Build Coastguard Worker        both ""
674*35238bceSAndroid Build Coastguard Worker            precision mediump float;
675*35238bceSAndroid Build Coastguard Worker            precision mediump int;
676*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
677*35238bceSAndroid Build Coastguard Worker
678*35238bceSAndroid Build Coastguard Worker            float func (in lowp float a)
679*35238bceSAndroid Build Coastguard Worker            {
680*35238bceSAndroid Build Coastguard Worker                a = -a;
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                float f = in0;
688*35238bceSAndroid Build Coastguard Worker                float g = func(f);
689*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
690*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
691*35238bceSAndroid Build Coastguard Worker            }
692*35238bceSAndroid Build Coastguard Worker        ""
693*35238bceSAndroid Build Coastguard Worker    end
694*35238bceSAndroid Build Coastguard Worker
695*35238bceSAndroid Build Coastguard Worker    case out_lowp_float
696*35238bceSAndroid Build Coastguard Worker        values
697*35238bceSAndroid Build Coastguard Worker        {
698*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
699*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
700*35238bceSAndroid Build Coastguard Worker        }
701*35238bceSAndroid Build Coastguard Worker
702*35238bceSAndroid Build Coastguard Worker        both ""
703*35238bceSAndroid Build Coastguard Worker            precision mediump float;
704*35238bceSAndroid Build Coastguard Worker            precision mediump int;
705*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
706*35238bceSAndroid Build Coastguard Worker
707*35238bceSAndroid Build Coastguard Worker            void func (out lowp float a)
708*35238bceSAndroid Build Coastguard Worker            {
709*35238bceSAndroid Build Coastguard Worker                a = -1.0;
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                float f = 1.0;
716*35238bceSAndroid Build Coastguard Worker                func(f);
717*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
718*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
719*35238bceSAndroid Build Coastguard Worker            }
720*35238bceSAndroid Build Coastguard Worker        ""
721*35238bceSAndroid Build Coastguard Worker    end
722*35238bceSAndroid Build Coastguard Worker
723*35238bceSAndroid Build Coastguard Worker    case inout_lowp_float
724*35238bceSAndroid Build Coastguard Worker        values
725*35238bceSAndroid Build Coastguard Worker        {
726*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
727*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
728*35238bceSAndroid Build Coastguard Worker        }
729*35238bceSAndroid Build Coastguard Worker
730*35238bceSAndroid Build Coastguard Worker        both ""
731*35238bceSAndroid Build Coastguard Worker            precision mediump float;
732*35238bceSAndroid Build Coastguard Worker            precision mediump int;
733*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
734*35238bceSAndroid Build Coastguard Worker
735*35238bceSAndroid Build Coastguard Worker            void func (inout lowp float a)
736*35238bceSAndroid Build Coastguard Worker            {
737*35238bceSAndroid Build Coastguard Worker                a = -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                float f = 1.0;
744*35238bceSAndroid Build Coastguard Worker                func(f);
745*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
746*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
747*35238bceSAndroid Build Coastguard Worker            }
748*35238bceSAndroid Build Coastguard Worker        ""
749*35238bceSAndroid Build Coastguard Worker    end
750*35238bceSAndroid Build Coastguard Worker
751*35238bceSAndroid Build Coastguard Worker    case in_highp_float
752*35238bceSAndroid Build Coastguard Worker        values
753*35238bceSAndroid Build Coastguard Worker        {
754*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
755*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
756*35238bceSAndroid Build Coastguard Worker        }
757*35238bceSAndroid Build Coastguard Worker
758*35238bceSAndroid Build Coastguard Worker        both ""
759*35238bceSAndroid Build Coastguard Worker            precision mediump float;
760*35238bceSAndroid Build Coastguard Worker            precision mediump int;
761*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
762*35238bceSAndroid Build Coastguard Worker
763*35238bceSAndroid Build Coastguard Worker            float func (in highp float a)
764*35238bceSAndroid Build Coastguard Worker            {
765*35238bceSAndroid Build Coastguard Worker                a = -a;
766*35238bceSAndroid Build Coastguard Worker                return 2.0 * a;
767*35238bceSAndroid Build Coastguard Worker            }
768*35238bceSAndroid Build Coastguard Worker
769*35238bceSAndroid Build Coastguard Worker            void main()
770*35238bceSAndroid Build Coastguard Worker            {
771*35238bceSAndroid Build Coastguard Worker                ${SETUP}
772*35238bceSAndroid Build Coastguard Worker                float f = in0;
773*35238bceSAndroid Build Coastguard Worker                float g = func(f);
774*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
775*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
776*35238bceSAndroid Build Coastguard Worker            }
777*35238bceSAndroid Build Coastguard Worker        ""
778*35238bceSAndroid Build Coastguard Worker    end
779*35238bceSAndroid Build Coastguard Worker
780*35238bceSAndroid Build Coastguard Worker    case out_highp_float
781*35238bceSAndroid Build Coastguard Worker        values
782*35238bceSAndroid Build Coastguard Worker        {
783*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
784*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
785*35238bceSAndroid Build Coastguard Worker        }
786*35238bceSAndroid Build Coastguard Worker
787*35238bceSAndroid Build Coastguard Worker        both ""
788*35238bceSAndroid Build Coastguard Worker            precision mediump float;
789*35238bceSAndroid Build Coastguard Worker            precision mediump int;
790*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
791*35238bceSAndroid Build Coastguard Worker
792*35238bceSAndroid Build Coastguard Worker            void func (out highp float a)
793*35238bceSAndroid Build Coastguard Worker            {
794*35238bceSAndroid Build Coastguard Worker                a = -1.0;
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                ${SETUP}
800*35238bceSAndroid Build Coastguard Worker                float f = 1.0;
801*35238bceSAndroid Build Coastguard Worker                func(f);
802*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
803*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
804*35238bceSAndroid Build Coastguard Worker            }
805*35238bceSAndroid Build Coastguard Worker        ""
806*35238bceSAndroid Build Coastguard Worker    end
807*35238bceSAndroid Build Coastguard Worker
808*35238bceSAndroid Build Coastguard Worker    case inout_highp_float
809*35238bceSAndroid Build Coastguard Worker        values
810*35238bceSAndroid Build Coastguard Worker        {
811*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
812*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
813*35238bceSAndroid Build Coastguard Worker        }
814*35238bceSAndroid Build Coastguard Worker
815*35238bceSAndroid Build Coastguard Worker        both ""
816*35238bceSAndroid Build Coastguard Worker            precision mediump float;
817*35238bceSAndroid Build Coastguard Worker            precision mediump int;
818*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
819*35238bceSAndroid Build Coastguard Worker
820*35238bceSAndroid Build Coastguard Worker            void func (inout highp float a)
821*35238bceSAndroid Build Coastguard Worker            {
822*35238bceSAndroid Build Coastguard Worker                a = -a;
823*35238bceSAndroid Build Coastguard Worker            }
824*35238bceSAndroid Build Coastguard Worker
825*35238bceSAndroid Build Coastguard Worker            void main()
826*35238bceSAndroid Build Coastguard Worker            {
827*35238bceSAndroid Build Coastguard Worker                ${SETUP}
828*35238bceSAndroid Build Coastguard Worker                float f = 1.0;
829*35238bceSAndroid Build Coastguard Worker                func(f);
830*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
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 const_float
837*35238bceSAndroid Build Coastguard Worker        values
838*35238bceSAndroid Build Coastguard Worker        {
839*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
840*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
841*35238bceSAndroid Build Coastguard Worker        }
842*35238bceSAndroid Build Coastguard Worker
843*35238bceSAndroid Build Coastguard Worker        both ""
844*35238bceSAndroid Build Coastguard Worker            precision mediump float;
845*35238bceSAndroid Build Coastguard Worker            precision mediump int;
846*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
847*35238bceSAndroid Build Coastguard Worker
848*35238bceSAndroid Build Coastguard Worker            float func (const float a)
849*35238bceSAndroid Build Coastguard Worker            {
850*35238bceSAndroid Build Coastguard Worker                float b = -a;
851*35238bceSAndroid Build Coastguard Worker                return 2.0 * b;
852*35238bceSAndroid Build Coastguard Worker            }
853*35238bceSAndroid Build Coastguard Worker
854*35238bceSAndroid Build Coastguard Worker            void main()
855*35238bceSAndroid Build Coastguard Worker            {
856*35238bceSAndroid Build Coastguard Worker                ${SETUP}
857*35238bceSAndroid Build Coastguard Worker                float f = in0;
858*35238bceSAndroid Build Coastguard Worker                float g = func(f);
859*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
860*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
861*35238bceSAndroid Build Coastguard Worker            }
862*35238bceSAndroid Build Coastguard Worker        ""
863*35238bceSAndroid Build Coastguard Worker    end
864*35238bceSAndroid Build Coastguard Worker
865*35238bceSAndroid Build Coastguard Worker    case const_in_float
866*35238bceSAndroid Build Coastguard Worker        values
867*35238bceSAndroid Build Coastguard Worker        {
868*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
869*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
870*35238bceSAndroid Build Coastguard Worker        }
871*35238bceSAndroid Build Coastguard Worker
872*35238bceSAndroid Build Coastguard Worker        both ""
873*35238bceSAndroid Build Coastguard Worker            precision mediump float;
874*35238bceSAndroid Build Coastguard Worker            precision mediump int;
875*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
876*35238bceSAndroid Build Coastguard Worker
877*35238bceSAndroid Build Coastguard Worker            float func (const in float a)
878*35238bceSAndroid Build Coastguard Worker            {
879*35238bceSAndroid Build Coastguard Worker                float b = -a;
880*35238bceSAndroid Build Coastguard Worker                return 2.0 * b;
881*35238bceSAndroid Build Coastguard Worker            }
882*35238bceSAndroid Build Coastguard Worker
883*35238bceSAndroid Build Coastguard Worker            void main()
884*35238bceSAndroid Build Coastguard Worker            {
885*35238bceSAndroid Build Coastguard Worker                ${SETUP}
886*35238bceSAndroid Build Coastguard Worker                float f = in0;
887*35238bceSAndroid Build Coastguard Worker                float g = func(f);
888*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
889*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
890*35238bceSAndroid Build Coastguard Worker            }
891*35238bceSAndroid Build Coastguard Worker        ""
892*35238bceSAndroid Build Coastguard Worker    end
893*35238bceSAndroid Build Coastguard Worker
894*35238bceSAndroid Build Coastguard Worker    case in_int
895*35238bceSAndroid Build Coastguard Worker        values
896*35238bceSAndroid Build Coastguard Worker        {
897*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 4 ];
898*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -4 ];
899*35238bceSAndroid Build Coastguard Worker        }
900*35238bceSAndroid Build Coastguard Worker
901*35238bceSAndroid Build Coastguard Worker        both ""
902*35238bceSAndroid Build Coastguard Worker            precision mediump float;
903*35238bceSAndroid Build Coastguard Worker            precision mediump int;
904*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
905*35238bceSAndroid Build Coastguard Worker
906*35238bceSAndroid Build Coastguard Worker            int func (in int a)
907*35238bceSAndroid Build Coastguard Worker            {
908*35238bceSAndroid Build Coastguard Worker                a = -a;
909*35238bceSAndroid Build Coastguard Worker                return 2 * a;
910*35238bceSAndroid Build Coastguard Worker            }
911*35238bceSAndroid Build Coastguard Worker
912*35238bceSAndroid Build Coastguard Worker            void main()
913*35238bceSAndroid Build Coastguard Worker            {
914*35238bceSAndroid Build Coastguard Worker                ${SETUP}
915*35238bceSAndroid Build Coastguard Worker                int f = in0;
916*35238bceSAndroid Build Coastguard Worker                int g = func(f);
917*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
918*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
919*35238bceSAndroid Build Coastguard Worker            }
920*35238bceSAndroid Build Coastguard Worker        ""
921*35238bceSAndroid Build Coastguard Worker    end
922*35238bceSAndroid Build Coastguard Worker
923*35238bceSAndroid Build Coastguard Worker    case out_int
924*35238bceSAndroid Build Coastguard Worker        values
925*35238bceSAndroid Build Coastguard Worker        {
926*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
927*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
928*35238bceSAndroid Build Coastguard Worker        }
929*35238bceSAndroid Build Coastguard Worker
930*35238bceSAndroid Build Coastguard Worker        both ""
931*35238bceSAndroid Build Coastguard Worker            precision mediump float;
932*35238bceSAndroid Build Coastguard Worker            precision mediump int;
933*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
934*35238bceSAndroid Build Coastguard Worker
935*35238bceSAndroid Build Coastguard Worker            void func (out int a)
936*35238bceSAndroid Build Coastguard Worker            {
937*35238bceSAndroid Build Coastguard Worker                a = -1;
938*35238bceSAndroid Build Coastguard Worker            }
939*35238bceSAndroid Build Coastguard Worker
940*35238bceSAndroid Build Coastguard Worker            void main()
941*35238bceSAndroid Build Coastguard Worker            {
942*35238bceSAndroid Build Coastguard Worker                ${SETUP}
943*35238bceSAndroid Build Coastguard Worker                int f = 1;
944*35238bceSAndroid Build Coastguard Worker                func(f);
945*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
946*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
947*35238bceSAndroid Build Coastguard Worker            }
948*35238bceSAndroid Build Coastguard Worker        ""
949*35238bceSAndroid Build Coastguard Worker    end
950*35238bceSAndroid Build Coastguard Worker
951*35238bceSAndroid Build Coastguard Worker    case inout_int
952*35238bceSAndroid Build Coastguard Worker        values
953*35238bceSAndroid Build Coastguard Worker        {
954*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
955*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
956*35238bceSAndroid Build Coastguard Worker        }
957*35238bceSAndroid Build Coastguard Worker
958*35238bceSAndroid Build Coastguard Worker        both ""
959*35238bceSAndroid Build Coastguard Worker            precision mediump float;
960*35238bceSAndroid Build Coastguard Worker            precision mediump int;
961*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
962*35238bceSAndroid Build Coastguard Worker
963*35238bceSAndroid Build Coastguard Worker            void func (inout int a)
964*35238bceSAndroid Build Coastguard Worker            {
965*35238bceSAndroid Build Coastguard Worker                a = -a;
966*35238bceSAndroid Build Coastguard Worker            }
967*35238bceSAndroid Build Coastguard Worker
968*35238bceSAndroid Build Coastguard Worker            void main()
969*35238bceSAndroid Build Coastguard Worker            {
970*35238bceSAndroid Build Coastguard Worker                ${SETUP}
971*35238bceSAndroid Build Coastguard Worker                int f = 1;
972*35238bceSAndroid Build Coastguard Worker                func(f);
973*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
974*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
975*35238bceSAndroid Build Coastguard Worker            }
976*35238bceSAndroid Build Coastguard Worker        ""
977*35238bceSAndroid Build Coastguard Worker    end
978*35238bceSAndroid Build Coastguard Worker
979*35238bceSAndroid Build Coastguard Worker    case in_lowp_int
980*35238bceSAndroid Build Coastguard Worker        values
981*35238bceSAndroid Build Coastguard Worker        {
982*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 4 ];
983*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -4 ];
984*35238bceSAndroid Build Coastguard Worker        }
985*35238bceSAndroid Build Coastguard Worker
986*35238bceSAndroid Build Coastguard Worker        both ""
987*35238bceSAndroid Build Coastguard Worker            precision mediump float;
988*35238bceSAndroid Build Coastguard Worker            precision mediump int;
989*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
990*35238bceSAndroid Build Coastguard Worker
991*35238bceSAndroid Build Coastguard Worker            int func (in lowp int a)
992*35238bceSAndroid Build Coastguard Worker            {
993*35238bceSAndroid Build Coastguard Worker                a = -a;
994*35238bceSAndroid Build Coastguard Worker                return 2 * a;
995*35238bceSAndroid Build Coastguard Worker            }
996*35238bceSAndroid Build Coastguard Worker
997*35238bceSAndroid Build Coastguard Worker            void main()
998*35238bceSAndroid Build Coastguard Worker            {
999*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1000*35238bceSAndroid Build Coastguard Worker                int f = in0;
1001*35238bceSAndroid Build Coastguard Worker                int g = func(f);
1002*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
1003*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1004*35238bceSAndroid Build Coastguard Worker            }
1005*35238bceSAndroid Build Coastguard Worker        ""
1006*35238bceSAndroid Build Coastguard Worker    end
1007*35238bceSAndroid Build Coastguard Worker
1008*35238bceSAndroid Build Coastguard Worker    case out_lowp_int
1009*35238bceSAndroid Build Coastguard Worker        values
1010*35238bceSAndroid Build Coastguard Worker        {
1011*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
1012*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
1013*35238bceSAndroid Build Coastguard Worker        }
1014*35238bceSAndroid Build Coastguard Worker
1015*35238bceSAndroid Build Coastguard Worker        both ""
1016*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1017*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1018*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1019*35238bceSAndroid Build Coastguard Worker
1020*35238bceSAndroid Build Coastguard Worker            void func (out lowp int a)
1021*35238bceSAndroid Build Coastguard Worker            {
1022*35238bceSAndroid Build Coastguard Worker                a = -1;
1023*35238bceSAndroid Build Coastguard Worker            }
1024*35238bceSAndroid Build Coastguard Worker
1025*35238bceSAndroid Build Coastguard Worker            void main()
1026*35238bceSAndroid Build Coastguard Worker            {
1027*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1028*35238bceSAndroid Build Coastguard Worker                int f = 1;
1029*35238bceSAndroid Build Coastguard Worker                func(f);
1030*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
1031*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1032*35238bceSAndroid Build Coastguard Worker            }
1033*35238bceSAndroid Build Coastguard Worker        ""
1034*35238bceSAndroid Build Coastguard Worker    end
1035*35238bceSAndroid Build Coastguard Worker
1036*35238bceSAndroid Build Coastguard Worker    case inout_lowp_int
1037*35238bceSAndroid Build Coastguard Worker        values
1038*35238bceSAndroid Build Coastguard Worker        {
1039*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
1040*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
1041*35238bceSAndroid Build Coastguard Worker        }
1042*35238bceSAndroid Build Coastguard Worker
1043*35238bceSAndroid Build Coastguard Worker        both ""
1044*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1045*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1046*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1047*35238bceSAndroid Build Coastguard Worker
1048*35238bceSAndroid Build Coastguard Worker            void func (inout lowp int a)
1049*35238bceSAndroid Build Coastguard Worker            {
1050*35238bceSAndroid Build Coastguard Worker                a = -a;
1051*35238bceSAndroid Build Coastguard Worker            }
1052*35238bceSAndroid Build Coastguard Worker
1053*35238bceSAndroid Build Coastguard Worker            void main()
1054*35238bceSAndroid Build Coastguard Worker            {
1055*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1056*35238bceSAndroid Build Coastguard Worker                int f = 1;
1057*35238bceSAndroid Build Coastguard Worker                func(f);
1058*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
1059*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1060*35238bceSAndroid Build Coastguard Worker            }
1061*35238bceSAndroid Build Coastguard Worker        ""
1062*35238bceSAndroid Build Coastguard Worker    end
1063*35238bceSAndroid Build Coastguard Worker
1064*35238bceSAndroid Build Coastguard Worker    case in_highp_int
1065*35238bceSAndroid Build Coastguard Worker        values
1066*35238bceSAndroid Build Coastguard Worker        {
1067*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 4 ];
1068*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -4 ];
1069*35238bceSAndroid Build Coastguard Worker        }
1070*35238bceSAndroid Build Coastguard Worker
1071*35238bceSAndroid Build Coastguard Worker        both ""
1072*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1073*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1074*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1075*35238bceSAndroid Build Coastguard Worker
1076*35238bceSAndroid Build Coastguard Worker            int func (in highp int a)
1077*35238bceSAndroid Build Coastguard Worker            {
1078*35238bceSAndroid Build Coastguard Worker                a = -a;
1079*35238bceSAndroid Build Coastguard Worker                return 2 * a;
1080*35238bceSAndroid Build Coastguard Worker            }
1081*35238bceSAndroid Build Coastguard Worker
1082*35238bceSAndroid Build Coastguard Worker            void main()
1083*35238bceSAndroid Build Coastguard Worker            {
1084*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1085*35238bceSAndroid Build Coastguard Worker                int f = in0;
1086*35238bceSAndroid Build Coastguard Worker                int g = func(f);
1087*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
1088*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1089*35238bceSAndroid Build Coastguard Worker            }
1090*35238bceSAndroid Build Coastguard Worker        ""
1091*35238bceSAndroid Build Coastguard Worker    end
1092*35238bceSAndroid Build Coastguard Worker
1093*35238bceSAndroid Build Coastguard Worker    case out_highp_int
1094*35238bceSAndroid Build Coastguard Worker        values
1095*35238bceSAndroid Build Coastguard Worker        {
1096*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
1097*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
1098*35238bceSAndroid Build Coastguard Worker        }
1099*35238bceSAndroid Build Coastguard Worker
1100*35238bceSAndroid Build Coastguard Worker        both ""
1101*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1102*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1103*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1104*35238bceSAndroid Build Coastguard Worker
1105*35238bceSAndroid Build Coastguard Worker            void func (out highp int a)
1106*35238bceSAndroid Build Coastguard Worker            {
1107*35238bceSAndroid Build Coastguard Worker                a = -1;
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                int f = 1;
1114*35238bceSAndroid Build Coastguard Worker                func(f);
1115*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
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 inout_highp_int
1122*35238bceSAndroid Build Coastguard Worker        values
1123*35238bceSAndroid Build Coastguard Worker        {
1124*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
1125*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
1126*35238bceSAndroid Build Coastguard Worker        }
1127*35238bceSAndroid Build Coastguard Worker
1128*35238bceSAndroid Build Coastguard Worker        both ""
1129*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1130*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1131*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1132*35238bceSAndroid Build Coastguard Worker
1133*35238bceSAndroid Build Coastguard Worker            void func (inout highp int a)
1134*35238bceSAndroid Build Coastguard Worker            {
1135*35238bceSAndroid Build Coastguard Worker                a = -a;
1136*35238bceSAndroid Build Coastguard Worker            }
1137*35238bceSAndroid Build Coastguard Worker
1138*35238bceSAndroid Build Coastguard Worker            void main()
1139*35238bceSAndroid Build Coastguard Worker            {
1140*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1141*35238bceSAndroid Build Coastguard Worker                int f = 1;
1142*35238bceSAndroid Build Coastguard Worker                func(f);
1143*35238bceSAndroid Build Coastguard Worker                out0 = f * in0;
1144*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1145*35238bceSAndroid Build Coastguard Worker            }
1146*35238bceSAndroid Build Coastguard Worker        ""
1147*35238bceSAndroid Build Coastguard Worker    end
1148*35238bceSAndroid Build Coastguard Worker
1149*35238bceSAndroid Build Coastguard Worker    case const_int
1150*35238bceSAndroid Build Coastguard Worker        values
1151*35238bceSAndroid Build Coastguard Worker        {
1152*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 4 ];
1153*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -4 ];
1154*35238bceSAndroid Build Coastguard Worker        }
1155*35238bceSAndroid Build Coastguard Worker
1156*35238bceSAndroid Build Coastguard Worker        both ""
1157*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1158*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1159*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1160*35238bceSAndroid Build Coastguard Worker
1161*35238bceSAndroid Build Coastguard Worker            int func (const int a)
1162*35238bceSAndroid Build Coastguard Worker            {
1163*35238bceSAndroid Build Coastguard Worker                int b = -a;
1164*35238bceSAndroid Build Coastguard Worker                return 2 * b;
1165*35238bceSAndroid Build Coastguard Worker            }
1166*35238bceSAndroid Build Coastguard Worker
1167*35238bceSAndroid Build Coastguard Worker            void main()
1168*35238bceSAndroid Build Coastguard Worker            {
1169*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1170*35238bceSAndroid Build Coastguard Worker                int f = in0;
1171*35238bceSAndroid Build Coastguard Worker                int g = func(f);
1172*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
1173*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1174*35238bceSAndroid Build Coastguard Worker            }
1175*35238bceSAndroid Build Coastguard Worker        ""
1176*35238bceSAndroid Build Coastguard Worker    end
1177*35238bceSAndroid Build Coastguard Worker
1178*35238bceSAndroid Build Coastguard Worker    case const_in_int
1179*35238bceSAndroid Build Coastguard Worker        values
1180*35238bceSAndroid Build Coastguard Worker        {
1181*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 4 ];
1182*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -4 ];
1183*35238bceSAndroid Build Coastguard Worker        }
1184*35238bceSAndroid Build Coastguard Worker
1185*35238bceSAndroid Build Coastguard Worker        both ""
1186*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1187*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1188*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1189*35238bceSAndroid Build Coastguard Worker
1190*35238bceSAndroid Build Coastguard Worker            int func (const in int a)
1191*35238bceSAndroid Build Coastguard Worker            {
1192*35238bceSAndroid Build Coastguard Worker                int b = -a;
1193*35238bceSAndroid Build Coastguard Worker                return 2 * b;
1194*35238bceSAndroid Build Coastguard Worker            }
1195*35238bceSAndroid Build Coastguard Worker
1196*35238bceSAndroid Build Coastguard Worker            void main()
1197*35238bceSAndroid Build Coastguard Worker            {
1198*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1199*35238bceSAndroid Build Coastguard Worker                int f = in0;
1200*35238bceSAndroid Build Coastguard Worker                int g = func(f);
1201*35238bceSAndroid Build Coastguard Worker                out0 = f + g;
1202*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1203*35238bceSAndroid Build Coastguard Worker            }
1204*35238bceSAndroid Build Coastguard Worker        ""
1205*35238bceSAndroid Build Coastguard Worker    end
1206*35238bceSAndroid Build Coastguard Worker
1207*35238bceSAndroid Build Coastguard Worker    case in_bool
1208*35238bceSAndroid Build Coastguard Worker        values
1209*35238bceSAndroid Build Coastguard Worker        {
1210*35238bceSAndroid Build Coastguard Worker            input bool in0 = [ true | false ];
1211*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ true | true ];
1212*35238bceSAndroid Build Coastguard Worker        }
1213*35238bceSAndroid Build Coastguard Worker
1214*35238bceSAndroid Build Coastguard Worker        both ""
1215*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1216*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1217*35238bceSAndroid Build Coastguard Worker
1218*35238bceSAndroid Build Coastguard Worker            bool func (in bool a)
1219*35238bceSAndroid Build Coastguard Worker            {
1220*35238bceSAndroid Build Coastguard Worker                a = !a;
1221*35238bceSAndroid Build Coastguard Worker                return a;
1222*35238bceSAndroid Build Coastguard Worker            }
1223*35238bceSAndroid Build Coastguard Worker
1224*35238bceSAndroid Build Coastguard Worker            void main()
1225*35238bceSAndroid Build Coastguard Worker            {
1226*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1227*35238bceSAndroid Build Coastguard Worker                bool f = in0;
1228*35238bceSAndroid Build Coastguard Worker                bool g = func(f);
1229*35238bceSAndroid Build Coastguard Worker                out0 = (f != g);
1230*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1231*35238bceSAndroid Build Coastguard Worker            }
1232*35238bceSAndroid Build Coastguard Worker        ""
1233*35238bceSAndroid Build Coastguard Worker    end
1234*35238bceSAndroid Build Coastguard Worker
1235*35238bceSAndroid Build Coastguard Worker    case out_bool
1236*35238bceSAndroid Build Coastguard Worker        values
1237*35238bceSAndroid Build Coastguard Worker        {
1238*35238bceSAndroid Build Coastguard Worker            input bool in0 = [ true | false ];
1239*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true ];
1240*35238bceSAndroid Build Coastguard Worker        }
1241*35238bceSAndroid Build Coastguard Worker
1242*35238bceSAndroid Build Coastguard Worker        both ""
1243*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1244*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1245*35238bceSAndroid Build Coastguard Worker
1246*35238bceSAndroid Build Coastguard Worker            void func (out bool a)
1247*35238bceSAndroid Build Coastguard Worker            {
1248*35238bceSAndroid Build Coastguard Worker                a = false;
1249*35238bceSAndroid Build Coastguard Worker            }
1250*35238bceSAndroid Build Coastguard Worker
1251*35238bceSAndroid Build Coastguard Worker            void main()
1252*35238bceSAndroid Build Coastguard Worker            {
1253*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1254*35238bceSAndroid Build Coastguard Worker                bool f = true;
1255*35238bceSAndroid Build Coastguard Worker                func(f);
1256*35238bceSAndroid Build Coastguard Worker                out0 = (in0 == f);
1257*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1258*35238bceSAndroid Build Coastguard Worker            }
1259*35238bceSAndroid Build Coastguard Worker        ""
1260*35238bceSAndroid Build Coastguard Worker    end
1261*35238bceSAndroid Build Coastguard Worker
1262*35238bceSAndroid Build Coastguard Worker    case inout_bool
1263*35238bceSAndroid Build Coastguard Worker        values
1264*35238bceSAndroid Build Coastguard Worker        {
1265*35238bceSAndroid Build Coastguard Worker            input bool in0 = [ true | false ];
1266*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true ];
1267*35238bceSAndroid Build Coastguard Worker        }
1268*35238bceSAndroid Build Coastguard Worker
1269*35238bceSAndroid Build Coastguard Worker        both ""
1270*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1271*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1272*35238bceSAndroid Build Coastguard Worker
1273*35238bceSAndroid Build Coastguard Worker            void func (inout bool a)
1274*35238bceSAndroid Build Coastguard Worker            {
1275*35238bceSAndroid Build Coastguard Worker                a = !a;
1276*35238bceSAndroid Build Coastguard Worker            }
1277*35238bceSAndroid Build Coastguard Worker
1278*35238bceSAndroid Build Coastguard Worker            void main()
1279*35238bceSAndroid Build Coastguard Worker            {
1280*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1281*35238bceSAndroid Build Coastguard Worker                bool f = true;
1282*35238bceSAndroid Build Coastguard Worker                func(f);
1283*35238bceSAndroid Build Coastguard Worker                out0 = (in0 == f);
1284*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1285*35238bceSAndroid Build Coastguard Worker            }
1286*35238bceSAndroid Build Coastguard Worker        ""
1287*35238bceSAndroid Build Coastguard Worker    end
1288*35238bceSAndroid Build Coastguard Worker
1289*35238bceSAndroid Build Coastguard Workerend # qualifiers
1290*35238bceSAndroid Build Coastguard Worker
1291*35238bceSAndroid Build Coastguard Workergroup declarations "Function Declarations"
1292*35238bceSAndroid Build Coastguard Worker
1293*35238bceSAndroid Build Coastguard Worker    case void_vs_no_void
1294*35238bceSAndroid Build Coastguard Worker        values
1295*35238bceSAndroid Build Coastguard Worker        {
1296*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1297*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1298*35238bceSAndroid Build Coastguard Worker        }
1299*35238bceSAndroid Build Coastguard Worker
1300*35238bceSAndroid Build Coastguard Worker        both ""
1301*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1302*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1303*35238bceSAndroid Build Coastguard Worker
1304*35238bceSAndroid Build Coastguard Worker            float func ();
1305*35238bceSAndroid Build Coastguard Worker
1306*35238bceSAndroid Build Coastguard Worker            void main()
1307*35238bceSAndroid Build Coastguard Worker            {
1308*35238bceSAndroid Build Coastguard Worker                out0 = func() * in0;
1309*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1310*35238bceSAndroid Build Coastguard Worker            }
1311*35238bceSAndroid Build Coastguard Worker
1312*35238bceSAndroid Build Coastguard Worker            float func (void)
1313*35238bceSAndroid Build Coastguard Worker            {
1314*35238bceSAndroid Build Coastguard Worker                return -1.0;
1315*35238bceSAndroid Build Coastguard Worker            }
1316*35238bceSAndroid Build Coastguard Worker        ""
1317*35238bceSAndroid Build Coastguard Worker    end
1318*35238bceSAndroid Build Coastguard Worker
1319*35238bceSAndroid Build Coastguard Worker    case in_vs_no_in
1320*35238bceSAndroid Build Coastguard Worker        values
1321*35238bceSAndroid Build Coastguard Worker        {
1322*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1323*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1324*35238bceSAndroid Build Coastguard Worker        }
1325*35238bceSAndroid Build Coastguard Worker
1326*35238bceSAndroid Build Coastguard Worker        both ""
1327*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1328*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1329*35238bceSAndroid Build Coastguard Worker
1330*35238bceSAndroid Build Coastguard Worker            float func (float f);
1331*35238bceSAndroid Build Coastguard Worker
1332*35238bceSAndroid Build Coastguard Worker            void main()
1333*35238bceSAndroid Build Coastguard Worker            {
1334*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
1335*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1336*35238bceSAndroid Build Coastguard Worker            }
1337*35238bceSAndroid Build Coastguard Worker
1338*35238bceSAndroid Build Coastguard Worker            float func (in float f)
1339*35238bceSAndroid Build Coastguard Worker            {
1340*35238bceSAndroid Build Coastguard Worker                return -f;
1341*35238bceSAndroid Build Coastguard Worker            }
1342*35238bceSAndroid Build Coastguard Worker        ""
1343*35238bceSAndroid Build Coastguard Worker    end
1344*35238bceSAndroid Build Coastguard Worker
1345*35238bceSAndroid Build Coastguard Worker    case default_vs_explicit_precision
1346*35238bceSAndroid Build Coastguard Worker        values
1347*35238bceSAndroid Build Coastguard Worker        {
1348*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1349*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1350*35238bceSAndroid Build Coastguard Worker        }
1351*35238bceSAndroid Build Coastguard Worker
1352*35238bceSAndroid Build Coastguard Worker        both ""
1353*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1354*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1355*35238bceSAndroid Build Coastguard Worker
1356*35238bceSAndroid Build Coastguard Worker            float func (float f);
1357*35238bceSAndroid Build Coastguard Worker
1358*35238bceSAndroid Build Coastguard Worker            void main()
1359*35238bceSAndroid Build Coastguard Worker            {
1360*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
1361*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1362*35238bceSAndroid Build Coastguard Worker            }
1363*35238bceSAndroid Build Coastguard Worker
1364*35238bceSAndroid Build Coastguard Worker            float func (mediump float f)
1365*35238bceSAndroid Build Coastguard Worker            {
1366*35238bceSAndroid Build Coastguard Worker                return -f;
1367*35238bceSAndroid Build Coastguard Worker            }
1368*35238bceSAndroid Build Coastguard Worker        ""
1369*35238bceSAndroid Build Coastguard Worker    end
1370*35238bceSAndroid Build Coastguard Worker
1371*35238bceSAndroid Build Coastguard Workerend # declarations
1372*35238bceSAndroid Build Coastguard Worker
1373*35238bceSAndroid Build Coastguard Workergroup overloading "Function Overloading"
1374*35238bceSAndroid Build Coastguard Worker
1375*35238bceSAndroid Build Coastguard Worker    case user_func_arg_type_simple
1376*35238bceSAndroid Build Coastguard Worker        values
1377*35238bceSAndroid Build Coastguard Worker        {
1378*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1379*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1380*35238bceSAndroid Build Coastguard Worker        }
1381*35238bceSAndroid Build Coastguard Worker
1382*35238bceSAndroid Build Coastguard Worker        both ""
1383*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1384*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1385*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1386*35238bceSAndroid Build Coastguard Worker
1387*35238bceSAndroid Build Coastguard Worker            float func (float a)
1388*35238bceSAndroid Build Coastguard Worker            {
1389*35238bceSAndroid Build Coastguard Worker                return -a;
1390*35238bceSAndroid Build Coastguard Worker            }
1391*35238bceSAndroid Build Coastguard Worker
1392*35238bceSAndroid Build Coastguard Worker            int func (int a)
1393*35238bceSAndroid Build Coastguard Worker            {
1394*35238bceSAndroid Build Coastguard Worker                return -a;
1395*35238bceSAndroid Build Coastguard Worker            }
1396*35238bceSAndroid Build Coastguard Worker
1397*35238bceSAndroid Build Coastguard Worker            void main()
1398*35238bceSAndroid Build Coastguard Worker            {
1399*35238bceSAndroid Build Coastguard Worker                out0 = func(in0) * float(func(-1));
1400*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1401*35238bceSAndroid Build Coastguard Worker            }
1402*35238bceSAndroid Build Coastguard Worker        ""
1403*35238bceSAndroid Build Coastguard Worker    end
1404*35238bceSAndroid Build Coastguard Worker
1405*35238bceSAndroid Build Coastguard Worker    case user_func_arg_float_types
1406*35238bceSAndroid Build Coastguard Worker        values
1407*35238bceSAndroid Build Coastguard Worker        {
1408*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1409*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1410*35238bceSAndroid Build Coastguard Worker        }
1411*35238bceSAndroid Build Coastguard Worker
1412*35238bceSAndroid Build Coastguard Worker        both ""
1413*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1414*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1415*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1416*35238bceSAndroid Build Coastguard Worker
1417*35238bceSAndroid Build Coastguard Worker            float func (float a) { return -a; }
1418*35238bceSAndroid Build Coastguard Worker            vec2 func (vec2 a) { return a.yx; }
1419*35238bceSAndroid Build Coastguard Worker            vec3 func (vec3 a) { return a.xxx; }
1420*35238bceSAndroid Build Coastguard Worker            vec4 func (vec4 a) { return a.wwww; }
1421*35238bceSAndroid Build Coastguard Worker
1422*35238bceSAndroid Build Coastguard Worker            void main()
1423*35238bceSAndroid Build Coastguard Worker            {
1424*35238bceSAndroid Build Coastguard Worker                out0 = func(func(func(func(vec4(in0)).xyz).xy).x);
1425*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1426*35238bceSAndroid Build Coastguard Worker            }
1427*35238bceSAndroid Build Coastguard Worker        ""
1428*35238bceSAndroid Build Coastguard Worker    end
1429*35238bceSAndroid Build Coastguard Worker
1430*35238bceSAndroid Build Coastguard Worker    case user_func_arg_int_types
1431*35238bceSAndroid Build Coastguard Worker        values
1432*35238bceSAndroid Build Coastguard Worker        {
1433*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | 1 | -2 | 6 ];
1434*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | -1 | 2 | -6 ];
1435*35238bceSAndroid Build Coastguard Worker        }
1436*35238bceSAndroid Build Coastguard Worker
1437*35238bceSAndroid Build Coastguard Worker        both ""
1438*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1439*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1440*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1441*35238bceSAndroid Build Coastguard Worker
1442*35238bceSAndroid Build Coastguard Worker            int func (int a) { return -a; }
1443*35238bceSAndroid Build Coastguard Worker            ivec2 func (ivec2 a) { return a.yx; }
1444*35238bceSAndroid Build Coastguard Worker            ivec3 func (ivec3 a) { return a.xxx; }
1445*35238bceSAndroid Build Coastguard Worker            ivec4 func (ivec4 a) { return a.wwww; }
1446*35238bceSAndroid Build Coastguard Worker
1447*35238bceSAndroid Build Coastguard Worker            void main()
1448*35238bceSAndroid Build Coastguard Worker            {
1449*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1450*35238bceSAndroid Build Coastguard Worker                out0 = func(func(func(func(ivec4(in0)).xyz).xy).x);
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 user_func_arg_bool_types
1457*35238bceSAndroid Build Coastguard Worker        values
1458*35238bceSAndroid Build Coastguard Worker        {
1459*35238bceSAndroid Build Coastguard Worker            input bool in0 = [ true | false ];
1460*35238bceSAndroid Build Coastguard Worker            output bool out0 = [ false | true ];
1461*35238bceSAndroid Build Coastguard Worker        }
1462*35238bceSAndroid Build Coastguard Worker
1463*35238bceSAndroid Build Coastguard Worker        both ""
1464*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1465*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1466*35238bceSAndroid Build Coastguard Worker
1467*35238bceSAndroid Build Coastguard Worker            bool func (bool a) { return !a; }
1468*35238bceSAndroid Build Coastguard Worker            bvec2 func (bvec2 a) { return a.yx; }
1469*35238bceSAndroid Build Coastguard Worker            bvec3 func (bvec3 a) { return a.xxx; }
1470*35238bceSAndroid Build Coastguard Worker            bvec4 func (bvec4 a) { return a.wwww; }
1471*35238bceSAndroid Build Coastguard Worker
1472*35238bceSAndroid Build Coastguard Worker            void main()
1473*35238bceSAndroid Build Coastguard Worker            {
1474*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1475*35238bceSAndroid Build Coastguard Worker                out0 = func(func(func(func(bvec4(in0)).xyz).xy).x);
1476*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1477*35238bceSAndroid Build Coastguard Worker            }
1478*35238bceSAndroid Build Coastguard Worker        ""
1479*35238bceSAndroid Build Coastguard Worker    end
1480*35238bceSAndroid Build Coastguard Worker
1481*35238bceSAndroid Build Coastguard Worker    case user_func_arg_basic_types
1482*35238bceSAndroid Build Coastguard Worker        values
1483*35238bceSAndroid Build Coastguard Worker        {
1484*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1485*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1486*35238bceSAndroid Build Coastguard Worker        }
1487*35238bceSAndroid Build Coastguard Worker
1488*35238bceSAndroid Build Coastguard Worker        both ""
1489*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1490*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1491*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1492*35238bceSAndroid Build Coastguard Worker
1493*35238bceSAndroid Build Coastguard Worker            float func (float a) { return -a; }
1494*35238bceSAndroid Build Coastguard Worker            vec2 func (vec2 a) { return a.yx; }
1495*35238bceSAndroid Build Coastguard Worker            vec3 func (vec3 a) { return a.xxx; }
1496*35238bceSAndroid Build Coastguard Worker            vec4 func (vec4 a) { return a.wwww; }
1497*35238bceSAndroid Build Coastguard Worker            int func (int a) { return -a; }
1498*35238bceSAndroid Build Coastguard Worker            ivec2 func (ivec2 a) { return a.yx; }
1499*35238bceSAndroid Build Coastguard Worker            ivec3 func (ivec3 a) { return a.xxx; }
1500*35238bceSAndroid Build Coastguard Worker            ivec4 func (ivec4 a) { return a.wwww; }
1501*35238bceSAndroid Build Coastguard Worker            bool func (bool a) { return !a; }
1502*35238bceSAndroid Build Coastguard Worker            bvec2 func (bvec2 a) { return a.yx; }
1503*35238bceSAndroid Build Coastguard Worker            bvec3 func (bvec3 a) { return a.xxx; }
1504*35238bceSAndroid Build Coastguard Worker            bvec4 func (bvec4 a) { return a.wwww; }
1505*35238bceSAndroid Build Coastguard Worker
1506*35238bceSAndroid Build Coastguard Worker            void main()
1507*35238bceSAndroid Build Coastguard Worker            {
1508*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1509*35238bceSAndroid Build Coastguard Worker                if (func(func(bvec4(false)).x))
1510*35238bceSAndroid Build Coastguard Worker                    out0 = func(in0) * float(func(-1));
1511*35238bceSAndroid Build Coastguard Worker                else
1512*35238bceSAndroid Build Coastguard Worker                    out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x);
1513*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1514*35238bceSAndroid Build Coastguard Worker            }
1515*35238bceSAndroid Build Coastguard Worker        ""
1516*35238bceSAndroid Build Coastguard Worker    end
1517*35238bceSAndroid Build Coastguard Worker
1518*35238bceSAndroid Build Coastguard Worker    case user_func_arg_complex_types
1519*35238bceSAndroid Build Coastguard Worker        values
1520*35238bceSAndroid Build Coastguard Worker        {
1521*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1522*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1523*35238bceSAndroid Build Coastguard Worker        }
1524*35238bceSAndroid Build Coastguard Worker
1525*35238bceSAndroid Build Coastguard Worker        both ""
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            struct Pos { float a, b, c; };
1531*35238bceSAndroid Build Coastguard Worker            struct Line { Pos start, end; };
1532*35238bceSAndroid Build Coastguard Worker
1533*35238bceSAndroid Build Coastguard Worker            float func (float a) { return -a; }
1534*35238bceSAndroid Build Coastguard Worker            float func (float a[4]) { return a[0] + a[3]; }
1535*35238bceSAndroid Build Coastguard Worker            vec2 func (vec2 a) { return a.yx; }
1536*35238bceSAndroid Build Coastguard Worker            vec3 func (vec3 a) { return a.xxx; }
1537*35238bceSAndroid Build Coastguard Worker            vec4 func (vec4 a) { return a.wwww; }
1538*35238bceSAndroid Build Coastguard Worker            vec4 func (vec4 a[4]) { return a[1] + a[2]; }
1539*35238bceSAndroid Build Coastguard Worker            int func (int a) { return -a; }
1540*35238bceSAndroid Build Coastguard Worker            ivec2 func (ivec2 a) { return a.yx; }
1541*35238bceSAndroid Build Coastguard Worker            ivec3 func (ivec3 a) { return a.xxx; }
1542*35238bceSAndroid Build Coastguard Worker            ivec4 func (ivec4 a) { return a.wwww; }
1543*35238bceSAndroid Build Coastguard Worker            bool func (bool a) { return !a; }
1544*35238bceSAndroid Build Coastguard Worker            bvec2 func (bvec2 a) { return a.yx; }
1545*35238bceSAndroid Build Coastguard Worker            bvec3 func (bvec3 a) { return a.xxx; }
1546*35238bceSAndroid Build Coastguard Worker            bvec4 func (bvec4 a) { return a.wwww; }
1547*35238bceSAndroid Build Coastguard Worker            Pos func (Pos a) { return a; }
1548*35238bceSAndroid Build Coastguard Worker            Line func (Line a) { return Line(a.end, a.start); }
1549*35238bceSAndroid Build Coastguard Worker
1550*35238bceSAndroid Build Coastguard Worker            void main()
1551*35238bceSAndroid Build Coastguard Worker            {
1552*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1553*35238bceSAndroid Build Coastguard Worker                float arr[4];
1554*35238bceSAndroid Build Coastguard Worker                vec4 arr2[4];
1555*35238bceSAndroid Build Coastguard Worker                out0 = func(arr) + func(arr2).x;
1556*35238bceSAndroid Build Coastguard Worker                if (func(func(bvec4(false)).x))
1557*35238bceSAndroid Build Coastguard Worker                    out0 = func(in0) * float(func(-1));
1558*35238bceSAndroid Build Coastguard Worker                else
1559*35238bceSAndroid Build Coastguard Worker                    out0 = float(func(func(ivec4(func(func(func(vec4(0.5)).xyz).xy).xxxx)).xy).x);
1560*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1561*35238bceSAndroid Build Coastguard Worker            }
1562*35238bceSAndroid Build Coastguard Worker        ""
1563*35238bceSAndroid Build Coastguard Worker    end
1564*35238bceSAndroid Build Coastguard Worker
1565*35238bceSAndroid Build Coastguard Worker    case user_func_arguments
1566*35238bceSAndroid Build Coastguard Worker        values
1567*35238bceSAndroid Build Coastguard Worker        {
1568*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | -2.0 | 2.5 ];
1569*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.0 | -1.0 | 2.0 | -2.5 ];
1570*35238bceSAndroid Build Coastguard Worker        }
1571*35238bceSAndroid Build Coastguard Worker
1572*35238bceSAndroid Build Coastguard Worker        both ""
1573*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1574*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1575*35238bceSAndroid Build Coastguard Worker
1576*35238bceSAndroid Build Coastguard Worker            float func (float a)
1577*35238bceSAndroid Build Coastguard Worker            {
1578*35238bceSAndroid Build Coastguard Worker                return -a;
1579*35238bceSAndroid Build Coastguard Worker            }
1580*35238bceSAndroid Build Coastguard Worker
1581*35238bceSAndroid Build Coastguard Worker            float func (float a, float b)
1582*35238bceSAndroid Build Coastguard Worker            {
1583*35238bceSAndroid Build Coastguard Worker                return a * b;
1584*35238bceSAndroid Build Coastguard Worker            }
1585*35238bceSAndroid Build Coastguard Worker
1586*35238bceSAndroid Build Coastguard Worker            void main()
1587*35238bceSAndroid Build Coastguard Worker            {
1588*35238bceSAndroid Build Coastguard Worker                out0 = func(in0) * func(-0.5, -2.0);
1589*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1590*35238bceSAndroid Build Coastguard Worker            }
1591*35238bceSAndroid Build Coastguard Worker        ""
1592*35238bceSAndroid Build Coastguard Worker    end
1593*35238bceSAndroid Build Coastguard Worker
1594*35238bceSAndroid Build Coastguard Worker    case builtin_sin
1595*35238bceSAndroid Build Coastguard Worker        values
1596*35238bceSAndroid Build Coastguard Worker        {
1597*35238bceSAndroid Build Coastguard Worker            input int in0 = [ -1 | 0 | 1 | 4 ];
1598*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 1 | 0 | -1 | -4 ];
1599*35238bceSAndroid Build Coastguard Worker        }
1600*35238bceSAndroid Build Coastguard Worker
1601*35238bceSAndroid Build Coastguard Worker        both ""
1602*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1603*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1604*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1605*35238bceSAndroid Build Coastguard Worker
1606*35238bceSAndroid Build Coastguard Worker            int sin(int a) { return -a; }
1607*35238bceSAndroid Build Coastguard Worker
1608*35238bceSAndroid Build Coastguard Worker            void main()
1609*35238bceSAndroid Build Coastguard Worker            {
1610*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1611*35238bceSAndroid Build Coastguard Worker                out0 = sin(in0);
1612*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1613*35238bceSAndroid Build Coastguard Worker            }
1614*35238bceSAndroid Build Coastguard Worker        ""
1615*35238bceSAndroid Build Coastguard Worker    end
1616*35238bceSAndroid Build Coastguard Worker
1617*35238bceSAndroid Build Coastguard Worker    case builtin_step
1618*35238bceSAndroid Build Coastguard Worker        values
1619*35238bceSAndroid Build Coastguard Worker        {
1620*35238bceSAndroid Build Coastguard Worker            input int in0 = [ -1 | 0 | 1 | 4 ];
1621*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 1 | 0 | -1 | -4 ];
1622*35238bceSAndroid Build Coastguard Worker        }
1623*35238bceSAndroid Build Coastguard Worker
1624*35238bceSAndroid Build Coastguard Worker        both ""
1625*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1626*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1627*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1628*35238bceSAndroid Build Coastguard Worker
1629*35238bceSAndroid Build Coastguard Worker            int step (float i, float j, int a) { return -a; }
1630*35238bceSAndroid Build Coastguard Worker
1631*35238bceSAndroid Build Coastguard Worker            void main()
1632*35238bceSAndroid Build Coastguard Worker            {
1633*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1634*35238bceSAndroid Build Coastguard Worker                out0 = step(0.0, 1.0, in0);
1635*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1636*35238bceSAndroid Build Coastguard Worker            }
1637*35238bceSAndroid Build Coastguard Worker        ""
1638*35238bceSAndroid Build Coastguard Worker    end
1639*35238bceSAndroid Build Coastguard Worker
1640*35238bceSAndroid Build Coastguard Worker    case array_size
1641*35238bceSAndroid Build Coastguard Worker        values
1642*35238bceSAndroid Build Coastguard Worker        {
1643*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 1.0 ];
1644*35238bceSAndroid Build Coastguard Worker        }
1645*35238bceSAndroid Build Coastguard Worker
1646*35238bceSAndroid Build Coastguard Worker        both ""
1647*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1648*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1649*35238bceSAndroid Build Coastguard Worker
1650*35238bceSAndroid Build Coastguard Worker            float func (float f[3])
1651*35238bceSAndroid Build Coastguard Worker            {
1652*35238bceSAndroid Build Coastguard Worker                return f[0];
1653*35238bceSAndroid Build Coastguard Worker            }
1654*35238bceSAndroid Build Coastguard Worker
1655*35238bceSAndroid Build Coastguard Worker            float func (float f[4])
1656*35238bceSAndroid Build Coastguard Worker            {
1657*35238bceSAndroid Build Coastguard Worker                return f[1];
1658*35238bceSAndroid Build Coastguard Worker            }
1659*35238bceSAndroid Build Coastguard Worker
1660*35238bceSAndroid Build Coastguard Worker            void main ()
1661*35238bceSAndroid Build Coastguard Worker            {
1662*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1663*35238bceSAndroid Build Coastguard Worker                float x[4];
1664*35238bceSAndroid Build Coastguard Worker                x[0] = -1.0;
1665*35238bceSAndroid Build Coastguard Worker                x[1] = 1.0;
1666*35238bceSAndroid Build Coastguard Worker                x[2] = x[3] = 0.0;
1667*35238bceSAndroid Build Coastguard Worker                out0 = func(x);
1668*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1669*35238bceSAndroid Build Coastguard Worker            }
1670*35238bceSAndroid Build Coastguard Worker        ""
1671*35238bceSAndroid Build Coastguard Worker    end
1672*35238bceSAndroid Build Coastguard Worker
1673*35238bceSAndroid Build Coastguard Workerend # overloading
1674*35238bceSAndroid Build Coastguard Worker
1675*35238bceSAndroid Build Coastguard Workergroup array_arguments "Arrays as Arguments"
1676*35238bceSAndroid Build Coastguard Worker
1677*35238bceSAndroid Build Coastguard Worker    case local_in_float
1678*35238bceSAndroid Build Coastguard Worker        values
1679*35238bceSAndroid Build Coastguard Worker        {
1680*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) ];
1681*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) ];
1682*35238bceSAndroid Build Coastguard Worker        }
1683*35238bceSAndroid Build Coastguard Worker
1684*35238bceSAndroid Build Coastguard Worker        both ""
1685*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1686*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1687*35238bceSAndroid Build Coastguard Worker
1688*35238bceSAndroid Build Coastguard Worker            float func (in float a[4])
1689*35238bceSAndroid Build Coastguard Worker            {
1690*35238bceSAndroid Build Coastguard Worker                a[0] = -1.0;
1691*35238bceSAndroid Build Coastguard Worker                a[2] = -4.0;
1692*35238bceSAndroid Build Coastguard Worker                a[3] = -3.0 * a[1];
1693*35238bceSAndroid Build Coastguard Worker                return a[0];
1694*35238bceSAndroid Build Coastguard Worker            }
1695*35238bceSAndroid Build Coastguard Worker
1696*35238bceSAndroid Build Coastguard Worker            void main()
1697*35238bceSAndroid Build Coastguard Worker            {
1698*35238bceSAndroid Build Coastguard Worker                float arr[4];
1699*35238bceSAndroid Build Coastguard Worker                arr[0] = in0.x;
1700*35238bceSAndroid Build Coastguard Worker                arr[1] = in0.y;
1701*35238bceSAndroid Build Coastguard Worker                arr[2] = in0.z;
1702*35238bceSAndroid Build Coastguard Worker                arr[3] = in0.w;
1703*35238bceSAndroid Build Coastguard Worker                float f = func(arr);
1704*35238bceSAndroid Build Coastguard Worker                out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]);
1705*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1706*35238bceSAndroid Build Coastguard Worker            }
1707*35238bceSAndroid Build Coastguard Worker        ""
1708*35238bceSAndroid Build Coastguard Worker    end
1709*35238bceSAndroid Build Coastguard Worker
1710*35238bceSAndroid Build Coastguard Worker    case global_in_float
1711*35238bceSAndroid Build Coastguard Worker        values
1712*35238bceSAndroid Build Coastguard Worker        {
1713*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) ];
1714*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) ];
1715*35238bceSAndroid Build Coastguard Worker        }
1716*35238bceSAndroid Build Coastguard Worker
1717*35238bceSAndroid Build Coastguard Worker        both ""
1718*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1719*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1720*35238bceSAndroid Build Coastguard Worker
1721*35238bceSAndroid Build Coastguard Worker            float func (in float a[4])
1722*35238bceSAndroid Build Coastguard Worker            {
1723*35238bceSAndroid Build Coastguard Worker                a[0] = -1.0;
1724*35238bceSAndroid Build Coastguard Worker                a[2] = -4.0;
1725*35238bceSAndroid Build Coastguard Worker                a[3] = -3.0 * a[1];
1726*35238bceSAndroid Build Coastguard Worker                return a[0];
1727*35238bceSAndroid Build Coastguard Worker            }
1728*35238bceSAndroid Build Coastguard Worker
1729*35238bceSAndroid Build Coastguard Worker            float arr[4];
1730*35238bceSAndroid Build Coastguard Worker
1731*35238bceSAndroid Build Coastguard Worker            void main()
1732*35238bceSAndroid Build Coastguard Worker            {
1733*35238bceSAndroid Build Coastguard Worker                arr[0] = in0.x;
1734*35238bceSAndroid Build Coastguard Worker                arr[1] = in0.y;
1735*35238bceSAndroid Build Coastguard Worker                arr[2] = in0.z;
1736*35238bceSAndroid Build Coastguard Worker                arr[3] = in0.w;
1737*35238bceSAndroid Build Coastguard Worker                float f = func(arr);
1738*35238bceSAndroid Build Coastguard Worker                out0 = f * vec4(arr[0], arr[1], arr[2], arr[3]);
1739*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1740*35238bceSAndroid Build Coastguard Worker            }
1741*35238bceSAndroid Build Coastguard Worker        ""
1742*35238bceSAndroid Build Coastguard Worker    end
1743*35238bceSAndroid Build Coastguard Worker
1744*35238bceSAndroid Build Coastguard Worker    case local_in_int
1745*35238bceSAndroid Build Coastguard Worker        values
1746*35238bceSAndroid Build Coastguard Worker        {
1747*35238bceSAndroid Build Coastguard Worker            input ivec4 in0 = [ ivec4(0, 1, 2, -4) | ivec4(-7, -11, 13, 19) ];
1748*35238bceSAndroid Build Coastguard Worker            output ivec4 out0 = [ ivec4(0, -1, -2, 4) | ivec4(7, 11, -13, -19) ];
1749*35238bceSAndroid Build Coastguard Worker        }
1750*35238bceSAndroid Build Coastguard Worker
1751*35238bceSAndroid Build Coastguard Worker        both ""
1752*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1753*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1754*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1755*35238bceSAndroid Build Coastguard Worker
1756*35238bceSAndroid Build Coastguard Worker            int func (in int a[4])
1757*35238bceSAndroid Build Coastguard Worker            {
1758*35238bceSAndroid Build Coastguard Worker                a[0] = -1;
1759*35238bceSAndroid Build Coastguard Worker                a[2] = -4;
1760*35238bceSAndroid Build Coastguard Worker                a[3] = -3 * a[1];
1761*35238bceSAndroid Build Coastguard Worker                return a[0];
1762*35238bceSAndroid Build Coastguard Worker            }
1763*35238bceSAndroid Build Coastguard Worker
1764*35238bceSAndroid Build Coastguard Worker            void main()
1765*35238bceSAndroid Build Coastguard Worker            {
1766*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1767*35238bceSAndroid Build Coastguard Worker                int arr[4];
1768*35238bceSAndroid Build Coastguard Worker                arr[0] = in0.x;
1769*35238bceSAndroid Build Coastguard Worker                arr[1] = in0.y;
1770*35238bceSAndroid Build Coastguard Worker                arr[2] = in0.z;
1771*35238bceSAndroid Build Coastguard Worker                arr[3] = in0.w;
1772*35238bceSAndroid Build Coastguard Worker                int f = func(arr);
1773*35238bceSAndroid Build Coastguard Worker                out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]);
1774*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1775*35238bceSAndroid Build Coastguard Worker            }
1776*35238bceSAndroid Build Coastguard Worker        ""
1777*35238bceSAndroid Build Coastguard Worker    end
1778*35238bceSAndroid Build Coastguard Worker
1779*35238bceSAndroid Build Coastguard Worker    case global_in_int
1780*35238bceSAndroid Build Coastguard Worker        values
1781*35238bceSAndroid Build Coastguard Worker        {
1782*35238bceSAndroid Build Coastguard Worker            input ivec4 in0 = [ ivec4(0, 1, 2, 4) | ivec4(-7, -11, 13, 19) ];
1783*35238bceSAndroid Build Coastguard Worker            output ivec4 out0 = [ ivec4(0, -1, -2, -4) | ivec4(7, 11, -13, -19) ];
1784*35238bceSAndroid Build Coastguard Worker        }
1785*35238bceSAndroid Build Coastguard Worker
1786*35238bceSAndroid Build Coastguard Worker        both ""
1787*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1788*35238bceSAndroid Build Coastguard Worker            precision mediump int;
1789*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1790*35238bceSAndroid Build Coastguard Worker
1791*35238bceSAndroid Build Coastguard Worker            int func (in int a[4])
1792*35238bceSAndroid Build Coastguard Worker            {
1793*35238bceSAndroid Build Coastguard Worker                a[0] = -1;
1794*35238bceSAndroid Build Coastguard Worker                a[2] = -4;
1795*35238bceSAndroid Build Coastguard Worker                a[3] = -3 * a[1];
1796*35238bceSAndroid Build Coastguard Worker                return a[0];
1797*35238bceSAndroid Build Coastguard Worker            }
1798*35238bceSAndroid Build Coastguard Worker
1799*35238bceSAndroid Build Coastguard Worker            int arr[4];
1800*35238bceSAndroid Build Coastguard Worker
1801*35238bceSAndroid Build Coastguard Worker            void main()
1802*35238bceSAndroid Build Coastguard Worker            {
1803*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1804*35238bceSAndroid Build Coastguard Worker                arr[0] = in0.x;
1805*35238bceSAndroid Build Coastguard Worker                arr[1] = in0.y;
1806*35238bceSAndroid Build Coastguard Worker                arr[2] = in0.z;
1807*35238bceSAndroid Build Coastguard Worker                arr[3] = in0.w;
1808*35238bceSAndroid Build Coastguard Worker                int f = func(arr);
1809*35238bceSAndroid Build Coastguard Worker                out0 = f * ivec4(arr[0], arr[1], arr[2], arr[3]);
1810*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1811*35238bceSAndroid Build Coastguard Worker            }
1812*35238bceSAndroid Build Coastguard Worker
1813*35238bceSAndroid Build Coastguard Worker        ""
1814*35238bceSAndroid Build Coastguard Worker    end
1815*35238bceSAndroid Build Coastguard Worker
1816*35238bceSAndroid Build Coastguard Worker    case local_in_bool
1817*35238bceSAndroid Build Coastguard Worker        values
1818*35238bceSAndroid Build Coastguard Worker        {
1819*35238bceSAndroid Build Coastguard Worker            input bvec4 in0 = [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ];
1820*35238bceSAndroid Build Coastguard Worker            output bvec4 out0 = [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ];
1821*35238bceSAndroid Build Coastguard Worker        }
1822*35238bceSAndroid Build Coastguard Worker
1823*35238bceSAndroid Build Coastguard Worker        both ""
1824*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1825*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1826*35238bceSAndroid Build Coastguard Worker
1827*35238bceSAndroid Build Coastguard Worker            bool func (in bool a[4])
1828*35238bceSAndroid Build Coastguard Worker            {
1829*35238bceSAndroid Build Coastguard Worker                a[0] = false;
1830*35238bceSAndroid Build Coastguard Worker                a[2] = true;
1831*35238bceSAndroid Build Coastguard Worker                a[3] = !a[1];
1832*35238bceSAndroid Build Coastguard Worker                return a[0];
1833*35238bceSAndroid Build Coastguard Worker            }
1834*35238bceSAndroid Build Coastguard Worker
1835*35238bceSAndroid Build Coastguard Worker            void main()
1836*35238bceSAndroid Build Coastguard Worker            {
1837*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1838*35238bceSAndroid Build Coastguard Worker                bool arr[4];
1839*35238bceSAndroid Build Coastguard Worker                arr[0] = !in0.x;
1840*35238bceSAndroid Build Coastguard Worker                arr[1] = !in0.y;
1841*35238bceSAndroid Build Coastguard Worker                arr[2] = !in0.z;
1842*35238bceSAndroid Build Coastguard Worker                arr[3] = !in0.w;
1843*35238bceSAndroid Build Coastguard Worker                func(arr);
1844*35238bceSAndroid Build Coastguard Worker                out0 = bvec4(arr[0], arr[1], arr[2], arr[3]);
1845*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1846*35238bceSAndroid Build Coastguard Worker            }
1847*35238bceSAndroid Build Coastguard Worker        ""
1848*35238bceSAndroid Build Coastguard Worker    end
1849*35238bceSAndroid Build Coastguard Worker
1850*35238bceSAndroid Build Coastguard Worker    case global_in_bool
1851*35238bceSAndroid Build Coastguard Worker        values
1852*35238bceSAndroid Build Coastguard Worker        {
1853*35238bceSAndroid Build Coastguard Worker            input bvec4 in0 = [ bvec4(true, true, false, true) | bvec4(false, false, false, false) ];
1854*35238bceSAndroid Build Coastguard Worker            output bvec4 out0 = [ bvec4(false, false, true, false) | bvec4(true, true, true, true) ];
1855*35238bceSAndroid Build Coastguard Worker        }
1856*35238bceSAndroid Build Coastguard Worker
1857*35238bceSAndroid Build Coastguard Worker        both ""
1858*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1859*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1860*35238bceSAndroid Build Coastguard Worker
1861*35238bceSAndroid Build Coastguard Worker            bool func (in bool a[4])
1862*35238bceSAndroid Build Coastguard Worker            {
1863*35238bceSAndroid Build Coastguard Worker                a[0] = false;
1864*35238bceSAndroid Build Coastguard Worker                a[2] = true;
1865*35238bceSAndroid Build Coastguard Worker                a[3] = !a[1];
1866*35238bceSAndroid Build Coastguard Worker                return a[0];
1867*35238bceSAndroid Build Coastguard Worker            }
1868*35238bceSAndroid Build Coastguard Worker
1869*35238bceSAndroid Build Coastguard Worker            bool arr[4];
1870*35238bceSAndroid Build Coastguard Worker
1871*35238bceSAndroid Build Coastguard Worker            void main()
1872*35238bceSAndroid Build Coastguard Worker            {
1873*35238bceSAndroid Build Coastguard Worker                ${SETUP}
1874*35238bceSAndroid Build Coastguard Worker                arr[0] = !in0.x;
1875*35238bceSAndroid Build Coastguard Worker                arr[1] = !in0.y;
1876*35238bceSAndroid Build Coastguard Worker                arr[2] = !in0.z;
1877*35238bceSAndroid Build Coastguard Worker                arr[3] = !in0.w;
1878*35238bceSAndroid Build Coastguard Worker                func(arr);
1879*35238bceSAndroid Build Coastguard Worker                out0 = bvec4(arr[0], arr[1], arr[2], arr[3]);
1880*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1881*35238bceSAndroid Build Coastguard Worker            }
1882*35238bceSAndroid Build Coastguard Worker        ""
1883*35238bceSAndroid Build Coastguard Worker    end
1884*35238bceSAndroid Build Coastguard Worker
1885*35238bceSAndroid Build Coastguard Worker    case test_helpers
1886*35238bceSAndroid Build Coastguard Worker        desc "Check that helper functions are supported properly."
1887*35238bceSAndroid Build Coastguard Worker        values
1888*35238bceSAndroid Build Coastguard Worker        {
1889*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) ];
1890*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 1.0 | 1.0 ];
1891*35238bceSAndroid Build Coastguard Worker        }
1892*35238bceSAndroid Build Coastguard Worker
1893*35238bceSAndroid Build Coastguard Worker        both ""
1894*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1895*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1896*35238bceSAndroid Build Coastguard Worker
1897*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]);
1898*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val);
1899*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]);
1900*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref);
1901*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]);
1902*35238bceSAndroid Build Coastguard Worker
1903*35238bceSAndroid Build Coastguard Worker            void main()
1904*35238bceSAndroid Build Coastguard Worker            {
1905*35238bceSAndroid Build Coastguard Worker                float arr[4];
1906*35238bceSAndroid Build Coastguard Worker                set(arr, in0);
1907*35238bceSAndroid Build Coastguard Worker                negate(arr);
1908*35238bceSAndroid Build Coastguard Worker                out0 = float(test(arr, -in0));
1909*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1910*35238bceSAndroid Build Coastguard Worker            }
1911*35238bceSAndroid Build Coastguard Worker
1912*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)); }
1913*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
1914*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; }
1915*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]) { set(arr, -get(arr)); }
1916*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
1917*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
1918*35238bceSAndroid Build Coastguard Worker        ""
1919*35238bceSAndroid Build Coastguard Worker    end
1920*35238bceSAndroid Build Coastguard Worker
1921*35238bceSAndroid Build Coastguard Worker    case copy_local_in_on_call
1922*35238bceSAndroid Build Coastguard Worker        desc "Check that local 'in' arguments are copied on call and don't alias."
1923*35238bceSAndroid Build Coastguard Worker        values
1924*35238bceSAndroid Build Coastguard Worker        {
1925*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) ];
1926*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) ];
1927*35238bceSAndroid Build Coastguard Worker        }
1928*35238bceSAndroid Build Coastguard Worker
1929*35238bceSAndroid Build Coastguard Worker        both ""
1930*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1931*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1932*35238bceSAndroid Build Coastguard Worker
1933*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]);
1934*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val);
1935*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]);
1936*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref);
1937*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]);
1938*35238bceSAndroid Build Coastguard Worker
1939*35238bceSAndroid Build Coastguard Worker            float func (in float a[4], in float b[4])
1940*35238bceSAndroid Build Coastguard Worker            {
1941*35238bceSAndroid Build Coastguard Worker                a[0] = 2.123;
1942*35238bceSAndroid Build Coastguard Worker                a[2] = -4.123;
1943*35238bceSAndroid Build Coastguard Worker                return isEqual(a, b) ? 1.0 : -1.0;
1944*35238bceSAndroid Build Coastguard Worker            }
1945*35238bceSAndroid Build Coastguard Worker
1946*35238bceSAndroid Build Coastguard Worker            void main()
1947*35238bceSAndroid Build Coastguard Worker            {
1948*35238bceSAndroid Build Coastguard Worker                float arr[4];
1949*35238bceSAndroid Build Coastguard Worker                set(arr, in0);
1950*35238bceSAndroid Build Coastguard Worker                out0 = in0 * func(arr, arr);
1951*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1952*35238bceSAndroid Build Coastguard Worker            }
1953*35238bceSAndroid Build Coastguard Worker
1954*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)); }
1955*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
1956*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; }
1957*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]) { set(arr, -get(arr)); }
1958*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
1959*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
1960*35238bceSAndroid Build Coastguard Worker        ""
1961*35238bceSAndroid Build Coastguard Worker    end
1962*35238bceSAndroid Build Coastguard Worker
1963*35238bceSAndroid Build Coastguard Worker    case copy_global_in_on_call
1964*35238bceSAndroid Build Coastguard Worker        desc "Check that global 'in' arguments are copied on call and don't alias."
1965*35238bceSAndroid Build Coastguard Worker        values
1966*35238bceSAndroid Build Coastguard Worker        {
1967*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) ];
1968*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) ];
1969*35238bceSAndroid Build Coastguard Worker        }
1970*35238bceSAndroid Build Coastguard Worker
1971*35238bceSAndroid Build Coastguard Worker        both ""
1972*35238bceSAndroid Build Coastguard Worker            precision mediump float;
1973*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
1974*35238bceSAndroid Build Coastguard Worker
1975*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]);
1976*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val);
1977*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]);
1978*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref);
1979*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]);
1980*35238bceSAndroid Build Coastguard Worker
1981*35238bceSAndroid Build Coastguard Worker            float func (in float a[4], in float b[4])
1982*35238bceSAndroid Build Coastguard Worker            {
1983*35238bceSAndroid Build Coastguard Worker                a[0] = 2.123;
1984*35238bceSAndroid Build Coastguard Worker                a[2] = -4.123;
1985*35238bceSAndroid Build Coastguard Worker                return isEqual(a, b) ? 1.0 : -1.0;
1986*35238bceSAndroid Build Coastguard Worker            }
1987*35238bceSAndroid Build Coastguard Worker
1988*35238bceSAndroid Build Coastguard Worker            float arr[4];
1989*35238bceSAndroid Build Coastguard Worker
1990*35238bceSAndroid Build Coastguard Worker            void main()
1991*35238bceSAndroid Build Coastguard Worker            {
1992*35238bceSAndroid Build Coastguard Worker                set(arr, in0);
1993*35238bceSAndroid Build Coastguard Worker                out0 = in0 * func(arr, arr);
1994*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
1995*35238bceSAndroid Build Coastguard Worker            }
1996*35238bceSAndroid Build Coastguard Worker
1997*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)); }
1998*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
1999*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; }
2000*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]) { set(arr, -get(arr)); }
2001*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2002*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2003*35238bceSAndroid Build Coastguard Worker        ""
2004*35238bceSAndroid Build Coastguard Worker    end
2005*35238bceSAndroid Build Coastguard Worker
2006*35238bceSAndroid Build Coastguard Worker    case copy_local_inout_on_call
2007*35238bceSAndroid Build Coastguard Worker        desc "Check that local 'in' arguments are copied on call and don't alias."
2008*35238bceSAndroid Build Coastguard Worker        values
2009*35238bceSAndroid Build Coastguard Worker        {
2010*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) ];
2011*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) ];
2012*35238bceSAndroid Build Coastguard Worker        }
2013*35238bceSAndroid Build Coastguard Worker
2014*35238bceSAndroid Build Coastguard Worker        both ""
2015*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2016*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2017*35238bceSAndroid Build Coastguard Worker
2018*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]);
2019*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val);
2020*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]);
2021*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref);
2022*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]);
2023*35238bceSAndroid Build Coastguard Worker
2024*35238bceSAndroid Build Coastguard Worker            float func (inout float a[4], inout float b[4])
2025*35238bceSAndroid Build Coastguard Worker            {
2026*35238bceSAndroid Build Coastguard Worker                negate(a);
2027*35238bceSAndroid Build Coastguard Worker                return isEqual(a, b) ? 1.0 : -1.0;
2028*35238bceSAndroid Build Coastguard Worker            }
2029*35238bceSAndroid Build Coastguard Worker
2030*35238bceSAndroid Build Coastguard Worker            void main()
2031*35238bceSAndroid Build Coastguard Worker            {
2032*35238bceSAndroid Build Coastguard Worker                float arr[4];
2033*35238bceSAndroid Build Coastguard Worker                set(arr, in0);
2034*35238bceSAndroid Build Coastguard Worker                float m = func(arr, arr); // returns -1.0
2035*35238bceSAndroid Build Coastguard Worker                float n = float(test(arr, in0) || test(arr, -in0));
2036*35238bceSAndroid Build Coastguard Worker                out0 = in0 * m * n;
2037*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2038*35238bceSAndroid Build Coastguard Worker            }
2039*35238bceSAndroid Build Coastguard Worker
2040*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)); }
2041*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2042*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; }
2043*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]) { set(arr, -get(arr)); }
2044*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2045*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2046*35238bceSAndroid Build Coastguard Worker        ""
2047*35238bceSAndroid Build Coastguard Worker    end
2048*35238bceSAndroid Build Coastguard Worker
2049*35238bceSAndroid Build Coastguard Worker    case copy_global_inout_on_call
2050*35238bceSAndroid Build Coastguard Worker        desc "Check that global 'in' arguments are copied on call and don't alias."
2051*35238bceSAndroid Build Coastguard Worker        values
2052*35238bceSAndroid Build Coastguard Worker        {
2053*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) ];
2054*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) ];
2055*35238bceSAndroid Build Coastguard Worker        }
2056*35238bceSAndroid Build Coastguard Worker
2057*35238bceSAndroid Build Coastguard Worker        both ""
2058*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2059*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2060*35238bceSAndroid Build Coastguard Worker
2061*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]);
2062*35238bceSAndroid Build Coastguard Worker            void set (out float arr[4], vec4 val);
2063*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]);
2064*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref);
2065*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]);
2066*35238bceSAndroid Build Coastguard Worker
2067*35238bceSAndroid Build Coastguard Worker            float func (in float a[4], in float b[4])
2068*35238bceSAndroid Build Coastguard Worker            {
2069*35238bceSAndroid Build Coastguard Worker                negate(a);
2070*35238bceSAndroid Build Coastguard Worker                return isEqual(a, b) ? 1.0 : -1.0;
2071*35238bceSAndroid Build Coastguard Worker            }
2072*35238bceSAndroid Build Coastguard Worker
2073*35238bceSAndroid Build Coastguard Worker            float arr[4];
2074*35238bceSAndroid Build Coastguard Worker
2075*35238bceSAndroid Build Coastguard Worker            void main()
2076*35238bceSAndroid Build Coastguard Worker            {
2077*35238bceSAndroid Build Coastguard Worker                set(arr, in0);
2078*35238bceSAndroid Build Coastguard Worker                float m = func(arr, arr); // returns -1.0
2079*35238bceSAndroid Build Coastguard Worker                float n = float(test(arr, in0) || test(arr, -in0));
2080*35238bceSAndroid Build Coastguard Worker                out0 = in0 * m * n;
2081*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2082*35238bceSAndroid Build Coastguard Worker            }
2083*35238bceSAndroid Build Coastguard Worker
2084*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)); }
2085*35238bceSAndroid Build Coastguard Worker            vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2086*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; }
2087*35238bceSAndroid Build Coastguard Worker            void negate (inout float arr[4]) { set(arr, -get(arr)); }
2088*35238bceSAndroid Build Coastguard Worker            bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2089*35238bceSAndroid Build Coastguard Worker            bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2090*35238bceSAndroid Build Coastguard Worker        ""
2091*35238bceSAndroid Build Coastguard Worker    end
2092*35238bceSAndroid Build Coastguard Worker
2093*35238bceSAndroid Build Coastguard Worker#            vec4 get (in float arr[4]);
2094*35238bceSAndroid Build Coastguard Worker#            void set (out float arr[4], vec4 val);
2095*35238bceSAndroid Build Coastguard Worker#            void negate (inout float arr[4]);
2096*35238bceSAndroid Build Coastguard Worker#            bool test (in float arr[4], vec4 ref);
2097*35238bceSAndroid Build Coastguard Worker#            bool isEqual (in float a[4], in float b[4]);
2098*35238bceSAndroid Build Coastguard Worker
2099*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)); }
2100*35238bceSAndroid Build Coastguard Worker#            vec4 get (in float arr[4]) { return vec4(arr[0], arr[1], arr[2], arr[3]); }
2101*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; }
2102*35238bceSAndroid Build Coastguard Worker#            void negate (inout float arr[4]) { set(arr, -get(arr)); }
2103*35238bceSAndroid Build Coastguard Worker#            bool test (in float arr[4], vec4 ref) { return (absDiff(get(arr), ref) < 0.1); }
2104*35238bceSAndroid Build Coastguard Worker#            bool isEqual (in float a[4], in float b[4]) { return (absDiff(get(a), get(b)) < 0.1); }
2105*35238bceSAndroid Build Coastguard Worker
2106*35238bceSAndroid Build Coastguard Workerend # array_arguments
2107*35238bceSAndroid Build Coastguard Worker
2108*35238bceSAndroid Build Coastguard Worker#group qualifiers "Function Parameter Qualifiers"
2109*35238bceSAndroid Build Coastguard Worker#
2110*35238bceSAndroid Build Coastguard Worker#end # qualifiers
2111*35238bceSAndroid Build Coastguard Worker
2112*35238bceSAndroid Build Coastguard Workergroup control_flow "Control Flow In Functions"
2113*35238bceSAndroid Build Coastguard Worker
2114*35238bceSAndroid Build Coastguard Worker    case simple_return
2115*35238bceSAndroid Build Coastguard Worker        values
2116*35238bceSAndroid Build Coastguard Worker        {
2117*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2118*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2119*35238bceSAndroid Build Coastguard Worker        }
2120*35238bceSAndroid Build Coastguard Worker
2121*35238bceSAndroid Build Coastguard Worker        both ""
2122*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2123*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2124*35238bceSAndroid Build Coastguard Worker
2125*35238bceSAndroid Build Coastguard Worker            float func (float a)
2126*35238bceSAndroid Build Coastguard Worker            {
2127*35238bceSAndroid Build Coastguard Worker                return -a;
2128*35238bceSAndroid Build Coastguard Worker                a = a * -1.0;
2129*35238bceSAndroid Build Coastguard Worker                return 1.0;
2130*35238bceSAndroid Build Coastguard Worker            }
2131*35238bceSAndroid Build Coastguard Worker
2132*35238bceSAndroid Build Coastguard Worker            void main()
2133*35238bceSAndroid Build Coastguard Worker            {
2134*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2135*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2136*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2137*35238bceSAndroid Build Coastguard Worker            }
2138*35238bceSAndroid Build Coastguard Worker        ""
2139*35238bceSAndroid Build Coastguard Worker    end
2140*35238bceSAndroid Build Coastguard Worker
2141*35238bceSAndroid Build Coastguard Worker    case return_in_if
2142*35238bceSAndroid Build Coastguard Worker        values
2143*35238bceSAndroid Build Coastguard Worker        {
2144*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2145*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2146*35238bceSAndroid Build Coastguard Worker        }
2147*35238bceSAndroid Build Coastguard Worker
2148*35238bceSAndroid Build Coastguard Worker        both ""
2149*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2150*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2151*35238bceSAndroid Build Coastguard Worker
2152*35238bceSAndroid Build Coastguard Worker            float func (float a)
2153*35238bceSAndroid Build Coastguard Worker            {
2154*35238bceSAndroid Build Coastguard Worker                if (a != 0.0)
2155*35238bceSAndroid Build Coastguard Worker                    return -a;
2156*35238bceSAndroid Build Coastguard Worker                return 1.0;
2157*35238bceSAndroid Build Coastguard Worker            }
2158*35238bceSAndroid Build Coastguard Worker
2159*35238bceSAndroid Build Coastguard Worker            void main()
2160*35238bceSAndroid Build Coastguard Worker            {
2161*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2162*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2163*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2164*35238bceSAndroid Build Coastguard Worker            }
2165*35238bceSAndroid Build Coastguard Worker        ""
2166*35238bceSAndroid Build Coastguard Worker    end
2167*35238bceSAndroid Build Coastguard Worker
2168*35238bceSAndroid Build Coastguard Worker    case return_in_else
2169*35238bceSAndroid Build Coastguard Worker        values
2170*35238bceSAndroid Build Coastguard Worker        {
2171*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2172*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2173*35238bceSAndroid Build Coastguard Worker        }
2174*35238bceSAndroid Build Coastguard Worker
2175*35238bceSAndroid Build Coastguard Worker        both ""
2176*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2177*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2178*35238bceSAndroid Build Coastguard Worker
2179*35238bceSAndroid Build Coastguard Worker            float func (float a)
2180*35238bceSAndroid Build Coastguard Worker            {
2181*35238bceSAndroid Build Coastguard Worker                if (a == 0.0)
2182*35238bceSAndroid Build Coastguard Worker                    return 1.0;
2183*35238bceSAndroid Build Coastguard Worker                else
2184*35238bceSAndroid Build Coastguard Worker                    return -a;
2185*35238bceSAndroid Build Coastguard Worker                return 1.0;
2186*35238bceSAndroid Build Coastguard Worker            }
2187*35238bceSAndroid Build Coastguard Worker
2188*35238bceSAndroid Build Coastguard Worker            void main()
2189*35238bceSAndroid Build Coastguard Worker            {
2190*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2191*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2192*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2193*35238bceSAndroid Build Coastguard Worker            }
2194*35238bceSAndroid Build Coastguard Worker        ""
2195*35238bceSAndroid Build Coastguard Worker    end
2196*35238bceSAndroid Build Coastguard Worker
2197*35238bceSAndroid Build Coastguard Worker    case return_in_loop
2198*35238bceSAndroid Build Coastguard Worker        values
2199*35238bceSAndroid Build Coastguard Worker        {
2200*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2201*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2202*35238bceSAndroid Build Coastguard Worker        }
2203*35238bceSAndroid Build Coastguard Worker
2204*35238bceSAndroid Build Coastguard Worker        both ""
2205*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2206*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2207*35238bceSAndroid Build Coastguard Worker
2208*35238bceSAndroid Build Coastguard Worker            float func (float a)
2209*35238bceSAndroid Build Coastguard Worker            {
2210*35238bceSAndroid Build Coastguard Worker                for (int i = 0; i < 1; i++)
2211*35238bceSAndroid Build Coastguard Worker                    return -a;
2212*35238bceSAndroid Build Coastguard Worker                return 1.0;
2213*35238bceSAndroid Build Coastguard Worker            }
2214*35238bceSAndroid Build Coastguard Worker
2215*35238bceSAndroid Build Coastguard Worker            void main()
2216*35238bceSAndroid Build Coastguard Worker            {
2217*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2218*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2219*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2220*35238bceSAndroid Build Coastguard Worker            }
2221*35238bceSAndroid Build Coastguard Worker        ""
2222*35238bceSAndroid Build Coastguard Worker    end
2223*35238bceSAndroid Build Coastguard Worker
2224*35238bceSAndroid Build Coastguard Worker    case return_in_loop_if
2225*35238bceSAndroid Build Coastguard Worker        values
2226*35238bceSAndroid Build Coastguard Worker        {
2227*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2228*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2229*35238bceSAndroid Build Coastguard Worker        }
2230*35238bceSAndroid Build Coastguard Worker
2231*35238bceSAndroid Build Coastguard Worker        both ""
2232*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2233*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2234*35238bceSAndroid Build Coastguard Worker
2235*35238bceSAndroid Build Coastguard Worker            float func (float a)
2236*35238bceSAndroid Build Coastguard Worker            {
2237*35238bceSAndroid Build Coastguard Worker                for (int i = 0; i < 3; i++)
2238*35238bceSAndroid Build Coastguard Worker                {
2239*35238bceSAndroid Build Coastguard Worker                    if (i == 1)
2240*35238bceSAndroid Build Coastguard Worker                        return a;
2241*35238bceSAndroid Build Coastguard Worker                    else if (i > 1)
2242*35238bceSAndroid Build Coastguard Worker                        return -1.0;
2243*35238bceSAndroid Build Coastguard Worker                    a = -a;
2244*35238bceSAndroid Build Coastguard Worker                }
2245*35238bceSAndroid Build Coastguard Worker                return 1.0;
2246*35238bceSAndroid Build Coastguard Worker            }
2247*35238bceSAndroid Build Coastguard Worker
2248*35238bceSAndroid Build Coastguard Worker            void main()
2249*35238bceSAndroid Build Coastguard Worker            {
2250*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2251*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2252*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2253*35238bceSAndroid Build Coastguard Worker            }
2254*35238bceSAndroid Build Coastguard Worker        ""
2255*35238bceSAndroid Build Coastguard Worker    end
2256*35238bceSAndroid Build Coastguard Worker
2257*35238bceSAndroid Build Coastguard Worker    case return_after_loop
2258*35238bceSAndroid Build Coastguard Worker        values
2259*35238bceSAndroid Build Coastguard Worker        {
2260*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2261*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2262*35238bceSAndroid Build Coastguard Worker        }
2263*35238bceSAndroid Build Coastguard Worker
2264*35238bceSAndroid Build Coastguard Worker        both ""
2265*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2266*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2267*35238bceSAndroid Build Coastguard Worker
2268*35238bceSAndroid Build Coastguard Worker            float func (float a)
2269*35238bceSAndroid Build Coastguard Worker            {
2270*35238bceSAndroid Build Coastguard Worker                for (int i = 0; i < 5; i++)
2271*35238bceSAndroid Build Coastguard Worker                    a = -a;
2272*35238bceSAndroid Build Coastguard Worker                return a;
2273*35238bceSAndroid Build Coastguard Worker            }
2274*35238bceSAndroid Build Coastguard Worker
2275*35238bceSAndroid Build Coastguard Worker            void main()
2276*35238bceSAndroid Build Coastguard Worker            {
2277*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2278*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2279*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2280*35238bceSAndroid Build Coastguard Worker            }
2281*35238bceSAndroid Build Coastguard Worker        ""
2282*35238bceSAndroid Build Coastguard Worker    end
2283*35238bceSAndroid Build Coastguard Worker
2284*35238bceSAndroid Build Coastguard Worker    case return_after_break
2285*35238bceSAndroid Build Coastguard Worker        values
2286*35238bceSAndroid Build Coastguard Worker        {
2287*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2288*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2289*35238bceSAndroid Build Coastguard Worker        }
2290*35238bceSAndroid Build Coastguard Worker
2291*35238bceSAndroid Build Coastguard Worker        both ""
2292*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2293*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2294*35238bceSAndroid Build Coastguard Worker
2295*35238bceSAndroid Build Coastguard Worker            float func (float a)
2296*35238bceSAndroid Build Coastguard Worker            {
2297*35238bceSAndroid Build Coastguard Worker                for (int i = 0; i < 6; i++)
2298*35238bceSAndroid Build Coastguard Worker                {
2299*35238bceSAndroid Build Coastguard Worker                    a = -a;
2300*35238bceSAndroid Build Coastguard Worker                    if (i == 4)
2301*35238bceSAndroid Build Coastguard Worker                        break;
2302*35238bceSAndroid Build Coastguard Worker                }
2303*35238bceSAndroid Build Coastguard Worker                return a;
2304*35238bceSAndroid Build Coastguard Worker            }
2305*35238bceSAndroid Build Coastguard Worker
2306*35238bceSAndroid Build Coastguard Worker            void main()
2307*35238bceSAndroid Build Coastguard Worker            {
2308*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2309*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2310*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2311*35238bceSAndroid Build Coastguard Worker            }
2312*35238bceSAndroid Build Coastguard Worker        ""
2313*35238bceSAndroid Build Coastguard Worker    end
2314*35238bceSAndroid Build Coastguard Worker
2315*35238bceSAndroid Build Coastguard Worker    case return_after_continue
2316*35238bceSAndroid Build Coastguard Worker        values
2317*35238bceSAndroid Build Coastguard Worker        {
2318*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2319*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2320*35238bceSAndroid Build Coastguard Worker        }
2321*35238bceSAndroid Build Coastguard Worker
2322*35238bceSAndroid Build Coastguard Worker        both ""
2323*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2324*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2325*35238bceSAndroid Build Coastguard Worker
2326*35238bceSAndroid Build Coastguard Worker            float func (float a)
2327*35238bceSAndroid Build Coastguard Worker            {
2328*35238bceSAndroid Build Coastguard Worker                for (int i = 0; i < 6; i++)
2329*35238bceSAndroid Build Coastguard Worker                {
2330*35238bceSAndroid Build Coastguard Worker                    if (i == 4)
2331*35238bceSAndroid Build Coastguard Worker                        continue;
2332*35238bceSAndroid Build Coastguard Worker                    a = -a;
2333*35238bceSAndroid Build Coastguard Worker                }
2334*35238bceSAndroid Build Coastguard Worker                return a;
2335*35238bceSAndroid Build Coastguard Worker            }
2336*35238bceSAndroid Build Coastguard Worker
2337*35238bceSAndroid Build Coastguard Worker            void main()
2338*35238bceSAndroid Build Coastguard Worker            {
2339*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2340*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2341*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2342*35238bceSAndroid Build Coastguard Worker            }
2343*35238bceSAndroid Build Coastguard Worker        ""
2344*35238bceSAndroid Build Coastguard Worker    end
2345*35238bceSAndroid Build Coastguard Worker
2346*35238bceSAndroid Build Coastguard Worker    case return_in_nested_loop
2347*35238bceSAndroid Build Coastguard Worker        values
2348*35238bceSAndroid Build Coastguard Worker        {
2349*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2350*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2351*35238bceSAndroid Build Coastguard Worker        }
2352*35238bceSAndroid Build Coastguard Worker
2353*35238bceSAndroid Build Coastguard Worker        both ""
2354*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2355*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2356*35238bceSAndroid Build Coastguard Worker
2357*35238bceSAndroid Build Coastguard Worker            float func (float a)
2358*35238bceSAndroid Build Coastguard Worker            {
2359*35238bceSAndroid Build Coastguard Worker                for (int i = 0; i < 6; i++)
2360*35238bceSAndroid Build Coastguard Worker                {
2361*35238bceSAndroid Build Coastguard Worker                    a = -a;
2362*35238bceSAndroid Build Coastguard Worker                    for (int j = 0; j < 4; j++)
2363*35238bceSAndroid Build Coastguard Worker                    {
2364*35238bceSAndroid Build Coastguard Worker                        a = -a;
2365*35238bceSAndroid Build Coastguard Worker                        if (i == 1)
2366*35238bceSAndroid Build Coastguard Worker                            return a;
2367*35238bceSAndroid Build Coastguard Worker                    }
2368*35238bceSAndroid Build Coastguard Worker                    if (i == 4)
2369*35238bceSAndroid Build Coastguard Worker                        return 1.0;
2370*35238bceSAndroid Build Coastguard Worker                }
2371*35238bceSAndroid Build Coastguard Worker                return 1.0;
2372*35238bceSAndroid Build Coastguard Worker            }
2373*35238bceSAndroid Build Coastguard Worker
2374*35238bceSAndroid Build Coastguard Worker            void main()
2375*35238bceSAndroid Build Coastguard Worker            {
2376*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2377*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
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 return_after_loop_sequence
2384*35238bceSAndroid Build Coastguard Worker        require full_glsl_es_100_support
2385*35238bceSAndroid Build Coastguard Worker
2386*35238bceSAndroid Build Coastguard Worker        values
2387*35238bceSAndroid Build Coastguard Worker        {
2388*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2389*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2390*35238bceSAndroid Build Coastguard Worker        }
2391*35238bceSAndroid Build Coastguard Worker
2392*35238bceSAndroid Build Coastguard Worker        both ""
2393*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2394*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2395*35238bceSAndroid Build Coastguard Worker
2396*35238bceSAndroid Build Coastguard Worker            float func (float a)
2397*35238bceSAndroid Build Coastguard Worker            {
2398*35238bceSAndroid Build Coastguard Worker                int i;
2399*35238bceSAndroid Build Coastguard Worker                for (i = 0; i < 6; i++) // negate a
2400*35238bceSAndroid Build Coastguard Worker                {
2401*35238bceSAndroid Build Coastguard Worker                    a = -a;
2402*35238bceSAndroid Build Coastguard Worker                    if (i == 4)
2403*35238bceSAndroid Build Coastguard Worker                        a = -a;
2404*35238bceSAndroid Build Coastguard Worker                }
2405*35238bceSAndroid Build Coastguard Worker
2406*35238bceSAndroid Build Coastguard Worker                for (; i < 10; i++) // keep a
2407*35238bceSAndroid Build Coastguard Worker                {
2408*35238bceSAndroid Build Coastguard Worker                    if (i == 8)
2409*35238bceSAndroid Build Coastguard Worker                        continue;
2410*35238bceSAndroid Build Coastguard Worker                    else if (i == 9)
2411*35238bceSAndroid Build Coastguard Worker                        break;
2412*35238bceSAndroid Build Coastguard Worker                    a = -a;
2413*35238bceSAndroid Build Coastguard Worker                }
2414*35238bceSAndroid Build Coastguard Worker
2415*35238bceSAndroid Build Coastguard Worker                return a;
2416*35238bceSAndroid Build Coastguard Worker            }
2417*35238bceSAndroid Build Coastguard Worker
2418*35238bceSAndroid Build Coastguard Worker            void main()
2419*35238bceSAndroid Build Coastguard Worker            {
2420*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2421*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2422*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2423*35238bceSAndroid Build Coastguard Worker            }
2424*35238bceSAndroid Build Coastguard Worker        ""
2425*35238bceSAndroid Build Coastguard Worker    end
2426*35238bceSAndroid Build Coastguard Worker
2427*35238bceSAndroid Build Coastguard Worker    case mixed_return_break_continue
2428*35238bceSAndroid Build Coastguard Worker        values
2429*35238bceSAndroid Build Coastguard Worker        {
2430*35238bceSAndroid Build Coastguard Worker            input float in0 = [ -0.5 | 1.5 ];
2431*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ];
2432*35238bceSAndroid Build Coastguard Worker        }
2433*35238bceSAndroid Build Coastguard Worker
2434*35238bceSAndroid Build Coastguard Worker        both ""
2435*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2436*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2437*35238bceSAndroid Build Coastguard Worker
2438*35238bceSAndroid Build Coastguard Worker            float func (float a)
2439*35238bceSAndroid Build Coastguard Worker            {
2440*35238bceSAndroid Build Coastguard Worker                for (int i = 0; i < 6; i++)
2441*35238bceSAndroid Build Coastguard Worker                {
2442*35238bceSAndroid Build Coastguard Worker                    if (i == 0)
2443*35238bceSAndroid Build Coastguard Worker                        continue;
2444*35238bceSAndroid Build Coastguard Worker                    else if (i == 1)
2445*35238bceSAndroid Build Coastguard Worker                    {
2446*35238bceSAndroid Build Coastguard Worker                    }
2447*35238bceSAndroid Build Coastguard Worker                    else if (i == 3)
2448*35238bceSAndroid Build Coastguard Worker                        break;
2449*35238bceSAndroid Build Coastguard Worker                    else
2450*35238bceSAndroid Build Coastguard Worker                        return a;
2451*35238bceSAndroid Build Coastguard Worker                    a = -a;
2452*35238bceSAndroid Build Coastguard Worker                }
2453*35238bceSAndroid Build Coastguard Worker
2454*35238bceSAndroid Build Coastguard Worker                return 1.0;
2455*35238bceSAndroid Build Coastguard Worker            }
2456*35238bceSAndroid Build Coastguard Worker
2457*35238bceSAndroid Build Coastguard Worker            void main()
2458*35238bceSAndroid Build Coastguard Worker            {
2459*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2460*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2461*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2462*35238bceSAndroid Build Coastguard Worker            }
2463*35238bceSAndroid Build Coastguard Worker        ""
2464*35238bceSAndroid Build Coastguard Worker    end
2465*35238bceSAndroid Build Coastguard Worker
2466*35238bceSAndroid Build Coastguard Workerend # control_flow
2467*35238bceSAndroid Build Coastguard Worker
2468*35238bceSAndroid Build Coastguard Workergroup misc "Miscellaneous"
2469*35238bceSAndroid Build Coastguard Worker
2470*35238bceSAndroid Build Coastguard Worker    case multi_arg_float
2471*35238bceSAndroid Build Coastguard Worker        values
2472*35238bceSAndroid Build Coastguard Worker        {
2473*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) ];
2474*35238bceSAndroid Build Coastguard Worker            output float out0 = [ 0.5 | -1.5 ]; # -sum(in0)
2475*35238bceSAndroid Build Coastguard Worker        }
2476*35238bceSAndroid Build Coastguard Worker
2477*35238bceSAndroid Build Coastguard Worker        both ""
2478*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2479*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2480*35238bceSAndroid Build Coastguard Worker
2481*35238bceSAndroid Build Coastguard Worker            float sum(vec4 v) { return (v.x + v.y + v.z + v.w); }
2482*35238bceSAndroid Build Coastguard Worker
2483*35238bceSAndroid Build Coastguard Worker            float func (float a, vec3 b, vec2 c, vec2 d, vec4 e)
2484*35238bceSAndroid Build Coastguard Worker            {
2485*35238bceSAndroid Build Coastguard Worker                return -sum(vec4(a, b) + vec4(c, d)) + sum(e);
2486*35238bceSAndroid Build Coastguard Worker            }
2487*35238bceSAndroid Build Coastguard Worker
2488*35238bceSAndroid Build Coastguard Worker            void main()
2489*35238bceSAndroid Build Coastguard Worker            {
2490*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2491*35238bceSAndroid Build Coastguard Worker                out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0);
2492*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2493*35238bceSAndroid Build Coastguard Worker            }
2494*35238bceSAndroid Build Coastguard Worker        ""
2495*35238bceSAndroid Build Coastguard Worker    end
2496*35238bceSAndroid Build Coastguard Worker
2497*35238bceSAndroid Build Coastguard Worker    case multi_arg_int
2498*35238bceSAndroid Build Coastguard Worker        values
2499*35238bceSAndroid Build Coastguard Worker        {
2500*35238bceSAndroid Build Coastguard Worker            input ivec4 in0 = [ ivec4(-1, 0, 2, 2) | ivec4(1, 4, -8, 2) ];
2501*35238bceSAndroid Build Coastguard Worker            output int out0 = [ -3 | 1 ];
2502*35238bceSAndroid Build Coastguard Worker        }
2503*35238bceSAndroid Build Coastguard Worker
2504*35238bceSAndroid Build Coastguard Worker        both ""
2505*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2506*35238bceSAndroid Build Coastguard Worker            precision mediump int;
2507*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2508*35238bceSAndroid Build Coastguard Worker
2509*35238bceSAndroid Build Coastguard Worker            int sum(ivec4 v) { return (v.x + v.y + v.z + v.w); }
2510*35238bceSAndroid Build Coastguard Worker
2511*35238bceSAndroid Build Coastguard Worker            int func (int a, ivec3 b, ivec2 c, ivec2 d, ivec4 e)
2512*35238bceSAndroid Build Coastguard Worker            {
2513*35238bceSAndroid Build Coastguard Worker                return -sum(ivec4(a, b) + ivec4(c, d)) + sum(e);
2514*35238bceSAndroid Build Coastguard Worker            }
2515*35238bceSAndroid Build Coastguard Worker
2516*35238bceSAndroid Build Coastguard Worker            void main()
2517*35238bceSAndroid Build Coastguard Worker            {
2518*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2519*35238bceSAndroid Build Coastguard Worker                out0 = func(in0.y, in0.xzw, in0.wz, in0.yx, in0);
2520*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2521*35238bceSAndroid Build Coastguard Worker            }
2522*35238bceSAndroid Build Coastguard Worker        ""
2523*35238bceSAndroid Build Coastguard Worker    end
2524*35238bceSAndroid Build Coastguard Worker
2525*35238bceSAndroid Build Coastguard Worker    case argument_eval_order_1
2526*35238bceSAndroid Build Coastguard Worker        values
2527*35238bceSAndroid Build Coastguard Worker        {
2528*35238bceSAndroid Build Coastguard Worker            input int in0 = [  0 | 1 | 3 | 5 ];
2529*35238bceSAndroid Build Coastguard Worker            output int out0 = [ -1 | 5 | 11 | 17 ];
2530*35238bceSAndroid Build Coastguard Worker        }
2531*35238bceSAndroid Build Coastguard Worker
2532*35238bceSAndroid Build Coastguard Worker        both ""
2533*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2534*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2535*35238bceSAndroid Build Coastguard Worker
2536*35238bceSAndroid Build Coastguard Worker            int func (float a, int b, bool c, int d)
2537*35238bceSAndroid Build Coastguard Worker            {
2538*35238bceSAndroid Build Coastguard Worker                if (c)
2539*35238bceSAndroid Build Coastguard Worker                    return b + int(a) + d;
2540*35238bceSAndroid Build Coastguard Worker                else
2541*35238bceSAndroid Build Coastguard Worker                    return -1;
2542*35238bceSAndroid Build Coastguard Worker            }
2543*35238bceSAndroid Build Coastguard Worker
2544*35238bceSAndroid Build Coastguard Worker            void main ()
2545*35238bceSAndroid Build Coastguard Worker            {
2546*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2547*35238bceSAndroid Build Coastguard Worker                float v0 = float(in0);
2548*35238bceSAndroid Build Coastguard Worker                int v1 = in0;
2549*35238bceSAndroid Build Coastguard Worker                out0 = func((v0 += 1.0), v1++, (v0 > 1.5), v1);
2550*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2551*35238bceSAndroid Build Coastguard Worker            }
2552*35238bceSAndroid Build Coastguard Worker        ""
2553*35238bceSAndroid Build Coastguard Worker    end
2554*35238bceSAndroid Build Coastguard Worker
2555*35238bceSAndroid Build Coastguard Worker    case argument_eval_order_2
2556*35238bceSAndroid Build Coastguard Worker        values
2557*35238bceSAndroid Build Coastguard Worker        {
2558*35238bceSAndroid Build Coastguard Worker            input int in0 = [ 0 | -1 | 3 | 5 ];
2559*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 3 | -1 | 9 | 13 ];
2560*35238bceSAndroid Build Coastguard Worker        }
2561*35238bceSAndroid Build Coastguard Worker
2562*35238bceSAndroid Build Coastguard Worker        both ""
2563*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2564*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2565*35238bceSAndroid Build Coastguard Worker
2566*35238bceSAndroid Build Coastguard Worker            int g;
2567*35238bceSAndroid Build Coastguard Worker
2568*35238bceSAndroid Build Coastguard Worker            int modG (int v)
2569*35238bceSAndroid Build Coastguard Worker            {
2570*35238bceSAndroid Build Coastguard Worker                g += v;
2571*35238bceSAndroid Build Coastguard Worker                return v;
2572*35238bceSAndroid Build Coastguard Worker            }
2573*35238bceSAndroid Build Coastguard Worker
2574*35238bceSAndroid Build Coastguard Worker            int func (float a, int b, bool c, int d)
2575*35238bceSAndroid Build Coastguard Worker            {
2576*35238bceSAndroid Build Coastguard Worker                if (c)
2577*35238bceSAndroid Build Coastguard Worker                    return b + int(a) + d;
2578*35238bceSAndroid Build Coastguard Worker                else
2579*35238bceSAndroid Build Coastguard Worker                    return -1;
2580*35238bceSAndroid Build Coastguard Worker            }
2581*35238bceSAndroid Build Coastguard Worker
2582*35238bceSAndroid Build Coastguard Worker            void main ()
2583*35238bceSAndroid Build Coastguard Worker            {
2584*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2585*35238bceSAndroid Build Coastguard Worker                out0 = func(float(g = in0), modG(2), --g > 0, g);
2586*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2587*35238bceSAndroid Build Coastguard Worker            }
2588*35238bceSAndroid Build Coastguard Worker        ""
2589*35238bceSAndroid Build Coastguard Worker    end
2590*35238bceSAndroid Build Coastguard Worker
2591*35238bceSAndroid Build Coastguard Worker    case missing_returns
2592*35238bceSAndroid Build Coastguard Worker        values
2593*35238bceSAndroid Build Coastguard Worker        {
2594*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 1.0 | 2.0 | 3.0 ];
2595*35238bceSAndroid Build Coastguard Worker            output float out0 = [ -1.0 | -2.0 | -3.0 ];
2596*35238bceSAndroid Build Coastguard Worker        }
2597*35238bceSAndroid Build Coastguard Worker        both ""
2598*35238bceSAndroid Build Coastguard Worker            // Note specification says that returned value is undefined if no return
2599*35238bceSAndroid Build Coastguard Worker            // statement has been executed. In this case func() is called only with
2600*35238bceSAndroid Build Coastguard Worker            // positive values.
2601*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2602*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
2603*35238bceSAndroid Build Coastguard Worker
2604*35238bceSAndroid Build Coastguard Worker            float func (float f)
2605*35238bceSAndroid Build Coastguard Worker            {
2606*35238bceSAndroid Build Coastguard Worker                if (f > 0.0)
2607*35238bceSAndroid Build Coastguard Worker                    return -f;
2608*35238bceSAndroid Build Coastguard Worker            }
2609*35238bceSAndroid Build Coastguard Worker
2610*35238bceSAndroid Build Coastguard Worker            void main ()
2611*35238bceSAndroid Build Coastguard Worker            {
2612*35238bceSAndroid Build Coastguard Worker                ${SETUP}
2613*35238bceSAndroid Build Coastguard Worker                out0 = func(in0);
2614*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
2615*35238bceSAndroid Build Coastguard Worker            }
2616*35238bceSAndroid Build Coastguard Worker        ""
2617*35238bceSAndroid Build Coastguard Worker    end
2618*35238bceSAndroid Build Coastguard Worker
2619*35238bceSAndroid Build Coastguard Workerend # misc
2620*35238bceSAndroid Build Coastguard Worker
2621*35238bceSAndroid Build Coastguard Workergroup invalid "Invalid Functions"
2622*35238bceSAndroid Build Coastguard Worker    case break_in_body
2623*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2624*35238bceSAndroid Build Coastguard Worker        both ""
2625*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2626*35238bceSAndroid Build Coastguard Worker
2627*35238bceSAndroid Build Coastguard Worker            void func ()
2628*35238bceSAndroid Build Coastguard Worker            {
2629*35238bceSAndroid Build Coastguard Worker                break;
2630*35238bceSAndroid Build Coastguard Worker            }
2631*35238bceSAndroid Build Coastguard Worker
2632*35238bceSAndroid Build Coastguard Worker            void main ()
2633*35238bceSAndroid Build Coastguard Worker            {
2634*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2635*35238bceSAndroid Build Coastguard Worker            }
2636*35238bceSAndroid Build Coastguard Worker        ""
2637*35238bceSAndroid Build Coastguard Worker    end
2638*35238bceSAndroid Build Coastguard Worker
2639*35238bceSAndroid Build Coastguard Worker    case continue_in_body
2640*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2641*35238bceSAndroid Build Coastguard Worker        both ""
2642*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2643*35238bceSAndroid Build Coastguard Worker
2644*35238bceSAndroid Build Coastguard Worker            void func ()
2645*35238bceSAndroid Build Coastguard Worker            {
2646*35238bceSAndroid Build Coastguard Worker                continue;
2647*35238bceSAndroid Build Coastguard Worker            }
2648*35238bceSAndroid Build Coastguard Worker
2649*35238bceSAndroid Build Coastguard Worker            void main ()
2650*35238bceSAndroid Build Coastguard Worker            {
2651*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2652*35238bceSAndroid Build Coastguard Worker            }
2653*35238bceSAndroid Build Coastguard Worker        ""
2654*35238bceSAndroid Build Coastguard Worker    end
2655*35238bceSAndroid Build Coastguard Worker
2656*35238bceSAndroid Build Coastguard Worker    case return_value_from_void_function
2657*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2658*35238bceSAndroid Build Coastguard Worker        both ""
2659*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2660*35238bceSAndroid Build Coastguard Worker
2661*35238bceSAndroid Build Coastguard Worker            void func ()
2662*35238bceSAndroid Build Coastguard Worker            {
2663*35238bceSAndroid Build Coastguard Worker                return 1.0;
2664*35238bceSAndroid Build Coastguard Worker            }
2665*35238bceSAndroid Build Coastguard Worker
2666*35238bceSAndroid Build Coastguard Worker            void main ()
2667*35238bceSAndroid Build Coastguard Worker            {
2668*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2669*35238bceSAndroid Build Coastguard Worker            }
2670*35238bceSAndroid Build Coastguard Worker        ""
2671*35238bceSAndroid Build Coastguard Worker    end
2672*35238bceSAndroid Build Coastguard Worker
2673*35238bceSAndroid Build Coastguard Worker    case extra_arguments
2674*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2675*35238bceSAndroid Build Coastguard Worker        both ""
2676*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2677*35238bceSAndroid Build Coastguard Worker
2678*35238bceSAndroid Build Coastguard Worker            void func (float f)
2679*35238bceSAndroid Build Coastguard Worker            {
2680*35238bceSAndroid Build Coastguard Worker            }
2681*35238bceSAndroid Build Coastguard Worker
2682*35238bceSAndroid Build Coastguard Worker            void main ()
2683*35238bceSAndroid Build Coastguard Worker            {
2684*35238bceSAndroid Build Coastguard Worker                func(1.0, 2.0);
2685*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2686*35238bceSAndroid Build Coastguard Worker            }
2687*35238bceSAndroid Build Coastguard Worker        ""
2688*35238bceSAndroid Build Coastguard Worker    end
2689*35238bceSAndroid Build Coastguard Worker
2690*35238bceSAndroid Build Coastguard Worker    case missing_arguments
2691*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2692*35238bceSAndroid Build Coastguard Worker        both ""
2693*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2694*35238bceSAndroid Build Coastguard Worker
2695*35238bceSAndroid Build Coastguard Worker            void func (float f)
2696*35238bceSAndroid Build Coastguard Worker            {
2697*35238bceSAndroid Build Coastguard Worker            }
2698*35238bceSAndroid Build Coastguard Worker
2699*35238bceSAndroid Build Coastguard Worker            void main ()
2700*35238bceSAndroid Build Coastguard Worker            {
2701*35238bceSAndroid Build Coastguard Worker                func();
2702*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2703*35238bceSAndroid Build Coastguard Worker            }
2704*35238bceSAndroid Build Coastguard Worker        ""
2705*35238bceSAndroid Build Coastguard Worker    end
2706*35238bceSAndroid Build Coastguard Worker
2707*35238bceSAndroid Build Coastguard Worker    case missing_argument_type
2708*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2709*35238bceSAndroid Build Coastguard Worker        both ""
2710*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2711*35238bceSAndroid Build Coastguard Worker
2712*35238bceSAndroid Build Coastguard Worker            void func (in f)
2713*35238bceSAndroid Build Coastguard Worker            {
2714*35238bceSAndroid Build Coastguard Worker            }
2715*35238bceSAndroid Build Coastguard Worker
2716*35238bceSAndroid Build Coastguard Worker            void main ()
2717*35238bceSAndroid Build Coastguard Worker            {
2718*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2719*35238bceSAndroid Build Coastguard Worker            }
2720*35238bceSAndroid Build Coastguard Worker        ""
2721*35238bceSAndroid Build Coastguard Worker    end
2722*35238bceSAndroid Build Coastguard Worker
2723*35238bceSAndroid Build Coastguard Worker    case argument_basetype_mismatch
2724*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2725*35238bceSAndroid Build Coastguard Worker        both ""
2726*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2727*35238bceSAndroid Build Coastguard Worker            precision mediump int;
2728*35238bceSAndroid Build Coastguard Worker
2729*35238bceSAndroid Build Coastguard Worker            void func (float f)
2730*35238bceSAndroid Build Coastguard Worker            {
2731*35238bceSAndroid Build Coastguard Worker            }
2732*35238bceSAndroid Build Coastguard Worker
2733*35238bceSAndroid Build Coastguard Worker            void main ()
2734*35238bceSAndroid Build Coastguard Worker            {
2735*35238bceSAndroid Build Coastguard Worker                func(2);
2736*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2737*35238bceSAndroid Build Coastguard Worker            }
2738*35238bceSAndroid Build Coastguard Worker        ""
2739*35238bceSAndroid Build Coastguard Worker    end
2740*35238bceSAndroid Build Coastguard Worker
2741*35238bceSAndroid Build Coastguard Worker    case argument_scalar_vector_mismatch
2742*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2743*35238bceSAndroid Build Coastguard Worker        both ""
2744*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2745*35238bceSAndroid Build Coastguard Worker
2746*35238bceSAndroid Build Coastguard Worker            void func (vec2 f)
2747*35238bceSAndroid Build Coastguard Worker            {
2748*35238bceSAndroid Build Coastguard Worker            }
2749*35238bceSAndroid Build Coastguard Worker
2750*35238bceSAndroid Build Coastguard Worker            void main ()
2751*35238bceSAndroid Build Coastguard Worker            {
2752*35238bceSAndroid Build Coastguard Worker                func(2.0);
2753*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2754*35238bceSAndroid Build Coastguard Worker            }
2755*35238bceSAndroid Build Coastguard Worker        ""
2756*35238bceSAndroid Build Coastguard Worker    end
2757*35238bceSAndroid Build Coastguard Worker
2758*35238bceSAndroid Build Coastguard Worker    case argument_vector_size_mismatch
2759*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2760*35238bceSAndroid Build Coastguard Worker        both ""
2761*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2762*35238bceSAndroid Build Coastguard Worker
2763*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
2764*35238bceSAndroid Build Coastguard Worker            {
2765*35238bceSAndroid Build Coastguard Worker            }
2766*35238bceSAndroid Build Coastguard Worker
2767*35238bceSAndroid Build Coastguard Worker            void main ()
2768*35238bceSAndroid Build Coastguard Worker            {
2769*35238bceSAndroid Build Coastguard Worker                func(vec2(2.0));
2770*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2771*35238bceSAndroid Build Coastguard Worker            }
2772*35238bceSAndroid Build Coastguard Worker        ""
2773*35238bceSAndroid Build Coastguard Worker    end
2774*35238bceSAndroid Build Coastguard Worker
2775*35238bceSAndroid Build Coastguard Worker    case duplicate_function
2776*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2777*35238bceSAndroid Build Coastguard Worker        both ""
2778*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2779*35238bceSAndroid Build Coastguard Worker
2780*35238bceSAndroid Build Coastguard Worker            void func (vec3 f);
2781*35238bceSAndroid Build Coastguard Worker
2782*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
2783*35238bceSAndroid Build Coastguard Worker            {
2784*35238bceSAndroid Build Coastguard Worker            }
2785*35238bceSAndroid Build Coastguard Worker
2786*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
2787*35238bceSAndroid Build Coastguard Worker            {
2788*35238bceSAndroid Build Coastguard Worker            }
2789*35238bceSAndroid Build Coastguard Worker
2790*35238bceSAndroid Build Coastguard Worker            void main ()
2791*35238bceSAndroid Build Coastguard Worker            {
2792*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2793*35238bceSAndroid Build Coastguard Worker            }
2794*35238bceSAndroid Build Coastguard Worker        ""
2795*35238bceSAndroid Build Coastguard Worker    end
2796*35238bceSAndroid Build Coastguard Worker
2797*35238bceSAndroid Build Coastguard Worker    case prototype_mismatch_return_type
2798*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2799*35238bceSAndroid Build Coastguard Worker        both ""
2800*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2801*35238bceSAndroid Build Coastguard Worker
2802*35238bceSAndroid Build Coastguard Worker            void func (vec3 f);
2803*35238bceSAndroid Build Coastguard Worker
2804*35238bceSAndroid Build Coastguard Worker            void main ()
2805*35238bceSAndroid Build Coastguard Worker            {
2806*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2807*35238bceSAndroid Build Coastguard Worker            }
2808*35238bceSAndroid Build Coastguard Worker
2809*35238bceSAndroid Build Coastguard Worker            float func (vec3 f)
2810*35238bceSAndroid Build Coastguard Worker            {
2811*35238bceSAndroid Build Coastguard Worker                return f.x;
2812*35238bceSAndroid Build Coastguard Worker            }
2813*35238bceSAndroid Build Coastguard Worker        ""
2814*35238bceSAndroid Build Coastguard Worker    end
2815*35238bceSAndroid Build Coastguard Worker
2816*35238bceSAndroid Build Coastguard Worker    case prototype_unspecified_array_size
2817*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2818*35238bceSAndroid Build Coastguard Worker        both ""
2819*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2820*35238bceSAndroid Build Coastguard Worker
2821*35238bceSAndroid Build Coastguard Worker            void func (vec3 f[]);
2822*35238bceSAndroid Build Coastguard Worker
2823*35238bceSAndroid Build Coastguard Worker            void main ()
2824*35238bceSAndroid Build Coastguard Worker            {
2825*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2826*35238bceSAndroid Build Coastguard Worker            }
2827*35238bceSAndroid Build Coastguard Worker        ""
2828*35238bceSAndroid Build Coastguard Worker    end
2829*35238bceSAndroid Build Coastguard Worker
2830*35238bceSAndroid Build Coastguard Worker    case call_mismatch_argument_array_size
2831*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2832*35238bceSAndroid Build Coastguard Worker        both ""
2833*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2834*35238bceSAndroid Build Coastguard Worker
2835*35238bceSAndroid Build Coastguard Worker            void func (vec3 f[3]);
2836*35238bceSAndroid Build Coastguard Worker            void func (vec3 f[3])
2837*35238bceSAndroid Build Coastguard Worker            {
2838*35238bceSAndroid Build Coastguard Worker            }
2839*35238bceSAndroid Build Coastguard Worker
2840*35238bceSAndroid Build Coastguard Worker            void main ()
2841*35238bceSAndroid Build Coastguard Worker            {
2842*35238bceSAndroid Build Coastguard Worker                vec3 array[4];
2843*35238bceSAndroid Build Coastguard Worker                func(array);
2844*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2845*35238bceSAndroid Build Coastguard Worker            }
2846*35238bceSAndroid Build Coastguard Worker        ""
2847*35238bceSAndroid Build Coastguard Worker    end
2848*35238bceSAndroid Build Coastguard Worker
2849*35238bceSAndroid Build Coastguard Worker    case prototype_mismatch_argument_const
2850*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2851*35238bceSAndroid Build Coastguard Worker        both ""
2852*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2853*35238bceSAndroid Build Coastguard Worker
2854*35238bceSAndroid Build Coastguard Worker            void func (vec3 f);
2855*35238bceSAndroid Build Coastguard Worker            void func (const vec3 f)
2856*35238bceSAndroid Build Coastguard Worker            {
2857*35238bceSAndroid Build Coastguard Worker            }
2858*35238bceSAndroid Build Coastguard Worker
2859*35238bceSAndroid Build Coastguard Worker            void main ()
2860*35238bceSAndroid Build Coastguard Worker            {
2861*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2862*35238bceSAndroid Build Coastguard Worker            }
2863*35238bceSAndroid Build Coastguard Worker        ""
2864*35238bceSAndroid Build Coastguard Worker    end
2865*35238bceSAndroid Build Coastguard Worker
2866*35238bceSAndroid Build Coastguard Worker    case prototype_mismatch_argument_array_const
2867*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2868*35238bceSAndroid Build Coastguard Worker        both ""
2869*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2870*35238bceSAndroid Build Coastguard Worker
2871*35238bceSAndroid Build Coastguard Worker            void func (vec3 f[3]);
2872*35238bceSAndroid Build Coastguard Worker            void func (const vec3 f[3])
2873*35238bceSAndroid Build Coastguard Worker            {
2874*35238bceSAndroid Build Coastguard Worker            }
2875*35238bceSAndroid Build Coastguard Worker
2876*35238bceSAndroid Build Coastguard Worker            void main ()
2877*35238bceSAndroid Build Coastguard Worker            {
2878*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2879*35238bceSAndroid Build Coastguard Worker            }
2880*35238bceSAndroid Build Coastguard Worker        ""
2881*35238bceSAndroid Build Coastguard Worker    end
2882*35238bceSAndroid Build Coastguard Worker
2883*35238bceSAndroid Build Coastguard Worker    case prototype_mismatch_array_inout
2884*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2885*35238bceSAndroid Build Coastguard Worker        both ""
2886*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2887*35238bceSAndroid Build Coastguard Worker
2888*35238bceSAndroid Build Coastguard Worker            void func (out vec3 f);
2889*35238bceSAndroid Build Coastguard Worker            void func (inout vec3 f)
2890*35238bceSAndroid Build Coastguard Worker            {
2891*35238bceSAndroid Build Coastguard Worker            }
2892*35238bceSAndroid Build Coastguard Worker
2893*35238bceSAndroid Build Coastguard Worker            void main ()
2894*35238bceSAndroid Build Coastguard Worker            {
2895*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2896*35238bceSAndroid Build Coastguard Worker            }
2897*35238bceSAndroid Build Coastguard Worker        ""
2898*35238bceSAndroid Build Coastguard Worker    end
2899*35238bceSAndroid Build Coastguard Worker
2900*35238bceSAndroid Build Coastguard Worker    case missing_return_type
2901*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2902*35238bceSAndroid Build Coastguard Worker        both ""
2903*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2904*35238bceSAndroid Build Coastguard Worker
2905*35238bceSAndroid Build Coastguard Worker            func (float f);
2906*35238bceSAndroid Build Coastguard Worker            func (inout vec3 f[3])
2907*35238bceSAndroid Build Coastguard Worker            {
2908*35238bceSAndroid Build Coastguard Worker            }
2909*35238bceSAndroid Build Coastguard Worker
2910*35238bceSAndroid Build Coastguard Worker            void main ()
2911*35238bceSAndroid Build Coastguard Worker            {
2912*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2913*35238bceSAndroid Build Coastguard Worker            }
2914*35238bceSAndroid Build Coastguard Worker        ""
2915*35238bceSAndroid Build Coastguard Worker    end
2916*35238bceSAndroid Build Coastguard Worker
2917*35238bceSAndroid Build Coastguard Worker    case call_before_definition
2918*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2919*35238bceSAndroid Build Coastguard Worker        both ""
2920*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2921*35238bceSAndroid Build Coastguard Worker
2922*35238bceSAndroid Build Coastguard Worker            void main ()
2923*35238bceSAndroid Build Coastguard Worker            {
2924*35238bceSAndroid Build Coastguard Worker                func(1.0);
2925*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2926*35238bceSAndroid Build Coastguard Worker            }
2927*35238bceSAndroid Build Coastguard Worker
2928*35238bceSAndroid Build Coastguard Worker            void func (float f)
2929*35238bceSAndroid Build Coastguard Worker            {
2930*35238bceSAndroid Build Coastguard Worker            }
2931*35238bceSAndroid Build Coastguard Worker
2932*35238bceSAndroid Build Coastguard Worker        ""
2933*35238bceSAndroid Build Coastguard Worker    end
2934*35238bceSAndroid Build Coastguard Worker
2935*35238bceSAndroid Build Coastguard Worker    case return_array_in_struct
2936*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2937*35238bceSAndroid Build Coastguard Worker        both ""
2938*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2939*35238bceSAndroid Build Coastguard Worker
2940*35238bceSAndroid Build Coastguard Worker            struct Foo
2941*35238bceSAndroid Build Coastguard Worker            {
2942*35238bceSAndroid Build Coastguard Worker                float f;
2943*35238bceSAndroid Build Coastguard Worker                float arr[2];
2944*35238bceSAndroid Build Coastguard Worker            };
2945*35238bceSAndroid Build Coastguard Worker
2946*35238bceSAndroid Build Coastguard Worker            Foo func ()
2947*35238bceSAndroid Build Coastguard Worker            {
2948*35238bceSAndroid Build Coastguard Worker                Foo f;
2949*35238bceSAndroid Build Coastguard Worker                f.f = 1.0;
2950*35238bceSAndroid Build Coastguard Worker                f.arr[0] = 2.0;
2951*35238bceSAndroid Build Coastguard Worker                return f;
2952*35238bceSAndroid Build Coastguard Worker            }
2953*35238bceSAndroid Build Coastguard Worker
2954*35238bceSAndroid Build Coastguard Worker            void main ()
2955*35238bceSAndroid Build Coastguard Worker            {
2956*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2957*35238bceSAndroid Build Coastguard Worker            }
2958*35238bceSAndroid Build Coastguard Worker        ""
2959*35238bceSAndroid Build Coastguard Worker    end
2960*35238bceSAndroid Build Coastguard Worker
2961*35238bceSAndroid Build Coastguard Worker    case argument_precision_overload
2962*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2963*35238bceSAndroid Build Coastguard Worker        both ""
2964*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2965*35238bceSAndroid Build Coastguard Worker
2966*35238bceSAndroid Build Coastguard Worker            float func (lowp float f)
2967*35238bceSAndroid Build Coastguard Worker            {
2968*35238bceSAndroid Build Coastguard Worker                return f;
2969*35238bceSAndroid Build Coastguard Worker            }
2970*35238bceSAndroid Build Coastguard Worker
2971*35238bceSAndroid Build Coastguard Worker            float func (mediump float f)
2972*35238bceSAndroid Build Coastguard Worker            {
2973*35238bceSAndroid Build Coastguard Worker                return f;
2974*35238bceSAndroid Build Coastguard Worker            }
2975*35238bceSAndroid Build Coastguard Worker
2976*35238bceSAndroid Build Coastguard Worker            void main ()
2977*35238bceSAndroid Build Coastguard Worker            {
2978*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
2979*35238bceSAndroid Build Coastguard Worker            }
2980*35238bceSAndroid Build Coastguard Worker        ""
2981*35238bceSAndroid Build Coastguard Worker    end
2982*35238bceSAndroid Build Coastguard Worker
2983*35238bceSAndroid Build Coastguard Worker    case argument_in_out_overload
2984*35238bceSAndroid Build Coastguard Worker        expect compile_fail
2985*35238bceSAndroid Build Coastguard Worker        both ""
2986*35238bceSAndroid Build Coastguard Worker            precision mediump float;
2987*35238bceSAndroid Build Coastguard Worker
2988*35238bceSAndroid Build Coastguard Worker            void func (in float f)
2989*35238bceSAndroid Build Coastguard Worker            {
2990*35238bceSAndroid Build Coastguard Worker            }
2991*35238bceSAndroid Build Coastguard Worker
2992*35238bceSAndroid Build Coastguard Worker            void func (out float f)
2993*35238bceSAndroid Build Coastguard Worker            {
2994*35238bceSAndroid Build Coastguard Worker                f = 1.0;
2995*35238bceSAndroid Build Coastguard Worker            }
2996*35238bceSAndroid Build Coastguard Worker
2997*35238bceSAndroid Build Coastguard Worker            void main ()
2998*35238bceSAndroid Build Coastguard Worker            {
2999*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3000*35238bceSAndroid Build Coastguard Worker            }
3001*35238bceSAndroid Build Coastguard Worker        ""
3002*35238bceSAndroid Build Coastguard Worker    end
3003*35238bceSAndroid Build Coastguard Worker
3004*35238bceSAndroid Build Coastguard Worker    case argument_in_inout_overload
3005*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3006*35238bceSAndroid Build Coastguard Worker        both ""
3007*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3008*35238bceSAndroid Build Coastguard Worker
3009*35238bceSAndroid Build Coastguard Worker            void func (in float f)
3010*35238bceSAndroid Build Coastguard Worker            {
3011*35238bceSAndroid Build Coastguard Worker            }
3012*35238bceSAndroid Build Coastguard Worker
3013*35238bceSAndroid Build Coastguard Worker            void func (inout float f)
3014*35238bceSAndroid Build Coastguard Worker            {
3015*35238bceSAndroid Build Coastguard Worker                f = -f;
3016*35238bceSAndroid Build Coastguard Worker            }
3017*35238bceSAndroid Build Coastguard Worker
3018*35238bceSAndroid Build Coastguard Worker            void main ()
3019*35238bceSAndroid Build Coastguard Worker            {
3020*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3021*35238bceSAndroid Build Coastguard Worker            }
3022*35238bceSAndroid Build Coastguard Worker        ""
3023*35238bceSAndroid Build Coastguard Worker    end
3024*35238bceSAndroid Build Coastguard Worker
3025*35238bceSAndroid Build Coastguard Worker    case argument_out_inout_overload
3026*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3027*35238bceSAndroid Build Coastguard Worker        both ""
3028*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3029*35238bceSAndroid Build Coastguard Worker
3030*35238bceSAndroid Build Coastguard Worker            void func (out float f)
3031*35238bceSAndroid Build Coastguard Worker            {
3032*35238bceSAndroid Build Coastguard Worker                f = -1.0;
3033*35238bceSAndroid Build Coastguard Worker            }
3034*35238bceSAndroid Build Coastguard Worker
3035*35238bceSAndroid Build Coastguard Worker            void func (inout float f)
3036*35238bceSAndroid Build Coastguard Worker            {
3037*35238bceSAndroid Build Coastguard Worker                f = -f;
3038*35238bceSAndroid Build Coastguard Worker            }
3039*35238bceSAndroid Build Coastguard Worker
3040*35238bceSAndroid Build Coastguard Worker            void main ()
3041*35238bceSAndroid Build Coastguard Worker            {
3042*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3043*35238bceSAndroid Build Coastguard Worker            }
3044*35238bceSAndroid Build Coastguard Worker        ""
3045*35238bceSAndroid Build Coastguard Worker    end
3046*35238bceSAndroid Build Coastguard Worker
3047*35238bceSAndroid Build Coastguard Worker    case return_type_overload
3048*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3049*35238bceSAndroid Build Coastguard Worker        both ""
3050*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3051*35238bceSAndroid Build Coastguard Worker
3052*35238bceSAndroid Build Coastguard Worker            float func (float f)
3053*35238bceSAndroid Build Coastguard Worker            {
3054*35238bceSAndroid Build Coastguard Worker                return f;
3055*35238bceSAndroid Build Coastguard Worker            }
3056*35238bceSAndroid Build Coastguard Worker
3057*35238bceSAndroid Build Coastguard Worker            int func (float f)
3058*35238bceSAndroid Build Coastguard Worker            {
3059*35238bceSAndroid Build Coastguard Worker                return int(f);
3060*35238bceSAndroid Build Coastguard Worker            }
3061*35238bceSAndroid Build Coastguard Worker
3062*35238bceSAndroid Build Coastguard Worker            void main ()
3063*35238bceSAndroid Build Coastguard Worker            {
3064*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3065*35238bceSAndroid Build Coastguard Worker            }
3066*35238bceSAndroid Build Coastguard Worker        ""
3067*35238bceSAndroid Build Coastguard Worker    end
3068*35238bceSAndroid Build Coastguard Worker
3069*35238bceSAndroid Build Coastguard Worker    case return_type_precision_overload
3070*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3071*35238bceSAndroid Build Coastguard Worker        both ""
3072*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3073*35238bceSAndroid Build Coastguard Worker
3074*35238bceSAndroid Build Coastguard Worker            lowp float func (float f)
3075*35238bceSAndroid Build Coastguard Worker            {
3076*35238bceSAndroid Build Coastguard Worker                return f;
3077*35238bceSAndroid Build Coastguard Worker            }
3078*35238bceSAndroid Build Coastguard Worker
3079*35238bceSAndroid Build Coastguard Worker            mediump float func (float f)
3080*35238bceSAndroid Build Coastguard Worker            {
3081*35238bceSAndroid Build Coastguard Worker                return f;
3082*35238bceSAndroid Build Coastguard Worker            }
3083*35238bceSAndroid Build Coastguard Worker
3084*35238bceSAndroid Build Coastguard Worker            void main ()
3085*35238bceSAndroid Build Coastguard Worker            {
3086*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3087*35238bceSAndroid Build Coastguard Worker            }
3088*35238bceSAndroid Build Coastguard Worker        ""
3089*35238bceSAndroid Build Coastguard Worker    end
3090*35238bceSAndroid Build Coastguard Worker
3091*35238bceSAndroid Build Coastguard Worker    case return_type_const_overload
3092*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3093*35238bceSAndroid Build Coastguard Worker        both ""
3094*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3095*35238bceSAndroid Build Coastguard Worker
3096*35238bceSAndroid Build Coastguard Worker            float func (float f)
3097*35238bceSAndroid Build Coastguard Worker            {
3098*35238bceSAndroid Build Coastguard Worker                return f;
3099*35238bceSAndroid Build Coastguard Worker            }
3100*35238bceSAndroid Build Coastguard Worker
3101*35238bceSAndroid Build Coastguard Worker            const float func (float f)
3102*35238bceSAndroid Build Coastguard Worker            {
3103*35238bceSAndroid Build Coastguard Worker                return f;
3104*35238bceSAndroid Build Coastguard Worker            }
3105*35238bceSAndroid Build Coastguard Worker
3106*35238bceSAndroid Build Coastguard Worker            void main ()
3107*35238bceSAndroid Build Coastguard Worker            {
3108*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3109*35238bceSAndroid Build Coastguard Worker            }
3110*35238bceSAndroid Build Coastguard Worker        ""
3111*35238bceSAndroid Build Coastguard Worker    end
3112*35238bceSAndroid Build Coastguard Worker
3113*35238bceSAndroid Build Coastguard Worker    case return_without_value
3114*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3115*35238bceSAndroid Build Coastguard Worker        both ""
3116*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3117*35238bceSAndroid Build Coastguard Worker
3118*35238bceSAndroid Build Coastguard Worker            float func (float f)
3119*35238bceSAndroid Build Coastguard Worker            {
3120*35238bceSAndroid Build Coastguard Worker                return;
3121*35238bceSAndroid Build Coastguard Worker                return 1.0;
3122*35238bceSAndroid Build Coastguard Worker            }
3123*35238bceSAndroid Build Coastguard Worker
3124*35238bceSAndroid Build Coastguard Worker            void main ()
3125*35238bceSAndroid Build Coastguard Worker            {
3126*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3127*35238bceSAndroid Build Coastguard Worker            }
3128*35238bceSAndroid Build Coastguard Worker        ""
3129*35238bceSAndroid Build Coastguard Worker    end
3130*35238bceSAndroid Build Coastguard Worker
3131*35238bceSAndroid Build Coastguard Worker    case local_function_prototype
3132*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3133*35238bceSAndroid Build Coastguard Worker        both ""
3134*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3135*35238bceSAndroid Build Coastguard Worker
3136*35238bceSAndroid Build Coastguard Worker            void main ()
3137*35238bceSAndroid Build Coastguard Worker            {
3138*35238bceSAndroid Build Coastguard Worker                float func (float f);
3139*35238bceSAndroid Build Coastguard Worker
3140*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3141*35238bceSAndroid Build Coastguard Worker            }
3142*35238bceSAndroid Build Coastguard Worker        ""
3143*35238bceSAndroid Build Coastguard Worker    end
3144*35238bceSAndroid Build Coastguard Worker
3145*35238bceSAndroid Build Coastguard Worker    case local_function_definition
3146*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3147*35238bceSAndroid Build Coastguard Worker        both ""
3148*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3149*35238bceSAndroid Build Coastguard Worker
3150*35238bceSAndroid Build Coastguard Worker            void main ()
3151*35238bceSAndroid Build Coastguard Worker            {
3152*35238bceSAndroid Build Coastguard Worker                float func (float f)
3153*35238bceSAndroid Build Coastguard Worker                {
3154*35238bceSAndroid Build Coastguard Worker                    return 1.0;
3155*35238bceSAndroid Build Coastguard Worker                }
3156*35238bceSAndroid Build Coastguard Worker
3157*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3158*35238bceSAndroid Build Coastguard Worker            }
3159*35238bceSAndroid Build Coastguard Worker        ""
3160*35238bceSAndroid Build Coastguard Worker    end
3161*35238bceSAndroid Build Coastguard Worker
3162*35238bceSAndroid Build Coastguard Worker    case name_type_conflict
3163*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3164*35238bceSAndroid Build Coastguard Worker        both ""
3165*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3166*35238bceSAndroid Build Coastguard Worker
3167*35238bceSAndroid Build Coastguard Worker            struct foo { float a; }
3168*35238bceSAndroid Build Coastguard Worker
3169*35238bceSAndroid Build Coastguard Worker            float foo (float f)
3170*35238bceSAndroid Build Coastguard Worker            {
3171*35238bceSAndroid Build Coastguard Worker                return 1.0;
3172*35238bceSAndroid Build Coastguard Worker            }
3173*35238bceSAndroid Build Coastguard Worker
3174*35238bceSAndroid Build Coastguard Worker            void main ()
3175*35238bceSAndroid Build Coastguard Worker            {
3176*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3177*35238bceSAndroid Build Coastguard Worker            }
3178*35238bceSAndroid Build Coastguard Worker        ""
3179*35238bceSAndroid Build Coastguard Worker    end
3180*35238bceSAndroid Build Coastguard Worker
3181*35238bceSAndroid Build Coastguard Worker    case const_overload
3182*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3183*35238bceSAndroid Build Coastguard Worker        both ""
3184*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3185*35238bceSAndroid Build Coastguard Worker
3186*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
3187*35238bceSAndroid Build Coastguard Worker            {
3188*35238bceSAndroid Build Coastguard Worker            }
3189*35238bceSAndroid Build Coastguard Worker
3190*35238bceSAndroid Build Coastguard Worker            void func (const vec3 f)
3191*35238bceSAndroid Build Coastguard Worker            {
3192*35238bceSAndroid Build Coastguard Worker            }
3193*35238bceSAndroid Build Coastguard Worker
3194*35238bceSAndroid Build Coastguard Worker            void main ()
3195*35238bceSAndroid Build Coastguard Worker            {
3196*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3197*35238bceSAndroid Build Coastguard Worker            }
3198*35238bceSAndroid Build Coastguard Worker        ""
3199*35238bceSAndroid Build Coastguard Worker    end
3200*35238bceSAndroid Build Coastguard Worker
3201*35238bceSAndroid Build Coastguard Worker    case uniform_local
3202*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3203*35238bceSAndroid Build Coastguard Worker        both ""
3204*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3205*35238bceSAndroid Build Coastguard Worker
3206*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
3207*35238bceSAndroid Build Coastguard Worker            {
3208*35238bceSAndroid Build Coastguard Worker                uniform float u;
3209*35238bceSAndroid Build Coastguard Worker            }
3210*35238bceSAndroid Build Coastguard Worker
3211*35238bceSAndroid Build Coastguard Worker            void main ()
3212*35238bceSAndroid Build Coastguard Worker            {
3213*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3214*35238bceSAndroid Build Coastguard Worker            }
3215*35238bceSAndroid Build Coastguard Worker        ""
3216*35238bceSAndroid Build Coastguard Worker    end
3217*35238bceSAndroid Build Coastguard Worker
3218*35238bceSAndroid Build Coastguard Worker    case varying_local
3219*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3220*35238bceSAndroid Build Coastguard Worker        both ""
3221*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3222*35238bceSAndroid Build Coastguard Worker
3223*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
3224*35238bceSAndroid Build Coastguard Worker            {
3225*35238bceSAndroid Build Coastguard Worker                varying float v;
3226*35238bceSAndroid Build Coastguard Worker            }
3227*35238bceSAndroid Build Coastguard Worker
3228*35238bceSAndroid Build Coastguard Worker            void main ()
3229*35238bceSAndroid Build Coastguard Worker            {
3230*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3231*35238bceSAndroid Build Coastguard Worker            }
3232*35238bceSAndroid Build Coastguard Worker        ""
3233*35238bceSAndroid Build Coastguard Worker    end
3234*35238bceSAndroid Build Coastguard Worker
3235*35238bceSAndroid Build Coastguard Worker    case attribute_local
3236*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3237*35238bceSAndroid Build Coastguard Worker        both ""
3238*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3239*35238bceSAndroid Build Coastguard Worker
3240*35238bceSAndroid Build Coastguard Worker            void func (vec3 f)
3241*35238bceSAndroid Build Coastguard Worker            {
3242*35238bceSAndroid Build Coastguard Worker                attribute float a;
3243*35238bceSAndroid Build Coastguard Worker            }
3244*35238bceSAndroid Build Coastguard Worker
3245*35238bceSAndroid Build Coastguard Worker            void main ()
3246*35238bceSAndroid Build Coastguard Worker            {
3247*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3248*35238bceSAndroid Build Coastguard Worker            }
3249*35238bceSAndroid Build Coastguard Worker        ""
3250*35238bceSAndroid Build Coastguard Worker    end
3251*35238bceSAndroid Build Coastguard Worker
3252*35238bceSAndroid Build Coastguard Worker    case uniform_argument
3253*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3254*35238bceSAndroid Build Coastguard Worker        both ""
3255*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3256*35238bceSAndroid Build Coastguard Worker
3257*35238bceSAndroid Build Coastguard Worker            void func (uniform vec3 f)
3258*35238bceSAndroid Build Coastguard Worker            {
3259*35238bceSAndroid Build Coastguard Worker            }
3260*35238bceSAndroid Build Coastguard Worker
3261*35238bceSAndroid Build Coastguard Worker            void main ()
3262*35238bceSAndroid Build Coastguard Worker            {
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 varying_argument
3269*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3270*35238bceSAndroid Build Coastguard Worker        both ""
3271*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3272*35238bceSAndroid Build Coastguard Worker
3273*35238bceSAndroid Build Coastguard Worker            void func (varying vec3 f)
3274*35238bceSAndroid Build Coastguard Worker            {
3275*35238bceSAndroid Build Coastguard Worker            }
3276*35238bceSAndroid Build Coastguard Worker
3277*35238bceSAndroid Build Coastguard Worker            void main ()
3278*35238bceSAndroid Build Coastguard Worker            {
3279*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3280*35238bceSAndroid Build Coastguard Worker            }
3281*35238bceSAndroid Build Coastguard Worker        ""
3282*35238bceSAndroid Build Coastguard Worker    end
3283*35238bceSAndroid Build Coastguard Worker
3284*35238bceSAndroid Build Coastguard Worker    case attribute_argument
3285*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3286*35238bceSAndroid Build Coastguard Worker        both ""
3287*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3288*35238bceSAndroid Build Coastguard Worker
3289*35238bceSAndroid Build Coastguard Worker            void func (attribute vec3 f)
3290*35238bceSAndroid Build Coastguard Worker            {
3291*35238bceSAndroid Build Coastguard Worker            }
3292*35238bceSAndroid Build Coastguard Worker
3293*35238bceSAndroid Build Coastguard Worker            void main ()
3294*35238bceSAndroid Build Coastguard Worker            {
3295*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3296*35238bceSAndroid Build Coastguard Worker            }
3297*35238bceSAndroid Build Coastguard Worker        ""
3298*35238bceSAndroid Build Coastguard Worker    end
3299*35238bceSAndroid Build Coastguard Worker
3300*35238bceSAndroid Build Coastguard Worker    case uniform_return_type
3301*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3302*35238bceSAndroid Build Coastguard Worker        both ""
3303*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3304*35238bceSAndroid Build Coastguard Worker
3305*35238bceSAndroid Build Coastguard Worker            uniform float func (vec3 f)
3306*35238bceSAndroid Build Coastguard Worker            {
3307*35238bceSAndroid Build Coastguard Worker                return f.x;
3308*35238bceSAndroid Build Coastguard Worker            }
3309*35238bceSAndroid Build Coastguard Worker
3310*35238bceSAndroid Build Coastguard Worker            void main ()
3311*35238bceSAndroid Build Coastguard Worker            {
3312*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3313*35238bceSAndroid Build Coastguard Worker            }
3314*35238bceSAndroid Build Coastguard Worker        ""
3315*35238bceSAndroid Build Coastguard Worker    end
3316*35238bceSAndroid Build Coastguard Worker
3317*35238bceSAndroid Build Coastguard Worker    case varying_return_type
3318*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3319*35238bceSAndroid Build Coastguard Worker        both ""
3320*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3321*35238bceSAndroid Build Coastguard Worker
3322*35238bceSAndroid Build Coastguard Worker            varying float func (vec3 f)
3323*35238bceSAndroid Build Coastguard Worker            {
3324*35238bceSAndroid Build Coastguard Worker                return f.x;
3325*35238bceSAndroid Build Coastguard Worker            }
3326*35238bceSAndroid Build Coastguard Worker
3327*35238bceSAndroid Build Coastguard Worker            void main ()
3328*35238bceSAndroid Build Coastguard Worker            {
3329*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3330*35238bceSAndroid Build Coastguard Worker            }
3331*35238bceSAndroid Build Coastguard Worker        ""
3332*35238bceSAndroid Build Coastguard Worker    end
3333*35238bceSAndroid Build Coastguard Worker
3334*35238bceSAndroid Build Coastguard Worker    case attribute_return_type
3335*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3336*35238bceSAndroid Build Coastguard Worker        both ""
3337*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3338*35238bceSAndroid Build Coastguard Worker
3339*35238bceSAndroid Build Coastguard Worker            attribute float func (vec3 f)
3340*35238bceSAndroid Build Coastguard Worker            {
3341*35238bceSAndroid Build Coastguard Worker                return f.x;
3342*35238bceSAndroid Build Coastguard Worker            }
3343*35238bceSAndroid Build Coastguard Worker
3344*35238bceSAndroid Build Coastguard Worker            void main ()
3345*35238bceSAndroid Build Coastguard Worker            {
3346*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3347*35238bceSAndroid Build Coastguard Worker            }
3348*35238bceSAndroid Build Coastguard Worker        ""
3349*35238bceSAndroid Build Coastguard Worker    end
3350*35238bceSAndroid Build Coastguard Worker
3351*35238bceSAndroid Build Coastguard Worker    case main_invalid_return_type
3352*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3353*35238bceSAndroid Build Coastguard Worker        both ""
3354*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3355*35238bceSAndroid Build Coastguard Worker
3356*35238bceSAndroid Build Coastguard Worker            float main ()
3357*35238bceSAndroid Build Coastguard Worker            {
3358*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3359*35238bceSAndroid Build Coastguard Worker            }
3360*35238bceSAndroid Build Coastguard Worker        ""
3361*35238bceSAndroid Build Coastguard Worker    end
3362*35238bceSAndroid Build Coastguard Worker
3363*35238bceSAndroid Build Coastguard Worker    case main_has_arguments
3364*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3365*35238bceSAndroid Build Coastguard Worker        both ""
3366*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3367*35238bceSAndroid Build Coastguard Worker
3368*35238bceSAndroid Build Coastguard Worker            void main (float f)
3369*35238bceSAndroid Build Coastguard Worker            {
3370*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3371*35238bceSAndroid Build Coastguard Worker            }
3372*35238bceSAndroid Build Coastguard Worker        ""
3373*35238bceSAndroid Build Coastguard Worker    end
3374*35238bceSAndroid Build Coastguard Worker
3375*35238bceSAndroid Build Coastguard Worker    case main_missing_return_type
3376*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3377*35238bceSAndroid Build Coastguard Worker        both ""
3378*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3379*35238bceSAndroid Build Coastguard Worker
3380*35238bceSAndroid Build Coastguard Worker            main ()
3381*35238bceSAndroid Build Coastguard Worker            {
3382*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3383*35238bceSAndroid Build Coastguard Worker            }
3384*35238bceSAndroid Build Coastguard Worker        ""
3385*35238bceSAndroid Build Coastguard Worker    end
3386*35238bceSAndroid Build Coastguard Worker
3387*35238bceSAndroid Build Coastguard Worker    case write_const_arg
3388*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3389*35238bceSAndroid Build Coastguard Worker        both ""
3390*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3391*35238bceSAndroid Build Coastguard Worker
3392*35238bceSAndroid Build Coastguard Worker            func (const float f)
3393*35238bceSAndroid Build Coastguard Worker            {
3394*35238bceSAndroid Build Coastguard Worker                f = 1.0;
3395*35238bceSAndroid Build Coastguard Worker            }
3396*35238bceSAndroid Build Coastguard Worker
3397*35238bceSAndroid Build Coastguard Worker            main ()
3398*35238bceSAndroid Build Coastguard Worker            {
3399*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3400*35238bceSAndroid Build Coastguard Worker            }
3401*35238bceSAndroid Build Coastguard Worker        ""
3402*35238bceSAndroid Build Coastguard Worker    end
3403*35238bceSAndroid Build Coastguard Worker
3404*35238bceSAndroid Build Coastguard Worker    case write_const_array_arg
3405*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3406*35238bceSAndroid Build Coastguard Worker        both ""
3407*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3408*35238bceSAndroid Build Coastguard Worker
3409*35238bceSAndroid Build Coastguard Worker            func (const float f[3])
3410*35238bceSAndroid Build Coastguard Worker            {
3411*35238bceSAndroid Build Coastguard Worker                f[0] = 1.0;
3412*35238bceSAndroid Build Coastguard Worker            }
3413*35238bceSAndroid Build Coastguard Worker
3414*35238bceSAndroid Build Coastguard Worker            main ()
3415*35238bceSAndroid Build Coastguard Worker            {
3416*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(1.0);
3417*35238bceSAndroid Build Coastguard Worker            }
3418*35238bceSAndroid Build Coastguard Worker        ""
3419*35238bceSAndroid Build Coastguard Worker    end
3420*35238bceSAndroid Build Coastguard Worker
3421*35238bceSAndroid Build Coastguard Worker    case modify_const_arg
3422*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3423*35238bceSAndroid Build Coastguard Worker        both ""
3424*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3425*35238bceSAndroid Build Coastguard Worker            precision mediump int;
3426*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3427*35238bceSAndroid Build Coastguard Worker
3428*35238bceSAndroid Build Coastguard Worker            int func (const int a)
3429*35238bceSAndroid Build Coastguard Worker            {
3430*35238bceSAndroid Build Coastguard Worker                a = -a;
3431*35238bceSAndroid Build Coastguard Worker                return 2 * a;
3432*35238bceSAndroid Build Coastguard Worker            }
3433*35238bceSAndroid Build Coastguard Worker
3434*35238bceSAndroid Build Coastguard Worker            void main()
3435*35238bceSAndroid Build Coastguard Worker            {
3436*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(func(3));
3437*35238bceSAndroid Build Coastguard Worker            }
3438*35238bceSAndroid Build Coastguard Worker        ""
3439*35238bceSAndroid Build Coastguard Worker    end
3440*35238bceSAndroid Build Coastguard Worker
3441*35238bceSAndroid Build Coastguard Worker    case init_const_local_from_const_arg
3442*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3443*35238bceSAndroid Build Coastguard Worker        both ""
3444*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3445*35238bceSAndroid Build Coastguard Worker            precision mediump int;
3446*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3447*35238bceSAndroid Build Coastguard Worker
3448*35238bceSAndroid Build Coastguard Worker            int func (const int a)
3449*35238bceSAndroid Build Coastguard Worker            {
3450*35238bceSAndroid Build Coastguard Worker                const int b = -a;
3451*35238bceSAndroid Build Coastguard Worker                return 2 * b;
3452*35238bceSAndroid Build Coastguard Worker            }
3453*35238bceSAndroid Build Coastguard Worker
3454*35238bceSAndroid Build Coastguard Worker            void main()
3455*35238bceSAndroid Build Coastguard Worker            {
3456*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(func(3));
3457*35238bceSAndroid Build Coastguard Worker            }
3458*35238bceSAndroid Build Coastguard Worker        ""
3459*35238bceSAndroid Build Coastguard Worker    end
3460*35238bceSAndroid Build Coastguard Worker
3461*35238bceSAndroid Build Coastguard Worker    case array_size_from_const_arg
3462*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3463*35238bceSAndroid Build Coastguard Worker        both ""
3464*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3465*35238bceSAndroid Build Coastguard Worker            precision mediump int;
3466*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3467*35238bceSAndroid Build Coastguard Worker
3468*35238bceSAndroid Build Coastguard Worker            int func (const int a)
3469*35238bceSAndroid Build Coastguard Worker            {
3470*35238bceSAndroid Build Coastguard Worker                int arr[a];
3471*35238bceSAndroid Build Coastguard Worker                arr[1] = 3;
3472*35238bceSAndroid Build Coastguard Worker                return arr[1];
3473*35238bceSAndroid Build Coastguard Worker            }
3474*35238bceSAndroid Build Coastguard Worker
3475*35238bceSAndroid Build Coastguard Worker            void main()
3476*35238bceSAndroid Build Coastguard Worker            {
3477*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(func(3));
3478*35238bceSAndroid Build Coastguard Worker            }
3479*35238bceSAndroid Build Coastguard Worker        ""
3480*35238bceSAndroid Build Coastguard Worker    end
3481*35238bceSAndroid Build Coastguard Worker
3482*35238bceSAndroid Build Coastguard Worker    case double_declare
3483*35238bceSAndroid Build Coastguard Worker        expect compile_fail
3484*35238bceSAndroid Build Coastguard Worker        both ""
3485*35238bceSAndroid Build Coastguard Worker            precision mediump float;
3486*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
3487*35238bceSAndroid Build Coastguard Worker
3488*35238bceSAndroid Build Coastguard Worker            float func (float f);
3489*35238bceSAndroid Build Coastguard Worker            float func (float f);
3490*35238bceSAndroid Build Coastguard Worker
3491*35238bceSAndroid Build Coastguard Worker            float func (float f)
3492*35238bceSAndroid Build Coastguard Worker            {
3493*35238bceSAndroid Build Coastguard Worker                return -f;
3494*35238bceSAndroid Build Coastguard Worker            }
3495*35238bceSAndroid Build Coastguard Worker
3496*35238bceSAndroid Build Coastguard Worker            void main()
3497*35238bceSAndroid Build Coastguard Worker            {
3498*35238bceSAndroid Build Coastguard Worker                ${POSITION_FRAG_COLOR} = vec4(func(1.0));
3499*35238bceSAndroid Build Coastguard Worker            }
3500*35238bceSAndroid Build Coastguard Worker        ""
3501*35238bceSAndroid Build Coastguard Worker    end
3502*35238bceSAndroid Build Coastguard Worker
3503*35238bceSAndroid Build Coastguard Workerend # invalid
3504