xref: /aosp_15_r20/external/deqp/data/gles3/shaders/constant_expressions.test (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Workergroup trivial "Trivial expressions"
2*35238bceSAndroid Build Coastguard Worker
3*35238bceSAndroid Build Coastguard Worker    case float
4*35238bceSAndroid Build Coastguard Worker        version 300 es
5*35238bceSAndroid Build Coastguard Worker        values { output float out0 = 5.0; }
6*35238bceSAndroid Build Coastguard Worker        both ""
7*35238bceSAndroid Build Coastguard Worker            #version 300 es
8*35238bceSAndroid Build Coastguard Worker            precision highp float;
9*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
10*35238bceSAndroid Build Coastguard Worker
11*35238bceSAndroid Build Coastguard Worker            void main()
12*35238bceSAndroid Build Coastguard Worker            {
13*35238bceSAndroid Build Coastguard Worker                const float a = 5.0;
14*35238bceSAndroid Build Coastguard Worker                out0 = a;
15*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
16*35238bceSAndroid Build Coastguard Worker            }
17*35238bceSAndroid Build Coastguard Worker        ""
18*35238bceSAndroid Build Coastguard Worker    end
19*35238bceSAndroid Build Coastguard Worker
20*35238bceSAndroid Build Coastguard Worker    case int
21*35238bceSAndroid Build Coastguard Worker        version 300 es
22*35238bceSAndroid Build Coastguard Worker        values { output int out0 = 5; }
23*35238bceSAndroid Build Coastguard Worker        both ""
24*35238bceSAndroid Build Coastguard Worker            #version 300 es
25*35238bceSAndroid Build Coastguard Worker            precision highp float;
26*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
27*35238bceSAndroid Build Coastguard Worker
28*35238bceSAndroid Build Coastguard Worker            void main()
29*35238bceSAndroid Build Coastguard Worker            {
30*35238bceSAndroid Build Coastguard Worker                const int a = 5;
31*35238bceSAndroid Build Coastguard Worker                out0 = a;
32*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
33*35238bceSAndroid Build Coastguard Worker            }
34*35238bceSAndroid Build Coastguard Worker        ""
35*35238bceSAndroid Build Coastguard Worker    end
36*35238bceSAndroid Build Coastguard Worker
37*35238bceSAndroid Build Coastguard Worker    case bool
38*35238bceSAndroid Build Coastguard Worker        version 300 es
39*35238bceSAndroid Build Coastguard Worker        values { output bool out0 = true; }
40*35238bceSAndroid Build Coastguard Worker        both ""
41*35238bceSAndroid Build Coastguard Worker            #version 300 es
42*35238bceSAndroid Build Coastguard Worker            precision highp float;
43*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
44*35238bceSAndroid Build Coastguard Worker
45*35238bceSAndroid Build Coastguard Worker            void main()
46*35238bceSAndroid Build Coastguard Worker            {
47*35238bceSAndroid Build Coastguard Worker                const bool a = true;
48*35238bceSAndroid Build Coastguard Worker                out0 = a;
49*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
50*35238bceSAndroid Build Coastguard Worker            }
51*35238bceSAndroid Build Coastguard Worker        ""
52*35238bceSAndroid Build Coastguard Worker    end
53*35238bceSAndroid Build Coastguard Worker
54*35238bceSAndroid Build Coastguard Worker    case cast
55*35238bceSAndroid Build Coastguard Worker        version 300 es
56*35238bceSAndroid Build Coastguard Worker        values { output float out0 = 1.0; }
57*35238bceSAndroid Build Coastguard Worker        both ""
58*35238bceSAndroid Build Coastguard Worker            #version 300 es
59*35238bceSAndroid Build Coastguard Worker            precision highp float;
60*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
61*35238bceSAndroid Build Coastguard Worker
62*35238bceSAndroid Build Coastguard Worker            void main()
63*35238bceSAndroid Build Coastguard Worker            {
64*35238bceSAndroid Build Coastguard Worker                const float a = float(int(bool(true)));
65*35238bceSAndroid Build Coastguard Worker                out0 = a;
66*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
67*35238bceSAndroid Build Coastguard Worker            }
68*35238bceSAndroid Build Coastguard Worker        ""
69*35238bceSAndroid Build Coastguard Worker    end
70*35238bceSAndroid Build Coastguard Worker
71*35238bceSAndroid Build Coastguard Workerend # trivial
72*35238bceSAndroid Build Coastguard Worker
73*35238bceSAndroid Build Coastguard Workergroup operators "Operators"
74*35238bceSAndroid Build Coastguard Worker
75*35238bceSAndroid Build Coastguard Worker    case math_float
76*35238bceSAndroid Build Coastguard Worker        version 300 es
77*35238bceSAndroid Build Coastguard Worker        values { output float out0 = 2.19; }
78*35238bceSAndroid Build Coastguard Worker        both ""
79*35238bceSAndroid Build Coastguard Worker            #version 300 es
80*35238bceSAndroid Build Coastguard Worker            precision highp float;
81*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
82*35238bceSAndroid Build Coastguard Worker
83*35238bceSAndroid Build Coastguard Worker            void main()
84*35238bceSAndroid Build Coastguard Worker            {
85*35238bceSAndroid Build Coastguard Worker                const float a = 6.0/3.5 + 1.8*2.6 - 4.2;
86*35238bceSAndroid Build Coastguard Worker                out0 = a;
87*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
88*35238bceSAndroid Build Coastguard Worker            }
89*35238bceSAndroid Build Coastguard Worker        ""
90*35238bceSAndroid Build Coastguard Worker    end
91*35238bceSAndroid Build Coastguard Worker
92*35238bceSAndroid Build Coastguard Worker    case math_vec
93*35238bceSAndroid Build Coastguard Worker        version 300 es
94*35238bceSAndroid Build Coastguard Worker        values { output float out0 = 15.0; }
95*35238bceSAndroid Build Coastguard Worker        both ""
96*35238bceSAndroid Build Coastguard Worker            #version 300 es
97*35238bceSAndroid Build Coastguard Worker            precision highp float;
98*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
99*35238bceSAndroid Build Coastguard Worker
100*35238bceSAndroid Build Coastguard Worker            void main()
101*35238bceSAndroid Build Coastguard Worker            {
102*35238bceSAndroid Build Coastguard Worker                const vec3 a = (vec4(1.0, 2.0, 3.0, 4.0).zyx * vec3(1.0, 1.5, 3.0).xyz).xzy + (vec2(5.0)/vec2(2.5)).xxy;
103*35238bceSAndroid Build Coastguard Worker                out0 = a.x + a.y + a.z;
104*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
105*35238bceSAndroid Build Coastguard Worker            }
106*35238bceSAndroid Build Coastguard Worker        ""
107*35238bceSAndroid Build Coastguard Worker    end
108*35238bceSAndroid Build Coastguard Worker
109*35238bceSAndroid Build Coastguard Worker    case math_int
110*35238bceSAndroid Build Coastguard Worker        version 300 es
111*35238bceSAndroid Build Coastguard Worker        values { output int out0 = 7; }
112*35238bceSAndroid Build Coastguard Worker        both ""
113*35238bceSAndroid Build Coastguard Worker            #version 300 es
114*35238bceSAndroid Build Coastguard Worker            precision highp int;
115*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
116*35238bceSAndroid Build Coastguard Worker
117*35238bceSAndroid Build Coastguard Worker            void main()
118*35238bceSAndroid Build Coastguard Worker            {
119*35238bceSAndroid Build Coastguard Worker                const int a = 25%7 + 2*3 - 9/3;
120*35238bceSAndroid Build Coastguard Worker                out0 = a;
121*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
122*35238bceSAndroid Build Coastguard Worker            }
123*35238bceSAndroid Build Coastguard Worker        ""
124*35238bceSAndroid Build Coastguard Worker    end
125*35238bceSAndroid Build Coastguard Worker
126*35238bceSAndroid Build Coastguard Worker    case math_ivec
127*35238bceSAndroid Build Coastguard Worker        version 300 es
128*35238bceSAndroid Build Coastguard Worker        values { output int out0 = 21; }
129*35238bceSAndroid Build Coastguard Worker        both ""
130*35238bceSAndroid Build Coastguard Worker            #version 300 es
131*35238bceSAndroid Build Coastguard Worker            precision highp int;
132*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
133*35238bceSAndroid Build Coastguard Worker
134*35238bceSAndroid Build Coastguard Worker            void main()
135*35238bceSAndroid Build Coastguard Worker            {
136*35238bceSAndroid Build Coastguard Worker                const ivec3 a = ivec2(25%7, 4).xxy + ivec4(1*3, 9/3, 1+2, 8/4).xyz;
137*35238bceSAndroid Build Coastguard Worker                out0 = a.x + a.y + a.z;
138*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
139*35238bceSAndroid Build Coastguard Worker            }
140*35238bceSAndroid Build Coastguard Worker        ""
141*35238bceSAndroid Build Coastguard Worker    end
142*35238bceSAndroid Build Coastguard Worker
143*35238bceSAndroid Build Coastguard Worker    case math_mat
144*35238bceSAndroid Build Coastguard Worker        version 300 es
145*35238bceSAndroid Build Coastguard Worker        values { output float out0 = 8.0; }
146*35238bceSAndroid Build Coastguard Worker        both ""
147*35238bceSAndroid Build Coastguard Worker            #version 300 es
148*35238bceSAndroid Build Coastguard Worker            precision highp float;
149*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
150*35238bceSAndroid Build Coastguard Worker
151*35238bceSAndroid Build Coastguard Worker            void main()
152*35238bceSAndroid Build Coastguard Worker            {
153*35238bceSAndroid Build Coastguard Worker                const mat3 a = mat3(3.0) * mat3(4.0);
154*35238bceSAndroid Build Coastguard Worker                const mat4 b = mat4(a[1][1])*2.0;
155*35238bceSAndroid Build Coastguard Worker                const mat2 c = mat2(b[0][0]) / 3.0;
156*35238bceSAndroid Build Coastguard Worker                out0 = c[0][0]+c[1][0];
157*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
158*35238bceSAndroid Build Coastguard Worker            }
159*35238bceSAndroid Build Coastguard Worker        ""
160*35238bceSAndroid Build Coastguard Worker    end
161*35238bceSAndroid Build Coastguard Worker
162*35238bceSAndroid Build Coastguard Worker    case bitwise
163*35238bceSAndroid Build Coastguard Worker        version 300 es
164*35238bceSAndroid Build Coastguard Worker        values { output int out0 = 678332; }
165*35238bceSAndroid Build Coastguard Worker        both ""
166*35238bceSAndroid Build Coastguard Worker            #version 300 es
167*35238bceSAndroid Build Coastguard Worker            precision highp int;
168*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
169*35238bceSAndroid Build Coastguard Worker
170*35238bceSAndroid Build Coastguard Worker            void main()
171*35238bceSAndroid Build Coastguard Worker            {
172*35238bceSAndroid Build Coastguard Worker                const int a = (((0xABBA<<4) ^ 0xCAFE) | (0xDCBA & (0xABCD>>2))) ^ (~0xDEAD & 0xBEEF);
173*35238bceSAndroid Build Coastguard Worker                out0 = a;
174*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
175*35238bceSAndroid Build Coastguard Worker            }
176*35238bceSAndroid Build Coastguard Worker        ""
177*35238bceSAndroid Build Coastguard Worker    end
178*35238bceSAndroid Build Coastguard Worker
179*35238bceSAndroid Build Coastguard Worker    case logical
180*35238bceSAndroid Build Coastguard Worker        version 300 es
181*35238bceSAndroid Build Coastguard Worker        values { output bool out0 = true; }
182*35238bceSAndroid Build Coastguard Worker        both ""
183*35238bceSAndroid Build Coastguard Worker            #version 300 es
184*35238bceSAndroid Build Coastguard Worker            precision highp int;
185*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
186*35238bceSAndroid Build Coastguard Worker
187*35238bceSAndroid Build Coastguard Worker            void main()
188*35238bceSAndroid Build Coastguard Worker            {
189*35238bceSAndroid Build Coastguard Worker                const bool a = (!false || false) && (true ^^ false);
190*35238bceSAndroid Build Coastguard Worker                out0 = a;
191*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
192*35238bceSAndroid Build Coastguard Worker            }
193*35238bceSAndroid Build Coastguard Worker        ""
194*35238bceSAndroid Build Coastguard Worker    end
195*35238bceSAndroid Build Coastguard Worker
196*35238bceSAndroid Build Coastguard Worker    case compare
197*35238bceSAndroid Build Coastguard Worker        version 300 es
198*35238bceSAndroid Build Coastguard Worker        values { output bool out0 = true; }
199*35238bceSAndroid Build Coastguard Worker        both ""
200*35238bceSAndroid Build Coastguard Worker            #version 300 es
201*35238bceSAndroid Build Coastguard Worker            precision highp int;
202*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
203*35238bceSAndroid Build Coastguard Worker
204*35238bceSAndroid Build Coastguard Worker            void main()
205*35238bceSAndroid Build Coastguard Worker            {
206*35238bceSAndroid Build Coastguard Worker                const bool a = (false == false) && (true != false) && (1 < 2) && (3 <= 3) && ((1 > 1) != (1 >= 1));
207*35238bceSAndroid Build Coastguard Worker                out0 = a;
208*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
209*35238bceSAndroid Build Coastguard Worker            }
210*35238bceSAndroid Build Coastguard Worker        ""
211*35238bceSAndroid Build Coastguard Worker    end
212*35238bceSAndroid Build Coastguard Worker
213*35238bceSAndroid Build Coastguard Worker    case selection
214*35238bceSAndroid Build Coastguard Worker        version 300 es
215*35238bceSAndroid Build Coastguard Worker        values { output float out0 = 5.3; }
216*35238bceSAndroid Build Coastguard Worker        both ""
217*35238bceSAndroid Build Coastguard Worker            #version 300 es
218*35238bceSAndroid Build Coastguard Worker            precision highp float;
219*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
220*35238bceSAndroid Build Coastguard Worker
221*35238bceSAndroid Build Coastguard Worker            void main()
222*35238bceSAndroid Build Coastguard Worker            {
223*35238bceSAndroid Build Coastguard Worker                const float a = false ? 0.0 : (true ? 5.3 : 1.0);
224*35238bceSAndroid Build Coastguard Worker                out0 = a;
225*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
226*35238bceSAndroid Build Coastguard Worker            }
227*35238bceSAndroid Build Coastguard Worker        ""
228*35238bceSAndroid Build Coastguard Worker    end
229*35238bceSAndroid Build Coastguard Worker
230*35238bceSAndroid Build Coastguard Workerend # operators
231*35238bceSAndroid Build Coastguard Worker
232*35238bceSAndroid Build Coastguard Workergroup complex_types "Arrays & Structs"
233*35238bceSAndroid Build Coastguard Worker
234*35238bceSAndroid Build Coastguard Worker    case struct
235*35238bceSAndroid Build Coastguard Worker        version 300 es
236*35238bceSAndroid Build Coastguard Worker        values { output float out0 = 260.922; }
237*35238bceSAndroid Build Coastguard Worker        both ""
238*35238bceSAndroid Build Coastguard Worker            #version 300 es
239*35238bceSAndroid Build Coastguard Worker            precision highp float;
240*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
241*35238bceSAndroid Build Coastguard Worker
242*35238bceSAndroid Build Coastguard Worker            struct S
243*35238bceSAndroid Build Coastguard Worker            {
244*35238bceSAndroid Build Coastguard Worker                vec4 a;
245*35238bceSAndroid Build Coastguard Worker                int  b;
246*35238bceSAndroid Build Coastguard Worker            };
247*35238bceSAndroid Build Coastguard Worker
248*35238bceSAndroid Build Coastguard Worker            void main()
249*35238bceSAndroid Build Coastguard Worker            {
250*35238bceSAndroid Build Coastguard Worker                const S s = S(vec4(1.5), 123);
251*35238bceSAndroid Build Coastguard Worker                out0 = length(s.a.xy)*float(s.b);
252*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
253*35238bceSAndroid Build Coastguard Worker            }
254*35238bceSAndroid Build Coastguard Worker        ""
255*35238bceSAndroid Build Coastguard Worker    end
256*35238bceSAndroid Build Coastguard Worker
257*35238bceSAndroid Build Coastguard Worker    case nested_struct
258*35238bceSAndroid Build Coastguard Worker        version 300 es
259*35238bceSAndroid Build Coastguard Worker        values { output float out0 = 965.9; }
260*35238bceSAndroid Build Coastguard Worker        both ""
261*35238bceSAndroid Build Coastguard Worker            #version 300 es
262*35238bceSAndroid Build Coastguard Worker            precision highp float;
263*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
264*35238bceSAndroid Build Coastguard Worker
265*35238bceSAndroid Build Coastguard Worker            struct S
266*35238bceSAndroid Build Coastguard Worker            {
267*35238bceSAndroid Build Coastguard Worker                vec4 v;
268*35238bceSAndroid Build Coastguard Worker                int  i;
269*35238bceSAndroid Build Coastguard Worker            };
270*35238bceSAndroid Build Coastguard Worker
271*35238bceSAndroid Build Coastguard Worker            struct T
272*35238bceSAndroid Build Coastguard Worker            {
273*35238bceSAndroid Build Coastguard Worker                S s;
274*35238bceSAndroid Build Coastguard Worker                bool b;
275*35238bceSAndroid Build Coastguard Worker                int i;
276*35238bceSAndroid Build Coastguard Worker            };
277*35238bceSAndroid Build Coastguard Worker
278*35238bceSAndroid Build Coastguard Worker            struct U
279*35238bceSAndroid Build Coastguard Worker            {
280*35238bceSAndroid Build Coastguard Worker                S s;
281*35238bceSAndroid Build Coastguard Worker                T t;
282*35238bceSAndroid Build Coastguard Worker            };
283*35238bceSAndroid Build Coastguard Worker
284*35238bceSAndroid Build Coastguard Worker            void main()
285*35238bceSAndroid Build Coastguard Worker            {
286*35238bceSAndroid Build Coastguard Worker                const S s = S(vec4(1.5), 123);
287*35238bceSAndroid Build Coastguard Worker                const T t = T(s, false, 3);
288*35238bceSAndroid Build Coastguard Worker                const U u = U(s, t);
289*35238bceSAndroid Build Coastguard Worker                const U v = U(S(vec4(1.3), 4), T(S(vec4(2.0), 5), true, 6));
290*35238bceSAndroid Build Coastguard Worker                out0 = float(u.s.i*v.t.i + v.t.s.i)*v.s.v.x; // float(123*6 + 5)*1.3
291*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
292*35238bceSAndroid Build Coastguard Worker            }
293*35238bceSAndroid Build Coastguard Worker        ""
294*35238bceSAndroid Build Coastguard Worker    end
295*35238bceSAndroid Build Coastguard Worker
296*35238bceSAndroid Build Coastguard Worker    case array_size
297*35238bceSAndroid Build Coastguard Worker        version 300 es
298*35238bceSAndroid Build Coastguard Worker        values { output int out0 = 1; }
299*35238bceSAndroid Build Coastguard Worker        both ""
300*35238bceSAndroid Build Coastguard Worker            #version 300 es
301*35238bceSAndroid Build Coastguard Worker            precision highp float;
302*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
303*35238bceSAndroid Build Coastguard Worker
304*35238bceSAndroid Build Coastguard Worker            void main()
305*35238bceSAndroid Build Coastguard Worker            {
306*35238bceSAndroid Build Coastguard Worker                const int a[max(-1, 1)] = int[1](1);
307*35238bceSAndroid Build Coastguard Worker                out0 = a[0];
308*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
309*35238bceSAndroid Build Coastguard Worker            }
310*35238bceSAndroid Build Coastguard Worker        ""
311*35238bceSAndroid Build Coastguard Worker    end
312*35238bceSAndroid Build Coastguard Worker
313*35238bceSAndroid Build Coastguard Worker    case array_length
314*35238bceSAndroid Build Coastguard Worker        version 300 es
315*35238bceSAndroid Build Coastguard Worker        values { output int out0 = 2; }
316*35238bceSAndroid Build Coastguard Worker        both ""
317*35238bceSAndroid Build Coastguard Worker            #version 300 es
318*35238bceSAndroid Build Coastguard Worker            precision highp float;
319*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
320*35238bceSAndroid Build Coastguard Worker
321*35238bceSAndroid Build Coastguard Worker            void main()
322*35238bceSAndroid Build Coastguard Worker            {
323*35238bceSAndroid Build Coastguard Worker                const int a[1] = int[1](1);
324*35238bceSAndroid Build Coastguard Worker                out0 = a.length() + a[0];
325*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
326*35238bceSAndroid Build Coastguard Worker            }
327*35238bceSAndroid Build Coastguard Worker        ""
328*35238bceSAndroid Build Coastguard Worker    end
329*35238bceSAndroid Build Coastguard Worker
330*35238bceSAndroid Build Coastguard Worker    case array
331*35238bceSAndroid Build Coastguard Worker        version 300 es
332*35238bceSAndroid Build Coastguard Worker        values { output float out0 = 4.0; }
333*35238bceSAndroid Build Coastguard Worker        both ""
334*35238bceSAndroid Build Coastguard Worker            #version 300 es
335*35238bceSAndroid Build Coastguard Worker            precision highp float;
336*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
337*35238bceSAndroid Build Coastguard Worker
338*35238bceSAndroid Build Coastguard Worker            void main()
339*35238bceSAndroid Build Coastguard Worker            {
340*35238bceSAndroid Build Coastguard Worker                const float a[1+2+5] = float[8](0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0);
341*35238bceSAndroid Build Coastguard Worker                const float f = a[1+2+4];
342*35238bceSAndroid Build Coastguard Worker                out0 = f + float(a.length()-8);
343*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
344*35238bceSAndroid Build Coastguard Worker            }
345*35238bceSAndroid Build Coastguard Worker        ""
346*35238bceSAndroid Build Coastguard Worker    end
347*35238bceSAndroid Build Coastguard Worker
348*35238bceSAndroid Build Coastguard Workerend # complex_types
349*35238bceSAndroid Build Coastguard Worker
350*35238bceSAndroid Build Coastguard Workergroup other "Other operations"
351*35238bceSAndroid Build Coastguard Worker
352*35238bceSAndroid Build Coastguard Worker    case switch_case
353*35238bceSAndroid Build Coastguard Worker        version 300 es
354*35238bceSAndroid Build Coastguard Worker        values
355*35238bceSAndroid Build Coastguard Worker        {
356*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 ];
357*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | 1 | 2 | 3 | 4 | 10];
358*35238bceSAndroid Build Coastguard Worker        }
359*35238bceSAndroid Build Coastguard Worker
360*35238bceSAndroid Build Coastguard Worker        both ""
361*35238bceSAndroid Build Coastguard Worker            #version 300 es
362*35238bceSAndroid Build Coastguard Worker            precision highp float;
363*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
364*35238bceSAndroid Build Coastguard Worker
365*35238bceSAndroid Build Coastguard Worker            void main()
366*35238bceSAndroid Build Coastguard Worker            {
367*35238bceSAndroid Build Coastguard Worker                const int _0 = 0;
368*35238bceSAndroid Build Coastguard Worker                const int _1 = 1;
369*35238bceSAndroid Build Coastguard Worker                const int _2 = 2;
370*35238bceSAndroid Build Coastguard Worker                const int _3 = 3;
371*35238bceSAndroid Build Coastguard Worker                const int _4 = 4;
372*35238bceSAndroid Build Coastguard Worker
373*35238bceSAndroid Build Coastguard Worker                switch(int(in0))
374*35238bceSAndroid Build Coastguard Worker                {
375*35238bceSAndroid Build Coastguard Worker                    case _0:
376*35238bceSAndroid Build Coastguard Worker                        out0 = 0;
377*35238bceSAndroid Build Coastguard Worker                        break;
378*35238bceSAndroid Build Coastguard Worker                    case _1:
379*35238bceSAndroid Build Coastguard Worker                        out0 = 1;
380*35238bceSAndroid Build Coastguard Worker                        break;
381*35238bceSAndroid Build Coastguard Worker                    case _2:
382*35238bceSAndroid Build Coastguard Worker                        out0 = 2;
383*35238bceSAndroid Build Coastguard Worker                        break;
384*35238bceSAndroid Build Coastguard Worker                    case _3:
385*35238bceSAndroid Build Coastguard Worker                        out0 = 3;
386*35238bceSAndroid Build Coastguard Worker                        break;
387*35238bceSAndroid Build Coastguard Worker                    case _4:
388*35238bceSAndroid Build Coastguard Worker                        out0 = 4;
389*35238bceSAndroid Build Coastguard Worker                        break;
390*35238bceSAndroid Build Coastguard Worker                    case 5:
391*35238bceSAndroid Build Coastguard Worker                        out0 = 10;
392*35238bceSAndroid Build Coastguard Worker                        break;
393*35238bceSAndroid Build Coastguard Worker                    default:
394*35238bceSAndroid Build Coastguard Worker                        out0 = 100;
395*35238bceSAndroid Build Coastguard Worker
396*35238bceSAndroid Build Coastguard Worker                }
397*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
398*35238bceSAndroid Build Coastguard Worker            }
399*35238bceSAndroid Build Coastguard Worker        ""
400*35238bceSAndroid Build Coastguard Worker    end
401*35238bceSAndroid Build Coastguard Worker
402*35238bceSAndroid Build Coastguard Worker    case nested_builtin_funcs
403*35238bceSAndroid Build Coastguard Worker        version 300 es
404*35238bceSAndroid Build Coastguard Worker        values { output float out0 = 3.05; }
405*35238bceSAndroid Build Coastguard Worker        both ""
406*35238bceSAndroid Build Coastguard Worker            #version 300 es
407*35238bceSAndroid Build Coastguard Worker            precision highp float;
408*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
409*35238bceSAndroid Build Coastguard Worker
410*35238bceSAndroid Build Coastguard Worker            void main()
411*35238bceSAndroid Build Coastguard Worker            {
412*35238bceSAndroid Build Coastguard Worker                const float a = sqrt( atan(sin(1.5)/cos(1.5)) /*1.5*/ * log2(exp2(log(exp(6.2) + 0.1)) + 0.1) /*~6.2*/);
413*35238bceSAndroid Build Coastguard Worker                out0 = a;
414*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
415*35238bceSAndroid Build Coastguard Worker            }
416*35238bceSAndroid Build Coastguard Worker        ""
417*35238bceSAndroid Build Coastguard Worker    end
418*35238bceSAndroid Build Coastguard Worker
419*35238bceSAndroid Build Coastguard Worker    case complex
420*35238bceSAndroid Build Coastguard Worker        version 300 es
421*35238bceSAndroid Build Coastguard Worker        values
422*35238bceSAndroid Build Coastguard Worker        {
423*35238bceSAndroid Build Coastguard Worker            input float in0 = [ 0.0 | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 ];
424*35238bceSAndroid Build Coastguard Worker            output int out0 = [ 0 | 1 | 2 | 3 | 4 | 10];
425*35238bceSAndroid Build Coastguard Worker        }
426*35238bceSAndroid Build Coastguard Worker
427*35238bceSAndroid Build Coastguard Worker        both ""
428*35238bceSAndroid Build Coastguard Worker            #version 300 es
429*35238bceSAndroid Build Coastguard Worker            precision highp float;
430*35238bceSAndroid Build Coastguard Worker            ${DECLARATIONS}
431*35238bceSAndroid Build Coastguard Worker
432*35238bceSAndroid Build Coastguard Worker            struct T
433*35238bceSAndroid Build Coastguard Worker            {
434*35238bceSAndroid Build Coastguard Worker                vec4 v;
435*35238bceSAndroid Build Coastguard Worker            };
436*35238bceSAndroid Build Coastguard Worker
437*35238bceSAndroid Build Coastguard Worker            struct S
438*35238bceSAndroid Build Coastguard Worker            {
439*35238bceSAndroid Build Coastguard Worker                T t;
440*35238bceSAndroid Build Coastguard Worker                int i;
441*35238bceSAndroid Build Coastguard Worker                bool b;
442*35238bceSAndroid Build Coastguard Worker            };
443*35238bceSAndroid Build Coastguard Worker
444*35238bceSAndroid Build Coastguard Worker            void main()
445*35238bceSAndroid Build Coastguard Worker            {
446*35238bceSAndroid Build Coastguard Worker                const T   t  = T(vec4(1.0));
447*35238bceSAndroid Build Coastguard Worker                const S   s  = S(t, 42, true);
448*35238bceSAndroid Build Coastguard Worker                const int _0 = int(sin(0.0));
449*35238bceSAndroid Build Coastguard Worker                const int _1 = int(1.0);
450*35238bceSAndroid Build Coastguard Worker                const int _2 = 2 + int(float(_0>_1));
451*35238bceSAndroid Build Coastguard Worker                const int _3 = min(gl_MaxVertexAttribs, 16)/4 - 1;
452*35238bceSAndroid Build Coastguard Worker                const int _4 = min(gl_MaxDrawBuffers, 4);
453*35238bceSAndroid Build Coastguard Worker                const ivec4 nums = ivec4(0, 1, 2, 3);
454*35238bceSAndroid Build Coastguard Worker
455*35238bceSAndroid Build Coastguard Worker                switch(int(in0))
456*35238bceSAndroid Build Coastguard Worker                {
457*35238bceSAndroid Build Coastguard Worker                    case int(float(_0)):
458*35238bceSAndroid Build Coastguard Worker                        out0 = ((true!=false) && (!false)) ? 0 : 25;
459*35238bceSAndroid Build Coastguard Worker                        break;
460*35238bceSAndroid Build Coastguard Worker                    case ivec3(_1).x:
461*35238bceSAndroid Build Coastguard Worker                        out0 = 3*18/9-5;
462*35238bceSAndroid Build Coastguard Worker                        break;
463*35238bceSAndroid Build Coastguard Worker                    case nums[_2]:
464*35238bceSAndroid Build Coastguard Worker                        out0 = int(length(vec4(1.0))+0.001);
465*35238bceSAndroid Build Coastguard Worker                        break;
466*35238bceSAndroid Build Coastguard Worker                    case _3:
467*35238bceSAndroid Build Coastguard Worker                        out0 = 3;
468*35238bceSAndroid Build Coastguard Worker                        break;
469*35238bceSAndroid Build Coastguard Worker                    case clamp(_4, 1, 6):
470*35238bceSAndroid Build Coastguard Worker                        out0 = (s.i-2)/10;
471*35238bceSAndroid Build Coastguard Worker                        break;
472*35238bceSAndroid Build Coastguard Worker                    case max(3, 5):
473*35238bceSAndroid Build Coastguard Worker                        out0 = 10;
474*35238bceSAndroid Build Coastguard Worker                        break;
475*35238bceSAndroid Build Coastguard Worker                    default:
476*35238bceSAndroid Build Coastguard Worker                        out0 = 100;
477*35238bceSAndroid Build Coastguard Worker
478*35238bceSAndroid Build Coastguard Worker                }
479*35238bceSAndroid Build Coastguard Worker                ${OUTPUT}
480*35238bceSAndroid Build Coastguard Worker            }
481*35238bceSAndroid Build Coastguard Worker        ""
482*35238bceSAndroid Build Coastguard Worker    end
483*35238bceSAndroid Build Coastguard Workerend
484