OSDN Git Service

ir_constant_expression: Handle several floating point unops.
[android-x86/external-mesa.git] / builtin_function.cpp
1 /* DO NOT MODIFY - automatically generated by generate_builtins.pl */
2 /*
3  * Copyright © 2010 Intel Corporation
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24
25 #include <stdio.h>
26 #include "glsl_parser_extras.h"
27 #include "ir_reader.h"
28
29 void
30 read_builtins(_mesa_glsl_parse_state *st, exec_list *instructions,
31               const char **functions, unsigned count)
32 {
33    if (st->error)
34       return;
35
36    for (unsigned i = 0; i < count; i++) {
37       _mesa_glsl_read_ir(st, instructions, functions[i]);
38
39       if (st->error) {
40          printf("error reading builtin: %.35s ...\n", functions[i]);
41          return;
42       }
43    }
44 }
45
46 /* Version 110 builtins */
47
48 static const char *builtins_110_abs = {
49    "((function abs\n"
50    "   (signature float\n"
51    "     (parameters\n"
52    "       (declare (in) float arg0))\n"
53    "     ((return (expression float abs (var_ref arg0)))))\n"
54    "\n"
55    "   (signature vec2\n"
56    "     (parameters\n"
57    "       (declare (in) vec2 arg0))\n"
58    "     ((return (expression vec2 abs (var_ref arg0)))))\n"
59    "\n"
60    "   (signature vec3\n"
61    "     (parameters\n"
62    "       (declare (in) vec3 arg0))\n"
63    "     ((return (expression vec3 abs (var_ref arg0)))))\n"
64    "\n"
65    "   (signature vec4\n"
66    "     (parameters\n"
67    "       (declare (in) vec4 arg0))\n"
68    "     ((return (expression vec4 abs (var_ref arg0)))))\n"
69    "))\n"
70 };
71
72 static const char *builtins_110_all = {
73    "((function all\n"
74    "   (signature bool\n"
75    "     (parameters\n"
76    "       (declare (in) bvec2 arg0))\n"
77    "     ((return (expression bool && (swiz x (var_ref arg0))(swiz y (var_ref arg0))))))\n"
78    "\n"
79    "   (signature bool\n"
80    "     (parameters\n"
81    "       (declare (in) bvec3 arg0))\n"
82    "     ((return (expression bool && (expression bool && (swiz x (var_ref arg0))(swiz y (var_ref arg0))) (swiz z (var_ref arg0))))))\n"
83    "\n"
84    "   (signature bool\n"
85    "     (parameters\n"
86    "       (declare (in) bvec4 arg0))\n"
87    "     ((return (expression bool && (expression bool && (expression bool && (swiz x (var_ref arg0))(swiz y (var_ref arg0))) (swiz z (var_ref arg0))) (swiz w (var_ref arg0))))))\n"
88    "))\n"
89 };
90
91 static const char *builtins_110_any = {
92    "((function any\n"
93    "   (signature bool\n"
94    "     (parameters\n"
95    "       (declare (in) bvec2 arg0))\n"
96    "     ((return (expression bool || (swiz x (var_ref arg0))(swiz y (var_ref arg0))))))\n"
97    "\n"
98    "   (signature bool\n"
99    "     (parameters\n"
100    "       (declare (in) bvec3 arg0))\n"
101    "     ((return (expression bool || (expression bool || (swiz x (var_ref arg0))(swiz y (var_ref arg0))) (swiz z (var_ref arg0))))))\n"
102    "\n"
103    "   (signature bool\n"
104    "     (parameters\n"
105    "       (declare (in) bvec4 arg0))\n"
106    "     ((return (expression bool || (expression bool || (expression bool || (swiz x (var_ref arg0))(swiz y (var_ref arg0))) (swiz z (var_ref arg0))) (swiz w (var_ref arg0))))))\n"
107    "))\n"
108 };
109
110 static const char *builtins_110_ceil = {
111    "((function ceil\n"
112    "   (signature float\n"
113    "     (parameters\n"
114    "       (declare (in) float arg0))\n"
115    "     ((return (expression float ceil (var_ref arg0)))))\n"
116    "\n"
117    "   (signature vec2\n"
118    "     (parameters\n"
119    "       (declare (in) vec2 arg0))\n"
120    "     ((return (expression vec2 ceil (var_ref arg0)))))\n"
121    "\n"
122    "   (signature vec3\n"
123    "     (parameters\n"
124    "       (declare (in) vec3 arg0))\n"
125    "     ((return (expression vec3 ceil (var_ref arg0)))))\n"
126    "\n"
127    "   (signature vec4\n"
128    "     (parameters\n"
129    "       (declare (in) vec4 arg0))\n"
130    "     ((return (expression vec4 ceil (var_ref arg0)))))\n"
131    "))\n"
132 };
133
134 static const char *builtins_110_clamp = {
135    "((function clamp\n"
136    "   (signature float\n"
137    "     (parameters\n"
138    "       (declare (in) float arg0)\n"
139    "       (declare (in) float arg1)\n"
140    "       (declare (in) float arg2))\n"
141    "     ((return (expression float max (expression float min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
142    "\n"
143    "   (signature vec2\n"
144    "     (parameters\n"
145    "       (declare (in) vec2 arg0)\n"
146    "       (declare (in) vec2 arg1)\n"
147    "       (declare (in) vec2 arg2))\n"
148    "     ((return (expression vec2 max (expression vec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
149    "\n"
150    "   (signature vec3\n"
151    "     (parameters\n"
152    "       (declare (in) vec3 arg0)\n"
153    "       (declare (in) vec3 arg1)\n"
154    "       (declare (in) vec3 arg2))\n"
155    "     ((return (expression vec3 max (expression vec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
156    "\n"
157    "   (signature vec4\n"
158    "     (parameters\n"
159    "       (declare (in) vec4 arg0)\n"
160    "       (declare (in) vec4 arg1)\n"
161    "       (declare (in) vec4 arg2))\n"
162    "     ((return (expression vec4 max (expression vec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
163    "))\n"
164 };
165
166 static const char *builtins_110_cos = {
167    "((function cos\n"
168    "   (signature float\n"
169    "     (parameters\n"
170    "       (declare (in) float angle))\n"
171    "     ((return (expression float cos (var_ref angle)))))\n"
172    "\n"
173    "   (signature vec2\n"
174    "     (parameters\n"
175    "       (declare (in) vec2 angle))\n"
176    "     ((return (expression vec2 cos (var_ref angle)))))\n"
177    "\n"
178    "   (signature vec3\n"
179    "     (parameters\n"
180    "       (declare (in) vec3 angle))\n"
181    "     ((return (expression vec3 cos (var_ref angle)))))\n"
182    "\n"
183    "   (signature vec4\n"
184    "     (parameters\n"
185    "       (declare (in) vec4 angle))\n"
186    "     ((return (expression vec4 cos (var_ref angle)))))\n"
187    "))\n"
188 };
189
190 static const char *builtins_110_cross = {
191    "((function cross\n"
192    "   (signature vec3\n"
193    "     (parameters\n"
194    "       (declare (in) vec3 arg0)\n"
195    "       (declare (in) vec3 arg1))\n"
196    "     ((declare () vec3 t)\n"
197    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
198    "              (expression float - (expression float * (swiz y (var_ref arg0)) (swiz z (var_ref arg1)))\n"
199    "                              (expression float * (swiz y (var_ref arg1)) (swiz z (var_ref arg0)))))\n"
200    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
201    "              (expression float - (expression float * (swiz z (var_ref arg0)) (swiz x (var_ref arg1)))\n"
202    "                              (expression float * (swiz z (var_ref arg1)) (swiz x (var_ref arg0)))))\n"
203    "      (assign (constant bool (1)) (swiz z (var_ref t))\n"
204    "              (expression float - (expression float * (swiz x (var_ref arg0)) (swiz y (var_ref arg1)))\n"
205    "                              (expression float * (swiz x (var_ref arg1)) (swiz y (var_ref arg0)))))\n"
206    "      (return (var_ref t))))\n"
207    "))\n"
208 };
209
210 static const char *builtins_110_degrees = {
211    "((function degrees\n"
212    "   (signature float\n"
213    "     (parameters\n"
214    "       (declare (in) float arg0))\n"
215    "     ((return (expression float * (var_ref arg0) (constant float (57.295780))))))\n"
216    "\n"
217    "   (signature vec2\n"
218    "     (parameters\n"
219    "       (declare (in) vec2 arg0))\n"
220    "     ((return (expression vec2 * (var_ref arg0) (constant float (57.295780))))))\n"
221    "\n"
222    "   (signature vec3\n"
223    "     (parameters\n"
224    "       (declare (in) vec3 arg0))\n"
225    "     ((return (expression vec3 * (var_ref arg0) (constant float (57.295780))))))\n"
226    "\n"
227    "   (signature vec4\n"
228    "     (parameters\n"
229    "       (declare (in) vec4 arg0))\n"
230    "     ((return (expression vec4 * (var_ref arg0) (constant float (57.295780))))))\n"
231    "))\n"
232 };
233
234 static const char *builtins_110_dot = {
235    "((function dot\n"
236    "   (signature float\n"
237    "     (parameters\n"
238    "       (declare (in) float arg0)\n"
239    "       (declare (in) float arg1))\n"
240    "     ((return (expression float dot (var_ref arg0) (var_ref arg1)))))\n"
241    "\n"
242    "   (signature float\n"
243    "     (parameters\n"
244    "       (declare (in) vec2 arg0)\n"
245    "       (declare (in) vec2 arg1))\n"
246    "     ((return (expression float dot (var_ref arg0) (var_ref arg1)))))\n"
247    "\n"
248    "   (signature float\n"
249    "     (parameters\n"
250    "       (declare (in) vec3 arg0)\n"
251    "       (declare (in) vec3 arg1))\n"
252    "     ((return (expression float dot (var_ref arg0) (var_ref arg1)))))\n"
253    "\n"
254    "   (signature float\n"
255    "     (parameters\n"
256    "       (declare (in) vec4 arg0)\n"
257    "       (declare (in) vec4 arg1))\n"
258    "     ((return (expression float dot (var_ref arg0) (var_ref arg1)))))\n"
259    "))\n"
260 };
261
262 static const char *builtins_110_equal = {
263    "((function equal\n"
264    "   (signature bvec2\n"
265    "     (parameters\n"
266    "       (declare (in) vec2 arg0)\n"
267    "       (declare (in) vec2 arg1))\n"
268    "     ((declare () bvec2 temp)\n"
269    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
270    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
271    "      (return (var_ref temp))))\n"
272    "\n"
273    "   (signature bvec3\n"
274    "     (parameters\n"
275    "       (declare (in) vec3 arg0)\n"
276    "       (declare (in) vec3 arg1))\n"
277    "     ((declare () bvec3 temp)\n"
278    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
279    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
280    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool == (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
281    "      (return (var_ref temp))))\n"
282    "\n"
283    "   (signature bvec4\n"
284    "     (parameters\n"
285    "       (declare (in) vec4 arg0)\n"
286    "       (declare (in) vec4 arg1))\n"
287    "     ((declare () bvec4 temp)\n"
288    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
289    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
290    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool == (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
291    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool == (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
292    "      (return (var_ref temp))))\n"
293    "\n"
294    "   (signature bvec2\n"
295    "     (parameters\n"
296    "       (declare (in) ivec2 arg0)\n"
297    "       (declare (in) ivec2 arg1))\n"
298    "     ((declare () bvec2 temp)\n"
299    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
300    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
301    "      (return (var_ref temp))))\n"
302    "\n"
303    "   (signature bvec3\n"
304    "     (parameters\n"
305    "       (declare (in) ivec3 arg0)\n"
306    "       (declare (in) ivec3 arg1))\n"
307    "     ((declare () bvec3 temp)\n"
308    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
309    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
310    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool == (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
311    "      (return (var_ref temp))))\n"
312    "\n"
313    "   (signature bvec4\n"
314    "     (parameters\n"
315    "       (declare (in) ivec4 arg0)\n"
316    "       (declare (in) ivec4 arg1))\n"
317    "     ((declare () bvec4 temp)\n"
318    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
319    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
320    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool == (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
321    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool == (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
322    "      (return (var_ref temp))))\n"
323    "))\n"
324 };
325
326 static const char *builtins_110_exp = {
327    "((function exp\n"
328    "   (signature float\n"
329    "     (parameters\n"
330    "       (declare (in) float arg0))\n"
331    "     ((return (expression float exp (var_ref arg0)))))\n"
332    "\n"
333    "   (signature vec2\n"
334    "     (parameters\n"
335    "       (declare (in) vec2 arg0))\n"
336    "     ((return (expression vec2 exp (var_ref arg0)))))\n"
337    "\n"
338    "   (signature vec3\n"
339    "     (parameters\n"
340    "       (declare (in) vec3 arg0))\n"
341    "     ((return (expression vec3 exp (var_ref arg0)))))\n"
342    "\n"
343    "   (signature vec4\n"
344    "     (parameters\n"
345    "       (declare (in) vec4 arg0))\n"
346    "     ((return (expression vec4 exp (var_ref arg0)))))\n"
347    "))\n"
348 };
349
350 static const char *builtins_110_exp2 = {
351    "((function exp2\n"
352    "   (signature float\n"
353    "     (parameters\n"
354    "       (declare (in) float arg0))\n"
355    "     ((return (expression float exp2 (var_ref arg0)))))\n"
356    "\n"
357    "   (signature vec2\n"
358    "     (parameters\n"
359    "       (declare (in) vec2 arg0))\n"
360    "     ((return (expression vec2 exp2 (var_ref arg0)))))\n"
361    "\n"
362    "   (signature vec3\n"
363    "     (parameters\n"
364    "       (declare (in) vec3 arg0))\n"
365    "     ((return (expression vec3 exp2 (var_ref arg0)))))\n"
366    "\n"
367    "   (signature vec4\n"
368    "     (parameters\n"
369    "       (declare (in) vec4 arg0))\n"
370    "     ((return (expression vec4 exp2 (var_ref arg0)))))\n"
371    "))\n"
372 };
373
374 static const char *builtins_110_floor = {
375    "((function floor\n"
376    "   (signature float\n"
377    "     (parameters\n"
378    "       (declare (in) float arg0))\n"
379    "     ((return (expression float floor (var_ref arg0)))))\n"
380    "\n"
381    "   (signature vec2\n"
382    "     (parameters\n"
383    "       (declare (in) vec2 arg0))\n"
384    "     ((return (expression vec2 floor (var_ref arg0)))))\n"
385    "\n"
386    "   (signature vec3\n"
387    "     (parameters\n"
388    "       (declare (in) vec3 arg0))\n"
389    "     ((return (expression vec3 floor (var_ref arg0)))))\n"
390    "\n"
391    "   (signature vec4\n"
392    "     (parameters\n"
393    "       (declare (in) vec4 arg0))\n"
394    "     ((return (expression vec4 floor (var_ref arg0)))))\n"
395    "))\n"
396 };
397
398 static const char *builtins_110_fract = {
399    "((function fract\n"
400    "   (signature float\n"
401    "     (parameters\n"
402    "       (declare (in) float x))\n"
403    "     ((return (expression float - (var_ref x) (expression float floor (var_ref x))))))\n"
404    "\n"
405    "   (signature vec2\n"
406    "     (parameters\n"
407    "       (declare (in) vec2 x))\n"
408    "     ((declare () vec2 t)\n"
409    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float - (swiz x (var_ref x)) (expression float floor (swiz x (var_ref x)))))\n"
410    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float - (swiz y (var_ref x)) (expression float floor (swiz y (var_ref x)))))\n"
411    "      (return (var_ref t))))\n"
412    "\n"
413    "   (signature vec3\n"
414    "     (parameters\n"
415    "       (declare (in) vec3 x))\n"
416    "     ((declare () vec3 t)\n"
417    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float - (swiz x (var_ref x)) (expression float floor (swiz x (var_ref x)))))\n"
418    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float - (swiz y (var_ref x)) (expression float floor (swiz y (var_ref x)))))\n"
419    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression float - (swiz z (var_ref x)) (expression float floor (swiz z (var_ref x)))))\n"
420    "      (return (var_ref t))))\n"
421    "\n"
422    "   (signature vec4\n"
423    "     (parameters\n"
424    "       (declare (in) vec4 x))\n"
425    "     ((declare () vec4 t)\n"
426    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float - (swiz x (var_ref x)) (expression float floor (swiz x (var_ref x)))))\n"
427    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float - (swiz y (var_ref x)) (expression float floor (swiz y (var_ref x)))))\n"
428    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression float - (swiz z (var_ref x)) (expression float floor (swiz z (var_ref x)))))\n"
429    "      (assign (constant bool (1)) (swiz w (var_ref t)) (expression float - (swiz w (var_ref x)) (expression float floor (swiz w (var_ref x)))))\n"
430    "      (return (var_ref t))))\n"
431    "))\n"
432    "\n"
433 };
434
435 static const char *builtins_110_greaterThan = {
436    "((function greaterThan\n"
437    "   (signature bvec2\n"
438    "     (parameters\n"
439    "       (declare (in) vec2 arg0)\n"
440    "       (declare (in) vec2 arg1))\n"
441    "     ((declare () bvec2 temp)\n"
442    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
443    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
444    "      (return (var_ref temp))))\n"
445    "\n"
446    "   (signature bvec3\n"
447    "     (parameters\n"
448    "       (declare (in) vec3 arg0)\n"
449    "       (declare (in) vec3 arg1))\n"
450    "     ((declare () bvec3 temp)\n"
451    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
452    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
453    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool > (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
454    "      (return (var_ref temp))))\n"
455    "\n"
456    "   (signature bvec4\n"
457    "     (parameters\n"
458    "       (declare (in) vec4 arg0)\n"
459    "       (declare (in) vec4 arg1))\n"
460    "     ((declare () bvec4 temp)\n"
461    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
462    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
463    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool > (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
464    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool > (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
465    "      (return (var_ref temp))))\n"
466    "\n"
467    "   (signature bvec2\n"
468    "     (parameters\n"
469    "       (declare (in) ivec2 arg0)\n"
470    "       (declare (in) ivec2 arg1))\n"
471    "     ((declare () bvec2 temp)\n"
472    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
473    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
474    "      (return (var_ref temp))))\n"
475    "\n"
476    "   (signature bvec3\n"
477    "     (parameters\n"
478    "       (declare (in) ivec3 arg0)\n"
479    "       (declare (in) ivec3 arg1))\n"
480    "     ((declare () bvec3 temp)\n"
481    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
482    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
483    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool > (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
484    "      (return (var_ref temp))))\n"
485    "\n"
486    "   (signature bvec4\n"
487    "     (parameters\n"
488    "       (declare (in) ivec4 arg0)\n"
489    "       (declare (in) ivec4 arg1))\n"
490    "     ((declare () bvec4 temp)\n"
491    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
492    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
493    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool > (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
494    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool > (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
495    "      (return (var_ref temp))))\n"
496    "))\n"
497 };
498
499 static const char *builtins_110_greaterThanEqual = {
500    "((function greaterThanEqual\n"
501    "   (signature bvec2\n"
502    "     (parameters\n"
503    "       (declare (in) vec2 arg0)\n"
504    "       (declare (in) vec2 arg1))\n"
505    "     ((declare () bvec2 temp)\n"
506    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
507    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
508    "      (return (var_ref temp))))\n"
509    "\n"
510    "   (signature bvec3\n"
511    "     (parameters\n"
512    "       (declare (in) vec3 arg0)\n"
513    "       (declare (in) vec3 arg1))\n"
514    "     ((declare () bvec3 temp)\n"
515    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
516    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
517    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool >= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
518    "      (return (var_ref temp))))\n"
519    "\n"
520    "   (signature bvec4\n"
521    "     (parameters\n"
522    "       (declare (in) vec4 arg0)\n"
523    "       (declare (in) vec4 arg1))\n"
524    "     ((declare () bvec4 temp)\n"
525    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
526    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
527    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool >= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
528    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool >= (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
529    "      (return (var_ref temp))))\n"
530    "\n"
531    "   (signature bvec2\n"
532    "     (parameters\n"
533    "       (declare (in) ivec2 arg0)\n"
534    "       (declare (in) ivec2 arg1))\n"
535    "     ((declare () bvec2 temp)\n"
536    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
537    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
538    "      (return (var_ref temp))))\n"
539    "\n"
540    "   (signature bvec3\n"
541    "     (parameters\n"
542    "       (declare (in) ivec3 arg0)\n"
543    "       (declare (in) ivec3 arg1))\n"
544    "     ((declare () bvec3 temp)\n"
545    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
546    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
547    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool >= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
548    "      (return (var_ref temp))))\n"
549    "\n"
550    "   (signature bvec4\n"
551    "     (parameters\n"
552    "       (declare (in) ivec4 arg0)\n"
553    "       (declare (in) ivec4 arg1))\n"
554    "     ((declare () bvec4 temp)\n"
555    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
556    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
557    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool >= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
558    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool >= (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
559    "      (return (var_ref temp))))\n"
560    "))\n"
561 };
562
563 static const char *builtins_110_inversesqrt = {
564    "((function inversesqrt\n"
565    "   (signature float\n"
566    "     (parameters\n"
567    "       (declare (in) float arg0))\n"
568    "     ((return (expression float rsq (var_ref arg0)))))\n"
569    "\n"
570    "   (signature vec2\n"
571    "     (parameters\n"
572    "       (declare (in) vec2 arg0))\n"
573    "     ((return (expression vec2 rsq (var_ref arg0)))))\n"
574    "\n"
575    "   (signature vec3\n"
576    "     (parameters\n"
577    "       (declare (in) vec3 arg0))\n"
578    "     ((return (expression vec3 rsq (var_ref arg0)))))\n"
579    "\n"
580    "   (signature vec4\n"
581    "     (parameters\n"
582    "       (declare (in) vec4 arg0))\n"
583    "     ((return (expression vec4 rsq (var_ref arg0)))))\n"
584    "))\n"
585 };
586
587 static const char *builtins_110_length = {
588    "((function length\n"
589    "   (signature float\n"
590    "     (parameters\n"
591    "       (declare (in) float arg0))\n"
592    "     ((return (expression float sqrt (expression float dot (var_ref arg0) (var_ref arg0))))))\n"
593    "\n"
594    "   (signature float\n"
595    "     (parameters\n"
596    "       (declare (in) vec2 arg0))\n"
597    "     ((return (expression float sqrt (expression float dot (var_ref arg0) (var_ref arg0))))))\n"
598    "\n"
599    "   (signature float\n"
600    "     (parameters\n"
601    "       (declare (in) vec3 arg0))\n"
602    "     ((return (expression float sqrt (expression float dot (var_ref arg0) (var_ref arg0))))))\n"
603    "\n"
604    "   (signature float\n"
605    "     (parameters\n"
606    "       (declare (in) vec4 arg0))\n"
607    "     ((return (expression float sqrt (expression float dot (var_ref arg0) (var_ref arg0))))))\n"
608    "))\n"
609 };
610
611 static const char *builtins_110_lessThan = {
612    "((function lessThan\n"
613    "   (signature bvec2\n"
614    "     (parameters\n"
615    "       (declare (in) vec2 arg0)\n"
616    "       (declare (in) vec2 arg1))\n"
617    "     ((declare () bvec2 temp)\n"
618    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
619    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
620    "      (return (var_ref temp))))\n"
621    "\n"
622    "   (signature bvec3\n"
623    "     (parameters\n"
624    "       (declare (in) vec3 arg0)\n"
625    "       (declare (in) vec3 arg1))\n"
626    "     ((declare () bvec3 temp)\n"
627    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
628    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
629    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool < (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
630    "      (return (var_ref temp))))\n"
631    "\n"
632    "   (signature bvec4\n"
633    "     (parameters\n"
634    "       (declare (in) vec4 arg0)\n"
635    "       (declare (in) vec4 arg1))\n"
636    "     ((declare () bvec4 temp)\n"
637    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
638    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
639    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool < (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
640    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool < (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
641    "      (return (var_ref temp))))\n"
642    "\n"
643    "   (signature bvec2\n"
644    "     (parameters\n"
645    "       (declare (in) ivec2 arg0)\n"
646    "       (declare (in) ivec2 arg1))\n"
647    "     ((declare () bvec2 temp)\n"
648    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
649    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
650    "      (return (var_ref temp))))\n"
651    "\n"
652    "   (signature bvec3\n"
653    "     (parameters\n"
654    "       (declare (in) ivec3 arg0)\n"
655    "       (declare (in) ivec3 arg1))\n"
656    "     ((declare () bvec3 temp)\n"
657    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
658    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
659    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool < (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
660    "      (return (var_ref temp))))\n"
661    "\n"
662    "   (signature bvec4\n"
663    "     (parameters\n"
664    "       (declare (in) ivec4 arg0)\n"
665    "       (declare (in) ivec4 arg1))\n"
666    "     ((declare () bvec4 temp)\n"
667    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
668    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
669    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool < (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
670    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool < (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
671    "      (return (var_ref temp))))\n"
672    "))\n"
673 };
674
675 static const char *builtins_110_lessThanEqual = {
676    "((function lessThanEqual\n"
677    "   (signature bvec2\n"
678    "     (parameters\n"
679    "       (declare (in) vec2 arg0)\n"
680    "       (declare (in) vec2 arg1))\n"
681    "     ((declare () bvec2 temp)\n"
682    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
683    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
684    "      (return (var_ref temp))))\n"
685    "\n"
686    "   (signature bvec3\n"
687    "     (parameters\n"
688    "       (declare (in) vec3 arg0)\n"
689    "       (declare (in) vec3 arg1))\n"
690    "     ((declare () bvec3 temp)\n"
691    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
692    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
693    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool <= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
694    "      (return (var_ref temp))))\n"
695    "\n"
696    "   (signature bvec4\n"
697    "     (parameters\n"
698    "       (declare (in) vec4 arg0)\n"
699    "       (declare (in) vec4 arg1))\n"
700    "     ((declare () bvec4 temp)\n"
701    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
702    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
703    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool <= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
704    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool <= (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
705    "      (return (var_ref temp))))\n"
706    "\n"
707    "   (signature bvec2\n"
708    "     (parameters\n"
709    "       (declare (in) ivec2 arg0)\n"
710    "       (declare (in) ivec2 arg1))\n"
711    "     ((declare () bvec2 temp)\n"
712    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
713    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
714    "      (return (var_ref temp))))\n"
715    "\n"
716    "   (signature bvec3\n"
717    "     (parameters\n"
718    "       (declare (in) ivec3 arg0)\n"
719    "       (declare (in) ivec3 arg1))\n"
720    "     ((declare () bvec3 temp)\n"
721    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
722    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
723    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool <= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
724    "      (return (var_ref temp))))\n"
725    "\n"
726    "   (signature bvec4\n"
727    "     (parameters\n"
728    "       (declare (in) ivec4 arg0)\n"
729    "       (declare (in) ivec4 arg1))\n"
730    "     ((declare () bvec4 temp)\n"
731    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
732    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
733    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool <= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
734    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool <= (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
735    "      (return (var_ref temp))))\n"
736    "))\n"
737 };
738
739 static const char *builtins_110_log = {
740    "((function log\n"
741    "   (signature float\n"
742    "     (parameters\n"
743    "       (declare (in) float arg0))\n"
744    "     ((return (expression float log (var_ref arg0)))))\n"
745    "\n"
746    "   (signature vec2\n"
747    "     (parameters\n"
748    "       (declare (in) vec2 arg0))\n"
749    "     ((return (expression vec2 log (var_ref arg0)))))\n"
750    "\n"
751    "   (signature vec3\n"
752    "     (parameters\n"
753    "       (declare (in) vec3 arg0))\n"
754    "     ((return (expression vec3 log (var_ref arg0)))))\n"
755    "\n"
756    "   (signature vec4\n"
757    "     (parameters\n"
758    "       (declare (in) vec4 arg0))\n"
759    "     ((return (expression vec4 log (var_ref arg0)))))\n"
760    "))\n"
761 };
762
763 static const char *builtins_110_log2 = {
764    "((function log2\n"
765    "   (signature float\n"
766    "     (parameters\n"
767    "       (declare (in) float arg0))\n"
768    "     ((return (expression float log2 (var_ref arg0)))))\n"
769    "\n"
770    "   (signature vec2\n"
771    "     (parameters\n"
772    "       (declare (in) vec2 arg0))\n"
773    "     ((return (expression vec2 log2 (var_ref arg0)))))\n"
774    "\n"
775    "   (signature vec3\n"
776    "     (parameters\n"
777    "       (declare (in) vec3 arg0))\n"
778    "     ((return (expression vec3 log2 (var_ref arg0)))))\n"
779    "\n"
780    "   (signature vec4\n"
781    "     (parameters\n"
782    "       (declare (in) vec4 arg0))\n"
783    "     ((return (expression vec4 log2 (var_ref arg0)))))\n"
784    "))\n"
785 };
786
787 static const char *builtins_110_max = {
788    "((function max\n"
789    "   (signature float\n"
790    "     (parameters\n"
791    "       (declare (in) float arg0)\n"
792    "       (declare (in) float arg1))\n"
793    "     ((return (expression float max (var_ref arg0) (var_ref arg1)))))\n"
794    "\n"
795    "   (signature vec2\n"
796    "     (parameters\n"
797    "       (declare (in) vec2 arg0)\n"
798    "       (declare (in) vec2 arg1))\n"
799    "     ((return (expression vec2 max (var_ref arg0) (var_ref arg1)))))\n"
800    "\n"
801    "   (signature vec3\n"
802    "     (parameters\n"
803    "       (declare (in) vec3 arg0)\n"
804    "       (declare (in) vec3 arg1))\n"
805    "     ((return (expression vec3 max (var_ref arg0) (var_ref arg1)))))\n"
806    "\n"
807    "   (signature vec4\n"
808    "     (parameters\n"
809    "       (declare (in) vec4 arg0)\n"
810    "       (declare (in) vec4 arg1))\n"
811    "     ((return (expression vec4 max (var_ref arg0) (var_ref arg1)))))\n"
812    "))\n"
813 };
814
815 static const char *builtins_110_min = {
816    "((function min\n"
817    "   (signature float\n"
818    "     (parameters\n"
819    "       (declare (in) float arg0)\n"
820    "       (declare (in) float arg1))\n"
821    "     ((return (expression float min (var_ref arg0) (var_ref arg1)))))\n"
822    "\n"
823    "   (signature vec2\n"
824    "     (parameters\n"
825    "       (declare (in) vec2 arg0)\n"
826    "       (declare (in) vec2 arg1))\n"
827    "     ((return (expression vec2 min (var_ref arg0) (var_ref arg1)))))\n"
828    "\n"
829    "   (signature vec3\n"
830    "     (parameters\n"
831    "       (declare (in) vec3 arg0)\n"
832    "       (declare (in) vec3 arg1))\n"
833    "     ((return (expression vec3 min (var_ref arg0) (var_ref arg1)))))\n"
834    "\n"
835    "   (signature vec4\n"
836    "     (parameters\n"
837    "       (declare (in) vec4 arg0)\n"
838    "       (declare (in) vec4 arg1))\n"
839    "     ((return (expression vec4 min (var_ref arg0) (var_ref arg1)))))\n"
840    "))\n"
841 };
842
843 static const char *builtins_110_mix = {
844    "((function mix\n"
845    "   (signature float\n"
846    "     (parameters\n"
847    "       (declare (in) float arg0)\n"
848    "       (declare (in) float arg1)\n"
849    "       (declare (in) float arg2))\n"
850    "     ((return (expression float + (expression float * (var_ref arg0) (expression float - (constant float (1.000000)) (var_ref arg2))) (expression float * (var_ref arg1) (var_ref arg2))))))\n"
851    "\n"
852    "   (signature vec2\n"
853    "     (parameters\n"
854    "       (declare (in) vec2 arg0)\n"
855    "       (declare (in) vec2 arg1)\n"
856    "       (declare (in) vec2 arg2))\n"
857    "     ((return (expression vec2 + (expression vec2 * (var_ref arg0) (expression vec2 - (constant float (1.000000)) (var_ref arg2))) (expression vec2 * (var_ref arg1) (var_ref arg2))))))\n"
858    "\n"
859    "   (signature vec3\n"
860    "     (parameters\n"
861    "       (declare (in) vec3 arg0)\n"
862    "       (declare (in) vec3 arg1)\n"
863    "       (declare (in) vec3 arg2))\n"
864    "     ((return (expression vec3 + (expression vec3 * (var_ref arg0) (expression vec3 - (constant float (1.000000)) (var_ref arg2))) (expression vec3 * (var_ref arg1) (var_ref arg2))))))\n"
865    "\n"
866    "   (signature vec4\n"
867    "     (parameters\n"
868    "       (declare (in) vec4 arg0)\n"
869    "       (declare (in) vec4 arg1)\n"
870    "       (declare (in) vec4 arg2))\n"
871    "     ((return (expression vec4 + (expression vec4 * (var_ref arg0) (expression vec4 - (constant float (1.000000)) (var_ref arg2))) (expression vec4 * (var_ref arg1) (var_ref arg2))))))\n"
872    "))\n"
873 };
874
875 static const char *builtins_110_mod = {
876    "((function mod\n"
877    "   (signature float\n"
878    "     (parameters\n"
879    "       (declare (in) float arg0)\n"
880    "       (declare (in) float arg1))\n"
881    "     ((return (expression float % (var_ref arg0) (var_ref arg1)))))\n"
882    "\n"
883    "   (signature vec2\n"
884    "     (parameters\n"
885    "       (declare (in) vec2 arg0)\n"
886    "       (declare (in) vec2 arg1))\n"
887    "     ((return (expression vec2 % (var_ref arg0) (var_ref arg1)))))\n"
888    "\n"
889    "   (signature vec3\n"
890    "     (parameters\n"
891    "       (declare (in) vec3 arg0)\n"
892    "       (declare (in) vec3 arg1))\n"
893    "     ((return (expression vec3 % (var_ref arg0) (var_ref arg1)))))\n"
894    "\n"
895    "   (signature vec4\n"
896    "     (parameters\n"
897    "       (declare (in) vec4 arg0)\n"
898    "       (declare (in) vec4 arg1))\n"
899    "     ((return (expression vec4 % (var_ref arg0) (var_ref arg1)))))\n"
900    "))\n"
901 };
902
903 static const char *builtins_110_normalize = {
904    "((function normalize\n"
905    "   (signature float\n"
906    "     (parameters\n"
907    "       (declare (in) float arg0))\n"
908    "     ((return (expression float * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0)))))))\n"
909    "\n"
910    "   (signature vec2\n"
911    "     (parameters\n"
912    "       (declare (in) vec2 arg0))\n"
913    "     ((return (expression vec2 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0)))))))\n"
914    "\n"
915    "   (signature vec3\n"
916    "     (parameters\n"
917    "       (declare (in) vec3 arg0))\n"
918    "     ((return (expression vec3 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0)))))))\n"
919    "\n"
920    "   (signature vec4\n"
921    "     (parameters\n"
922    "       (declare (in) vec4 arg0))\n"
923    "     ((return (expression vec4 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0)))))))\n"
924    "))\n"
925 };
926
927 static const char *builtins_110_not = {
928    "((function not\n"
929    "   (signature bvec2\n"
930    "     (parameters\n"
931    "       (declare (in) bvec2 arg0))\n"
932    "     ((return (expression bvec2 ! (var_ref arg0)))))\n"
933    "\n"
934    "   (signature bvec3\n"
935    "     (parameters\n"
936    "       (declare (in) bvec3 arg0))\n"
937    "     ((return (expression bvec3 ! (var_ref arg0)))))\n"
938    "\n"
939    "   (signature bvec4\n"
940    "     (parameters\n"
941    "       (declare (in) bvec4 arg0))\n"
942    "     ((return (expression bvec4 ! (var_ref arg0)))))\n"
943    "))\n"
944 };
945
946 static const char *builtins_110_notEqual = {
947    "((function notEqual\n"
948    "   (signature bvec2\n"
949    "     (parameters\n"
950    "       (declare (in) vec2 arg0)\n"
951    "       (declare (in) vec2 arg1))\n"
952    "     ((declare () bvec2 temp)\n"
953    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression float != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
954    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression float != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
955    "      (return (var_ref temp))))\n"
956    "\n"
957    "   (signature bvec3\n"
958    "     (parameters\n"
959    "       (declare (in) vec3 arg0)\n"
960    "       (declare (in) vec3 arg1))\n"
961    "     ((declare () bvec3 temp)\n"
962    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression float != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
963    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression float != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
964    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression float != (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
965    "      (return (var_ref temp))))\n"
966    "\n"
967    "   (signature bvec4\n"
968    "     (parameters\n"
969    "       (declare (in) vec4 arg0)\n"
970    "       (declare (in) vec4 arg1))\n"
971    "     ((declare () bvec4 temp)\n"
972    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression float != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
973    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression float != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
974    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression float != (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
975    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression float != (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
976    "      (return (var_ref temp))))\n"
977    "\n"
978    "   (signature bvec2\n"
979    "     (parameters\n"
980    "       (declare (in) ivec2 arg0)\n"
981    "       (declare (in) ivec2 arg1))\n"
982    "     ((declare () bvec2 temp)\n"
983    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression int != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
984    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression int != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
985    "      (return (var_ref temp))))\n"
986    "\n"
987    "   (signature bvec3\n"
988    "     (parameters\n"
989    "       (declare (in) ivec3 arg0)\n"
990    "       (declare (in) ivec3 arg1))\n"
991    "     ((declare () bvec3 temp)\n"
992    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression int != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
993    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression int != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
994    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression int != (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
995    "      (return (var_ref temp))))\n"
996    "\n"
997    "   (signature bvec4\n"
998    "     (parameters\n"
999    "       (declare (in) ivec4 arg0)\n"
1000    "       (declare (in) ivec4 arg1))\n"
1001    "     ((declare () bvec4 temp)\n"
1002    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression int != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1003    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression int != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1004    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression int != (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1005    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression int != (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
1006    "      (return (var_ref temp))))\n"
1007    "))\n"
1008 };
1009
1010 static const char *builtins_110_pow = {
1011    "((function pow\n"
1012    "   (signature float\n"
1013    "     (parameters\n"
1014    "       (declare (in) float arg0)\n"
1015    "       (declare (in) float arg1))\n"
1016    "     ((return (expression float pow (var_ref arg0) (var_ref arg1)))))\n"
1017    "\n"
1018    "   (signature vec2\n"
1019    "     (parameters\n"
1020    "       (declare (in) vec2 arg0)\n"
1021    "       (declare (in) vec2 arg1))\n"
1022    "     ((return (expression vec2 pow (var_ref arg0) (var_ref arg1)))))\n"
1023    "\n"
1024    "   (signature vec3\n"
1025    "     (parameters\n"
1026    "       (declare (in) vec3 arg0)\n"
1027    "       (declare (in) vec3 arg1))\n"
1028    "     ((return (expression vec3 pow (var_ref arg0) (var_ref arg1)))))\n"
1029    "\n"
1030    "   (signature vec4\n"
1031    "     (parameters\n"
1032    "       (declare (in) vec4 arg0)\n"
1033    "       (declare (in) vec4 arg1))\n"
1034    "     ((return (expression vec4 pow (var_ref arg0) (var_ref arg1)))))\n"
1035    "))\n"
1036 };
1037
1038 static const char *builtins_110_radians = {
1039    "((function radians\n"
1040    "   (signature float\n"
1041    "     (parameters\n"
1042    "       (declare (in) float arg0))\n"
1043    "     ((return (expression float * (var_ref arg0) (constant float (0.017453))))))\n"
1044    "\n"
1045    "   (signature vec2\n"
1046    "     (parameters\n"
1047    "       (declare (in) vec2 arg0))\n"
1048    "     ((return (expression vec2 * (var_ref arg0) (constant float (0.017453))))))\n"
1049    "\n"
1050    "   (signature vec3\n"
1051    "     (parameters\n"
1052    "       (declare (in) vec3 arg0))\n"
1053    "     ((return (expression vec3 * (var_ref arg0) (constant float (0.017453))))))\n"
1054    "\n"
1055    "   (signature vec4\n"
1056    "     (parameters\n"
1057    "       (declare (in) vec4 arg0))\n"
1058    "     ((return (expression vec4 * (var_ref arg0) (constant float (0.017453))))))\n"
1059    "))\n"
1060 };
1061
1062 static const char *builtins_110_sign = {
1063    "((function sign\n"
1064    "   (signature float\n"
1065    "     (parameters\n"
1066    "       (declare (in) float x))\n"
1067    "     ((return (expression float sign (var_ref x)))))\n"
1068    "\n"
1069    "   (signature vec2\n"
1070    "     (parameters\n"
1071    "       (declare (in) vec2 x))\n"
1072    "     ((declare () vec2 t)\n"
1073    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float sign (swiz x (var_ref x))))\n"
1074    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float sign (swiz y (var_ref x))))\n"
1075    "      (return (var_ref t))))\n"
1076    "\n"
1077    "   (signature vec3\n"
1078    "     (parameters\n"
1079    "       (declare (in) vec3 x))\n"
1080    "     ((declare () vec3 t)\n"
1081    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float sign (swiz x (var_ref x))))\n"
1082    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float sign (swiz y (var_ref x))))\n"
1083    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression float sign (swiz z (var_ref x))))\n"
1084    "      (return (var_ref t))))\n"
1085    "\n"
1086    "   (signature vec4\n"
1087    "     (parameters\n"
1088    "       (declare (in) vec4 x))\n"
1089    "     ((declare () vec4 t)\n"
1090    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float sign (swiz x (var_ref x))))\n"
1091    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float sign (swiz y (var_ref x))))\n"
1092    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression float sign (swiz z (var_ref x))))\n"
1093    "      (assign (constant bool (1)) (swiz w (var_ref t)) (expression float sign (swiz w (var_ref x))))\n"
1094    "      (return (var_ref t))))\n"
1095    "))\n"
1096    "\n"
1097 };
1098
1099 static const char *builtins_110_sin = {
1100    "((function sin\n"
1101    "   (signature float\n"
1102    "     (parameters\n"
1103    "       (declare (in) float angle))\n"
1104    "     ((return (expression float sin (var_ref angle)))))\n"
1105    "\n"
1106    "   (signature vec2\n"
1107    "     (parameters\n"
1108    "       (declare (in) vec2 angle))\n"
1109    "     ((return (expression vec2 sin (var_ref angle)))))\n"
1110    "\n"
1111    "   (signature vec3\n"
1112    "     (parameters\n"
1113    "       (declare (in) vec3 angle))\n"
1114    "     ((return (expression vec3 sin (var_ref angle)))))\n"
1115    "\n"
1116    "   (signature vec4\n"
1117    "     (parameters\n"
1118    "       (declare (in) vec4 angle))\n"
1119    "     ((return (expression vec4 sin (var_ref angle)))))\n"
1120    "))\n"
1121 };
1122
1123 static const char *builtins_110_smoothstep = {
1124    "((function smoothstep\n"
1125    "   (signature float\n"
1126    "     (parameters\n"
1127    "       (declare (in) float edge0)\n"
1128    "       (declare (in) float edge1)\n"
1129    "       (declare (in) float x))\n"
1130    "     ((declare () float t)\n"
1131    "\n"
1132    "      (assign (constant bool (1)) (var_ref t)\n"
1133    "              (expression float max\n"
1134    "                      (expression float min\n"
1135    "                                  (expression float / (expression float - (var_ref x) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1136    "                                  (constant float (1.0)))\n"
1137    "                      (constant float (0.0))))\n"
1138    "      (return (expression float * (var_ref t) (expression float * (var_ref t) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (var_ref t))))))))\n"
1139    "\n"
1140    "   (signature vec2\n"
1141    "     (parameters\n"
1142    "       (declare (in) float edge0)\n"
1143    "       (declare (in) float edge1)\n"
1144    "       (declare (in) vec2 x))\n"
1145    "     ((declare () vec2 t)\n"
1146    "      (declare () vec2 retval)\n"
1147    "\n"
1148    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
1149    "              (expression float max\n"
1150    "                      (expression float min\n"
1151    "                                  (expression float / (expression float - (swiz x (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1152    "                                  (constant float (1.0)))\n"
1153    "                      (constant float (0.0))))\n"
1154    "      (assign (constant bool (1)) (swiz x (var_ref retval)) (expression float * (swiz x (var_ref t)) (expression float * (swiz x (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz x (var_ref t)))))))\n"
1155    "\n"
1156    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
1157    "              (expression float max\n"
1158    "                      (expression float min\n"
1159    "                                  (expression float / (expression float - (swiz y (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1160    "                                  (constant float (1.0)))\n"
1161    "                      (constant float (0.0))))\n"
1162    "      (assign (constant bool (1)) (swiz y (var_ref retval)) (expression float * (swiz y (var_ref t)) (expression float * (swiz y (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz y (var_ref t)))))))\n"
1163    "      (return (var_ref retval))\n"
1164    "      ))\n"
1165    "\n"
1166    "   (signature vec3\n"
1167    "     (parameters\n"
1168    "       (declare (in) float edge0)\n"
1169    "       (declare (in) float edge1)\n"
1170    "       (declare (in) vec3 x))\n"
1171    "     ((declare () vec3 t)\n"
1172    "      (declare () vec3 retval)\n"
1173    "\n"
1174    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
1175    "              (expression float max\n"
1176    "                      (expression float min\n"
1177    "                                  (expression float / (expression float - (swiz x (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1178    "                                  (constant float (1.0)))\n"
1179    "                      (constant float (0.0))))\n"
1180    "      (assign (constant bool (1)) (swiz x (var_ref retval)) (expression float * (swiz x (var_ref t)) (expression float * (swiz x (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz x (var_ref t)))))))\n"
1181    "\n"
1182    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
1183    "              (expression float max\n"
1184    "                      (expression float min\n"
1185    "                                  (expression float / (expression float - (swiz y (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1186    "                                  (constant float (1.0)))\n"
1187    "                      (constant float (0.0))))\n"
1188    "      (assign (constant bool (1)) (swiz y (var_ref retval)) (expression float * (swiz y (var_ref t)) (expression float * (swiz y (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz y (var_ref t)))))))\n"
1189    "\n"
1190    "      (assign (constant bool (1)) (swiz z (var_ref t))\n"
1191    "              (expression float max\n"
1192    "                      (expression float min\n"
1193    "                                  (expression float / (expression float - (swiz z (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1194    "                                  (constant float (1.0)))\n"
1195    "                      (constant float (0.0))))\n"
1196    "      (assign (constant bool (1)) (swiz z (var_ref retval)) (expression float * (swiz z (var_ref t)) (expression float * (swiz z (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz z (var_ref t)))))))\n"
1197    "      (return (var_ref retval))\n"
1198    "      ))\n"
1199    "\n"
1200    "\n"
1201    "   (signature vec4\n"
1202    "     (parameters\n"
1203    "       (declare (in) float edge0)\n"
1204    "       (declare (in) float edge1)\n"
1205    "       (declare (in) vec4 x))\n"
1206    "     ((declare () vec4 t)\n"
1207    "      (declare () vec4 retval)\n"
1208    "\n"
1209    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
1210    "              (expression float max\n"
1211    "                      (expression float min\n"
1212    "                                  (expression float / (expression float - (swiz x (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1213    "                                  (constant float (1.0)))\n"
1214    "                      (constant float (0.0))))\n"
1215    "      (assign (constant bool (1)) (swiz x (var_ref retval)) (expression float * (swiz x (var_ref t)) (expression float * (swiz x (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz x (var_ref t)))))))\n"
1216    "\n"
1217    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
1218    "              (expression float max\n"
1219    "                      (expression float min\n"
1220    "                                  (expression float / (expression float - (swiz y (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1221    "                                  (constant float (1.0)))\n"
1222    "                      (constant float (0.0))))\n"
1223    "      (assign (constant bool (1)) (swiz y (var_ref retval)) (expression float * (swiz y (var_ref t)) (expression float * (swiz y (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz y (var_ref t)))))))\n"
1224    "\n"
1225    "      (assign (constant bool (1)) (swiz z (var_ref t))\n"
1226    "              (expression float max\n"
1227    "                      (expression float min\n"
1228    "                                  (expression float / (expression float - (swiz z (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1229    "                                  (constant float (1.0)))\n"
1230    "                      (constant float (0.0))))\n"
1231    "      (assign (constant bool (1)) (swiz z (var_ref retval)) (expression float * (swiz z (var_ref t)) (expression float * (swiz z (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz z (var_ref t)))))))\n"
1232    "\n"
1233    "      (assign (constant bool (1)) (swiz w (var_ref t))\n"
1234    "              (expression float max\n"
1235    "                      (expression float min\n"
1236    "                                  (expression float / (expression float - (swiz w (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1237    "                                  (constant float (1.0)))\n"
1238    "                      (constant float (0.0))))\n"
1239    "      (assign (constant bool (1)) (swiz w (var_ref retval)) (expression float * (swiz w (var_ref t)) (expression float * (swiz w (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz w (var_ref t)))))))\n"
1240    "      (return (var_ref retval))\n"
1241    "      ))\n"
1242    "\n"
1243    "   (signature vec2\n"
1244    "     (parameters\n"
1245    "       (declare (in) vec2 edge0)\n"
1246    "       (declare (in) vec2 edge1)\n"
1247    "       (declare (in) vec2 x))\n"
1248    "     ((declare () vec2 t)\n"
1249    "      (declare () vec2 retval)\n"
1250    "\n"
1251    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
1252    "              (expression float max\n"
1253    "                      (expression float min\n"
1254    "                                  (expression float / (expression float - (swiz x (var_ref x)) (swiz x (var_ref edge0))) (expression float - (swiz x (var_ref edge1)) (swiz x (var_ref edge0))))\n"
1255    "                                  (constant float (1.0)))\n"
1256    "                      (constant float (0.0))))\n"
1257    "      (assign (constant bool (1)) (swiz x (var_ref retval)) (expression float * (swiz x (var_ref t)) (expression float * (swiz x (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz x (var_ref t)))))))\n"
1258    "\n"
1259    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
1260    "              (expression float max\n"
1261    "                      (expression float min\n"
1262    "                                  (expression float / (expression float - (swiz y (var_ref x)) (swiz y (var_ref edge0))) (expression float - (swiz y (var_ref edge1)) (swiz y (var_ref edge0))))\n"
1263    "                                  (constant float (1.0)))\n"
1264    "                      (constant float (0.0))))\n"
1265    "      (assign (constant bool (1)) (swiz y (var_ref retval)) (expression float * (swiz y (var_ref t)) (expression float * (swiz y (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz y (var_ref t)))))))\n"
1266    "      (return (var_ref retval))\n"
1267    "      ))\n"
1268    "\n"
1269    "   (signature vec3\n"
1270    "     (parameters\n"
1271    "       (declare (in) vec3 edge0)\n"
1272    "       (declare (in) vec3 edge1)\n"
1273    "       (declare (in) vec3 x))\n"
1274    "     ((declare () vec3 t)\n"
1275    "      (declare () vec3 retval)\n"
1276    "\n"
1277    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
1278    "              (expression float max\n"
1279    "                      (expression float min\n"
1280    "                                  (expression float / (expression float - (swiz x (var_ref x)) (swiz x (var_ref edge0))) (expression float - (swiz x (var_ref edge1)) (swiz x (var_ref edge0))))\n"
1281    "                                  (constant float (1.0)))\n"
1282    "                      (constant float (0.0))))\n"
1283    "      (assign (constant bool (1)) (swiz x (var_ref retval)) (expression float * (swiz x (var_ref t)) (expression float * (swiz x (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz x (var_ref t)))))))\n"
1284    "\n"
1285    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
1286    "              (expression float max\n"
1287    "                      (expression float min\n"
1288    "                                  (expression float / (expression float - (swiz y (var_ref x)) (swiz y (var_ref edge0))) (expression float - (swiz y (var_ref edge1)) (swiz y (var_ref edge0))))\n"
1289    "                                  (constant float (1.0)))\n"
1290    "                      (constant float (0.0))))\n"
1291    "      (assign (constant bool (1)) (swiz y (var_ref retval)) (expression float * (swiz y (var_ref t)) (expression float * (swiz y (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz y (var_ref t)))))))\n"
1292    "\n"
1293    "      (assign (constant bool (1)) (swiz z (var_ref t))\n"
1294    "              (expression float max\n"
1295    "                      (expression float min\n"
1296    "                                  (expression float / (expression float - (swiz z (var_ref x)) (swiz z (var_ref edge0))) (expression float - (swiz z (var_ref edge1)) (swiz z (var_ref edge0))))\n"
1297    "                                  (constant float (1.0)))\n"
1298    "                      (constant float (0.0))))\n"
1299    "      (assign (constant bool (1)) (swiz z (var_ref retval)) (expression float * (swiz z (var_ref t)) (expression float * (swiz z (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz z (var_ref t)))))))\n"
1300    "      (return (var_ref retval))\n"
1301    "      ))\n"
1302    "\n"
1303    "\n"
1304    "   (signature vec4\n"
1305    "     (parameters\n"
1306    "       (declare (in) vec4 edge0)\n"
1307    "       (declare (in) vec4 edge1)\n"
1308    "       (declare (in) vec4 x))\n"
1309    "     ((declare () vec4 t)\n"
1310    "      (declare () vec4 retval)\n"
1311    "\n"
1312    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
1313    "              (expression float max\n"
1314    "                      (expression float min\n"
1315    "                                  (expression float / (expression float - (swiz x (var_ref x)) (swiz x (var_ref edge0))) (expression float - (swiz x (var_ref edge1)) (swiz x (var_ref edge0))))\n"
1316    "                                  (constant float (1.0)))\n"
1317    "                      (constant float (0.0))))\n"
1318    "      (assign (constant bool (1)) (swiz x (var_ref retval)) (expression float * (swiz x (var_ref t)) (expression float * (swiz x (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz x (var_ref t)))))))\n"
1319    "\n"
1320    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
1321    "              (expression float max\n"
1322    "                      (expression float min\n"
1323    "                                  (expression float / (expression float - (swiz y (var_ref x)) (swiz y (var_ref edge0))) (expression float - (swiz y (var_ref edge1)) (swiz y (var_ref edge0))))\n"
1324    "                                  (constant float (1.0)))\n"
1325    "                      (constant float (0.0))))\n"
1326    "      (assign (constant bool (1)) (swiz y (var_ref retval)) (expression float * (swiz y (var_ref t)) (expression float * (swiz y (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz y (var_ref t)))))))\n"
1327    "\n"
1328    "      (assign (constant bool (1)) (swiz z (var_ref t))\n"
1329    "              (expression float max\n"
1330    "                      (expression float min\n"
1331    "                                  (expression float / (expression float - (swiz z (var_ref x)) (swiz z (var_ref edge0))) (expression float - (swiz z (var_ref edge1)) (swiz z (var_ref edge0))))\n"
1332    "                                  (constant float (1.0)))\n"
1333    "                      (constant float (0.0))))\n"
1334    "      (assign (constant bool (1)) (swiz z (var_ref retval)) (expression float * (swiz z (var_ref t)) (expression float * (swiz z (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz z (var_ref t)))))))\n"
1335    "\n"
1336    "      (assign (constant bool (1)) (swiz w (var_ref t))\n"
1337    "              (expression float max\n"
1338    "                      (expression float min\n"
1339    "                                  (expression float / (expression float - (swiz w (var_ref x)) (swiz w (var_ref edge0))) (expression float - (swiz w (var_ref edge1)) (swiz w (var_ref edge0))))\n"
1340    "                                  (constant float (1.0)))\n"
1341    "                      (constant float (0.0))))\n"
1342    "      (assign (constant bool (1)) (swiz w (var_ref retval)) (expression float * (swiz w (var_ref t)) (expression float * (swiz w (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz w (var_ref t)))))))\n"
1343    "      (return (var_ref retval))\n"
1344    "      ))\n"
1345    "\n"
1346    "))\n"
1347    "\n"
1348 };
1349
1350 static const char *builtins_110_sqrt = {
1351    "((function sqrt\n"
1352    "   (signature float\n"
1353    "     (parameters\n"
1354    "       (declare (in) float arg0))\n"
1355    "     ((return (expression float sqrt (var_ref arg0)))))\n"
1356    "\n"
1357    "   (signature vec2\n"
1358    "     (parameters\n"
1359    "       (declare (in) vec2 arg0))\n"
1360    "     ((return (expression vec2 sqrt (var_ref arg0)))))\n"
1361    "\n"
1362    "   (signature vec3\n"
1363    "     (parameters\n"
1364    "       (declare (in) vec3 arg0))\n"
1365    "     ((return (expression vec3 sqrt (var_ref arg0)))))\n"
1366    "\n"
1367    "   (signature vec4\n"
1368    "     (parameters\n"
1369    "       (declare (in) vec4 arg0))\n"
1370    "     ((return (expression vec4 sqrt (var_ref arg0)))))\n"
1371    "))\n"
1372 };
1373
1374 static const char *builtins_110_step = {
1375    "((function step\n"
1376    "   (signature float\n"
1377    "     (parameters\n"
1378    "       (declare (in) float edge)\n"
1379    "       (declare (in) float x))\n"
1380    "     ((return (expression float b2f (expression bool < (var_ref x) (var_ref edge))))))\n"
1381    "\n"
1382    "   (signature vec2\n"
1383    "     (parameters\n"
1384    "       (declare (in) float edge)\n"
1385    "       (declare (in) vec2 x))\n"
1386    "     ((declare () vec2 t)\n"
1387    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float b2f (expression bool < (swiz x (var_ref x))(var_ref edge))))\n"
1388    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float b2f (expression bool < (swiz y (var_ref x))(var_ref edge))))\n"
1389    "      (return (var_ref t))))\n"
1390    "\n"
1391    "   (signature vec3\n"
1392    "     (parameters\n"
1393    "       (declare (in) float edge)\n"
1394    "       (declare (in) vec3 x))\n"
1395    "     ((declare () vec3 t)\n"
1396    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float b2f (expression bool < (swiz x (var_ref x))(var_ref edge))))\n"
1397    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float b2f (expression bool < (swiz y (var_ref x))(var_ref edge))))\n"
1398    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression float b2f (expression bool < (swiz z (var_ref x))(var_ref edge))))\n"
1399    "      (return (var_ref t))))\n"
1400    "\n"
1401    "   (signature vec4\n"
1402    "     (parameters\n"
1403    "       (declare (in) float edge)\n"
1404    "       (declare (in) vec4 x))\n"
1405    "     ((declare () vec4 t)\n"
1406    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float b2f (expression bool < (swiz x (var_ref x))(var_ref edge))))\n"
1407    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float b2f (expression bool < (swiz y (var_ref x))(var_ref edge))))\n"
1408    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression float b2f (expression bool < (swiz z (var_ref x))(var_ref edge))))\n"
1409    "      (assign (constant bool (1)) (swiz w (var_ref t)) (expression float b2f (expression bool < (swiz w (var_ref x))(var_ref edge))))\n"
1410    "      (return (var_ref t))))\n"
1411    "\n"
1412    "   (signature vec2\n"
1413    "     (parameters\n"
1414    "       (declare (in) vec2 edge)\n"
1415    "       (declare (in) vec2 x))\n"
1416    "     ((declare () vec2 t)\n"
1417    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float b2f (expression bool < (swiz x (var_ref x))(swiz x (var_ref edge)))))\n"
1418    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float b2f (expression bool < (swiz y (var_ref x))(swiz y (var_ref edge)))))\n"
1419    "      (return (var_ref t))))\n"
1420    "\n"
1421    "   (signature vec3\n"
1422    "     (parameters\n"
1423    "       (declare (in) vec3 edge)\n"
1424    "       (declare (in) vec3 x))\n"
1425    "     ((declare () vec3 t)\n"
1426    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float b2f (expression bool < (swiz x (var_ref x))(swiz x (var_ref edge)))))\n"
1427    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float b2f (expression bool < (swiz y (var_ref x))(swiz y (var_ref edge)))))\n"
1428    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression float b2f (expression bool < (swiz z (var_ref x))(swiz z (var_ref edge)))))\n"
1429    "      (return (var_ref t))))\n"
1430    "\n"
1431    "   (signature vec4\n"
1432    "     (parameters\n"
1433    "       (declare (in) vec4 edge)\n"
1434    "       (declare (in) vec4 x))\n"
1435    "     ((declare () vec4 t)\n"
1436    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float b2f (expression bool < (swiz x (var_ref x))(swiz x (var_ref edge)))))\n"
1437    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float b2f (expression bool < (swiz y (var_ref x))(swiz y (var_ref edge)))))\n"
1438    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression float b2f (expression bool < (swiz y (var_ref x))(swiz z (var_ref edge)))))\n"
1439    "      (assign (constant bool (1)) (swiz w (var_ref t)) (expression float b2f (expression bool < (swiz w (var_ref x))(swiz w (var_ref edge)))))\n"
1440    "      (return (var_ref t))))\n"
1441    "))\n"
1442    "\n"
1443 };
1444
1445 static const char *builtins_110_tan = {
1446    "((function tan\n"
1447    "   (signature float\n"
1448    "     (parameters\n"
1449    "       (declare (in) float angle))\n"
1450    "     ((return (expression float / (expression float sin (var_ref angle)) (expression float cos (var_ref angle))))))\n"
1451    "\n"
1452    "   (signature vec2\n"
1453    "     (parameters\n"
1454    "       (declare (in) vec2 angle))\n"
1455    "     ((return (expression float / (expression float sin (var_ref angle)) (expression vec2 cos (var_ref angle))))))\n"
1456    "\n"
1457    "   (signature vec3\n"
1458    "     (parameters\n"
1459    "       (declare (in) vec3 angle))\n"
1460    "     ((return (expression float / (expression float sin (var_ref angle)) (expression vec3 cos (var_ref angle))))))\n"
1461    "\n"
1462    "   (signature vec4\n"
1463    "     (parameters\n"
1464    "       (declare (in) vec4 angle))\n"
1465    "     ((return (expression float / (expression float sin (var_ref angle)) (expression vec4 cos (var_ref angle))))))\n"
1466    "))\n"
1467 };
1468
1469 static const char *functions_for_110 [] = {
1470    builtins_110_abs,
1471    builtins_110_all,
1472    builtins_110_any,
1473    builtins_110_ceil,
1474    builtins_110_clamp,
1475    builtins_110_cos,
1476    builtins_110_cross,
1477    builtins_110_degrees,
1478    builtins_110_dot,
1479    builtins_110_equal,
1480    builtins_110_exp,
1481    builtins_110_exp2,
1482    builtins_110_floor,
1483    builtins_110_fract,
1484    builtins_110_greaterThan,
1485    builtins_110_greaterThanEqual,
1486    builtins_110_inversesqrt,
1487    builtins_110_length,
1488    builtins_110_lessThan,
1489    builtins_110_lessThanEqual,
1490    builtins_110_log,
1491    builtins_110_log2,
1492    builtins_110_max,
1493    builtins_110_min,
1494    builtins_110_mix,
1495    builtins_110_mod,
1496    builtins_110_normalize,
1497    builtins_110_not,
1498    builtins_110_notEqual,
1499    builtins_110_pow,
1500    builtins_110_radians,
1501    builtins_110_sign,
1502    builtins_110_sin,
1503    builtins_110_smoothstep,
1504    builtins_110_sqrt,
1505    builtins_110_step,
1506    builtins_110_tan,
1507 };
1508
1509 /* Version 130 builtins */
1510
1511 static const char *builtins_130_equal = {
1512    "((function equal\n"
1513    "   (signature bvec2\n"
1514    "     (parameters\n"
1515    "       (declare (in) uvec2 arg0)\n"
1516    "       (declare (in) uvec2 arg1))\n"
1517    "     ((declare () bvec2 temp)\n"
1518    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1519    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1520    "      (return (var_ref temp))))\n"
1521    "\n"
1522    "   (signature bvec3\n"
1523    "     (parameters\n"
1524    "       (declare (in) uvec3 arg0)\n"
1525    "       (declare (in) uvec3 arg1))\n"
1526    "     ((declare () bvec3 temp)\n"
1527    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1528    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1529    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool == (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1530    "      (return (var_ref temp))))\n"
1531    "\n"
1532    "   (signature bvec4\n"
1533    "     (parameters\n"
1534    "       (declare (in) uvec4 arg0)\n"
1535    "       (declare (in) uvec4 arg1))\n"
1536    "     ((declare () bvec4 temp)\n"
1537    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1538    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1539    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool == (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1540    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool == (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
1541    "      (return (var_ref temp))))\n"
1542    "))\n"
1543 };
1544
1545 static const char *builtins_130_greaterThan = {
1546    "((function greaterThan\n"
1547    "   (signature bvec2\n"
1548    "     (parameters\n"
1549    "       (declare (in) uvec2 arg0)\n"
1550    "       (declare (in) uvec2 arg1))\n"
1551    "     ((declare () bvec2 temp)\n"
1552    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1553    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1554    "      (return (var_ref temp))))\n"
1555    "\n"
1556    "   (signature bvec3\n"
1557    "     (parameters\n"
1558    "       (declare (in) uvec3 arg0)\n"
1559    "       (declare (in) uvec3 arg1))\n"
1560    "     ((declare () bvec3 temp)\n"
1561    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1562    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1563    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool > (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1564    "      (return (var_ref temp))))\n"
1565    "\n"
1566    "   (signature bvec4\n"
1567    "     (parameters\n"
1568    "       (declare (in) uvec4 arg0)\n"
1569    "       (declare (in) uvec4 arg1))\n"
1570    "     ((declare () bvec4 temp)\n"
1571    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1572    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1573    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool > (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1574    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool > (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
1575    "      (return (var_ref temp))))\n"
1576    "))\n"
1577 };
1578
1579 static const char *builtins_130_greaterThanEqual = {
1580    "((function greaterThanEqual\n"
1581    "   (signature bvec2\n"
1582    "     (parameters\n"
1583    "       (declare (in) uvec2 arg0)\n"
1584    "       (declare (in) uvec2 arg1))\n"
1585    "     ((declare () bvec2 temp)\n"
1586    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1587    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1588    "      (return (var_ref temp))))\n"
1589    "\n"
1590    "   (signature bvec3\n"
1591    "     (parameters\n"
1592    "       (declare (in) uvec3 arg0)\n"
1593    "       (declare (in) uvec3 arg1))\n"
1594    "     ((declare () bvec3 temp)\n"
1595    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1596    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1597    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool >= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1598    "      (return (var_ref temp))))\n"
1599    "\n"
1600    "   (signature bvec4\n"
1601    "     (parameters\n"
1602    "       (declare (in) uvec4 arg0)\n"
1603    "       (declare (in) uvec4 arg1))\n"
1604    "     ((declare () bvec4 temp)\n"
1605    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1606    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1607    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool >= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1608    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool >= (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
1609    "      (return (var_ref temp))))\n"
1610    "))\n"
1611 };
1612
1613 static const char *builtins_130_lessThan = {
1614    "((function lessThan\n"
1615    "   (signature bvec2\n"
1616    "     (parameters\n"
1617    "       (declare (in) uvec2 arg0)\n"
1618    "       (declare (in) uvec2 arg1))\n"
1619    "     ((declare () bvec2 temp)\n"
1620    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1621    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1622    "      (return (var_ref temp))))\n"
1623    "\n"
1624    "   (signature bvec3\n"
1625    "     (parameters\n"
1626    "       (declare (in) uvec3 arg0)\n"
1627    "       (declare (in) uvec3 arg1))\n"
1628    "     ((declare () bvec3 temp)\n"
1629    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1630    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1631    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool < (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1632    "      (return (var_ref temp))))\n"
1633    "\n"
1634    "   (signature bvec4\n"
1635    "     (parameters\n"
1636    "       (declare (in) uvec4 arg0)\n"
1637    "       (declare (in) uvec4 arg1))\n"
1638    "     ((declare () bvec4 temp)\n"
1639    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1640    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1641    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool < (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1642    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool < (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
1643    "      (return (var_ref temp))))\n"
1644    "))\n"
1645 };
1646
1647 static const char *builtins_130_lessThanEqual = {
1648    "((function lessThanEqual\n"
1649    "   (signature bvec2\n"
1650    "     (parameters\n"
1651    "       (declare (in) uvec2 arg0)\n"
1652    "       (declare (in) uvec2 arg1))\n"
1653    "     ((declare () bvec2 temp)\n"
1654    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1655    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1656    "      (return (var_ref temp))))\n"
1657    "\n"
1658    "   (signature bvec3\n"
1659    "     (parameters\n"
1660    "       (declare (in) uvec3 arg0)\n"
1661    "       (declare (in) uvec3 arg1))\n"
1662    "     ((declare () bvec3 temp)\n"
1663    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1664    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1665    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool <= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1666    "      (return (var_ref temp))))\n"
1667    "\n"
1668    "   (signature bvec4\n"
1669    "     (parameters\n"
1670    "       (declare (in) uvec4 arg0)\n"
1671    "       (declare (in) uvec4 arg1))\n"
1672    "     ((declare () bvec4 temp)\n"
1673    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1674    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1675    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool <= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1676    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool <= (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
1677    "      (return (var_ref temp))))\n"
1678    "))\n"
1679 };
1680
1681 static const char *builtins_130_notEqual = {
1682    "((function notEqual\n"
1683    "   (signature bvec2\n"
1684    "     (parameters\n"
1685    "       (declare (in) uvec2 arg0)\n"
1686    "       (declare (in) uvec2 arg1))\n"
1687    "     ((declare () bvec2 temp)\n"
1688    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1689    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1690    "      (return (var_ref temp))))\n"
1691    "\n"
1692    "   (signature bvec3\n"
1693    "     (parameters\n"
1694    "       (declare (in) uvec3 arg0)\n"
1695    "       (declare (in) uvec3 arg1))\n"
1696    "     ((declare () bvec3 temp)\n"
1697    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1698    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1699    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool != (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1700    "      (return (var_ref temp))))\n"
1701    "\n"
1702    "   (signature bvec4\n"
1703    "     (parameters\n"
1704    "       (declare (in) uvec4 arg0)\n"
1705    "       (declare (in) uvec4 arg1))\n"
1706    "     ((declare () bvec4 temp)\n"
1707    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1708    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1709    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool != (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1710    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool != (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
1711    "      (return (var_ref temp))))\n"
1712    "))\n"
1713 };
1714
1715 static const char *builtins_130_sign = {
1716    "((function sign\n"
1717    "   (signature int\n"
1718    "     (parameters\n"
1719    "       (declare (in) int x))\n"
1720    "     ((return (expression int / (var_ref x) (expression int abs (var_ref x))))))\n"
1721    "\n"
1722    "   (signature ivec2\n"
1723    "     (parameters\n"
1724    "       (declare (in) ivec2 x))\n"
1725    "     ((declare () ivec2 t)\n"
1726    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression int sign (swiz x (var_ref x))))\n"
1727    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression int sign (swiz y (var_ref x))))\n"
1728    "      (return (var_ref t))))\n"
1729    "\n"
1730    "   (signature ivec3\n"
1731    "     (parameters\n"
1732    "       (declare (in) ivec3 x))\n"
1733    "     ((declare () ivec3 t)\n"
1734    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression int sign (swiz x (var_ref x))))\n"
1735    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression int sign (swiz y (var_ref x))))\n"
1736    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression int sign (swiz z (var_ref x))))\n"
1737    "      (return (var_ref t))))\n"
1738    "\n"
1739    "   (signature ivec4\n"
1740    "     (parameters\n"
1741    "       (declare (in) ivec4 x))\n"
1742    "     ((declare () ivec4 t)\n"
1743    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression int sign (swiz x (var_ref x))))\n"
1744    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression int sign (swiz y (var_ref x))))\n"
1745    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression int sign (swiz z (var_ref x))))\n"
1746    "      (assign (constant bool (1)) (swiz w (var_ref t)) (expression int sign (swiz w (var_ref x))))\n"
1747    "      (return (var_ref t))))\n"
1748    "))\n"
1749    "\n"
1750 };
1751
1752 static const char *functions_for_130 [] = {
1753    builtins_130_equal,
1754    builtins_130_greaterThan,
1755    builtins_130_greaterThanEqual,
1756    builtins_130_lessThan,
1757    builtins_130_lessThanEqual,
1758    builtins_130_notEqual,
1759    builtins_130_sign,
1760 };
1761
1762 void
1763 _mesa_glsl_initialize_functions(exec_list *instructions,
1764                                 struct _mesa_glsl_parse_state *state)
1765 {
1766    if (state->language_version >= 110)
1767       read_builtins(state, instructions, functions_for_110,
1768                     sizeof(functions_for_110) / sizeof(const char *));
1769
1770    if (state->language_version >= 130)
1771       read_builtins(state, instructions, functions_for_130,
1772                     sizeof(functions_for_130) / sizeof(const char *));
1773
1774 }