d248388a1ab39a27c2a8d99d1bcc90617915a990
[platform/upstream/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 /* 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_asin = {
111    "((function asin\n"
112    "   (signature float\n"
113    "     (parameters\n"
114    "       (declare (in) float x))\n"
115    "     ((return (expression float *\n"
116    "                   (expression float -\n"
117    "            (expression float *\n"
118    "             (constant float (3.1415926))\n"
119    "             (constant float (0.5)))\n"
120    "            (expression float sqrt\n"
121    "             (expression float -\n"
122    "              (constant float (1.0))\n"
123    "              (expression float abs (var_ref x)))))\n"
124    "                   (expression float +\n"
125    "                    (constant float (1.5707288))\n"
126    "            (expression float *\n"
127    "                     (expression float abs (var_ref x))\n"
128    "                     (expression float +\n"
129    "              (constant float (-0.2121144))\n"
130    "                      (expression float *\n"
131    "                       (constant float (0.0742610))\n"
132    "               (expression float abs (var_ref x))))))))))\n"
133    "\n"
134    "   (signature vec2\n"
135    "     (parameters\n"
136    "       (declare (in) vec2 x))\n"
137    "     ((return (expression vec2 *\n"
138    "                   (expression float -\n"
139    "            (expression float *\n"
140    "             (constant float (3.1415926))\n"
141    "             (constant float (0.5)))\n"
142    "            (expression vec2 sqrt\n"
143    "             (expression vec2 -\n"
144    "              (constant float (1.0))\n"
145    "              (expression vec2 abs (var_ref x)))))\n"
146    "                   (expression vec2 +\n"
147    "                    (constant float (1.5707288))\n"
148    "            (expression vec2 *\n"
149    "                     (expression vec2 abs (var_ref x))\n"
150    "                     (expression vec2 +\n"
151    "              (constant float (-0.2121144))\n"
152    "                      (expression vec2 *\n"
153    "                       (constant float (0.0742610))\n"
154    "               (expression vec2 abs (var_ref x))))))))))\n"
155    "\n"
156    "   (signature vec3\n"
157    "     (parameters\n"
158    "       (declare (in) vec3 x))\n"
159    "     ((return (expression vec3 *\n"
160    "                   (expression vec3 -\n"
161    "            (expression float *\n"
162    "             (constant float (3.1415926))\n"
163    "             (constant float (0.5)))\n"
164    "            (expression vec3 sqrt\n"
165    "             (expression vec3 -\n"
166    "              (constant float (1.0))\n"
167    "              (expression vec3 abs (var_ref x)))))\n"
168    "                   (expression vec3 +\n"
169    "                    (constant float (1.5707288))\n"
170    "            (expression vec3 *\n"
171    "                     (expression vec3 abs (var_ref x))\n"
172    "                     (expression vec3 +\n"
173    "              (constant float (-0.2121144))\n"
174    "                      (expression vec3 *\n"
175    "                       (constant float (0.0742610))\n"
176    "               (expression vec3 abs (var_ref x))))))))))\n"
177    "\n"
178    "   (signature vec4\n"
179    "     (parameters\n"
180    "       (declare (in) vec4 x))\n"
181    "     ((return (expression vec4 *\n"
182    "                   (expression vec4 -\n"
183    "            (expression float *\n"
184    "             (constant float (3.1415926))\n"
185    "             (constant float (0.5)))\n"
186    "            (expression vec4 sqrt\n"
187    "             (expression vec4 -\n"
188    "              (constant float (1.0))\n"
189    "              (expression vec4 abs (var_ref x)))))\n"
190    "                   (expression vec4 +\n"
191    "                    (constant float (1.5707288))\n"
192    "            (expression vec4 *\n"
193    "                     (expression vec4 abs (var_ref x))\n"
194    "                     (expression vec4 +\n"
195    "              (constant float (-0.2121144))\n"
196    "                      (expression vec4 *\n"
197    "                       (constant float (0.0742610))\n"
198    "               (expression vec4 abs (var_ref x))))))))))\n"
199    ")\n"
200    "\n"
201    " (function acos\n"
202    "   (signature float\n"
203    "     (parameters\n"
204    "       (declare (in) float x))\n"
205    "     ((return (expression float - (constant float (1.5707963))\n"
206    "                                  (call asin ((var_ref x)))))))\n"
207    "   (signature vec2\n"
208    "     (parameters\n"
209    "       (declare (in) vec2 x))\n"
210    "     ((return (expression vec2 - (constant float (1.5707963))\n"
211    "                                 (call asin ((var_ref x)))))))\n"
212    "   (signature vec3\n"
213    "     (parameters\n"
214    "       (declare (in) vec3 x))\n"
215    "     ((return (expression vec3 - (constant float (1.5707963))\n"
216    "                                 (call asin ((var_ref x)))))))\n"
217    "   (signature vec4\n"
218    "     (parameters\n"
219    "       (declare (in) vec4 x))\n"
220    "     ((return (expression vec4 - (constant float (1.5707963))\n"
221    "                                 (call asin ((var_ref x)))))))\n"
222    "))\n"
223 };
224
225 static const char *builtins_110_atan = {
226    "((function atan\n"
227    "   (signature float\n"
228    "     (parameters\n"
229    "       (declare (in) float x))\n"
230    "     ((return (call asin ((expression float *\n"
231    "                       (var_ref x)\n"
232    "                       (expression float rsq\n"
233    "                        (expression float +\n"
234    "                         (expression float *\n"
235    "                          (var_ref x)\n"
236    "                          (var_ref x))\n"
237    "                         (constant float (1.0))))))))))\n"
238    "\n"
239    "   (signature vec2\n"
240    "     (parameters\n"
241    "       (declare (in) vec2 y_over_x))\n"
242    "     ((return (call asin ((expression vec2 *\n"
243    "                       (var_ref y_over_x)\n"
244    "                       (expression vec2 rsq\n"
245    "                        (expression vec2 +\n"
246    "                         (expression vec2 *\n"
247    "                          (var_ref y_over_x)\n"
248    "                          (var_ref y_over_x))\n"
249    "                         (constant float (1.0))))))))))\n"
250    "\n"
251    "   (signature vec3\n"
252    "     (parameters\n"
253    "       (declare (in) vec3 y_over_x))\n"
254    "     ((return (call asin ((expression vec3 *\n"
255    "                       (var_ref y_over_x)\n"
256    "                       (expression vec3 rsq\n"
257    "                        (expression vec3 +\n"
258    "                         (expression vec3 *\n"
259    "                          (var_ref y_over_x)\n"
260    "                          (var_ref y_over_x))\n"
261    "                         (constant float (1.0))))))))))\n"
262    "\n"
263    "   (signature vec4\n"
264    "     (parameters\n"
265    "       (declare (in) vec4 y_over_x))\n"
266    "     ((return (call asin ((expression vec4 *\n"
267    "                       (var_ref y_over_x)\n"
268    "                       (expression vec4 rsq\n"
269    "                        (expression vec4 +\n"
270    "                         (expression vec4 *\n"
271    "                          (var_ref y_over_x)\n"
272    "                          (var_ref y_over_x))\n"
273    "                         (constant float (1.0))))))))))\n"
274    "\n"
275    "   (signature float\n"
276    "     (parameters\n"
277    "       (declare (in) float y)\n"
278    "       (declare (in) float x))\n"
279    "     ((declare () float r)\n"
280    "      (if (expression bool >\n"
281    "       (expression float abs (var_ref x))\n"
282    "       (constant float (.0001)))\n"
283    "       ((assign (constant bool (1))\n"
284    "     (var_ref r) (call atan ((expression float /\n"
285    "                              (var_ref y)\n"
286    "                              (var_ref x)))))\n"
287    "    (if (expression bool <\n"
288    "         (var_ref x)\n"
289    "         (constant float (0.0)))\n"
290    "     ((assign (constant bool (1))\n"
291    "       (var_ref r)\n"
292    "       (expression float +\n"
293    "        (var_ref r)\n"
294    "        (expression float *\n"
295    "         (expression int sign (var_ref y))\n"
296    "         (constant float (3.1415926))))))\n"
297    "     ()))\n"
298    "       ())\n"
299    "      (return (var_ref r))))\n"
300    "\n"
301    "   (signature vec2\n"
302    "     (parameters\n"
303    "       (declare (in) vec2 y)\n"
304    "       (declare (in) vec2 x))\n"
305    "     ((declare () vec2 r)\n"
306    "      (if (expression bool >\n"
307    "       (expression vec2 abs (var_ref x))\n"
308    "       (constant float (.0001)))\n"
309    "       ((assign (constant bool (1))\n"
310    "     (var_ref r) (call atan ((expression vec2 /\n"
311    "                              (var_ref y)\n"
312    "                              (var_ref x)))))\n"
313    "    (if (expression bool <\n"
314    "         (var_ref x)\n"
315    "         (constant float (0.0)))\n"
316    "     ((assign (constant bool (1))\n"
317    "       (var_ref r)\n"
318    "       (expression vec2 +\n"
319    "        (var_ref r)\n"
320    "        (expression vec2 *\n"
321    "         (expression int sign (var_ref y))\n"
322    "         (constant float (3.1415926))))))\n"
323    "     ()))\n"
324    "       ())\n"
325    "      (return (var_ref r))))\n"
326    "\n"
327    "   (signature vec3\n"
328    "     (parameters\n"
329    "       (declare (in) vec3 y)\n"
330    "       (declare (in) vec3 x))\n"
331    "     ((declare () vec3 r)\n"
332    "      (if (expression bool >\n"
333    "       (expression vec3 abs (var_ref x))\n"
334    "       (constant float (.0001)))\n"
335    "       ((assign (constant bool (1))\n"
336    "     (var_ref r) (call atan ((expression vec3 /\n"
337    "                              (var_ref y)\n"
338    "                              (var_ref x)))))\n"
339    "    (if (expression bool <\n"
340    "         (var_ref x)\n"
341    "         (constant float (0.0)))\n"
342    "     ((assign (constant bool (1))\n"
343    "       (var_ref r)\n"
344    "       (expression vec3 +\n"
345    "        (var_ref r)\n"
346    "        (expression vec3 *\n"
347    "         (expression int sign (var_ref y))\n"
348    "         (constant float (3.1415926))))))\n"
349    "     ()))\n"
350    "       ())\n"
351    "      (return (var_ref r))))\n"
352    "\n"
353    "   (signature vec4\n"
354    "     (parameters\n"
355    "       (declare (in) vec4 y)\n"
356    "       (declare (in) vec4 x))\n"
357    "     ((declare () vec4 r)\n"
358    "      (if (expression bool >\n"
359    "       (expression vec4 abs (var_ref x))\n"
360    "       (constant float (.0001)))\n"
361    "       ((assign (constant bool (1))\n"
362    "     (var_ref r) (call atan ((expression vec4 /\n"
363    "                              (var_ref y)\n"
364    "                              (var_ref x)))))\n"
365    "    (if (expression bool <\n"
366    "         (var_ref x)\n"
367    "         (constant float (0.0)))\n"
368    "     ((assign (constant bool (1))\n"
369    "       (var_ref r)\n"
370    "       (expression vec4 +\n"
371    "        (var_ref r)\n"
372    "        (expression vec4 *\n"
373    "         (expression int sign (var_ref y))\n"
374    "         (constant float (3.1415926))))))\n"
375    "     ()))\n"
376    "       ())\n"
377    "      (return (var_ref r))))\n"
378    "\n"
379    "))\n"
380 };
381
382 static const char *builtins_110_ceil = {
383    "((function ceil\n"
384    "   (signature float\n"
385    "     (parameters\n"
386    "       (declare (in) float arg0))\n"
387    "     ((return (expression float ceil (var_ref arg0)))))\n"
388    "\n"
389    "   (signature vec2\n"
390    "     (parameters\n"
391    "       (declare (in) vec2 arg0))\n"
392    "     ((return (expression vec2 ceil (var_ref arg0)))))\n"
393    "\n"
394    "   (signature vec3\n"
395    "     (parameters\n"
396    "       (declare (in) vec3 arg0))\n"
397    "     ((return (expression vec3 ceil (var_ref arg0)))))\n"
398    "\n"
399    "   (signature vec4\n"
400    "     (parameters\n"
401    "       (declare (in) vec4 arg0))\n"
402    "     ((return (expression vec4 ceil (var_ref arg0)))))\n"
403    "))\n"
404 };
405
406 static const char *builtins_110_clamp = {
407    "((function clamp\n"
408    "   (signature float\n"
409    "     (parameters\n"
410    "       (declare (in) float arg0)\n"
411    "       (declare (in) float arg1)\n"
412    "       (declare (in) float arg2))\n"
413    "     ((return (expression float max (expression float min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
414    "\n"
415    "   (signature vec2\n"
416    "     (parameters\n"
417    "       (declare (in) vec2 arg0)\n"
418    "       (declare (in) vec2 arg1)\n"
419    "       (declare (in) vec2 arg2))\n"
420    "     ((return (expression vec2 max (expression vec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
421    "\n"
422    "   (signature vec3\n"
423    "     (parameters\n"
424    "       (declare (in) vec3 arg0)\n"
425    "       (declare (in) vec3 arg1)\n"
426    "       (declare (in) vec3 arg2))\n"
427    "     ((return (expression vec3 max (expression vec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
428    "\n"
429    "   (signature vec4\n"
430    "     (parameters\n"
431    "       (declare (in) vec4 arg0)\n"
432    "       (declare (in) vec4 arg1)\n"
433    "       (declare (in) vec4 arg2))\n"
434    "     ((return (expression vec4 max (expression vec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
435    "\n"
436    "   (signature vec2\n"
437    "     (parameters\n"
438    "       (declare (in) vec2  arg0)\n"
439    "       (declare (in) float arg1)\n"
440    "       (declare (in) float arg2))\n"
441    "     ((declare () vec2 result)\n"
442    "      (assign (constant bool (1)) (swiz x (var_ref result)) (expression vec4 max (expression vec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
443    "      (assign (constant bool (1)) (swiz y (var_ref result)) (expression vec4 max (expression vec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
444    "      (return (var_ref result))))\n"
445    "\n"
446    "   (signature vec3\n"
447    "     (parameters\n"
448    "       (declare (in) vec3  arg0)\n"
449    "       (declare (in) float arg1)\n"
450    "       (declare (in) float arg2))\n"
451    "     ((declare () vec3 result)\n"
452    "      (assign (constant bool (1)) (swiz x (var_ref result)) (expression vec4 max (expression vec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
453    "      (assign (constant bool (1)) (swiz y (var_ref result)) (expression vec4 max (expression vec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
454    "      (assign (constant bool (1)) (swiz z (var_ref result)) (expression vec4 max (expression vec4 min (swiz z (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
455    "      (return (var_ref result))))\n"
456    "\n"
457    "   (signature vec4\n"
458    "     (parameters\n"
459    "       (declare (in) vec4  arg0)\n"
460    "       (declare (in) float arg1)\n"
461    "       (declare (in) float arg2))\n"
462    "     ((declare () vec4 result)\n"
463    "      (assign (constant bool (1)) (swiz x (var_ref result)) (expression vec4 max (expression vec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
464    "      (assign (constant bool (1)) (swiz y (var_ref result)) (expression vec4 max (expression vec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
465    "      (assign (constant bool (1)) (swiz z (var_ref result)) (expression vec4 max (expression vec4 min (swiz z (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
466    "      (assign (constant bool (1)) (swiz w (var_ref result)) (expression vec4 max (expression vec4 min (swiz w (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
467    "      (return (var_ref result))))\n"
468    "))\n"
469 };
470
471 static const char *builtins_110_cos = {
472    "((function cos\n"
473    "   (signature float\n"
474    "     (parameters\n"
475    "       (declare (in) float angle))\n"
476    "     ((return (expression float cos (var_ref angle)))))\n"
477    "\n"
478    "   (signature vec2\n"
479    "     (parameters\n"
480    "       (declare (in) vec2 angle))\n"
481    "     ((return (expression vec2 cos (var_ref angle)))))\n"
482    "\n"
483    "   (signature vec3\n"
484    "     (parameters\n"
485    "       (declare (in) vec3 angle))\n"
486    "     ((return (expression vec3 cos (var_ref angle)))))\n"
487    "\n"
488    "   (signature vec4\n"
489    "     (parameters\n"
490    "       (declare (in) vec4 angle))\n"
491    "     ((return (expression vec4 cos (var_ref angle)))))\n"
492    "))\n"
493 };
494
495 static const char *builtins_110_cross = {
496    "((function cross\n"
497    "   (signature vec3\n"
498    "     (parameters\n"
499    "       (declare (in) vec3 arg0)\n"
500    "       (declare (in) vec3 arg1))\n"
501    "     ((declare () vec3 t)\n"
502    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
503    "              (expression float - (expression float * (swiz y (var_ref arg0)) (swiz z (var_ref arg1)))\n"
504    "                              (expression float * (swiz y (var_ref arg1)) (swiz z (var_ref arg0)))))\n"
505    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
506    "              (expression float - (expression float * (swiz z (var_ref arg0)) (swiz x (var_ref arg1)))\n"
507    "                              (expression float * (swiz z (var_ref arg1)) (swiz x (var_ref arg0)))))\n"
508    "      (assign (constant bool (1)) (swiz z (var_ref t))\n"
509    "              (expression float - (expression float * (swiz x (var_ref arg0)) (swiz y (var_ref arg1)))\n"
510    "                              (expression float * (swiz x (var_ref arg1)) (swiz y (var_ref arg0)))))\n"
511    "      (return (var_ref t))))\n"
512    "))\n"
513 };
514
515 static const char *builtins_110_degrees = {
516    "((function degrees\n"
517    "   (signature float\n"
518    "     (parameters\n"
519    "       (declare (in) float arg0))\n"
520    "     ((return (expression float * (var_ref arg0) (constant float (57.295780))))))\n"
521    "\n"
522    "   (signature vec2\n"
523    "     (parameters\n"
524    "       (declare (in) vec2 arg0))\n"
525    "     ((return (expression vec2 * (var_ref arg0) (constant float (57.295780))))))\n"
526    "\n"
527    "   (signature vec3\n"
528    "     (parameters\n"
529    "       (declare (in) vec3 arg0))\n"
530    "     ((return (expression vec3 * (var_ref arg0) (constant float (57.295780))))))\n"
531    "\n"
532    "   (signature vec4\n"
533    "     (parameters\n"
534    "       (declare (in) vec4 arg0))\n"
535    "     ((return (expression vec4 * (var_ref arg0) (constant float (57.295780))))))\n"
536    "))\n"
537 };
538
539 static const char *builtins_110_distance = {
540    "((function distance\n"
541    "   (signature float\n"
542    "     (parameters\n"
543    "       (declare (in) float p0)\n"
544    "       (declare (in) float p1))\n"
545    "     ((declare () float p)\n"
546    "      (assign (constant bool (1)) (var_ref p) (expression float - (var_ref p0) (var_ref p1)))\n"
547    "      (return (expression float sqrt (expression float dot (var_ref p) (var_ref p))))))\n"
548    "\n"
549    "   (signature float\n"
550    "     (parameters\n"
551    "       (declare (in) vec2 p0)\n"
552    "       (declare (in) vec2 p1))\n"
553    "     ((declare () vec2 p)\n"
554    "      (assign (constant bool (1)) (var_ref p) (expression vec2 - (var_ref p0) (var_ref p1)))\n"
555    "      (return (expression float sqrt (expression float dot (var_ref p) (var_ref p))))))\n"
556    "\n"
557    "   (signature float\n"
558    "     (parameters\n"
559    "       (declare (in) vec3 p0)\n"
560    "       (declare (in) vec3 p1))\n"
561    "     ((declare () vec3 p)\n"
562    "      (assign (constant bool (1)) (var_ref p) (expression vec3 - (var_ref p0) (var_ref p1)))\n"
563    "      (return (expression float sqrt (expression float dot (var_ref p) (var_ref p))))))\n"
564    "\n"
565    "   (signature float\n"
566    "     (parameters\n"
567    "       (declare (in) vec4 p0)\n"
568    "       (declare (in) vec4 p1))\n"
569    "     ((declare () vec4 p)\n"
570    "      (assign (constant bool (1)) (var_ref p) (expression vec4 - (var_ref p0) (var_ref p1)))\n"
571    "      (return (expression float sqrt (expression float dot (var_ref p) (var_ref p))))))\n"
572    "))\n"
573 };
574
575 static const char *builtins_110_dot = {
576    "((function dot\n"
577    "   (signature float\n"
578    "     (parameters\n"
579    "       (declare (in) float arg0)\n"
580    "       (declare (in) float arg1))\n"
581    "     ((return (expression float dot (var_ref arg0) (var_ref arg1)))))\n"
582    "\n"
583    "   (signature float\n"
584    "     (parameters\n"
585    "       (declare (in) vec2 arg0)\n"
586    "       (declare (in) vec2 arg1))\n"
587    "     ((return (expression float dot (var_ref arg0) (var_ref arg1)))))\n"
588    "\n"
589    "   (signature float\n"
590    "     (parameters\n"
591    "       (declare (in) vec3 arg0)\n"
592    "       (declare (in) vec3 arg1))\n"
593    "     ((return (expression float dot (var_ref arg0) (var_ref arg1)))))\n"
594    "\n"
595    "   (signature float\n"
596    "     (parameters\n"
597    "       (declare (in) vec4 arg0)\n"
598    "       (declare (in) vec4 arg1))\n"
599    "     ((return (expression float dot (var_ref arg0) (var_ref arg1)))))\n"
600    "))\n"
601 };
602
603 static const char *builtins_110_equal = {
604    "((function equal\n"
605    "   (signature bvec2\n"
606    "     (parameters\n"
607    "       (declare (in) vec2 arg0)\n"
608    "       (declare (in) vec2 arg1))\n"
609    "     ((declare () bvec2 temp)\n"
610    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
611    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
612    "      (return (var_ref temp))))\n"
613    "\n"
614    "   (signature bvec3\n"
615    "     (parameters\n"
616    "       (declare (in) vec3 arg0)\n"
617    "       (declare (in) vec3 arg1))\n"
618    "     ((declare () bvec3 temp)\n"
619    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
620    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
621    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool == (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
622    "      (return (var_ref temp))))\n"
623    "\n"
624    "   (signature bvec4\n"
625    "     (parameters\n"
626    "       (declare (in) vec4 arg0)\n"
627    "       (declare (in) vec4 arg1))\n"
628    "     ((declare () bvec4 temp)\n"
629    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
630    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
631    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool == (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
632    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool == (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
633    "      (return (var_ref temp))))\n"
634    "\n"
635    "   (signature bvec2\n"
636    "     (parameters\n"
637    "       (declare (in) ivec2 arg0)\n"
638    "       (declare (in) ivec2 arg1))\n"
639    "     ((declare () bvec2 temp)\n"
640    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
641    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
642    "      (return (var_ref temp))))\n"
643    "\n"
644    "   (signature bvec3\n"
645    "     (parameters\n"
646    "       (declare (in) ivec3 arg0)\n"
647    "       (declare (in) ivec3 arg1))\n"
648    "     ((declare () bvec3 temp)\n"
649    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
650    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
651    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool == (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
652    "      (return (var_ref temp))))\n"
653    "\n"
654    "   (signature bvec4\n"
655    "     (parameters\n"
656    "       (declare (in) ivec4 arg0)\n"
657    "       (declare (in) ivec4 arg1))\n"
658    "     ((declare () bvec4 temp)\n"
659    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
660    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
661    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool == (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
662    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool == (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
663    "      (return (var_ref temp))))\n"
664    "))\n"
665 };
666
667 static const char *builtins_110_exp = {
668    "((function exp\n"
669    "   (signature float\n"
670    "     (parameters\n"
671    "       (declare (in) float arg0))\n"
672    "     ((return (expression float exp (var_ref arg0)))))\n"
673    "\n"
674    "   (signature vec2\n"
675    "     (parameters\n"
676    "       (declare (in) vec2 arg0))\n"
677    "     ((return (expression vec2 exp (var_ref arg0)))))\n"
678    "\n"
679    "   (signature vec3\n"
680    "     (parameters\n"
681    "       (declare (in) vec3 arg0))\n"
682    "     ((return (expression vec3 exp (var_ref arg0)))))\n"
683    "\n"
684    "   (signature vec4\n"
685    "     (parameters\n"
686    "       (declare (in) vec4 arg0))\n"
687    "     ((return (expression vec4 exp (var_ref arg0)))))\n"
688    "))\n"
689 };
690
691 static const char *builtins_110_exp2 = {
692    "((function exp2\n"
693    "   (signature float\n"
694    "     (parameters\n"
695    "       (declare (in) float arg0))\n"
696    "     ((return (expression float exp2 (var_ref arg0)))))\n"
697    "\n"
698    "   (signature vec2\n"
699    "     (parameters\n"
700    "       (declare (in) vec2 arg0))\n"
701    "     ((return (expression vec2 exp2 (var_ref arg0)))))\n"
702    "\n"
703    "   (signature vec3\n"
704    "     (parameters\n"
705    "       (declare (in) vec3 arg0))\n"
706    "     ((return (expression vec3 exp2 (var_ref arg0)))))\n"
707    "\n"
708    "   (signature vec4\n"
709    "     (parameters\n"
710    "       (declare (in) vec4 arg0))\n"
711    "     ((return (expression vec4 exp2 (var_ref arg0)))))\n"
712    "))\n"
713 };
714
715 static const char *builtins_110_faceforward = {
716    "((function faceforward\n"
717    "   (signature float\n"
718    "     (parameters\n"
719    "       (declare (in) float N)\n"
720    "       (declare (in) float I)\n"
721    "       (declare (in) float Nref))\n"
722    "     ((if (expression bool < (expression float dot (var_ref Nref) (var_ref I)) (constant float (0)))\n"
723    "          ((return (var_ref N)))\n"
724    "      ((return (expression float neg (var_ref N)))))))\n"
725    "\n"
726    "   (signature vec2\n"
727    "     (parameters\n"
728    "       (declare (in) vec2 N)\n"
729    "       (declare (in) vec2 I)\n"
730    "       (declare (in) vec2 Nref))\n"
731    "     ((if (expression bool < (expression float dot (var_ref Nref) (var_ref I)) (constant float (0)))\n"
732    "          ((return (var_ref N)))\n"
733    "      ((return (expression vec2 neg (var_ref N)))))))\n"
734    "\n"
735    "   (signature vec3\n"
736    "     (parameters\n"
737    "       (declare (in) vec3 N)\n"
738    "       (declare (in) vec3 I)\n"
739    "       (declare (in) vec3 Nref))\n"
740    "     ((if (expression bool < (expression float dot (var_ref Nref) (var_ref I)) (constant float (0)))\n"
741    "          ((return (var_ref N)))\n"
742    "      ((return (expression vec3 neg (var_ref N)))))))\n"
743    "\n"
744    "   (signature vec4\n"
745    "     (parameters\n"
746    "       (declare (in) vec4 N)\n"
747    "       (declare (in) vec4 I)\n"
748    "       (declare (in) vec4 Nref))\n"
749    "     ((if (expression bool < (expression float dot (var_ref Nref) (var_ref I)) (constant float (0)))\n"
750    "          ((return (var_ref N)))\n"
751    "      ((return (expression vec4 neg (var_ref N)))))))\n"
752    "))\n"
753 };
754
755 static const char *builtins_110_floor = {
756    "((function floor\n"
757    "   (signature float\n"
758    "     (parameters\n"
759    "       (declare (in) float arg0))\n"
760    "     ((return (expression float floor (var_ref arg0)))))\n"
761    "\n"
762    "   (signature vec2\n"
763    "     (parameters\n"
764    "       (declare (in) vec2 arg0))\n"
765    "     ((return (expression vec2 floor (var_ref arg0)))))\n"
766    "\n"
767    "   (signature vec3\n"
768    "     (parameters\n"
769    "       (declare (in) vec3 arg0))\n"
770    "     ((return (expression vec3 floor (var_ref arg0)))))\n"
771    "\n"
772    "   (signature vec4\n"
773    "     (parameters\n"
774    "       (declare (in) vec4 arg0))\n"
775    "     ((return (expression vec4 floor (var_ref arg0)))))\n"
776    "))\n"
777 };
778
779 static const char *builtins_110_fract = {
780    "((function fract\n"
781    "   (signature float\n"
782    "     (parameters\n"
783    "       (declare (in) float x))\n"
784    "     ((return (expression float - (var_ref x) (expression float floor (var_ref x))))))\n"
785    "\n"
786    "   (signature vec2\n"
787    "     (parameters\n"
788    "       (declare (in) vec2 x))\n"
789    "     ((declare () vec2 t)\n"
790    "      (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"
791    "      (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"
792    "      (return (var_ref t))))\n"
793    "\n"
794    "   (signature vec3\n"
795    "     (parameters\n"
796    "       (declare (in) vec3 x))\n"
797    "     ((declare () vec3 t)\n"
798    "      (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"
799    "      (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"
800    "      (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"
801    "      (return (var_ref t))))\n"
802    "\n"
803    "   (signature vec4\n"
804    "     (parameters\n"
805    "       (declare (in) vec4 x))\n"
806    "     ((declare () vec4 t)\n"
807    "      (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"
808    "      (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"
809    "      (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"
810    "      (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"
811    "      (return (var_ref t))))\n"
812    "))\n"
813    "\n"
814 };
815
816 static const char *builtins_110_greaterThan = {
817    "((function greaterThan\n"
818    "   (signature bvec2\n"
819    "     (parameters\n"
820    "       (declare (in) vec2 arg0)\n"
821    "       (declare (in) vec2 arg1))\n"
822    "     ((declare () bvec2 temp)\n"
823    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
824    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
825    "      (return (var_ref temp))))\n"
826    "\n"
827    "   (signature bvec3\n"
828    "     (parameters\n"
829    "       (declare (in) vec3 arg0)\n"
830    "       (declare (in) vec3 arg1))\n"
831    "     ((declare () bvec3 temp)\n"
832    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
833    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
834    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool > (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
835    "      (return (var_ref temp))))\n"
836    "\n"
837    "   (signature bvec4\n"
838    "     (parameters\n"
839    "       (declare (in) vec4 arg0)\n"
840    "       (declare (in) vec4 arg1))\n"
841    "     ((declare () bvec4 temp)\n"
842    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
843    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
844    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool > (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
845    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool > (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
846    "      (return (var_ref temp))))\n"
847    "\n"
848    "   (signature bvec2\n"
849    "     (parameters\n"
850    "       (declare (in) ivec2 arg0)\n"
851    "       (declare (in) ivec2 arg1))\n"
852    "     ((declare () bvec2 temp)\n"
853    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
854    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
855    "      (return (var_ref temp))))\n"
856    "\n"
857    "   (signature bvec3\n"
858    "     (parameters\n"
859    "       (declare (in) ivec3 arg0)\n"
860    "       (declare (in) ivec3 arg1))\n"
861    "     ((declare () bvec3 temp)\n"
862    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
863    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
864    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool > (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
865    "      (return (var_ref temp))))\n"
866    "\n"
867    "   (signature bvec4\n"
868    "     (parameters\n"
869    "       (declare (in) ivec4 arg0)\n"
870    "       (declare (in) ivec4 arg1))\n"
871    "     ((declare () bvec4 temp)\n"
872    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
873    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
874    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool > (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
875    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool > (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
876    "      (return (var_ref temp))))\n"
877    "))\n"
878 };
879
880 static const char *builtins_110_greaterThanEqual = {
881    "((function greaterThanEqual\n"
882    "   (signature bvec2\n"
883    "     (parameters\n"
884    "       (declare (in) vec2 arg0)\n"
885    "       (declare (in) vec2 arg1))\n"
886    "     ((declare () bvec2 temp)\n"
887    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
888    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
889    "      (return (var_ref temp))))\n"
890    "\n"
891    "   (signature bvec3\n"
892    "     (parameters\n"
893    "       (declare (in) vec3 arg0)\n"
894    "       (declare (in) vec3 arg1))\n"
895    "     ((declare () bvec3 temp)\n"
896    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
897    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
898    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool >= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
899    "      (return (var_ref temp))))\n"
900    "\n"
901    "   (signature bvec4\n"
902    "     (parameters\n"
903    "       (declare (in) vec4 arg0)\n"
904    "       (declare (in) vec4 arg1))\n"
905    "     ((declare () bvec4 temp)\n"
906    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
907    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
908    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool >= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
909    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool >= (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
910    "      (return (var_ref temp))))\n"
911    "\n"
912    "   (signature bvec2\n"
913    "     (parameters\n"
914    "       (declare (in) ivec2 arg0)\n"
915    "       (declare (in) ivec2 arg1))\n"
916    "     ((declare () bvec2 temp)\n"
917    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
918    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
919    "      (return (var_ref temp))))\n"
920    "\n"
921    "   (signature bvec3\n"
922    "     (parameters\n"
923    "       (declare (in) ivec3 arg0)\n"
924    "       (declare (in) ivec3 arg1))\n"
925    "     ((declare () bvec3 temp)\n"
926    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
927    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
928    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool >= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
929    "      (return (var_ref temp))))\n"
930    "\n"
931    "   (signature bvec4\n"
932    "     (parameters\n"
933    "       (declare (in) ivec4 arg0)\n"
934    "       (declare (in) ivec4 arg1))\n"
935    "     ((declare () bvec4 temp)\n"
936    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
937    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
938    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool >= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
939    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool >= (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
940    "      (return (var_ref temp))))\n"
941    "))\n"
942 };
943
944 static const char *builtins_110_inversesqrt = {
945    "((function inversesqrt\n"
946    "   (signature float\n"
947    "     (parameters\n"
948    "       (declare (in) float arg0))\n"
949    "     ((return (expression float rsq (var_ref arg0)))))\n"
950    "\n"
951    "   (signature vec2\n"
952    "     (parameters\n"
953    "       (declare (in) vec2 arg0))\n"
954    "     ((return (expression vec2 rsq (var_ref arg0)))))\n"
955    "\n"
956    "   (signature vec3\n"
957    "     (parameters\n"
958    "       (declare (in) vec3 arg0))\n"
959    "     ((return (expression vec3 rsq (var_ref arg0)))))\n"
960    "\n"
961    "   (signature vec4\n"
962    "     (parameters\n"
963    "       (declare (in) vec4 arg0))\n"
964    "     ((return (expression vec4 rsq (var_ref arg0)))))\n"
965    "))\n"
966 };
967
968 static const char *builtins_110_length = {
969    "((function length\n"
970    "   (signature float\n"
971    "     (parameters\n"
972    "       (declare (in) float arg0))\n"
973    "     ((return (expression float sqrt (expression float dot (var_ref arg0) (var_ref arg0))))))\n"
974    "\n"
975    "   (signature float\n"
976    "     (parameters\n"
977    "       (declare (in) vec2 arg0))\n"
978    "     ((return (expression float sqrt (expression float dot (var_ref arg0) (var_ref arg0))))))\n"
979    "\n"
980    "   (signature float\n"
981    "     (parameters\n"
982    "       (declare (in) vec3 arg0))\n"
983    "     ((return (expression float sqrt (expression float dot (var_ref arg0) (var_ref arg0))))))\n"
984    "\n"
985    "   (signature float\n"
986    "     (parameters\n"
987    "       (declare (in) vec4 arg0))\n"
988    "     ((return (expression float sqrt (expression float dot (var_ref arg0) (var_ref arg0))))))\n"
989    "))\n"
990 };
991
992 static const char *builtins_110_lessThan = {
993    "((function lessThan\n"
994    "   (signature bvec2\n"
995    "     (parameters\n"
996    "       (declare (in) vec2 arg0)\n"
997    "       (declare (in) vec2 arg1))\n"
998    "     ((declare () bvec2 temp)\n"
999    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1000    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1001    "      (return (var_ref temp))))\n"
1002    "\n"
1003    "   (signature bvec3\n"
1004    "     (parameters\n"
1005    "       (declare (in) vec3 arg0)\n"
1006    "       (declare (in) vec3 arg1))\n"
1007    "     ((declare () bvec3 temp)\n"
1008    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1009    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1010    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool < (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1011    "      (return (var_ref temp))))\n"
1012    "\n"
1013    "   (signature bvec4\n"
1014    "     (parameters\n"
1015    "       (declare (in) vec4 arg0)\n"
1016    "       (declare (in) vec4 arg1))\n"
1017    "     ((declare () bvec4 temp)\n"
1018    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1019    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1020    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool < (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1021    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool < (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
1022    "      (return (var_ref temp))))\n"
1023    "\n"
1024    "   (signature bvec2\n"
1025    "     (parameters\n"
1026    "       (declare (in) ivec2 arg0)\n"
1027    "       (declare (in) ivec2 arg1))\n"
1028    "     ((declare () bvec2 temp)\n"
1029    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1030    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1031    "      (return (var_ref temp))))\n"
1032    "\n"
1033    "   (signature bvec3\n"
1034    "     (parameters\n"
1035    "       (declare (in) ivec3 arg0)\n"
1036    "       (declare (in) ivec3 arg1))\n"
1037    "     ((declare () bvec3 temp)\n"
1038    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1039    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1040    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool < (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1041    "      (return (var_ref temp))))\n"
1042    "\n"
1043    "   (signature bvec4\n"
1044    "     (parameters\n"
1045    "       (declare (in) ivec4 arg0)\n"
1046    "       (declare (in) ivec4 arg1))\n"
1047    "     ((declare () bvec4 temp)\n"
1048    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1049    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1050    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool < (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1051    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool < (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
1052    "      (return (var_ref temp))))\n"
1053    "))\n"
1054 };
1055
1056 static const char *builtins_110_lessThanEqual = {
1057    "((function lessThanEqual\n"
1058    "   (signature bvec2\n"
1059    "     (parameters\n"
1060    "       (declare (in) vec2 arg0)\n"
1061    "       (declare (in) vec2 arg1))\n"
1062    "     ((declare () bvec2 temp)\n"
1063    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1064    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1065    "      (return (var_ref temp))))\n"
1066    "\n"
1067    "   (signature bvec3\n"
1068    "     (parameters\n"
1069    "       (declare (in) vec3 arg0)\n"
1070    "       (declare (in) vec3 arg1))\n"
1071    "     ((declare () bvec3 temp)\n"
1072    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1073    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1074    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool <= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1075    "      (return (var_ref temp))))\n"
1076    "\n"
1077    "   (signature bvec4\n"
1078    "     (parameters\n"
1079    "       (declare (in) vec4 arg0)\n"
1080    "       (declare (in) vec4 arg1))\n"
1081    "     ((declare () bvec4 temp)\n"
1082    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1083    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1084    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool <= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1085    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool <= (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
1086    "      (return (var_ref temp))))\n"
1087    "\n"
1088    "   (signature bvec2\n"
1089    "     (parameters\n"
1090    "       (declare (in) ivec2 arg0)\n"
1091    "       (declare (in) ivec2 arg1))\n"
1092    "     ((declare () bvec2 temp)\n"
1093    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1094    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1095    "      (return (var_ref temp))))\n"
1096    "\n"
1097    "   (signature bvec3\n"
1098    "     (parameters\n"
1099    "       (declare (in) ivec3 arg0)\n"
1100    "       (declare (in) ivec3 arg1))\n"
1101    "     ((declare () bvec3 temp)\n"
1102    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1103    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1104    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool <= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1105    "      (return (var_ref temp))))\n"
1106    "\n"
1107    "   (signature bvec4\n"
1108    "     (parameters\n"
1109    "       (declare (in) ivec4 arg0)\n"
1110    "       (declare (in) ivec4 arg1))\n"
1111    "     ((declare () bvec4 temp)\n"
1112    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1113    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1114    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool <= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1115    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool <= (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
1116    "      (return (var_ref temp))))\n"
1117    "))\n"
1118 };
1119
1120 static const char *builtins_110_log = {
1121    "((function log\n"
1122    "   (signature float\n"
1123    "     (parameters\n"
1124    "       (declare (in) float arg0))\n"
1125    "     ((return (expression float log (var_ref arg0)))))\n"
1126    "\n"
1127    "   (signature vec2\n"
1128    "     (parameters\n"
1129    "       (declare (in) vec2 arg0))\n"
1130    "     ((return (expression vec2 log (var_ref arg0)))))\n"
1131    "\n"
1132    "   (signature vec3\n"
1133    "     (parameters\n"
1134    "       (declare (in) vec3 arg0))\n"
1135    "     ((return (expression vec3 log (var_ref arg0)))))\n"
1136    "\n"
1137    "   (signature vec4\n"
1138    "     (parameters\n"
1139    "       (declare (in) vec4 arg0))\n"
1140    "     ((return (expression vec4 log (var_ref arg0)))))\n"
1141    "))\n"
1142 };
1143
1144 static const char *builtins_110_log2 = {
1145    "((function log2\n"
1146    "   (signature float\n"
1147    "     (parameters\n"
1148    "       (declare (in) float arg0))\n"
1149    "     ((return (expression float log2 (var_ref arg0)))))\n"
1150    "\n"
1151    "   (signature vec2\n"
1152    "     (parameters\n"
1153    "       (declare (in) vec2 arg0))\n"
1154    "     ((return (expression vec2 log2 (var_ref arg0)))))\n"
1155    "\n"
1156    "   (signature vec3\n"
1157    "     (parameters\n"
1158    "       (declare (in) vec3 arg0))\n"
1159    "     ((return (expression vec3 log2 (var_ref arg0)))))\n"
1160    "\n"
1161    "   (signature vec4\n"
1162    "     (parameters\n"
1163    "       (declare (in) vec4 arg0))\n"
1164    "     ((return (expression vec4 log2 (var_ref arg0)))))\n"
1165    "))\n"
1166 };
1167
1168 static const char *builtins_110_matrixCompMult = {
1169    "((function matrixCompMult\n"
1170    "   (signature mat2\n"
1171    "     (parameters\n"
1172    "       (declare (in) mat2 x)\n"
1173    "       (declare (in) mat2 y))\n"
1174    "     ((declare () mat2 z)\n"
1175    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (0)))  (expression vec2 * (array_ref (var_ref x) (constant int (0))) (array_ref (var_ref y) (constant int (0))))) \n"
1176    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (1)))  (expression vec2 * (array_ref (var_ref x) (constant int (1))) (array_ref (var_ref y) (constant int (1))))) \n"
1177    "(return (var_ref z))))\n"
1178    "\n"
1179    "   (signature mat3\n"
1180    "     (parameters\n"
1181    "       (declare (in) mat3 x)\n"
1182    "       (declare (in) mat3 y))\n"
1183    "     ((declare () mat3 z)\n"
1184    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (0)))  (expression vec3 * (array_ref (var_ref x) (constant int (0))) (array_ref (var_ref y) (constant int (0))))) \n"
1185    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (1)))  (expression vec3 * (array_ref (var_ref x) (constant int (1))) (array_ref (var_ref y) (constant int (1))))) \n"
1186    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (2)))  (expression vec3 * (array_ref (var_ref x) (constant int (2))) (array_ref (var_ref y) (constant int (2))))) \n"
1187    "(return (var_ref z))))\n"
1188    "\n"
1189    "   (signature mat4\n"
1190    "     (parameters\n"
1191    "       (declare (in) mat4 x)\n"
1192    "       (declare (in) mat4 y))\n"
1193    "     ((declare () mat4 z)\n"
1194    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (0)))  (expression vec4 * (array_ref (var_ref x) (constant int (0))) (array_ref (var_ref y) (constant int (0))))) \n"
1195    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (1)))  (expression vec4 * (array_ref (var_ref x) (constant int (1))) (array_ref (var_ref y) (constant int (1))))) \n"
1196    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (2)))  (expression vec4 * (array_ref (var_ref x) (constant int (2))) (array_ref (var_ref y) (constant int (2))))) \n"
1197    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (3)))  (expression vec4 * (array_ref (var_ref x) (constant int (3))) (array_ref (var_ref y) (constant int (3))))) \n"
1198    "(return (var_ref z))))\n"
1199    "))\n"
1200    "\n"
1201 };
1202
1203 static const char *builtins_110_max = {
1204    "((function max\n"
1205    "   (signature float\n"
1206    "     (parameters\n"
1207    "       (declare (in) float arg0)\n"
1208    "       (declare (in) float arg1))\n"
1209    "     ((return (expression float max (var_ref arg0) (var_ref arg1)))))\n"
1210    "\n"
1211    "   (signature vec2\n"
1212    "     (parameters\n"
1213    "       (declare (in) vec2 arg0)\n"
1214    "       (declare (in) vec2 arg1))\n"
1215    "     ((return (expression vec2 max (var_ref arg0) (var_ref arg1)))))\n"
1216    "\n"
1217    "   (signature vec3\n"
1218    "     (parameters\n"
1219    "       (declare (in) vec3 arg0)\n"
1220    "       (declare (in) vec3 arg1))\n"
1221    "     ((return (expression vec3 max (var_ref arg0) (var_ref arg1)))))\n"
1222    "\n"
1223    "   (signature vec4\n"
1224    "     (parameters\n"
1225    "       (declare (in) vec4 arg0)\n"
1226    "       (declare (in) vec4 arg1))\n"
1227    "     ((return (expression vec4 max (var_ref arg0) (var_ref arg1)))))\n"
1228    "\n"
1229    "   (signature vec2\n"
1230    "     (parameters\n"
1231    "       (declare (in) vec2  arg0)\n"
1232    "       (declare (in) float arg1))\n"
1233    "     ((declare () vec2 result)\n"
1234    "      (assign (constant bool (1))   (swiz x (var_ref result))\n"
1235    "              (expression float max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
1236    "      (assign (constant bool (1))   (swiz y (var_ref result))\n"
1237    "              (expression float max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
1238    "      (return (var_ref result))))\n"
1239    "\n"
1240    "   (signature vec3\n"
1241    "     (parameters\n"
1242    "       (declare (in) vec3  arg0)\n"
1243    "       (declare (in) float arg1))\n"
1244    "     ((declare () vec3 result)\n"
1245    "      (assign (constant bool (1))   (swiz x (var_ref result))\n"
1246    "              (expression float max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
1247    "      (assign (constant bool (1))   (swiz y (var_ref result))\n"
1248    "              (expression float max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
1249    "      (assign (constant bool (1))   (swiz z (var_ref result))\n"
1250    "              (expression float max (swiz z (var_ref arg0)) (var_ref arg1)))\n"
1251    "      (return (var_ref result))))\n"
1252    "\n"
1253    "   (signature vec4\n"
1254    "     (parameters\n"
1255    "       (declare (in) vec4  arg0)\n"
1256    "       (declare (in) float arg1))\n"
1257    "     ((declare () vec4 result)\n"
1258    "      (assign (constant bool (1))   (swiz x (var_ref result))\n"
1259    "              (expression float max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
1260    "      (assign (constant bool (1))   (swiz y (var_ref result))\n"
1261    "              (expression float max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
1262    "      (assign (constant bool (1))   (swiz z (var_ref result))\n"
1263    "              (expression float max (swiz z (var_ref arg0)) (var_ref arg1)))\n"
1264    "      (assign (constant bool (1))   (swiz w (var_ref result))\n"
1265    "              (expression float max (swiz w (var_ref arg0)) (var_ref arg1)))\n"
1266    "      (return (var_ref result))))\n"
1267    "))\n"
1268 };
1269
1270 static const char *builtins_110_min = {
1271    "((function min\n"
1272    "   (signature float\n"
1273    "     (parameters\n"
1274    "       (declare (in) float arg0)\n"
1275    "       (declare (in) float arg1))\n"
1276    "     ((return (expression float min (var_ref arg0) (var_ref arg1)))))\n"
1277    "\n"
1278    "   (signature vec2\n"
1279    "     (parameters\n"
1280    "       (declare (in) vec2 arg0)\n"
1281    "       (declare (in) vec2 arg1))\n"
1282    "     ((return (expression vec2 min (var_ref arg0) (var_ref arg1)))))\n"
1283    "\n"
1284    "   (signature vec3\n"
1285    "     (parameters\n"
1286    "       (declare (in) vec3 arg0)\n"
1287    "       (declare (in) vec3 arg1))\n"
1288    "     ((return (expression vec3 min (var_ref arg0) (var_ref arg1)))))\n"
1289    "\n"
1290    "   (signature vec4\n"
1291    "     (parameters\n"
1292    "       (declare (in) vec4 arg0)\n"
1293    "       (declare (in) vec4 arg1))\n"
1294    "     ((return (expression vec4 min (var_ref arg0) (var_ref arg1)))))\n"
1295    "\n"
1296    "   (signature vec2\n"
1297    "     (parameters\n"
1298    "       (declare (in) vec2  arg0)\n"
1299    "       (declare (in) float arg1))\n"
1300    "     ((declare () vec2 result)\n"
1301    "      (assign (constant bool (1))   (swiz x (var_ref result))\n"
1302    "              (expression float min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
1303    "      (assign (constant bool (1))   (swiz y (var_ref result))\n"
1304    "              (expression float min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
1305    "      (return (var_ref result))))\n"
1306    "\n"
1307    "   (signature vec3\n"
1308    "     (parameters\n"
1309    "       (declare (in) vec3  arg0)\n"
1310    "       (declare (in) float arg1))\n"
1311    "     ((declare () vec3 result)\n"
1312    "      (assign (constant bool (1))   (swiz x (var_ref result))\n"
1313    "              (expression float min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
1314    "      (assign (constant bool (1))   (swiz y (var_ref result))\n"
1315    "              (expression float min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
1316    "      (assign (constant bool (1))   (swiz z (var_ref result))\n"
1317    "              (expression float min (swiz z (var_ref arg0)) (var_ref arg1)))\n"
1318    "      (return (var_ref result))))\n"
1319    "\n"
1320    "   (signature vec4\n"
1321    "     (parameters\n"
1322    "       (declare (in) vec4  arg0)\n"
1323    "       (declare (in) float arg1))\n"
1324    "     ((declare () vec4 result)\n"
1325    "      (assign (constant bool (1))   (swiz x (var_ref result))\n"
1326    "              (expression float min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
1327    "      (assign (constant bool (1))   (swiz y (var_ref result))\n"
1328    "              (expression float min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
1329    "      (assign (constant bool (1))   (swiz z (var_ref result))\n"
1330    "              (expression float min (swiz z (var_ref arg0)) (var_ref arg1)))\n"
1331    "      (assign (constant bool (1))   (swiz w (var_ref result))\n"
1332    "              (expression float min (swiz w (var_ref arg0)) (var_ref arg1)))\n"
1333    "      (return (var_ref result))))\n"
1334    "))\n"
1335 };
1336
1337 static const char *builtins_110_mix = {
1338    "((function mix\n"
1339    "   (signature float\n"
1340    "     (parameters\n"
1341    "       (declare (in) float arg0)\n"
1342    "       (declare (in) float arg1)\n"
1343    "       (declare (in) float arg2))\n"
1344    "     ((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"
1345    "\n"
1346    "   (signature vec2\n"
1347    "     (parameters\n"
1348    "       (declare (in) vec2 arg0)\n"
1349    "       (declare (in) vec2 arg1)\n"
1350    "       (declare (in) vec2 arg2))\n"
1351    "     ((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"
1352    "\n"
1353    "   (signature vec3\n"
1354    "     (parameters\n"
1355    "       (declare (in) vec3 arg0)\n"
1356    "       (declare (in) vec3 arg1)\n"
1357    "       (declare (in) vec3 arg2))\n"
1358    "     ((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"
1359    "\n"
1360    "   (signature vec4\n"
1361    "     (parameters\n"
1362    "       (declare (in) vec4 arg0)\n"
1363    "       (declare (in) vec4 arg1)\n"
1364    "       (declare (in) vec4 arg2))\n"
1365    "     ((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"
1366    "\n"
1367    "   (signature vec2\n"
1368    "     (parameters\n"
1369    "       (declare (in) vec2 arg0)\n"
1370    "       (declare (in) vec2 arg1)\n"
1371    "       (declare (in) float arg2))\n"
1372    "     ((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"
1373    "\n"
1374    "   (signature vec3\n"
1375    "     (parameters\n"
1376    "       (declare (in) vec3 arg0)\n"
1377    "       (declare (in) vec3 arg1)\n"
1378    "       (declare (in) float arg2))\n"
1379    "     ((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"
1380    "\n"
1381    "   (signature vec4\n"
1382    "     (parameters\n"
1383    "       (declare (in) vec4 arg0)\n"
1384    "       (declare (in) vec4 arg1)\n"
1385    "       (declare (in) float arg2))\n"
1386    "     ((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"
1387    "))\n"
1388 };
1389
1390 static const char *builtins_110_mod = {
1391    "((function mod\n"
1392    "   (signature float\n"
1393    "     (parameters\n"
1394    "       (declare (in) float arg0)\n"
1395    "       (declare (in) float arg1))\n"
1396    "     ((return (expression float % (var_ref arg0) (var_ref arg1)))))\n"
1397    "\n"
1398    "   (signature vec2\n"
1399    "     (parameters\n"
1400    "       (declare (in) vec2 arg0)\n"
1401    "       (declare (in) vec2 arg1))\n"
1402    "     ((return (expression vec2 % (var_ref arg0) (var_ref arg1)))))\n"
1403    "\n"
1404    "   (signature vec3\n"
1405    "     (parameters\n"
1406    "       (declare (in) vec3 arg0)\n"
1407    "       (declare (in) vec3 arg1))\n"
1408    "     ((return (expression vec3 % (var_ref arg0) (var_ref arg1)))))\n"
1409    "\n"
1410    "   (signature vec4\n"
1411    "     (parameters\n"
1412    "       (declare (in) vec4 arg0)\n"
1413    "       (declare (in) vec4 arg1))\n"
1414    "     ((return (expression vec4 % (var_ref arg0) (var_ref arg1)))))\n"
1415    "\n"
1416    "   (signature vec2\n"
1417    "     (parameters\n"
1418    "       (declare (in) vec2  arg0)\n"
1419    "       (declare (in) float arg1))\n"
1420    "     ((declare () vec2 result)\n"
1421    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
1422    "              (expression float % (swiz x (var_ref arg0)) (var_ref arg1)))\n"
1423    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
1424    "              (expression float % (swiz y (var_ref arg0)) (var_ref arg1)))\n"
1425    "      (return (var_ref result))))\n"
1426    "\n"
1427    "   (signature vec3\n"
1428    "     (parameters\n"
1429    "       (declare (in) vec3  arg0)\n"
1430    "       (declare (in) float arg1))\n"
1431    "     ((declare () vec3 result)\n"
1432    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
1433    "              (expression float % (swiz x (var_ref arg0)) (var_ref arg1)))\n"
1434    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
1435    "              (expression float % (swiz y (var_ref arg0)) (var_ref arg1)))\n"
1436    "      (assign (constant bool (1)) (swiz z (var_ref result))\n"
1437    "              (expression float % (swiz z (var_ref arg0)) (var_ref arg1)))\n"
1438    "      (return (var_ref result))))\n"
1439    "\n"
1440    "   (signature vec4\n"
1441    "     (parameters\n"
1442    "       (declare (in) vec4  arg0)\n"
1443    "       (declare (in) float arg1))\n"
1444    "     ((declare () vec4 result)\n"
1445    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
1446    "              (expression float % (swiz x (var_ref arg0)) (var_ref arg1)))\n"
1447    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
1448    "              (expression float % (swiz y (var_ref arg0)) (var_ref arg1)))\n"
1449    "      (assign (constant bool (1)) (swiz z (var_ref result))\n"
1450    "              (expression float % (swiz z (var_ref arg0)) (var_ref arg1)))\n"
1451    "      (assign (constant bool (1)) (swiz w (var_ref result))\n"
1452    "              (expression float % (swiz w (var_ref arg0)) (var_ref arg1)))\n"
1453    "      (return (var_ref result))))\n"
1454    "))\n"
1455 };
1456
1457 static const char *builtins_110_noise_fake = {
1458    "((function noise1\n"
1459    "   (signature float\n"
1460    "     (parameters\n"
1461    "       (declare (in) float x))\n"
1462    "     ((return (constant float (0)))))\n"
1463    "   (signature float\n"
1464    "     (parameters\n"
1465    "       (declare (in) vec2 x))\n"
1466    "     ((return (constant float (0)))))\n"
1467    "   (signature float\n"
1468    "     (parameters\n"
1469    "       (declare (in) vec3 x))\n"
1470    "     ((return (constant float (0)))))\n"
1471    "   (signature float\n"
1472    "     (parameters\n"
1473    "       (declare (in) vec4 x))\n"
1474    "     ((return (constant float (0)))))\n"
1475    " )\n"
1476    "\n"
1477    " (function noise2\n"
1478    "   (signature vec2\n"
1479    "     (parameters\n"
1480    "       (declare (in) float x))\n"
1481    "     ((return (constant vec2 (0 0)))))\n"
1482    "   (signature vec2\n"
1483    "     (parameters\n"
1484    "       (declare (in) vec2 x))\n"
1485    "     ((return (constant vec2 (0 0)))))\n"
1486    "   (signature vec2\n"
1487    "     (parameters\n"
1488    "       (declare (in) vec3 x))\n"
1489    "     ((return (constant vec2 (0 0)))))\n"
1490    "   (signature vec2\n"
1491    "     (parameters\n"
1492    "       (declare (in) vec4 x))\n"
1493    "     ((return (constant vec2 (0 0)))))\n"
1494    " )\n"
1495    "\n"
1496    " (function noise3\n"
1497    "   (signature vec3\n"
1498    "     (parameters\n"
1499    "       (declare (in) float x))\n"
1500    "     ((return (constant vec3 (0 0 0)))))\n"
1501    "   (signature vec3\n"
1502    "     (parameters\n"
1503    "       (declare (in) vec2 x))\n"
1504    "     ((return (constant vec3 (0 0 0)))))\n"
1505    "   (signature vec3\n"
1506    "     (parameters\n"
1507    "       (declare (in) vec3 x))\n"
1508    "     ((return (constant vec3 (0 0 0)))))\n"
1509    "   (signature vec3\n"
1510    "     (parameters\n"
1511    "       (declare (in) vec4 x))\n"
1512    "     ((return (constant vec3 (0 0 0)))))\n"
1513    " )\n"
1514    "\n"
1515    " (function noise4\n"
1516    "   (signature vec4\n"
1517    "     (parameters\n"
1518    "       (declare (in) float x))\n"
1519    "     ((return (constant vec4 (0 0 0 0)))))\n"
1520    "   (signature vec4\n"
1521    "     (parameters\n"
1522    "       (declare (in) vec2 x))\n"
1523    "     ((return (constant vec4 (0 0 0 0)))))\n"
1524    "   (signature vec4\n"
1525    "     (parameters\n"
1526    "       (declare (in) vec3 x))\n"
1527    "     ((return (constant vec4 (0 0 0 0)))))\n"
1528    "   (signature vec4\n"
1529    "     (parameters\n"
1530    "       (declare (in) vec4 x))\n"
1531    "     ((return (constant vec4 (0 0 0 0)))))\n"
1532    " )\n"
1533    ")\n"
1534 };
1535
1536 static const char *builtins_110_normalize = {
1537    "((function normalize\n"
1538    "   (signature float\n"
1539    "     (parameters\n"
1540    "       (declare (in) float arg0))\n"
1541    "     ((return (expression float * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0)))))))\n"
1542    "\n"
1543    "   (signature vec2\n"
1544    "     (parameters\n"
1545    "       (declare (in) vec2 arg0))\n"
1546    "     ((return (expression vec2 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0)))))))\n"
1547    "\n"
1548    "   (signature vec3\n"
1549    "     (parameters\n"
1550    "       (declare (in) vec3 arg0))\n"
1551    "     ((return (expression vec3 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0)))))))\n"
1552    "\n"
1553    "   (signature vec4\n"
1554    "     (parameters\n"
1555    "       (declare (in) vec4 arg0))\n"
1556    "     ((return (expression vec4 * (var_ref arg0) (expression float rsq (expression float dot (var_ref arg0) (var_ref arg0)))))))\n"
1557    "))\n"
1558 };
1559
1560 static const char *builtins_110_not = {
1561    "((function not\n"
1562    "   (signature bvec2\n"
1563    "     (parameters\n"
1564    "       (declare (in) bvec2 arg0))\n"
1565    "     ((return (expression bvec2 ! (var_ref arg0)))))\n"
1566    "\n"
1567    "   (signature bvec3\n"
1568    "     (parameters\n"
1569    "       (declare (in) bvec3 arg0))\n"
1570    "     ((return (expression bvec3 ! (var_ref arg0)))))\n"
1571    "\n"
1572    "   (signature bvec4\n"
1573    "     (parameters\n"
1574    "       (declare (in) bvec4 arg0))\n"
1575    "     ((return (expression bvec4 ! (var_ref arg0)))))\n"
1576    "))\n"
1577 };
1578
1579 static const char *builtins_110_notEqual = {
1580    "((function notEqual\n"
1581    "   (signature bvec2\n"
1582    "     (parameters\n"
1583    "       (declare (in) vec2 arg0)\n"
1584    "       (declare (in) vec2 arg1))\n"
1585    "     ((declare () bvec2 temp)\n"
1586    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression float != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1587    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression float != (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) vec3 arg0)\n"
1593    "       (declare (in) vec3 arg1))\n"
1594    "     ((declare () bvec3 temp)\n"
1595    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression float != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1596    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression float != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1597    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression float != (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) vec4 arg0)\n"
1603    "       (declare (in) vec4 arg1))\n"
1604    "     ((declare () bvec4 temp)\n"
1605    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression float != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1606    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression float != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1607    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression float != (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1608    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression float != (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
1609    "      (return (var_ref temp))))\n"
1610    "\n"
1611    "   (signature bvec2\n"
1612    "     (parameters\n"
1613    "       (declare (in) ivec2 arg0)\n"
1614    "       (declare (in) ivec2 arg1))\n"
1615    "     ((declare () bvec2 temp)\n"
1616    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression int != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1617    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression int != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1618    "      (return (var_ref temp))))\n"
1619    "\n"
1620    "   (signature bvec3\n"
1621    "     (parameters\n"
1622    "       (declare (in) ivec3 arg0)\n"
1623    "       (declare (in) ivec3 arg1))\n"
1624    "     ((declare () bvec3 temp)\n"
1625    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression int != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1626    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression int != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1627    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression int != (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1628    "      (return (var_ref temp))))\n"
1629    "\n"
1630    "   (signature bvec4\n"
1631    "     (parameters\n"
1632    "       (declare (in) ivec4 arg0)\n"
1633    "       (declare (in) ivec4 arg1))\n"
1634    "     ((declare () bvec4 temp)\n"
1635    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression int != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
1636    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression int != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
1637    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression int != (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
1638    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression int != (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
1639    "      (return (var_ref temp))))\n"
1640    "))\n"
1641 };
1642
1643 static const char *builtins_110_pow = {
1644    "((function pow\n"
1645    "   (signature float\n"
1646    "     (parameters\n"
1647    "       (declare (in) float arg0)\n"
1648    "       (declare (in) float arg1))\n"
1649    "     ((return (expression float pow (var_ref arg0) (var_ref arg1)))))\n"
1650    "\n"
1651    "   (signature vec2\n"
1652    "     (parameters\n"
1653    "       (declare (in) vec2 arg0)\n"
1654    "       (declare (in) vec2 arg1))\n"
1655    "     ((return (expression vec2 pow (var_ref arg0) (var_ref arg1)))))\n"
1656    "\n"
1657    "   (signature vec3\n"
1658    "     (parameters\n"
1659    "       (declare (in) vec3 arg0)\n"
1660    "       (declare (in) vec3 arg1))\n"
1661    "     ((return (expression vec3 pow (var_ref arg0) (var_ref arg1)))))\n"
1662    "\n"
1663    "   (signature vec4\n"
1664    "     (parameters\n"
1665    "       (declare (in) vec4 arg0)\n"
1666    "       (declare (in) vec4 arg1))\n"
1667    "     ((return (expression vec4 pow (var_ref arg0) (var_ref arg1)))))\n"
1668    "))\n"
1669 };
1670
1671 static const char *builtins_110_radians = {
1672    "((function radians\n"
1673    "   (signature float\n"
1674    "     (parameters\n"
1675    "       (declare (in) float arg0))\n"
1676    "     ((return (expression float * (var_ref arg0) (constant float (0.017453))))))\n"
1677    "\n"
1678    "   (signature vec2\n"
1679    "     (parameters\n"
1680    "       (declare (in) vec2 arg0))\n"
1681    "     ((return (expression vec2 * (var_ref arg0) (constant float (0.017453))))))\n"
1682    "\n"
1683    "   (signature vec3\n"
1684    "     (parameters\n"
1685    "       (declare (in) vec3 arg0))\n"
1686    "     ((return (expression vec3 * (var_ref arg0) (constant float (0.017453))))))\n"
1687    "\n"
1688    "   (signature vec4\n"
1689    "     (parameters\n"
1690    "       (declare (in) vec4 arg0))\n"
1691    "     ((return (expression vec4 * (var_ref arg0) (constant float (0.017453))))))\n"
1692    "))\n"
1693 };
1694
1695 static const char *builtins_110_reflect = {
1696    "((function reflect\n"
1697    "   (signature float\n"
1698    "     (parameters\n"
1699    "       (declare (in) float i)\n"
1700    "       (declare (in) float n))\n"
1701    "     ((return (expression float -\n"
1702    "           (var_ref i)\n"
1703    "           (expression float *\n"
1704    "            (constant float (2.0))\n"
1705    "            (expression float *\n"
1706    "             (expression float dot\n"
1707    "              (var_ref n)\n"
1708    "              (var_ref i))\n"
1709    "             (var_ref n)))))))\n"
1710    "\n"
1711    "   (signature vec2\n"
1712    "     (parameters\n"
1713    "       (declare (in) vec2 i)\n"
1714    "       (declare (in) vec2 n))\n"
1715    "     ((return (expression vec2 -\n"
1716    "           (var_ref i)\n"
1717    "           (expression vec2 *\n"
1718    "            (constant float (2.0))\n"
1719    "            (expression vec2 *\n"
1720    "             (expression float dot\n"
1721    "              (var_ref n)\n"
1722    "              (var_ref i))\n"
1723    "             (var_ref n)))))))\n"
1724    "\n"
1725    "   (signature vec3\n"
1726    "     (parameters\n"
1727    "       (declare (in) vec3 i)\n"
1728    "       (declare (in) vec3 n))\n"
1729    "     ((return (expression vec3 -\n"
1730    "           (var_ref i)\n"
1731    "           (expression vec3 *\n"
1732    "            (constant float (2.0))\n"
1733    "            (expression vec3 *\n"
1734    "             (expression float dot\n"
1735    "              (var_ref n)\n"
1736    "              (var_ref i))\n"
1737    "             (var_ref n)))))))\n"
1738    "\n"
1739    "   (signature vec4\n"
1740    "     (parameters\n"
1741    "       (declare (in) vec4 i)\n"
1742    "       (declare (in) vec4 n))\n"
1743    "     ((return (expression vec4 -\n"
1744    "           (var_ref i)\n"
1745    "           (expression vec4 *\n"
1746    "            (constant float (2.0))\n"
1747    "            (expression vec4 *\n"
1748    "             (expression float dot\n"
1749    "              (var_ref n)\n"
1750    "              (var_ref i))\n"
1751    "             (var_ref n)))))))\n"
1752    "\n"
1753    "))\n"
1754 };
1755
1756 static const char *builtins_110_refract = {
1757    "((function refract\n"
1758    "   (signature float\n"
1759    "     (parameters\n"
1760    "       (declare (in) float i)\n"
1761    "       (declare (in) float n)\n"
1762    "       (declare (in) float eta))\n"
1763    "     ((declare () float k)\n"
1764    "      (assign (constant bool (1)) (var_ref k)\n"
1765    "              (expression float - (constant float (1.0))\n"
1766    "            (expression float * (var_ref eta)\n"
1767    "              (expression float * (var_ref eta)\n"
1768    "                (expression float - (constant float (1.0))\n"
1769    "                  (expression float * \n"
1770    "                    (expression float dot (var_ref n) (var_ref i))\n"
1771    "                    (expression float dot (var_ref n) (var_ref i))))))))\n"
1772    "      (if (expression bool < (var_ref k) (constant float (0.0)))\n"
1773    "          ((return (constant float (0.0))))\n"
1774    "      ((return (expression float -\n"
1775    "                 (expression float * (var_ref eta) (var_ref i))\n"
1776    "                 (expression float *\n"
1777    "                   (expression float +\n"
1778    "                     (expression float * (var_ref eta)\n"
1779    "                       (expression float dot (var_ref n) (var_ref i)))\n"
1780    "                     (expression float sqrt (var_ref k)))\n"
1781    "                   (var_ref n))))))))\n"
1782    "\n"
1783    "   (signature vec2\n"
1784    "     (parameters\n"
1785    "       (declare (in) vec2 i)\n"
1786    "       (declare (in) vec2 n)\n"
1787    "       (declare (in) float eta))\n"
1788    "     ((declare () float k)\n"
1789    "      (assign (constant bool (1)) (var_ref k)\n"
1790    "              (expression float - (constant float (1.0))\n"
1791    "            (expression float * (var_ref eta)\n"
1792    "              (expression float * (var_ref eta)\n"
1793    "                (expression float - (constant float (1.0))\n"
1794    "                  (expression float * \n"
1795    "                    (expression float dot (var_ref n) (var_ref i))\n"
1796    "                    (expression float dot (var_ref n) (var_ref i))))))))\n"
1797    "      (if (expression bool < (var_ref k) (constant float (0.0)))\n"
1798    "          ((return (constant vec2 (0.0 0.0))))\n"
1799    "      ((return (expression vec2 -\n"
1800    "                 (expression vec2 * (var_ref eta) (var_ref i))\n"
1801    "                 (expression vec2 *\n"
1802    "                   (expression float +\n"
1803    "                     (expression float * (var_ref eta)\n"
1804    "                       (expression float dot (var_ref n) (var_ref i)))\n"
1805    "                     (expression float sqrt (var_ref k)))\n"
1806    "                   (var_ref n))))))))\n"
1807    "\n"
1808    "   (signature vec3\n"
1809    "     (parameters\n"
1810    "       (declare (in) vec3 i)\n"
1811    "       (declare (in) vec3 n)\n"
1812    "       (declare (in) float eta))\n"
1813    "     ((declare () float k)\n"
1814    "      (assign (constant bool (1)) (var_ref k)\n"
1815    "              (expression float - (constant float (1.0))\n"
1816    "            (expression float * (var_ref eta)\n"
1817    "              (expression float * (var_ref eta)\n"
1818    "                (expression float - (constant float (1.0))\n"
1819    "                  (expression float * \n"
1820    "                    (expression float dot (var_ref n) (var_ref i))\n"
1821    "                    (expression float dot (var_ref n) (var_ref i))))))))\n"
1822    "      (if (expression bool < (var_ref k) (constant float (0.0)))\n"
1823    "          ((return (constant vec3 (0.0 0.0))))\n"
1824    "      ((return (expression vec3 -\n"
1825    "                 (expression vec3 * (var_ref eta) (var_ref i))\n"
1826    "                 (expression vec3 *\n"
1827    "                   (expression float +\n"
1828    "                     (expression float * (var_ref eta)\n"
1829    "                       (expression float dot (var_ref n) (var_ref i)))\n"
1830    "                     (expression float sqrt (var_ref k)))\n"
1831    "                   (var_ref n))))))))\n"
1832    "\n"
1833    "   (signature vec4\n"
1834    "     (parameters\n"
1835    "       (declare (in) vec4 i)\n"
1836    "       (declare (in) vec4 n)\n"
1837    "       (declare (in) float eta))\n"
1838    "     ((declare () float k)\n"
1839    "      (assign (constant bool (1)) (var_ref k)\n"
1840    "              (expression float - (constant float (1.0))\n"
1841    "            (expression float * (var_ref eta)\n"
1842    "              (expression float * (var_ref eta)\n"
1843    "                (expression float - (constant float (1.0))\n"
1844    "                  (expression float * \n"
1845    "                    (expression float dot (var_ref n) (var_ref i))\n"
1846    "                    (expression float dot (var_ref n) (var_ref i))))))))\n"
1847    "      (if (expression bool < (var_ref k) (constant float (0.0)))\n"
1848    "          ((return (constant vec4 (0.0 0.0))))\n"
1849    "      ((return (expression vec4 -\n"
1850    "                 (expression vec4 * (var_ref eta) (var_ref i))\n"
1851    "                 (expression vec4 *\n"
1852    "                   (expression float +\n"
1853    "                     (expression float * (var_ref eta)\n"
1854    "                       (expression float dot (var_ref n) (var_ref i)))\n"
1855    "                     (expression float sqrt (var_ref k)))\n"
1856    "                   (var_ref n))))))))\n"
1857    "\n"
1858    "))\n"
1859 };
1860
1861 static const char *builtins_110_sign = {
1862    "((function sign\n"
1863    "   (signature float\n"
1864    "     (parameters\n"
1865    "       (declare (in) float x))\n"
1866    "     ((return (expression float sign (var_ref x)))))\n"
1867    "\n"
1868    "   (signature vec2\n"
1869    "     (parameters\n"
1870    "       (declare (in) vec2 x))\n"
1871    "     ((declare () vec2 t)\n"
1872    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float sign (swiz x (var_ref x))))\n"
1873    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float sign (swiz y (var_ref x))))\n"
1874    "      (return (var_ref t))))\n"
1875    "\n"
1876    "   (signature vec3\n"
1877    "     (parameters\n"
1878    "       (declare (in) vec3 x))\n"
1879    "     ((declare () vec3 t)\n"
1880    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float sign (swiz x (var_ref x))))\n"
1881    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float sign (swiz y (var_ref x))))\n"
1882    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression float sign (swiz z (var_ref x))))\n"
1883    "      (return (var_ref t))))\n"
1884    "\n"
1885    "   (signature vec4\n"
1886    "     (parameters\n"
1887    "       (declare (in) vec4 x))\n"
1888    "     ((declare () vec4 t)\n"
1889    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float sign (swiz x (var_ref x))))\n"
1890    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float sign (swiz y (var_ref x))))\n"
1891    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression float sign (swiz z (var_ref x))))\n"
1892    "      (assign (constant bool (1)) (swiz w (var_ref t)) (expression float sign (swiz w (var_ref x))))\n"
1893    "      (return (var_ref t))))\n"
1894    "))\n"
1895    "\n"
1896 };
1897
1898 static const char *builtins_110_sin = {
1899    "((function sin\n"
1900    "   (signature float\n"
1901    "     (parameters\n"
1902    "       (declare (in) float angle))\n"
1903    "     ((return (expression float sin (var_ref angle)))))\n"
1904    "\n"
1905    "   (signature vec2\n"
1906    "     (parameters\n"
1907    "       (declare (in) vec2 angle))\n"
1908    "     ((return (expression vec2 sin (var_ref angle)))))\n"
1909    "\n"
1910    "   (signature vec3\n"
1911    "     (parameters\n"
1912    "       (declare (in) vec3 angle))\n"
1913    "     ((return (expression vec3 sin (var_ref angle)))))\n"
1914    "\n"
1915    "   (signature vec4\n"
1916    "     (parameters\n"
1917    "       (declare (in) vec4 angle))\n"
1918    "     ((return (expression vec4 sin (var_ref angle)))))\n"
1919    "))\n"
1920 };
1921
1922 static const char *builtins_110_smoothstep = {
1923    "((function smoothstep\n"
1924    "   (signature float\n"
1925    "     (parameters\n"
1926    "       (declare (in) float edge0)\n"
1927    "       (declare (in) float edge1)\n"
1928    "       (declare (in) float x))\n"
1929    "     ((declare () float t)\n"
1930    "\n"
1931    "      (assign (constant bool (1)) (var_ref t)\n"
1932    "              (expression float max\n"
1933    "                      (expression float min\n"
1934    "                                  (expression float / (expression float - (var_ref x) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1935    "                                  (constant float (1.0)))\n"
1936    "                      (constant float (0.0))))\n"
1937    "      (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"
1938    "\n"
1939    "   (signature vec2\n"
1940    "     (parameters\n"
1941    "       (declare (in) float edge0)\n"
1942    "       (declare (in) float edge1)\n"
1943    "       (declare (in) vec2 x))\n"
1944    "     ((declare () vec2 t)\n"
1945    "      (declare () vec2 retval)\n"
1946    "\n"
1947    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
1948    "              (expression float max\n"
1949    "                      (expression float min\n"
1950    "                                  (expression float / (expression float - (swiz x (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1951    "                                  (constant float (1.0)))\n"
1952    "                      (constant float (0.0))))\n"
1953    "      (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"
1954    "\n"
1955    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
1956    "              (expression float max\n"
1957    "                      (expression float min\n"
1958    "                                  (expression float / (expression float - (swiz y (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1959    "                                  (constant float (1.0)))\n"
1960    "                      (constant float (0.0))))\n"
1961    "      (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"
1962    "      (return (var_ref retval))\n"
1963    "      ))\n"
1964    "\n"
1965    "   (signature vec3\n"
1966    "     (parameters\n"
1967    "       (declare (in) float edge0)\n"
1968    "       (declare (in) float edge1)\n"
1969    "       (declare (in) vec3 x))\n"
1970    "     ((declare () vec3 t)\n"
1971    "      (declare () vec3 retval)\n"
1972    "\n"
1973    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
1974    "              (expression float max\n"
1975    "                      (expression float min\n"
1976    "                                  (expression float / (expression float - (swiz x (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1977    "                                  (constant float (1.0)))\n"
1978    "                      (constant float (0.0))))\n"
1979    "      (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"
1980    "\n"
1981    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
1982    "              (expression float max\n"
1983    "                      (expression float min\n"
1984    "                                  (expression float / (expression float - (swiz y (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1985    "                                  (constant float (1.0)))\n"
1986    "                      (constant float (0.0))))\n"
1987    "      (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"
1988    "\n"
1989    "      (assign (constant bool (1)) (swiz z (var_ref t))\n"
1990    "              (expression float max\n"
1991    "                      (expression float min\n"
1992    "                                  (expression float / (expression float - (swiz z (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
1993    "                                  (constant float (1.0)))\n"
1994    "                      (constant float (0.0))))\n"
1995    "      (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"
1996    "      (return (var_ref retval))\n"
1997    "      ))\n"
1998    "\n"
1999    "\n"
2000    "   (signature vec4\n"
2001    "     (parameters\n"
2002    "       (declare (in) float edge0)\n"
2003    "       (declare (in) float edge1)\n"
2004    "       (declare (in) vec4 x))\n"
2005    "     ((declare () vec4 t)\n"
2006    "      (declare () vec4 retval)\n"
2007    "\n"
2008    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
2009    "              (expression float max\n"
2010    "                      (expression float min\n"
2011    "                                  (expression float / (expression float - (swiz x (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
2012    "                                  (constant float (1.0)))\n"
2013    "                      (constant float (0.0))))\n"
2014    "      (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"
2015    "\n"
2016    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
2017    "              (expression float max\n"
2018    "                      (expression float min\n"
2019    "                                  (expression float / (expression float - (swiz y (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
2020    "                                  (constant float (1.0)))\n"
2021    "                      (constant float (0.0))))\n"
2022    "      (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"
2023    "\n"
2024    "      (assign (constant bool (1)) (swiz z (var_ref t))\n"
2025    "              (expression float max\n"
2026    "                      (expression float min\n"
2027    "                                  (expression float / (expression float - (swiz z (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
2028    "                                  (constant float (1.0)))\n"
2029    "                      (constant float (0.0))))\n"
2030    "      (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"
2031    "\n"
2032    "      (assign (constant bool (1)) (swiz w (var_ref t))\n"
2033    "              (expression float max\n"
2034    "                      (expression float min\n"
2035    "                                  (expression float / (expression float - (swiz w (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
2036    "                                  (constant float (1.0)))\n"
2037    "                      (constant float (0.0))))\n"
2038    "      (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"
2039    "      (return (var_ref retval))\n"
2040    "      ))\n"
2041    "\n"
2042    "   (signature vec2\n"
2043    "     (parameters\n"
2044    "       (declare (in) vec2 edge0)\n"
2045    "       (declare (in) vec2 edge1)\n"
2046    "       (declare (in) vec2 x))\n"
2047    "     ((declare () vec2 t)\n"
2048    "      (declare () vec2 retval)\n"
2049    "\n"
2050    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
2051    "              (expression float max\n"
2052    "                      (expression float min\n"
2053    "                                  (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"
2054    "                                  (constant float (1.0)))\n"
2055    "                      (constant float (0.0))))\n"
2056    "      (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"
2057    "\n"
2058    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
2059    "              (expression float max\n"
2060    "                      (expression float min\n"
2061    "                                  (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"
2062    "                                  (constant float (1.0)))\n"
2063    "                      (constant float (0.0))))\n"
2064    "      (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"
2065    "      (return (var_ref retval))\n"
2066    "      ))\n"
2067    "\n"
2068    "   (signature vec3\n"
2069    "     (parameters\n"
2070    "       (declare (in) vec3 edge0)\n"
2071    "       (declare (in) vec3 edge1)\n"
2072    "       (declare (in) vec3 x))\n"
2073    "     ((declare () vec3 t)\n"
2074    "      (declare () vec3 retval)\n"
2075    "\n"
2076    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
2077    "              (expression float max\n"
2078    "                      (expression float min\n"
2079    "                                  (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"
2080    "                                  (constant float (1.0)))\n"
2081    "                      (constant float (0.0))))\n"
2082    "      (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"
2083    "\n"
2084    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
2085    "              (expression float max\n"
2086    "                      (expression float min\n"
2087    "                                  (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"
2088    "                                  (constant float (1.0)))\n"
2089    "                      (constant float (0.0))))\n"
2090    "      (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"
2091    "\n"
2092    "      (assign (constant bool (1)) (swiz z (var_ref t))\n"
2093    "              (expression float max\n"
2094    "                      (expression float min\n"
2095    "                                  (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"
2096    "                                  (constant float (1.0)))\n"
2097    "                      (constant float (0.0))))\n"
2098    "      (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"
2099    "      (return (var_ref retval))\n"
2100    "      ))\n"
2101    "\n"
2102    "\n"
2103    "   (signature vec4\n"
2104    "     (parameters\n"
2105    "       (declare (in) vec4 edge0)\n"
2106    "       (declare (in) vec4 edge1)\n"
2107    "       (declare (in) vec4 x))\n"
2108    "     ((declare () vec4 t)\n"
2109    "      (declare () vec4 retval)\n"
2110    "\n"
2111    "      (assign (constant bool (1)) (swiz x (var_ref t))\n"
2112    "              (expression float max\n"
2113    "                      (expression float min\n"
2114    "                                  (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"
2115    "                                  (constant float (1.0)))\n"
2116    "                      (constant float (0.0))))\n"
2117    "      (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"
2118    "\n"
2119    "      (assign (constant bool (1)) (swiz y (var_ref t))\n"
2120    "              (expression float max\n"
2121    "                      (expression float min\n"
2122    "                                  (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"
2123    "                                  (constant float (1.0)))\n"
2124    "                      (constant float (0.0))))\n"
2125    "      (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"
2126    "\n"
2127    "      (assign (constant bool (1)) (swiz z (var_ref t))\n"
2128    "              (expression float max\n"
2129    "                      (expression float min\n"
2130    "                                  (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"
2131    "                                  (constant float (1.0)))\n"
2132    "                      (constant float (0.0))))\n"
2133    "      (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"
2134    "\n"
2135    "      (assign (constant bool (1)) (swiz w (var_ref t))\n"
2136    "              (expression float max\n"
2137    "                      (expression float min\n"
2138    "                                  (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"
2139    "                                  (constant float (1.0)))\n"
2140    "                      (constant float (0.0))))\n"
2141    "      (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"
2142    "      (return (var_ref retval))\n"
2143    "      ))\n"
2144    "\n"
2145    "))\n"
2146    "\n"
2147 };
2148
2149 static const char *builtins_110_sqrt = {
2150    "((function sqrt\n"
2151    "   (signature float\n"
2152    "     (parameters\n"
2153    "       (declare (in) float arg0))\n"
2154    "     ((return (expression float sqrt (var_ref arg0)))))\n"
2155    "\n"
2156    "   (signature vec2\n"
2157    "     (parameters\n"
2158    "       (declare (in) vec2 arg0))\n"
2159    "     ((return (expression vec2 sqrt (var_ref arg0)))))\n"
2160    "\n"
2161    "   (signature vec3\n"
2162    "     (parameters\n"
2163    "       (declare (in) vec3 arg0))\n"
2164    "     ((return (expression vec3 sqrt (var_ref arg0)))))\n"
2165    "\n"
2166    "   (signature vec4\n"
2167    "     (parameters\n"
2168    "       (declare (in) vec4 arg0))\n"
2169    "     ((return (expression vec4 sqrt (var_ref arg0)))))\n"
2170    "))\n"
2171 };
2172
2173 static const char *builtins_110_step = {
2174    "((function step\n"
2175    "   (signature float\n"
2176    "     (parameters\n"
2177    "       (declare (in) float edge)\n"
2178    "       (declare (in) float x))\n"
2179    "     ((return (expression float b2f (expression bool < (var_ref x) (var_ref edge))))))\n"
2180    "\n"
2181    "   (signature vec2\n"
2182    "     (parameters\n"
2183    "       (declare (in) float edge)\n"
2184    "       (declare (in) vec2 x))\n"
2185    "     ((declare () vec2 t)\n"
2186    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float b2f (expression bool < (swiz x (var_ref x))(var_ref edge))))\n"
2187    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float b2f (expression bool < (swiz y (var_ref x))(var_ref edge))))\n"
2188    "      (return (var_ref t))))\n"
2189    "\n"
2190    "   (signature vec3\n"
2191    "     (parameters\n"
2192    "       (declare (in) float edge)\n"
2193    "       (declare (in) vec3 x))\n"
2194    "     ((declare () vec3 t)\n"
2195    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float b2f (expression bool < (swiz x (var_ref x))(var_ref edge))))\n"
2196    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float b2f (expression bool < (swiz y (var_ref x))(var_ref edge))))\n"
2197    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression float b2f (expression bool < (swiz z (var_ref x))(var_ref edge))))\n"
2198    "      (return (var_ref t))))\n"
2199    "\n"
2200    "   (signature vec4\n"
2201    "     (parameters\n"
2202    "       (declare (in) float edge)\n"
2203    "       (declare (in) vec4 x))\n"
2204    "     ((declare () vec4 t)\n"
2205    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression float b2f (expression bool < (swiz x (var_ref x))(var_ref edge))))\n"
2206    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression float b2f (expression bool < (swiz y (var_ref x))(var_ref edge))))\n"
2207    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression float b2f (expression bool < (swiz z (var_ref x))(var_ref edge))))\n"
2208    "      (assign (constant bool (1)) (swiz w (var_ref t)) (expression float b2f (expression bool < (swiz w (var_ref x))(var_ref edge))))\n"
2209    "      (return (var_ref t))))\n"
2210    "\n"
2211    "   (signature vec2\n"
2212    "     (parameters\n"
2213    "       (declare (in) vec2 edge)\n"
2214    "       (declare (in) vec2 x))\n"
2215    "     ((declare () vec2 t)\n"
2216    "      (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"
2217    "      (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"
2218    "      (return (var_ref t))))\n"
2219    "\n"
2220    "   (signature vec3\n"
2221    "     (parameters\n"
2222    "       (declare (in) vec3 edge)\n"
2223    "       (declare (in) vec3 x))\n"
2224    "     ((declare () vec3 t)\n"
2225    "      (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"
2226    "      (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"
2227    "      (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"
2228    "      (return (var_ref t))))\n"
2229    "\n"
2230    "   (signature vec4\n"
2231    "     (parameters\n"
2232    "       (declare (in) vec4 edge)\n"
2233    "       (declare (in) vec4 x))\n"
2234    "     ((declare () vec4 t)\n"
2235    "      (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"
2236    "      (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"
2237    "      (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"
2238    "      (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"
2239    "      (return (var_ref t))))\n"
2240    "))\n"
2241    "\n"
2242 };
2243
2244 static const char *builtins_110_tan = {
2245    "((function tan\n"
2246    "   (signature float\n"
2247    "     (parameters\n"
2248    "       (declare (in) float angle))\n"
2249    "     ((return (expression float / (expression float sin (var_ref angle)) (expression float cos (var_ref angle))))))\n"
2250    "\n"
2251    "   (signature vec2\n"
2252    "     (parameters\n"
2253    "       (declare (in) vec2 angle))\n"
2254    "     ((return (expression float / (expression float sin (var_ref angle)) (expression vec2 cos (var_ref angle))))))\n"
2255    "\n"
2256    "   (signature vec3\n"
2257    "     (parameters\n"
2258    "       (declare (in) vec3 angle))\n"
2259    "     ((return (expression float / (expression float sin (var_ref angle)) (expression vec3 cos (var_ref angle))))))\n"
2260    "\n"
2261    "   (signature vec4\n"
2262    "     (parameters\n"
2263    "       (declare (in) vec4 angle))\n"
2264    "     ((return (expression float / (expression float sin (var_ref angle)) (expression vec4 cos (var_ref angle))))))\n"
2265    "))\n"
2266 };
2267
2268 static const char *builtins_110_textures = {
2269    "((function texture1D\n"
2270    "   (signature vec4\n"
2271    "     (parameters\n"
2272    "       (declare (in) sampler1D sampler)\n"
2273    "       (declare (in) float P) )\n"
2274    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
2275    "\n"
2276    ")\n"
2277    " (function texture1DLod\n"
2278    "   (signature vec4\n"
2279    "     (parameters\n"
2280    "       (declare (in) sampler1D sampler)\n"
2281    "       (declare (in) float P) \n"
2282    "       (declare (in) float lod) )\n"
2283    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
2284    "\n"
2285    ")\n"
2286    " (function texture1DProj\n"
2287    "   (signature vec4\n"
2288    "     (parameters\n"
2289    "       (declare (in) sampler1D sampler)\n"
2290    "       (declare (in) vec2 P) )\n"
2291    "     ((return (tex (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () ))))\n"
2292    "\n"
2293    "   (signature vec4\n"
2294    "     (parameters\n"
2295    "       (declare (in) sampler1D sampler)\n"
2296    "       (declare (in) vec4 P) )\n"
2297    "     ((return (tex (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ))))\n"
2298    "\n"
2299    ")\n"
2300    " (function texture1DProjLod\n"
2301    "   (signature vec4\n"
2302    "     (parameters\n"
2303    "       (declare (in) sampler1D sampler)\n"
2304    "       (declare (in) vec2 P) \n"
2305    "       (declare (in) float lod) )\n"
2306    "     ((return (txl (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () (var_ref lod) ))))\n"
2307    "\n"
2308    "   (signature vec4\n"
2309    "     (parameters\n"
2310    "       (declare (in) sampler1D sampler)\n"
2311    "       (declare (in) vec4 P) \n"
2312    "       (declare (in) float lod) )\n"
2313    "     ((return (txl (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref lod) ))))\n"
2314    "\n"
2315    ")\n"
2316    " (function texture2D\n"
2317    "   (signature vec4\n"
2318    "     (parameters\n"
2319    "       (declare (in) sampler2D sampler)\n"
2320    "       (declare (in) vec2 P) )\n"
2321    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
2322    "\n"
2323    ")\n"
2324    "(function texture2DLod\n"
2325    "   (signature vec4\n"
2326    "     (parameters\n"
2327    "       (declare (in) sampler2D sampler)\n"
2328    "       (declare (in) vec2 P) \n"
2329    "       (declare (in) float lod) )\n"
2330    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
2331    "\n"
2332    ")\n"
2333    " (function texture2DProj\n"
2334    "   (signature vec4\n"
2335    "     (parameters\n"
2336    "       (declare (in) sampler2D sampler)\n"
2337    "       (declare (in) vec3 P) )\n"
2338    "     ((return (tex (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () ))))\n"
2339    "\n"
2340    "   (signature vec4\n"
2341    "     (parameters\n"
2342    "       (declare (in) sampler2D sampler)\n"
2343    "       (declare (in) vec4 P) )\n"
2344    "     ((return (tex (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ))))\n"
2345    "\n"
2346    ")\n"
2347    " (function texture2DProjLod\n"
2348    "   (signature vec4\n"
2349    "     (parameters\n"
2350    "       (declare (in) sampler2D sampler)\n"
2351    "       (declare (in) vec3 P) \n"
2352    "       (declare (in) float lod) )\n"
2353    "     ((return (txl (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () (var_ref lod) ))))\n"
2354    "\n"
2355    "   (signature vec4\n"
2356    "     (parameters\n"
2357    "       (declare (in) sampler2D sampler)\n"
2358    "       (declare (in) vec4 P) \n"
2359    "       (declare (in) float lod) )\n"
2360    "     ((return (txl (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref lod) ))))\n"
2361    "\n"
2362    ")\n"
2363    " (function texture3D\n"
2364    "   (signature vec4\n"
2365    "     (parameters\n"
2366    "       (declare (in) sampler3D sampler)\n"
2367    "       (declare (in) vec3 P) )\n"
2368    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
2369    "\n"
2370    ")\n"
2371    " (function texture3DLod\n"
2372    "   (signature vec4\n"
2373    "     (parameters\n"
2374    "       (declare (in) sampler3D sampler)\n"
2375    "       (declare (in) vec3 P) \n"
2376    "       (declare (in) float lod) )\n"
2377    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
2378    "\n"
2379    ")\n"
2380    " (function texture3DProj\n"
2381    "   (signature vec4\n"
2382    "     (parameters\n"
2383    "       (declare (in) sampler3D sampler)\n"
2384    "       (declare (in) vec4 P) )\n"
2385    "     ((return (tex (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ))))\n"
2386    "\n"
2387    ")\n"
2388    " (function texture3DProjLod\n"
2389    "   (signature vec4\n"
2390    "     (parameters\n"
2391    "       (declare (in) sampler3D sampler)\n"
2392    "       (declare (in) vec4 P) \n"
2393    "       (declare (in) float lod) )\n"
2394    "     ((return (txl (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref lod) ))))\n"
2395    "\n"
2396    ")\n"
2397    " (function textureCube\n"
2398    "   (signature vec4\n"
2399    "     (parameters\n"
2400    "       (declare (in) samplerCube sampler)\n"
2401    "       (declare (in) vec3 P) )\n"
2402    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
2403    "\n"
2404    ")\n"
2405    " (function textureCubeLod\n"
2406    "   (signature vec4\n"
2407    "     (parameters\n"
2408    "       (declare (in) samplerCube sampler)\n"
2409    "       (declare (in) vec3 P) \n"
2410    "       (declare (in) float lod) )\n"
2411    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
2412    "\n"
2413    ")\n"
2414    " (function shadow1D\n"
2415    "   (signature vec4\n"
2416    "     (parameters\n"
2417    "       (declare (in) sampler1DShadow sampler)\n"
2418    "       (declare (in) vec3 P) )\n"
2419    "     ((return (tex (var_ref sampler) (swiz x (var_ref P)) (0 0 0) 1 (swiz z (var_ref P)) ))))\n"
2420    "\n"
2421    ")\n"
2422    " (function shadow1DLod\n"
2423    "   (signature vec4\n"
2424    "     (parameters\n"
2425    "       (declare (in) sampler1DShadow sampler)\n"
2426    "       (declare (in) vec3 P) \n"
2427    "       (declare (in) float lod) )\n"
2428    "     ((return (txl (var_ref sampler) (swiz x (var_ref P)) (0 0 0) 1 (swiz z (var_ref P)) (var_ref lod) ))))\n"
2429    "\n"
2430    ")\n"
2431    " (function shadow1DProj\n"
2432    "   (signature vec4\n"
2433    "     (parameters\n"
2434    "       (declare (in) sampler1DShadow sampler)\n"
2435    "       (declare (in) vec4 P) )\n"
2436    "     ((return (tex (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) (swiz z (var_ref P)) ))))\n"
2437    "\n"
2438    ")\n"
2439    " (function shadow1DProjLod\n"
2440    "   (signature vec4\n"
2441    "     (parameters\n"
2442    "       (declare (in) sampler1DShadow sampler)\n"
2443    "       (declare (in) vec4 P) \n"
2444    "       (declare (in) float lod) )\n"
2445    "     ((return (txl (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref lod) ))))\n"
2446    "\n"
2447    ")\n"
2448    " (function shadow2D\n"
2449    "   (signature vec4\n"
2450    "     (parameters\n"
2451    "       (declare (in) sampler2DShadow sampler)\n"
2452    "       (declare (in) vec3 P) )\n"
2453    "     ((return (tex (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) 1 (swiz z (var_ref P)) ))))\n"
2454    "\n"
2455    ")\n"
2456    " (function shadow2DLod\n"
2457    "   (signature vec4\n"
2458    "     (parameters\n"
2459    "       (declare (in) sampler2DShadow sampler)\n"
2460    "       (declare (in) vec3 P) \n"
2461    "       (declare (in) float lod) )\n"
2462    "     ((return (txl (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) 1 (swiz z (var_ref P)) (var_ref lod) ))))\n"
2463    "\n"
2464    ")\n"
2465    " (function shadow2DProj\n"
2466    "   (signature vec4\n"
2467    "     (parameters\n"
2468    "       (declare (in) sampler2DShadow sampler)\n"
2469    "       (declare (in) vec4 P) )\n"
2470    "     ((return (tex (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) (swiz z (var_ref P)) ))))\n"
2471    "\n"
2472    ")\n"
2473    " (function shadow2DProjLod\n"
2474    "   (signature vec4\n"
2475    "     (parameters\n"
2476    "       (declare (in) sampler2DShadow sampler)\n"
2477    "       (declare (in) vec4 P) \n"
2478    "       (declare (in) float lod) )\n"
2479    "     ((return (txl (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref lod) ))))\n"
2480    "\n"
2481    "))\n"
2482 };
2483
2484 static const char *functions_for_110 [] = {
2485    builtins_110_abs,
2486    builtins_110_all,
2487    builtins_110_any,
2488    builtins_110_asin,
2489    builtins_110_atan,
2490    builtins_110_ceil,
2491    builtins_110_clamp,
2492    builtins_110_cos,
2493    builtins_110_cross,
2494    builtins_110_degrees,
2495    builtins_110_distance,
2496    builtins_110_dot,
2497    builtins_110_equal,
2498    builtins_110_exp,
2499    builtins_110_exp2,
2500    builtins_110_faceforward,
2501    builtins_110_floor,
2502    builtins_110_fract,
2503    builtins_110_greaterThan,
2504    builtins_110_greaterThanEqual,
2505    builtins_110_inversesqrt,
2506    builtins_110_length,
2507    builtins_110_lessThan,
2508    builtins_110_lessThanEqual,
2509    builtins_110_log,
2510    builtins_110_log2,
2511    builtins_110_matrixCompMult,
2512    builtins_110_max,
2513    builtins_110_min,
2514    builtins_110_mix,
2515    builtins_110_mod,
2516    builtins_110_noise_fake,
2517    builtins_110_normalize,
2518    builtins_110_not,
2519    builtins_110_notEqual,
2520    builtins_110_pow,
2521    builtins_110_radians,
2522    builtins_110_reflect,
2523    builtins_110_refract,
2524    builtins_110_sign,
2525    builtins_110_sin,
2526    builtins_110_smoothstep,
2527    builtins_110_sqrt,
2528    builtins_110_step,
2529    builtins_110_tan,
2530    builtins_110_textures,
2531 };
2532
2533 /* 110_fs builtins */
2534
2535 static const char *builtins_110_fs_derivatives = {
2536    "((function dFdx\n"
2537    "   (signature float\n"
2538    "     (parameters\n"
2539    "       (declare (in) float p))\n"
2540    "     ((return (expression float dFdx (var_ref p)))))\n"
2541    "\n"
2542    "   (signature vec2\n"
2543    "     (parameters\n"
2544    "       (declare (in) vec2 p))\n"
2545    "     ((return (expression vec2 dFdx (var_ref p)))))\n"
2546    "\n"
2547    "   (signature vec3\n"
2548    "     (parameters\n"
2549    "       (declare (in) vec3 p))\n"
2550    "     ((return (expression vec3 dFdx (var_ref p)))))\n"
2551    "\n"
2552    "   (signature vec4\n"
2553    "     (parameters\n"
2554    "       (declare (in) vec4 p))\n"
2555    "     ((return (expression vec4 dFdx (var_ref p)))))\n"
2556    " )\n"
2557    "\n"
2558    " (function dFdy\n"
2559    "   (signature float\n"
2560    "     (parameters\n"
2561    "       (declare (in) float p))\n"
2562    "     ((return (expression float dFdy (var_ref p)))))\n"
2563    "\n"
2564    "   (signature vec2\n"
2565    "     (parameters\n"
2566    "       (declare (in) vec2 p))\n"
2567    "     ((return (expression vec2 dFdy (var_ref p)))))\n"
2568    "\n"
2569    "   (signature vec3\n"
2570    "     (parameters\n"
2571    "       (declare (in) vec3 p))\n"
2572    "     ((return (expression vec3 dFdy (var_ref p)))))\n"
2573    "\n"
2574    "   (signature vec4\n"
2575    "     (parameters\n"
2576    "       (declare (in) vec4 p))\n"
2577    "     ((return (expression vec4 dFdy (var_ref p)))))\n"
2578    " )\n"
2579    "\n"
2580    " (function fwidth\n"
2581    "   (signature float\n"
2582    "     (parameters\n"
2583    "       (declare (in) float p))\n"
2584    "     ((return (expression float +\n"
2585    "                (expression float abs (expression float dFdx (var_ref p)))\n"
2586    "                (expression float abs (expression float dFdy (var_ref p)))))))\n"
2587    "\n"
2588    "   (signature vec2\n"
2589    "     (parameters\n"
2590    "       (declare (in) vec2 p))\n"
2591    "     ((return (expression vec2 +\n"
2592    "                (expression vec2 abs (expression vec2 dFdx (var_ref p)))\n"
2593    "                (expression vec2 abs (expression vec2 dFdy (var_ref p)))))))\n"
2594    "\n"
2595    "   (signature vec3\n"
2596    "     (parameters\n"
2597    "       (declare (in) vec3 p))\n"
2598    "     ((return (expression vec3 +\n"
2599    "                (expression vec3 abs (expression vec3 dFdx (var_ref p)))\n"
2600    "                (expression vec3 abs (expression vec3 dFdy (var_ref p)))))))\n"
2601    "\n"
2602    "   (signature vec4\n"
2603    "     (parameters\n"
2604    "       (declare (in) vec4 p))\n"
2605    "     ((return (expression vec4 +\n"
2606    "                (expression vec4 abs (expression vec4 dFdx (var_ref p)))\n"
2607    "                (expression vec4 abs (expression vec4 dFdy (var_ref p)))))))\n"
2608    "))\n"
2609 };
2610
2611 static const char *builtins_110_fs_textures = {
2612    "((function texture1D\n"
2613    "   (signature vec4\n"
2614    "     (parameters\n"
2615    "       (declare (in) sampler1D sampler)\n"
2616    "       (declare (in) float P) \n"
2617    "       (declare (in) float bias) )\n"
2618    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
2619    "\n"
2620    ")\n"
2621    " (function texture1DProj\n"
2622    "   (signature vec4\n"
2623    "     (parameters\n"
2624    "       (declare (in) sampler1D sampler)\n"
2625    "       (declare (in) vec2 P) \n"
2626    "       (declare (in) float bias) )\n"
2627    "     ((return (txb (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () (var_ref bias) ))))\n"
2628    "\n"
2629    "   (signature vec4\n"
2630    "     (parameters\n"
2631    "       (declare (in) sampler1D sampler)\n"
2632    "       (declare (in) vec4 P) \n"
2633    "       (declare (in) float bias) )\n"
2634    "     ((return (txb (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref bias) ))))\n"
2635    "\n"
2636    ")\n"
2637    " (function texture2D\n"
2638    "   (signature vec4\n"
2639    "     (parameters\n"
2640    "       (declare (in) sampler2D sampler)\n"
2641    "       (declare (in) vec2 P) \n"
2642    "       (declare (in) float bias) )\n"
2643    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
2644    "\n"
2645    ")\n"
2646    " (function texture2DProj\n"
2647    "   (signature vec4\n"
2648    "     (parameters\n"
2649    "       (declare (in) sampler2D sampler)\n"
2650    "       (declare (in) vec3 P) \n"
2651    "       (declare (in) float bias) )\n"
2652    "     ((return (txb (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () (var_ref bias) ))))\n"
2653    "\n"
2654    "   (signature vec4\n"
2655    "     (parameters\n"
2656    "       (declare (in) sampler2D sampler)\n"
2657    "       (declare (in) vec4 P) \n"
2658    "       (declare (in) float bias) )\n"
2659    "     ((return (txb (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref bias) ))))\n"
2660    "\n"
2661    ")\n"
2662    " (function texture3D\n"
2663    "   (signature vec4\n"
2664    "     (parameters\n"
2665    "       (declare (in) sampler3D sampler)\n"
2666    "       (declare (in) vec3 P) \n"
2667    "       (declare (in) float bias) )\n"
2668    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
2669    "\n"
2670    ")\n"
2671    " (function texture3DProj\n"
2672    "   (signature vec4\n"
2673    "     (parameters\n"
2674    "       (declare (in) sampler3D sampler)\n"
2675    "       (declare (in) vec4 P) \n"
2676    "       (declare (in) float bias) )\n"
2677    "     ((return (txb (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref bias) ))))\n"
2678    "\n"
2679    ")\n"
2680    " (function textureCube\n"
2681    "   (signature vec4\n"
2682    "     (parameters\n"
2683    "       (declare (in) samplerCube sampler)\n"
2684    "       (declare (in) vec3 P) \n"
2685    "       (declare (in) float bias) )\n"
2686    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
2687    "\n"
2688    ")\n"
2689    " (function shadow1D\n"
2690    "   (signature vec4\n"
2691    "     (parameters\n"
2692    "       (declare (in) sampler1DShadow sampler)\n"
2693    "       (declare (in) vec3 P) \n"
2694    "       (declare (in) float bias) )\n"
2695    "     ((return (txb (var_ref sampler) (swiz x (var_ref P)) (0 0 0) 1 (swiz z (var_ref P)) (var_ref bias) ))))\n"
2696    "\n"
2697    ")\n"
2698    " (function shadow1DProj\n"
2699    "   (signature vec4\n"
2700    "     (parameters\n"
2701    "       (declare (in) sampler1DShadow sampler)\n"
2702    "       (declare (in) vec4 P) \n"
2703    "       (declare (in) float bias) )\n"
2704    "     ((return (txb (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref bias) ))))\n"
2705    "\n"
2706    ")\n"
2707    " (function shadow2D\n"
2708    "   (signature vec4\n"
2709    "     (parameters\n"
2710    "       (declare (in) sampler2DShadow sampler)\n"
2711    "       (declare (in) vec3 P) \n"
2712    "       (declare (in) float bias) )\n"
2713    "     ((return (txb (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) 1 (swiz z (var_ref P)) (var_ref bias) ))))\n"
2714    "\n"
2715    ")\n"
2716    " (function shadow2DProj\n"
2717    "   (signature vec4\n"
2718    "     (parameters\n"
2719    "       (declare (in) sampler2DShadow sampler)\n"
2720    "       (declare (in) vec4 P) \n"
2721    "       (declare (in) float bias) )\n"
2722    "     ((return (txb (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) (swiz z (var_ref P)) (var_ref bias) ))))\n"
2723    "\n"
2724    "))\n"
2725 };
2726
2727 static const char *functions_for_110_fs [] = {
2728    builtins_110_fs_derivatives,
2729    builtins_110_fs_textures,
2730 };
2731
2732 /* 110_vs builtins */
2733
2734 static const char *builtins_110_vs_ftransform = {
2735    "((function ftransform\n"
2736    "   (signature vec4\n"
2737    "     (parameters)\n"
2738    "    ((return (expression vec4 *\n"
2739    "          (var_ref gl_ModelViewProjectionMatrix)\n"
2740    "          (var_ref gl_Vertex)))))\n"
2741    "))\n"
2742 };
2743
2744 static const char *functions_for_110_vs [] = {
2745    builtins_110_vs_ftransform,
2746 };
2747
2748 /* 120 builtins */
2749
2750 static const char *builtins_120_matrixCompMult = {
2751    "((function matrixCompMult\n"
2752    "   (signature mat2x3\n"
2753    "     (parameters\n"
2754    "       (declare (in) mat2x3 x)\n"
2755    "       (declare (in) mat2x3 y))\n"
2756    "     ((declare () mat2x3 z)\n"
2757    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (0)))  (expression vec3 * (array_ref (var_ref x) (constant int (0))) (array_ref (var_ref y) (constant int (0))))) \n"
2758    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (1)))  (expression vec3 * (array_ref (var_ref x) (constant int (1))) (array_ref (var_ref y) (constant int (1))))) \n"
2759    "(return (var_ref z))))\n"
2760    "\n"
2761    "   (signature mat3x2\n"
2762    "     (parameters\n"
2763    "       (declare (in) mat3x2 x)\n"
2764    "       (declare (in) mat3x2 y))\n"
2765    "     ((declare () mat3x2 z)\n"
2766    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (0)))  (expression vec2 * (array_ref (var_ref x) (constant int (0))) (array_ref (var_ref y) (constant int (0))))) \n"
2767    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (1)))  (expression vec2 * (array_ref (var_ref x) (constant int (1))) (array_ref (var_ref y) (constant int (1))))) \n"
2768    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (2)))  (expression vec2 * (array_ref (var_ref x) (constant int (2))) (array_ref (var_ref y) (constant int (2))))) \n"
2769    "(return (var_ref z))))\n"
2770    "\n"
2771    "   (signature mat2x4\n"
2772    "     (parameters\n"
2773    "       (declare (in) mat2x4 x)\n"
2774    "       (declare (in) mat2x4 y))\n"
2775    "     ((declare () mat2x4 z)\n"
2776    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (0)))  (expression vec4 * (array_ref (var_ref x) (constant int (0))) (array_ref (var_ref y) (constant int (0))))) \n"
2777    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (1)))  (expression vec4 * (array_ref (var_ref x) (constant int (1))) (array_ref (var_ref y) (constant int (1))))) \n"
2778    "(return (var_ref z))))\n"
2779    "\n"
2780    "   (signature mat4x2\n"
2781    "     (parameters\n"
2782    "       (declare (in) mat4x2 x)\n"
2783    "       (declare (in) mat4x2 y))\n"
2784    "     ((declare () mat4x2 z)\n"
2785    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (0)))  (expression vec2 * (array_ref (var_ref x) (constant int (0))) (array_ref (var_ref y) (constant int (0))))) \n"
2786    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (1)))  (expression vec2 * (array_ref (var_ref x) (constant int (1))) (array_ref (var_ref y) (constant int (1))))) \n"
2787    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (2)))  (expression vec2 * (array_ref (var_ref x) (constant int (2))) (array_ref (var_ref y) (constant int (2))))) \n"
2788    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (3)))  (expression vec2 * (array_ref (var_ref x) (constant int (3))) (array_ref (var_ref y) (constant int (3))))) \n"
2789    "(return (var_ref z))))\n"
2790    "\n"
2791    "   (signature mat3x4\n"
2792    "     (parameters\n"
2793    "       (declare (in) mat3x4 x)\n"
2794    "       (declare (in) mat3x4 y))\n"
2795    "     ((declare () mat3x4 z)\n"
2796    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (0)))  (expression vec4 * (array_ref (var_ref x) (constant int (0))) (array_ref (var_ref y) (constant int (0))))) \n"
2797    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (1)))  (expression vec4 * (array_ref (var_ref x) (constant int (1))) (array_ref (var_ref y) (constant int (1))))) \n"
2798    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (2)))  (expression vec4 * (array_ref (var_ref x) (constant int (2))) (array_ref (var_ref y) (constant int (2))))) \n"
2799    "(return (var_ref z))))\n"
2800    "\n"
2801    "   (signature mat4x3\n"
2802    "     (parameters\n"
2803    "       (declare (in) mat4x3 x)\n"
2804    "       (declare (in) mat4x3 y))\n"
2805    "     ((declare () mat4x3 z)\n"
2806    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (0)))  (expression vec3 * (array_ref (var_ref x) (constant int (0))) (array_ref (var_ref y) (constant int (0))))) \n"
2807    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (1)))  (expression vec3 * (array_ref (var_ref x) (constant int (1))) (array_ref (var_ref y) (constant int (1))))) \n"
2808    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (2)))  (expression vec3 * (array_ref (var_ref x) (constant int (2))) (array_ref (var_ref y) (constant int (2))))) \n"
2809    "      (assign (constant bool (1)) (array_ref (var_ref z) (constant int (3)))  (expression vec3 * (array_ref (var_ref x) (constant int (3))) (array_ref (var_ref y) (constant int (3))))) \n"
2810    "(return (var_ref z))))\n"
2811    "))\n"
2812 };
2813
2814 static const char *builtins_120_outerProduct = {
2815    "((function outerProduct\n"
2816    "   (signature mat2\n"
2817    "     (parameters\n"
2818    "       (declare (in) vec2 u)\n"
2819    "       (declare (in) vec2 v))\n"
2820    "     ((declare () mat2 m)\n"
2821    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0)))  (expression vec2 * (var_ref v) (swiz x (var_ref u)))) \n"
2822    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1)))  (expression vec2 * (var_ref v) (swiz y (var_ref u)))) \n"
2823    "(return (var_ref m))))\n"
2824    "\n"
2825    "   (signature mat2x3\n"
2826    "     (parameters\n"
2827    "       (declare (in) vec2 u)\n"
2828    "       (declare (in) vec3 v))\n"
2829    "     ((declare () mat2x3 m)\n"
2830    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0)))  (expression vec3 * (var_ref v) (swiz x (var_ref u)))) \n"
2831    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1)))  (expression vec3 * (var_ref v) (swiz y (var_ref u)))) \n"
2832    "(return (var_ref m))))\n"
2833    "\n"
2834    "   (signature mat2x4\n"
2835    "     (parameters\n"
2836    "       (declare (in) vec2 u)\n"
2837    "       (declare (in) vec4 v))\n"
2838    "     ((declare () mat2x4 m)\n"
2839    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0)))  (expression vec4 * (var_ref v) (swiz x (var_ref u)))) \n"
2840    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1)))  (expression vec4 * (var_ref v) (swiz y (var_ref u)))) \n"
2841    "(return (var_ref m))))\n"
2842    "\n"
2843    "   (signature mat3x2\n"
2844    "     (parameters\n"
2845    "       (declare (in) vec3 u)\n"
2846    "       (declare (in) vec2 v))\n"
2847    "     ((declare () mat3x2 m)\n"
2848    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0)))  (expression vec2 * (var_ref v) (swiz x (var_ref u)))) \n"
2849    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1)))  (expression vec2 * (var_ref v) (swiz y (var_ref u)))) \n"
2850    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (2)))  (expression vec2 * (var_ref v) (swiz z (var_ref u)))) \n"
2851    "(return (var_ref m))))\n"
2852    "\n"
2853    "   (signature mat3\n"
2854    "     (parameters\n"
2855    "       (declare (in) vec3 u)\n"
2856    "       (declare (in) vec3 v))\n"
2857    "     ((declare () mat3 m)\n"
2858    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0)))  (expression vec3 * (var_ref v) (swiz x (var_ref u)))) \n"
2859    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1)))  (expression vec3 * (var_ref v) (swiz y (var_ref u)))) \n"
2860    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (2)))  (expression vec3 * (var_ref v) (swiz z (var_ref u)))) \n"
2861    "(return (var_ref m))))\n"
2862    "\n"
2863    "   (signature mat3x4\n"
2864    "     (parameters\n"
2865    "       (declare (in) vec3 u)\n"
2866    "       (declare (in) vec4 v))\n"
2867    "     ((declare () mat3x4 m)\n"
2868    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0)))  (expression vec4 * (var_ref v) (swiz x (var_ref u)))) \n"
2869    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1)))  (expression vec4 * (var_ref v) (swiz y (var_ref u)))) \n"
2870    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (2)))  (expression vec4 * (var_ref v) (swiz z (var_ref u)))) \n"
2871    "(return (var_ref m))))\n"
2872    "\n"
2873    "   (signature mat4x2\n"
2874    "     (parameters\n"
2875    "       (declare (in) vec4 u)\n"
2876    "       (declare (in) vec2 v))\n"
2877    "     ((declare () mat4x2 m)\n"
2878    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0)))  (expression vec2 * (var_ref v) (swiz x (var_ref u)))) \n"
2879    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1)))  (expression vec2 * (var_ref v) (swiz y (var_ref u)))) \n"
2880    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (2)))  (expression vec2 * (var_ref v) (swiz z (var_ref u)))) \n"
2881    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (3)))  (expression vec2 * (var_ref v) (swiz w (var_ref u)))) \n"
2882    "(return (var_ref m))))\n"
2883    "\n"
2884    "   (signature mat4x3\n"
2885    "     (parameters\n"
2886    "       (declare (in) vec4 u)\n"
2887    "       (declare (in) vec3 v))\n"
2888    "     ((declare () mat4x3 m)\n"
2889    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0)))  (expression vec3 * (var_ref v) (swiz x (var_ref u)))) \n"
2890    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1)))  (expression vec3 * (var_ref v) (swiz y (var_ref u)))) \n"
2891    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (2)))  (expression vec3 * (var_ref v) (swiz z (var_ref u)))) \n"
2892    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (3)))  (expression vec3 * (var_ref v) (swiz w (var_ref u)))) \n"
2893    "(return (var_ref m))))\n"
2894    "\n"
2895    "   (signature mat4\n"
2896    "     (parameters\n"
2897    "       (declare (in) vec4 u)\n"
2898    "       (declare (in) vec4 v))\n"
2899    "     ((declare () mat4 m)\n"
2900    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0)))  (expression vec4 * (var_ref v) (swiz x (var_ref u)))) \n"
2901    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1)))  (expression vec4 * (var_ref v) (swiz y (var_ref u)))) \n"
2902    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (2)))  (expression vec4 * (var_ref v) (swiz z (var_ref u)))) \n"
2903    "      (assign (constant bool (1)) (array_ref (var_ref m) (constant int (3)))  (expression vec4 * (var_ref v) (swiz w (var_ref u)))) \n"
2904    "(return (var_ref m))))\n"
2905    "))\n"
2906    "\n"
2907 };
2908
2909 static const char *builtins_120_transpose = {
2910    "((function transpose\n"
2911    "   (signature mat2\n"
2912    "     (parameters\n"
2913    "       (declare (in) mat2 m))\n"
2914    "     ((declare () mat2 t)\n"
2915    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (0))))) \n"
2916    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (0))))) \n"
2917    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (1))))) \n"
2918    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (1))))) \n"
2919    "(return (var_ref t))))\n"
2920    "\n"
2921    "   (signature mat3x2\n"
2922    "     (parameters\n"
2923    "       (declare (in) mat2x3 m))\n"
2924    "     ((declare () mat3x2 t)\n"
2925    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (0))))) \n"
2926    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (0))))) \n"
2927    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (0))))) \n"
2928    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (1))))) \n"
2929    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (1))))) \n"
2930    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (1))))) \n"
2931    "(return (var_ref t))))\n"
2932    "\n"
2933    "   (signature mat4x2\n"
2934    "     (parameters\n"
2935    "       (declare (in) mat2x4 m))\n"
2936    "     ((declare () mat4x2 t)\n"
2937    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (0))))) \n"
2938    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (0))))) \n"
2939    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (0))))) \n"
2940    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (3)))) (swiz w (array_ref (var_ref m) (constant int (0))))) \n"
2941    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (1))))) \n"
2942    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (1))))) \n"
2943    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (1))))) \n"
2944    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (3)))) (swiz w (array_ref (var_ref m) (constant int (1))))) \n"
2945    "(return (var_ref t))))\n"
2946    "\n"
2947    "   (signature mat2x3\n"
2948    "     (parameters\n"
2949    "       (declare (in) mat3x2 m))\n"
2950    "     ((declare () mat2x3 t)\n"
2951    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (0))))) \n"
2952    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (0))))) \n"
2953    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (1))))) \n"
2954    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (1))))) \n"
2955    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (2))))) \n"
2956    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (2))))) \n"
2957    "(return (var_ref t))))\n"
2958    "\n"
2959    "   (signature mat3\n"
2960    "     (parameters\n"
2961    "       (declare (in) mat3 m))\n"
2962    "     ((declare () mat3 t)\n"
2963    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (0))))) \n"
2964    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (0))))) \n"
2965    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (0))))) \n"
2966    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (1))))) \n"
2967    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (1))))) \n"
2968    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (1))))) \n"
2969    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (2))))) \n"
2970    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (2))))) \n"
2971    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (2))))) \n"
2972    "(return (var_ref t))))\n"
2973    "\n"
2974    "   (signature mat4x3\n"
2975    "     (parameters\n"
2976    "       (declare (in) mat3x4 m))\n"
2977    "     ((declare () mat4x3 t)\n"
2978    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (0))))) \n"
2979    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (0))))) \n"
2980    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (0))))) \n"
2981    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (3)))) (swiz w (array_ref (var_ref m) (constant int (0))))) \n"
2982    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (1))))) \n"
2983    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (1))))) \n"
2984    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (1))))) \n"
2985    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (3)))) (swiz w (array_ref (var_ref m) (constant int (1))))) \n"
2986    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (2))))) \n"
2987    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (2))))) \n"
2988    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (2))))) \n"
2989    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (3)))) (swiz w (array_ref (var_ref m) (constant int (2))))) \n"
2990    "(return (var_ref t))))\n"
2991    "\n"
2992    "   (signature mat2x4\n"
2993    "     (parameters\n"
2994    "       (declare (in) mat4x2 m))\n"
2995    "     ((declare () mat2x4 t)\n"
2996    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (0))))) \n"
2997    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (0))))) \n"
2998    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (1))))) \n"
2999    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (1))))) \n"
3000    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (2))))) \n"
3001    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (2))))) \n"
3002    "      (assign (constant bool (1)) (swiz w (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (3))))) \n"
3003    "      (assign (constant bool (1)) (swiz w (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (3))))) \n"
3004    "(return (var_ref t))))\n"
3005    "\n"
3006    "   (signature mat3x4\n"
3007    "     (parameters\n"
3008    "       (declare (in) mat4x3 m))\n"
3009    "     ((declare () mat3x4 t)\n"
3010    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (0))))) \n"
3011    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (0))))) \n"
3012    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (0))))) \n"
3013    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (1))))) \n"
3014    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (1))))) \n"
3015    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (1))))) \n"
3016    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (2))))) \n"
3017    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (2))))) \n"
3018    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (2))))) \n"
3019    "      (assign (constant bool (1)) (swiz w (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (3))))) \n"
3020    "      (assign (constant bool (1)) (swiz w (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (3))))) \n"
3021    "      (assign (constant bool (1)) (swiz w (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (3))))) \n"
3022    "(return (var_ref t))))\n"
3023    "\n"
3024    "   (signature mat4\n"
3025    "     (parameters\n"
3026    "       (declare (in) mat4 m))\n"
3027    "     ((declare () mat4 t)\n"
3028    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (0))))) \n"
3029    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (0))))) \n"
3030    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (0))))) \n"
3031    "      (assign (constant bool (1)) (swiz x (array_ref (var_ref t) (constant int (3)))) (swiz w (array_ref (var_ref m) (constant int (0))))) \n"
3032    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (1))))) \n"
3033    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (1))))) \n"
3034    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (1))))) \n"
3035    "      (assign (constant bool (1)) (swiz y (array_ref (var_ref t) (constant int (3)))) (swiz w (array_ref (var_ref m) (constant int (1))))) \n"
3036    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (2))))) \n"
3037    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (2))))) \n"
3038    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (2))))) \n"
3039    "      (assign (constant bool (1)) (swiz z (array_ref (var_ref t) (constant int (3)))) (swiz w (array_ref (var_ref m) (constant int (2))))) \n"
3040    "      (assign (constant bool (1)) (swiz w (array_ref (var_ref t) (constant int (0)))) (swiz x (array_ref (var_ref m) (constant int (3))))) \n"
3041    "      (assign (constant bool (1)) (swiz w (array_ref (var_ref t) (constant int (1)))) (swiz y (array_ref (var_ref m) (constant int (3))))) \n"
3042    "      (assign (constant bool (1)) (swiz w (array_ref (var_ref t) (constant int (2)))) (swiz z (array_ref (var_ref m) (constant int (3))))) \n"
3043    "      (assign (constant bool (1)) (swiz w (array_ref (var_ref t) (constant int (3)))) (swiz w (array_ref (var_ref m) (constant int (3))))) \n"
3044    "(return (var_ref t))))\n"
3045    ")\n"
3046    "\n"
3047    ")\n"
3048    "\n"
3049 };
3050
3051 static const char *functions_for_120 [] = {
3052    builtins_120_matrixCompMult,
3053    builtins_120_outerProduct,
3054    builtins_120_transpose,
3055 };
3056
3057 /* 130 builtins */
3058
3059 static const char *builtins_130_clamp = {
3060    "((function clamp\n"
3061    "   (signature int\n"
3062    "     (parameters\n"
3063    "       (declare (in) int arg0)\n"
3064    "       (declare (in) int arg1)\n"
3065    "       (declare (in) int arg2))\n"
3066    "     ((return (expression int max (expression int min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
3067    "\n"
3068    "   (signature ivec2\n"
3069    "     (parameters\n"
3070    "       (declare (in) ivec2 arg0)\n"
3071    "       (declare (in) ivec2 arg1)\n"
3072    "       (declare (in) ivec2 arg2))\n"
3073    "     ((return (expression ivec2 max (expression ivec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
3074    "\n"
3075    "   (signature ivec3\n"
3076    "     (parameters\n"
3077    "       (declare (in) ivec3 arg0)\n"
3078    "       (declare (in) ivec3 arg1)\n"
3079    "       (declare (in) ivec3 arg2))\n"
3080    "     ((return (expression ivec3 max (expression ivec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
3081    "\n"
3082    "   (signature ivec4\n"
3083    "     (parameters\n"
3084    "       (declare (in) ivec4 arg0)\n"
3085    "       (declare (in) ivec4 arg1)\n"
3086    "       (declare (in) ivec4 arg2))\n"
3087    "     ((return (expression ivec4 max (expression ivec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
3088    "\n"
3089    "   (signature ivec2\n"
3090    "     (parameters\n"
3091    "       (declare (in) ivec2 arg0)\n"
3092    "       (declare (in) int arg1)\n"
3093    "       (declare (in) int arg2))\n"
3094    "     ((declare () ivec2 result)\n"
3095    "      (assign (constant bool (1)) (swiz x (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3096    "      (assign (constant bool (1)) (swiz y (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3097    "      (return (var_ref result))))\n"
3098    "\n"
3099    "   (signature ivec3\n"
3100    "     (parameters\n"
3101    "       (declare (in) ivec3 arg0)\n"
3102    "       (declare (in) int arg1)\n"
3103    "       (declare (in) int arg2))\n"
3104    "     ((declare () ivec3 result)\n"
3105    "      (assign (constant bool (1)) (swiz x (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3106    "      (assign (constant bool (1)) (swiz y (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3107    "      (assign (constant bool (1)) (swiz z (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz z (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3108    "      (return (var_ref result))))\n"
3109    "\n"
3110    "   (signature ivec4\n"
3111    "     (parameters\n"
3112    "       (declare (in) ivec4 arg0)\n"
3113    "       (declare (in) int arg1)\n"
3114    "       (declare (in) int arg2))\n"
3115    "     ((declare () ivec4 result)\n"
3116    "      (assign (constant bool (1)) (swiz x (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3117    "      (assign (constant bool (1)) (swiz y (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3118    "      (assign (constant bool (1)) (swiz z (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz z (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3119    "      (assign (constant bool (1)) (swiz w (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz w (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3120    "      (return (var_ref result))))\n"
3121    "\n"
3122    "   (signature uint\n"
3123    "     (parameters\n"
3124    "       (declare (in) uint arg0)\n"
3125    "       (declare (in) uint arg1)\n"
3126    "       (declare (in) uint arg2))\n"
3127    "     ((return (expression uint max (expression uint min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
3128    "\n"
3129    "   (signature uvec2\n"
3130    "     (parameters\n"
3131    "       (declare (in) uvec2 arg0)\n"
3132    "       (declare (in) uvec2 arg1)\n"
3133    "       (declare (in) uvec2 arg2))\n"
3134    "     ((return (expression uvec2 max (expression uvec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
3135    "\n"
3136    "   (signature uvec3\n"
3137    "     (parameters\n"
3138    "       (declare (in) uvec3 arg0)\n"
3139    "       (declare (in) uvec3 arg1)\n"
3140    "       (declare (in) uvec3 arg2))\n"
3141    "     ((return (expression uvec3 max (expression uvec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
3142    "\n"
3143    "   (signature uvec4\n"
3144    "     (parameters\n"
3145    "       (declare (in) uvec4 arg0)\n"
3146    "       (declare (in) uvec4 arg1)\n"
3147    "       (declare (in) uvec4 arg2))\n"
3148    "     ((return (expression uvec4 max (expression uvec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
3149    "\n"
3150    "   (signature uvec2\n"
3151    "     (parameters\n"
3152    "       (declare (in) uvec2 arg0)\n"
3153    "       (declare (in) uint arg1)\n"
3154    "       (declare (in) uint arg2))\n"
3155    "     ((declare () uvec2 result)\n"
3156    "      (assign (constant bool (1)) (swiz x (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3157    "      (assign (constant bool (1)) (swiz y (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3158    "      (return (var_ref result))))\n"
3159    "\n"
3160    "   (signature uvec3\n"
3161    "     (parameters\n"
3162    "       (declare (in) uvec3 arg0)\n"
3163    "       (declare (in) uint arg1)\n"
3164    "       (declare (in) uint arg2))\n"
3165    "     ((declare () uvec3 result)\n"
3166    "      (assign (constant bool (1)) (swiz x (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3167    "      (assign (constant bool (1)) (swiz y (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3168    "      (assign (constant bool (1)) (swiz z (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz z (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3169    "      (return (var_ref result))))\n"
3170    "\n"
3171    "   (signature uvec4\n"
3172    "     (parameters\n"
3173    "       (declare (in) uvec4 arg0)\n"
3174    "       (declare (in) uint arg1)\n"
3175    "       (declare (in) uint arg2))\n"
3176    "     ((declare () uvec4 result)\n"
3177    "      (assign (constant bool (1)) (swiz x (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3178    "      (assign (constant bool (1)) (swiz y (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3179    "      (assign (constant bool (1)) (swiz z (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz z (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3180    "      (assign (constant bool (1)) (swiz w (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz w (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
3181    "      (return (var_ref result))))\n"
3182    "))\n"
3183 };
3184
3185 static const char *builtins_130_cosh = {
3186    "((function cosh\n"
3187    "   (signature float\n"
3188    "     (parameters\n"
3189    "       (declare (in) float x))\n"
3190    "     ((return (expression float * (constant float (0.5))\n"
3191    "                (expression float +\n"
3192    "              (expression float exp (var_ref x))\n"
3193    "              (expression float exp (expression float neg (var_ref x))))))))\n"
3194    "   (signature vec2\n"
3195    "     (parameters\n"
3196    "       (declare (in) vec2 x))\n"
3197    "     ((return (expression vec2 * (constant vec2 (0.5))\n"
3198    "                (expression vec2 +\n"
3199    "              (expression vec2 exp (var_ref x))\n"
3200    "              (expression vec2 exp (expression vec2 neg (var_ref x))))))))\n"
3201    "   (signature vec3\n"
3202    "     (parameters\n"
3203    "       (declare (in) vec3 x))\n"
3204    "     ((return (expression vec3 * (constant vec3 (0.5))\n"
3205    "                (expression vec3 +\n"
3206    "              (expression vec3 exp (var_ref x))\n"
3207    "              (expression vec3 exp (expression vec3 neg (var_ref x))))))))\n"
3208    "   (signature vec4\n"
3209    "     (parameters\n"
3210    "       (declare (in) vec4 x))\n"
3211    "     ((return (expression vec4 * (constant vec4 (0.5))\n"
3212    "                (expression vec4 +\n"
3213    "              (expression vec4 exp (var_ref x))\n"
3214    "              (expression vec4 exp (expression vec4 neg (var_ref x))))))))\n"
3215    "))\n"
3216 };
3217
3218 static const char *builtins_130_equal = {
3219    "((function equal\n"
3220    "   (signature bvec2\n"
3221    "     (parameters\n"
3222    "       (declare (in) uvec2 arg0)\n"
3223    "       (declare (in) uvec2 arg1))\n"
3224    "     ((declare () bvec2 temp)\n"
3225    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3226    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3227    "      (return (var_ref temp))))\n"
3228    "\n"
3229    "   (signature bvec3\n"
3230    "     (parameters\n"
3231    "       (declare (in) uvec3 arg0)\n"
3232    "       (declare (in) uvec3 arg1))\n"
3233    "     ((declare () bvec3 temp)\n"
3234    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3235    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3236    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool == (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
3237    "      (return (var_ref temp))))\n"
3238    "\n"
3239    "   (signature bvec4\n"
3240    "     (parameters\n"
3241    "       (declare (in) uvec4 arg0)\n"
3242    "       (declare (in) uvec4 arg1))\n"
3243    "     ((declare () bvec4 temp)\n"
3244    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool == (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3245    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool == (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3246    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool == (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
3247    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool == (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
3248    "      (return (var_ref temp))))\n"
3249    "))\n"
3250 };
3251
3252 static const char *builtins_130_greaterThan = {
3253    "((function greaterThan\n"
3254    "   (signature bvec2\n"
3255    "     (parameters\n"
3256    "       (declare (in) uvec2 arg0)\n"
3257    "       (declare (in) uvec2 arg1))\n"
3258    "     ((declare () bvec2 temp)\n"
3259    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3260    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3261    "      (return (var_ref temp))))\n"
3262    "\n"
3263    "   (signature bvec3\n"
3264    "     (parameters\n"
3265    "       (declare (in) uvec3 arg0)\n"
3266    "       (declare (in) uvec3 arg1))\n"
3267    "     ((declare () bvec3 temp)\n"
3268    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3269    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3270    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool > (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
3271    "      (return (var_ref temp))))\n"
3272    "\n"
3273    "   (signature bvec4\n"
3274    "     (parameters\n"
3275    "       (declare (in) uvec4 arg0)\n"
3276    "       (declare (in) uvec4 arg1))\n"
3277    "     ((declare () bvec4 temp)\n"
3278    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool > (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3279    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool > (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3280    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool > (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
3281    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool > (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
3282    "      (return (var_ref temp))))\n"
3283    "))\n"
3284 };
3285
3286 static const char *builtins_130_greaterThanEqual = {
3287    "((function greaterThanEqual\n"
3288    "   (signature bvec2\n"
3289    "     (parameters\n"
3290    "       (declare (in) uvec2 arg0)\n"
3291    "       (declare (in) uvec2 arg1))\n"
3292    "     ((declare () bvec2 temp)\n"
3293    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3294    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3295    "      (return (var_ref temp))))\n"
3296    "\n"
3297    "   (signature bvec3\n"
3298    "     (parameters\n"
3299    "       (declare (in) uvec3 arg0)\n"
3300    "       (declare (in) uvec3 arg1))\n"
3301    "     ((declare () bvec3 temp)\n"
3302    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3303    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3304    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool >= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
3305    "      (return (var_ref temp))))\n"
3306    "\n"
3307    "   (signature bvec4\n"
3308    "     (parameters\n"
3309    "       (declare (in) uvec4 arg0)\n"
3310    "       (declare (in) uvec4 arg1))\n"
3311    "     ((declare () bvec4 temp)\n"
3312    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool >= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3313    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool >= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3314    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool >= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
3315    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool >= (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
3316    "      (return (var_ref temp))))\n"
3317    "))\n"
3318 };
3319
3320 static const char *builtins_130_lessThan = {
3321    "((function lessThan\n"
3322    "   (signature bvec2\n"
3323    "     (parameters\n"
3324    "       (declare (in) uvec2 arg0)\n"
3325    "       (declare (in) uvec2 arg1))\n"
3326    "     ((declare () bvec2 temp)\n"
3327    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3328    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3329    "      (return (var_ref temp))))\n"
3330    "\n"
3331    "   (signature bvec3\n"
3332    "     (parameters\n"
3333    "       (declare (in) uvec3 arg0)\n"
3334    "       (declare (in) uvec3 arg1))\n"
3335    "     ((declare () bvec3 temp)\n"
3336    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3337    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3338    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool < (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
3339    "      (return (var_ref temp))))\n"
3340    "\n"
3341    "   (signature bvec4\n"
3342    "     (parameters\n"
3343    "       (declare (in) uvec4 arg0)\n"
3344    "       (declare (in) uvec4 arg1))\n"
3345    "     ((declare () bvec4 temp)\n"
3346    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool < (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3347    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool < (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3348    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool < (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
3349    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool < (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
3350    "      (return (var_ref temp))))\n"
3351    "))\n"
3352 };
3353
3354 static const char *builtins_130_lessThanEqual = {
3355    "((function lessThanEqual\n"
3356    "   (signature bvec2\n"
3357    "     (parameters\n"
3358    "       (declare (in) uvec2 arg0)\n"
3359    "       (declare (in) uvec2 arg1))\n"
3360    "     ((declare () bvec2 temp)\n"
3361    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3362    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3363    "      (return (var_ref temp))))\n"
3364    "\n"
3365    "   (signature bvec3\n"
3366    "     (parameters\n"
3367    "       (declare (in) uvec3 arg0)\n"
3368    "       (declare (in) uvec3 arg1))\n"
3369    "     ((declare () bvec3 temp)\n"
3370    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3371    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3372    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool <= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
3373    "      (return (var_ref temp))))\n"
3374    "\n"
3375    "   (signature bvec4\n"
3376    "     (parameters\n"
3377    "       (declare (in) uvec4 arg0)\n"
3378    "       (declare (in) uvec4 arg1))\n"
3379    "     ((declare () bvec4 temp)\n"
3380    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool <= (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3381    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool <= (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3382    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool <= (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
3383    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool <= (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
3384    "      (return (var_ref temp))))\n"
3385    "))\n"
3386 };
3387
3388 static const char *builtins_130_max = {
3389    "((function max\n"
3390    "   (signature int\n"
3391    "     (parameters\n"
3392    "       (declare (in) int arg0)\n"
3393    "       (declare (in) int arg1))\n"
3394    "     ((return (expression int max (var_ref arg0) (var_ref arg1)))))\n"
3395    "\n"
3396    "   (signature ivec2\n"
3397    "     (parameters\n"
3398    "       (declare (in) ivec2 arg0)\n"
3399    "       (declare (in) ivec2 arg1))\n"
3400    "     ((return (expression ivec2 max (var_ref arg0) (var_ref arg1)))))\n"
3401    "\n"
3402    "   (signature ivec3\n"
3403    "     (parameters\n"
3404    "       (declare (in) ivec3 arg0)\n"
3405    "       (declare (in) ivec3 arg1))\n"
3406    "     ((return (expression ivec3 max (var_ref arg0) (var_ref arg1)))))\n"
3407    "\n"
3408    "   (signature ivec4\n"
3409    "     (parameters\n"
3410    "       (declare (in) ivec4 arg0)\n"
3411    "       (declare (in) ivec4 arg1))\n"
3412    "     ((return (expression ivec4 max (var_ref arg0) (var_ref arg1)))))\n"
3413    "\n"
3414    "   (signature ivec2\n"
3415    "     (parameters\n"
3416    "       (declare (in) ivec2  arg0)\n"
3417    "       (declare (in) int arg1))\n"
3418    "     ((declare () ivec2 result)\n"
3419    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
3420    "              (expression int max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
3421    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
3422    "              (expression int max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
3423    "      (return (var_ref result))))\n"
3424    "\n"
3425    "   (signature ivec3\n"
3426    "     (parameters\n"
3427    "       (declare (in) ivec3  arg0)\n"
3428    "       (declare (in) int arg1))\n"
3429    "     ((declare () ivec3 result)\n"
3430    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
3431    "              (expression int max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
3432    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
3433    "              (expression int max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
3434    "      (assign (constant bool (1)) (swiz z (var_ref result))\n"
3435    "              (expression int max (swiz z (var_ref arg0)) (var_ref arg1)))\n"
3436    "      (return (var_ref result))))\n"
3437    "\n"
3438    "   (signature ivec4\n"
3439    "     (parameters\n"
3440    "       (declare (in) ivec4  arg0)\n"
3441    "       (declare (in) int arg1))\n"
3442    "     ((declare () ivec4 result)\n"
3443    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
3444    "              (expression int max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
3445    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
3446    "              (expression int max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
3447    "      (assign (constant bool (1)) (swiz z (var_ref result))\n"
3448    "              (expression int max (swiz z (var_ref arg0)) (var_ref arg1)))\n"
3449    "      (assign (constant bool (1)) (swiz w (var_ref result))\n"
3450    "              (expression int max (swiz w (var_ref arg0)) (var_ref arg1)))\n"
3451    "      (return (var_ref result))))\n"
3452    "\n"
3453    "   (signature uint\n"
3454    "     (parameters\n"
3455    "       (declare (in) uint arg0)\n"
3456    "       (declare (in) uint arg1))\n"
3457    "     ((return (expression uint max (var_ref arg0) (var_ref arg1)))))\n"
3458    "\n"
3459    "   (signature uvec2\n"
3460    "     (parameters\n"
3461    "       (declare (in) uvec2 arg0)\n"
3462    "       (declare (in) uvec2 arg1))\n"
3463    "     ((return (expression uvec2 max (var_ref arg0) (var_ref arg1)))))\n"
3464    "\n"
3465    "   (signature uvec3\n"
3466    "     (parameters\n"
3467    "       (declare (in) uvec3 arg0)\n"
3468    "       (declare (in) uvec3 arg1))\n"
3469    "     ((return (expression uvec3 max (var_ref arg0) (var_ref arg1)))))\n"
3470    "\n"
3471    "   (signature uvec4\n"
3472    "     (parameters\n"
3473    "       (declare (in) uvec4 arg0)\n"
3474    "       (declare (in) uvec4 arg1))\n"
3475    "     ((return (expression uvec4 max (var_ref arg0) (var_ref arg1)))))\n"
3476    "\n"
3477    "   (signature uvec2\n"
3478    "     (parameters\n"
3479    "       (declare (in) uvec2  arg0)\n"
3480    "       (declare (in) uint arg1))\n"
3481    "     ((declare () uvec2 result)\n"
3482    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
3483    "              (expression uint max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
3484    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
3485    "              (expression uint max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
3486    "      (return (var_ref result))))\n"
3487    "\n"
3488    "   (signature uvec3\n"
3489    "     (parameters\n"
3490    "       (declare (in) uvec3  arg0)\n"
3491    "       (declare (in) uint arg1))\n"
3492    "     ((declare () uvec3 result)\n"
3493    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
3494    "              (expression uint max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
3495    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
3496    "              (expression uint max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
3497    "      (assign (constant bool (1)) (swiz z (var_ref result))\n"
3498    "              (expression uint max (swiz z (var_ref arg0)) (var_ref arg1)))\n"
3499    "      (return (var_ref result))))\n"
3500    "\n"
3501    "   (signature uvec4\n"
3502    "     (parameters\n"
3503    "       (declare (in) uvec4  arg0)\n"
3504    "       (declare (in) uint arg1))\n"
3505    "     ((declare () uvec4 result)\n"
3506    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
3507    "              (expression uint max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
3508    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
3509    "              (expression uint max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
3510    "      (assign (constant bool (1)) (swiz z (var_ref result))\n"
3511    "              (expression uint max (swiz z (var_ref arg0)) (var_ref arg1)))\n"
3512    "      (assign (constant bool (1)) (swiz w (var_ref result))\n"
3513    "              (expression uint max (swiz w (var_ref arg0)) (var_ref arg1)))\n"
3514    "      (return (var_ref result))))\n"
3515    "))\n"
3516 };
3517
3518 static const char *builtins_130_min = {
3519    "((function min\n"
3520    "   (signature int\n"
3521    "     (parameters\n"
3522    "       (declare (in) int arg0)\n"
3523    "       (declare (in) int arg1))\n"
3524    "     ((return (expression int min (var_ref arg0) (var_ref arg1)))))\n"
3525    "\n"
3526    "   (signature ivec2\n"
3527    "     (parameters\n"
3528    "       (declare (in) ivec2 arg0)\n"
3529    "       (declare (in) ivec2 arg1))\n"
3530    "     ((return (expression ivec2 min (var_ref arg0) (var_ref arg1)))))\n"
3531    "\n"
3532    "   (signature ivec3\n"
3533    "     (parameters\n"
3534    "       (declare (in) ivec3 arg0)\n"
3535    "       (declare (in) ivec3 arg1))\n"
3536    "     ((return (expression ivec3 min (var_ref arg0) (var_ref arg1)))))\n"
3537    "\n"
3538    "   (signature ivec4\n"
3539    "     (parameters\n"
3540    "       (declare (in) ivec4 arg0)\n"
3541    "       (declare (in) ivec4 arg1))\n"
3542    "     ((return (expression ivec4 min (var_ref arg0) (var_ref arg1)))))\n"
3543    "\n"
3544    "   (signature ivec2\n"
3545    "     (parameters\n"
3546    "       (declare (in) ivec2  arg0)\n"
3547    "       (declare (in) int arg1))\n"
3548    "     ((declare () ivec2 result)\n"
3549    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
3550    "              (expression int min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
3551    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
3552    "              (expression int min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
3553    "      (return (var_ref result))))\n"
3554    "\n"
3555    "   (signature ivec3\n"
3556    "     (parameters\n"
3557    "       (declare (in) ivec3  arg0)\n"
3558    "       (declare (in) int arg1))\n"
3559    "     ((declare () ivec3 result)\n"
3560    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
3561    "              (expression int min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
3562    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
3563    "              (expression int min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
3564    "      (assign (constant bool (1)) (swiz z (var_ref result))\n"
3565    "              (expression int min (swiz z (var_ref arg0)) (var_ref arg1)))\n"
3566    "      (return (var_ref result))))\n"
3567    "\n"
3568    "   (signature ivec4\n"
3569    "     (parameters\n"
3570    "       (declare (in) ivec4  arg0)\n"
3571    "       (declare (in) int arg1))\n"
3572    "     ((declare () ivec4 result)\n"
3573    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
3574    "              (expression int min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
3575    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
3576    "              (expression int min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
3577    "      (assign (constant bool (1)) (swiz z (var_ref result))\n"
3578    "              (expression int min (swiz z (var_ref arg0)) (var_ref arg1)))\n"
3579    "      (assign (constant bool (1)) (swiz w (var_ref result))\n"
3580    "              (expression int min (swiz w (var_ref arg0)) (var_ref arg1)))\n"
3581    "      (return (var_ref result))))\n"
3582    "\n"
3583    "   (signature uint\n"
3584    "     (parameters\n"
3585    "       (declare (in) uint arg0)\n"
3586    "       (declare (in) uint arg1))\n"
3587    "     ((return (expression uint min (var_ref arg0) (var_ref arg1)))))\n"
3588    "\n"
3589    "   (signature uvec2\n"
3590    "     (parameters\n"
3591    "       (declare (in) uvec2 arg0)\n"
3592    "       (declare (in) uvec2 arg1))\n"
3593    "     ((return (expression uvec2 min (var_ref arg0) (var_ref arg1)))))\n"
3594    "\n"
3595    "   (signature uvec3\n"
3596    "     (parameters\n"
3597    "       (declare (in) uvec3 arg0)\n"
3598    "       (declare (in) uvec3 arg1))\n"
3599    "     ((return (expression uvec3 min (var_ref arg0) (var_ref arg1)))))\n"
3600    "\n"
3601    "   (signature uvec4\n"
3602    "     (parameters\n"
3603    "       (declare (in) uvec4 arg0)\n"
3604    "       (declare (in) uvec4 arg1))\n"
3605    "     ((return (expression uvec4 min (var_ref arg0) (var_ref arg1)))))\n"
3606    "\n"
3607    "   (signature uvec2\n"
3608    "     (parameters\n"
3609    "       (declare (in) uvec2  arg0)\n"
3610    "       (declare (in) uint arg1))\n"
3611    "     ((declare () uvec2 result)\n"
3612    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
3613    "              (expression uint min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
3614    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
3615    "              (expression uint min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
3616    "      (return (var_ref result))))\n"
3617    "\n"
3618    "   (signature uvec3\n"
3619    "     (parameters\n"
3620    "       (declare (in) uvec3  arg0)\n"
3621    "       (declare (in) uint arg1))\n"
3622    "     ((declare () uvec3 result)\n"
3623    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
3624    "              (expression uint min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
3625    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
3626    "              (expression uint min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
3627    "      (assign (constant bool (1)) (swiz z (var_ref result))\n"
3628    "              (expression uint min (swiz z (var_ref arg0)) (var_ref arg1)))\n"
3629    "      (return (var_ref result))))\n"
3630    "\n"
3631    "   (signature uvec4\n"
3632    "     (parameters\n"
3633    "       (declare (in) uvec4  arg0)\n"
3634    "       (declare (in) uint arg1))\n"
3635    "     ((declare () uvec4 result)\n"
3636    "      (assign (constant bool (1)) (swiz x (var_ref result))\n"
3637    "              (expression uint min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
3638    "      (assign (constant bool (1)) (swiz y (var_ref result))\n"
3639    "              (expression uint min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
3640    "      (assign (constant bool (1)) (swiz z (var_ref result))\n"
3641    "              (expression uint min (swiz z (var_ref arg0)) (var_ref arg1)))\n"
3642    "      (assign (constant bool (1)) (swiz w (var_ref result))\n"
3643    "              (expression uint min (swiz w (var_ref arg0)) (var_ref arg1)))\n"
3644    "      (return (var_ref result))))\n"
3645    "))\n"
3646 };
3647
3648 static const char *builtins_130_notEqual = {
3649    "((function notEqual\n"
3650    "   (signature bvec2\n"
3651    "     (parameters\n"
3652    "       (declare (in) uvec2 arg0)\n"
3653    "       (declare (in) uvec2 arg1))\n"
3654    "     ((declare () bvec2 temp)\n"
3655    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3656    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3657    "      (return (var_ref temp))))\n"
3658    "\n"
3659    "   (signature bvec3\n"
3660    "     (parameters\n"
3661    "       (declare (in) uvec3 arg0)\n"
3662    "       (declare (in) uvec3 arg1))\n"
3663    "     ((declare () bvec3 temp)\n"
3664    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3665    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3666    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool != (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
3667    "      (return (var_ref temp))))\n"
3668    "\n"
3669    "   (signature bvec4\n"
3670    "     (parameters\n"
3671    "       (declare (in) uvec4 arg0)\n"
3672    "       (declare (in) uvec4 arg1))\n"
3673    "     ((declare () bvec4 temp)\n"
3674    "      (assign (constant bool (1)) (swiz x (var_ref temp)) (expression bool != (swiz x (var_ref arg0))(swiz x (var_ref arg1)))) \n"
3675    "      (assign (constant bool (1)) (swiz y (var_ref temp)) (expression bool != (swiz y (var_ref arg0))(swiz y (var_ref arg1)))) \n"
3676    "      (assign (constant bool (1)) (swiz z (var_ref temp)) (expression bool != (swiz z (var_ref arg0))(swiz z (var_ref arg1)))) \n"
3677    "      (assign (constant bool (1)) (swiz w (var_ref temp)) (expression bool != (swiz w (var_ref arg0))(swiz w (var_ref arg1)))) \n"
3678    "      (return (var_ref temp))))\n"
3679    "))\n"
3680 };
3681
3682 static const char *builtins_130_sign = {
3683    "((function sign\n"
3684    "   (signature int\n"
3685    "     (parameters\n"
3686    "       (declare (in) int x))\n"
3687    "     ((return (expression int / (var_ref x) (expression int abs (var_ref x))))))\n"
3688    "\n"
3689    "   (signature ivec2\n"
3690    "     (parameters\n"
3691    "       (declare (in) ivec2 x))\n"
3692    "     ((declare () ivec2 t)\n"
3693    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression int sign (swiz x (var_ref x))))\n"
3694    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression int sign (swiz y (var_ref x))))\n"
3695    "      (return (var_ref t))))\n"
3696    "\n"
3697    "   (signature ivec3\n"
3698    "     (parameters\n"
3699    "       (declare (in) ivec3 x))\n"
3700    "     ((declare () ivec3 t)\n"
3701    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression int sign (swiz x (var_ref x))))\n"
3702    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression int sign (swiz y (var_ref x))))\n"
3703    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression int sign (swiz z (var_ref x))))\n"
3704    "      (return (var_ref t))))\n"
3705    "\n"
3706    "   (signature ivec4\n"
3707    "     (parameters\n"
3708    "       (declare (in) ivec4 x))\n"
3709    "     ((declare () ivec4 t)\n"
3710    "      (assign (constant bool (1)) (swiz x (var_ref t)) (expression int sign (swiz x (var_ref x))))\n"
3711    "      (assign (constant bool (1)) (swiz y (var_ref t)) (expression int sign (swiz y (var_ref x))))\n"
3712    "      (assign (constant bool (1)) (swiz z (var_ref t)) (expression int sign (swiz z (var_ref x))))\n"
3713    "      (assign (constant bool (1)) (swiz w (var_ref t)) (expression int sign (swiz w (var_ref x))))\n"
3714    "      (return (var_ref t))))\n"
3715    "))\n"
3716    "\n"
3717 };
3718
3719 static const char *builtins_130_sinh = {
3720    "((function sinh\n"
3721    "   (signature float\n"
3722    "     (parameters\n"
3723    "       (declare (in) float x))\n"
3724    "     ((return (expression float * (constant float (0.5))\n"
3725    "                (expression float -\n"
3726    "              (expression float exp (var_ref x))\n"
3727    "              (expression float exp (expression float neg (var_ref x))))))))\n"
3728    "   (signature vec2\n"
3729    "     (parameters\n"
3730    "       (declare (in) vec2 x))\n"
3731    "     ((return (expression vec2 * (constant vec2 (0.5))\n"
3732    "                (expression vec2 -\n"
3733    "              (expression vec2 exp (var_ref x))\n"
3734    "              (expression vec2 exp (expression vec2 neg (var_ref x))))))))\n"
3735    "   (signature vec3\n"
3736    "     (parameters\n"
3737    "       (declare (in) vec3 x))\n"
3738    "     ((return (expression vec3 * (constant vec3 (0.5))\n"
3739    "                (expression vec3 -\n"
3740    "              (expression vec3 exp (var_ref x))\n"
3741    "              (expression vec3 exp (expression vec3 neg (var_ref x))))))))\n"
3742    "   (signature vec4\n"
3743    "     (parameters\n"
3744    "       (declare (in) vec4 x))\n"
3745    "     ((return (expression vec4 * (constant vec4 (0.5))\n"
3746    "                (expression vec4 -\n"
3747    "              (expression vec4 exp (var_ref x))\n"
3748    "              (expression vec4 exp (expression vec4 neg (var_ref x))))))))\n"
3749    "))\n"
3750 };
3751
3752 static const char *builtins_130_tanh = {
3753    "((function tanh\n"
3754    "   (signature float\n"
3755    "     (parameters\n"
3756    "       (declare (in) float x))\n"
3757    "     ((return (expression float /\n"
3758    "                (expression float -\n"
3759    "              (expression float exp (var_ref x))\n"
3760    "              (expression float exp (expression float neg (var_ref x))))\n"
3761    "                (expression float +\n"
3762    "              (expression float exp (var_ref x))\n"
3763    "              (expression float exp (expression float neg (var_ref x))))))))\n"
3764    "   (signature vec2\n"
3765    "     (parameters\n"
3766    "       (declare (in) vec2 x))\n"
3767    "     ((return (expression vec2 /\n"
3768    "                (expression vec2 -\n"
3769    "              (expression vec2 exp (var_ref x))\n"
3770    "              (expression vec2 exp (expression vec2 neg (var_ref x))))\n"
3771    "                (expression vec2 +\n"
3772    "              (expression vec2 exp (var_ref x))\n"
3773    "              (expression vec2 exp (expression vec2 neg (var_ref x))))))))\n"
3774    "   (signature vec3\n"
3775    "     (parameters\n"
3776    "       (declare (in) vec3 x))\n"
3777    "     ((return (expression vec3 /\n"
3778    "                (expression vec3 -\n"
3779    "              (expression vec3 exp (var_ref x))\n"
3780    "              (expression vec3 exp (expression vec3 neg (var_ref x))))\n"
3781    "                (expression vec3 +\n"
3782    "              (expression vec3 exp (var_ref x))\n"
3783    "              (expression vec3 exp (expression vec3 neg (var_ref x))))))))\n"
3784    "   (signature vec4\n"
3785    "     (parameters\n"
3786    "       (declare (in) vec4 x))\n"
3787    "     ((return (expression vec4 /\n"
3788    "                (expression vec4 -\n"
3789    "              (expression vec4 exp (var_ref x))\n"
3790    "              (expression vec4 exp (expression vec4 neg (var_ref x))))\n"
3791    "                (expression vec4 +\n"
3792    "              (expression vec4 exp (var_ref x))\n"
3793    "              (expression vec4 exp (expression vec4 neg (var_ref x))))))))\n"
3794    "))\n"
3795 };
3796
3797 static const char *builtins_130_texelFetch = {
3798    "((function texelFetch\n"
3799    "   (signature vec4\n"
3800    "     (parameters\n"
3801    "       (declare (in) sampler1D sampler)\n"
3802    "       (declare (in) int P) \n"
3803    "       (declare (in) int lod) )\n"
3804    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3805    "\n"
3806    "   (signature ivec4\n"
3807    "     (parameters\n"
3808    "       (declare (in) isampler1D sampler)\n"
3809    "       (declare (in) int P) \n"
3810    "       (declare (in) int lod) )\n"
3811    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3812    "\n"
3813    "   (signature uvec4\n"
3814    "     (parameters\n"
3815    "       (declare (in) usampler1D sampler)\n"
3816    "       (declare (in) int P) \n"
3817    "       (declare (in) int lod) )\n"
3818    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3819    "\n"
3820    "   (signature vec4\n"
3821    "     (parameters\n"
3822    "       (declare (in) sampler2D sampler)\n"
3823    "       (declare (in) ivec2 P) \n"
3824    "       (declare (in) int lod) )\n"
3825    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3826    "\n"
3827    "   (signature ivec4\n"
3828    "     (parameters\n"
3829    "       (declare (in) isampler2D sampler)\n"
3830    "       (declare (in) ivec2 P) \n"
3831    "       (declare (in) int lod) )\n"
3832    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3833    "\n"
3834    "   (signature uvec4\n"
3835    "     (parameters\n"
3836    "       (declare (in) usampler2D sampler)\n"
3837    "       (declare (in) ivec2 P) \n"
3838    "       (declare (in) int lod) )\n"
3839    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3840    "\n"
3841    "   (signature vec4\n"
3842    "     (parameters\n"
3843    "       (declare (in) sampler3D sampler)\n"
3844    "       (declare (in) ivec3 P) \n"
3845    "       (declare (in) int lod) )\n"
3846    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3847    "\n"
3848    "   (signature ivec4\n"
3849    "     (parameters\n"
3850    "       (declare (in) isampler3D sampler)\n"
3851    "       (declare (in) ivec3 P) \n"
3852    "       (declare (in) int lod) )\n"
3853    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3854    "\n"
3855    "   (signature uvec4\n"
3856    "     (parameters\n"
3857    "       (declare (in) usampler3D sampler)\n"
3858    "       (declare (in) ivec3 P) \n"
3859    "       (declare (in) int lod) )\n"
3860    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3861    "\n"
3862    "   (signature vec4\n"
3863    "     (parameters\n"
3864    "       (declare (in) sampler1DArray sampler)\n"
3865    "       (declare (in) ivec2 P) \n"
3866    "       (declare (in) int lod) )\n"
3867    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3868    "\n"
3869    "   (signature ivec4\n"
3870    "     (parameters\n"
3871    "       (declare (in) isampler1DArray sampler)\n"
3872    "       (declare (in) ivec2 P) \n"
3873    "       (declare (in) int lod) )\n"
3874    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3875    "\n"
3876    "   (signature uvec4\n"
3877    "     (parameters\n"
3878    "       (declare (in) usampler1DArray sampler)\n"
3879    "       (declare (in) ivec2 P) \n"
3880    "       (declare (in) int lod) )\n"
3881    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3882    "\n"
3883    "   (signature vec4\n"
3884    "     (parameters\n"
3885    "       (declare (in) sampler2DArray sampler)\n"
3886    "       (declare (in) ivec3 P) \n"
3887    "       (declare (in) int lod) )\n"
3888    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3889    "\n"
3890    "   (signature ivec4\n"
3891    "     (parameters\n"
3892    "       (declare (in) isampler2DArray sampler)\n"
3893    "       (declare (in) ivec3 P) \n"
3894    "       (declare (in) int lod) )\n"
3895    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3896    "\n"
3897    "   (signature uvec4\n"
3898    "     (parameters\n"
3899    "       (declare (in) usampler2DArray sampler)\n"
3900    "       (declare (in) ivec3 P) \n"
3901    "       (declare (in) int lod) )\n"
3902    "     ((return (txf (var_ref sampler) (var_ref P) (0 0 0) (var_ref lod) ))))\n"
3903    "\n"
3904    "))\n"
3905 };
3906
3907 static const char *builtins_130_texture = {
3908    "((function texture\n"
3909    "   (signature vec4\n"
3910    "     (parameters\n"
3911    "       (declare (in) sampler1D sampler)\n"
3912    "       (declare (in) float P) )\n"
3913    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3914    "\n"
3915    "   (signature ivec4\n"
3916    "     (parameters\n"
3917    "       (declare (in) isampler1D sampler)\n"
3918    "       (declare (in) float P) )\n"
3919    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3920    "\n"
3921    "   (signature uvec4\n"
3922    "     (parameters\n"
3923    "       (declare (in) usampler1D sampler)\n"
3924    "       (declare (in) float P) )\n"
3925    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3926    "\n"
3927    "   (signature vec4\n"
3928    "     (parameters\n"
3929    "       (declare (in) sampler2D sampler)\n"
3930    "       (declare (in) vec2 P) )\n"
3931    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3932    "\n"
3933    "   (signature ivec4\n"
3934    "     (parameters\n"
3935    "       (declare (in) isampler2D sampler)\n"
3936    "       (declare (in) vec2 P) )\n"
3937    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3938    "\n"
3939    "   (signature uvec4\n"
3940    "     (parameters\n"
3941    "       (declare (in) usampler2D sampler)\n"
3942    "       (declare (in) vec2 P) )\n"
3943    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3944    "\n"
3945    "   (signature vec4\n"
3946    "     (parameters\n"
3947    "       (declare (in) sampler3D sampler)\n"
3948    "       (declare (in) vec3 P) )\n"
3949    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3950    "\n"
3951    "   (signature ivec4\n"
3952    "     (parameters\n"
3953    "       (declare (in) isampler3D sampler)\n"
3954    "       (declare (in) vec3 P) )\n"
3955    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3956    "\n"
3957    "   (signature uvec4\n"
3958    "     (parameters\n"
3959    "       (declare (in) usampler3D sampler)\n"
3960    "       (declare (in) vec3 P) )\n"
3961    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3962    "\n"
3963    "   (signature vec4\n"
3964    "     (parameters\n"
3965    "       (declare (in) samplerCube sampler)\n"
3966    "       (declare (in) vec3 P) )\n"
3967    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3968    "\n"
3969    "   (signature ivec4\n"
3970    "     (parameters\n"
3971    "       (declare (in) isamplerCube sampler)\n"
3972    "       (declare (in) vec3 P) )\n"
3973    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3974    "\n"
3975    "   (signature uvec4\n"
3976    "     (parameters\n"
3977    "       (declare (in) usamplerCube sampler)\n"
3978    "       (declare (in) vec3 P) )\n"
3979    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3980    "\n"
3981    "   (signature vec4\n"
3982    "     (parameters\n"
3983    "       (declare (in) sampler1DArray sampler)\n"
3984    "       (declare (in) vec2 P) )\n"
3985    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3986    "\n"
3987    "   (signature ivec4\n"
3988    "     (parameters\n"
3989    "       (declare (in) isampler1DArray sampler)\n"
3990    "       (declare (in) vec2 P) )\n"
3991    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3992    "\n"
3993    "   (signature uvec4\n"
3994    "     (parameters\n"
3995    "       (declare (in) usampler1DArray sampler)\n"
3996    "       (declare (in) vec2 P) )\n"
3997    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
3998    "\n"
3999    "   (signature vec4\n"
4000    "     (parameters\n"
4001    "       (declare (in) sampler2DArray sampler)\n"
4002    "       (declare (in) vec3 P) )\n"
4003    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
4004    "\n"
4005    "   (signature ivec4\n"
4006    "     (parameters\n"
4007    "       (declare (in) isampler2DArray sampler)\n"
4008    "       (declare (in) vec3 P) )\n"
4009    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
4010    "\n"
4011    "   (signature uvec4\n"
4012    "     (parameters\n"
4013    "       (declare (in) usampler2DArray sampler)\n"
4014    "       (declare (in) vec3 P) )\n"
4015    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
4016    "\n"
4017    "))\n"
4018 };
4019
4020 static const char *builtins_130_textureGrad = {
4021    "((function textureGrad\n"
4022    "   (signature vec4\n"
4023    "     (parameters\n"
4024    "       (declare (in) sampler1D sampler)\n"
4025    "       (declare (in) float P) \n"
4026    "       (declare (in) float dPdx) \n"
4027    "       (declare (in) float dPdy) )\n"
4028    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4029    "\n"
4030    "   (signature ivec4\n"
4031    "     (parameters\n"
4032    "       (declare (in) isampler1D sampler)\n"
4033    "       (declare (in) float P) \n"
4034    "       (declare (in) float dPdx) \n"
4035    "       (declare (in) float dPdy) )\n"
4036    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4037    "\n"
4038    "   (signature uvec4\n"
4039    "     (parameters\n"
4040    "       (declare (in) usampler1D sampler)\n"
4041    "       (declare (in) float P) \n"
4042    "       (declare (in) float dPdx) \n"
4043    "       (declare (in) float dPdy) )\n"
4044    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4045    "\n"
4046    "   (signature vec4\n"
4047    "     (parameters\n"
4048    "       (declare (in) sampler2D sampler)\n"
4049    "       (declare (in) vec2 P) \n"
4050    "       (declare (in) vec2 dPdx) \n"
4051    "       (declare (in) vec2 dPdy) )\n"
4052    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4053    "\n"
4054    "   (signature ivec4\n"
4055    "     (parameters\n"
4056    "       (declare (in) isampler2D sampler)\n"
4057    "       (declare (in) vec2 P) \n"
4058    "       (declare (in) vec2 dPdx) \n"
4059    "       (declare (in) vec2 dPdy) )\n"
4060    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4061    "\n"
4062    "   (signature uvec4\n"
4063    "     (parameters\n"
4064    "       (declare (in) usampler2D sampler)\n"
4065    "       (declare (in) vec2 P) \n"
4066    "       (declare (in) vec2 dPdx) \n"
4067    "       (declare (in) vec2 dPdy) )\n"
4068    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4069    "\n"
4070    "   (signature vec4\n"
4071    "     (parameters\n"
4072    "       (declare (in) sampler3D sampler)\n"
4073    "       (declare (in) vec3 P) \n"
4074    "       (declare (in) vec3 dPdx) \n"
4075    "       (declare (in) vec3 dPdy) )\n"
4076    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4077    "\n"
4078    "   (signature ivec4\n"
4079    "     (parameters\n"
4080    "       (declare (in) isampler3D sampler)\n"
4081    "       (declare (in) vec3 P) \n"
4082    "       (declare (in) vec3 dPdx) \n"
4083    "       (declare (in) vec3 dPdy) )\n"
4084    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4085    "\n"
4086    "   (signature uvec4\n"
4087    "     (parameters\n"
4088    "       (declare (in) usampler3D sampler)\n"
4089    "       (declare (in) vec3 P) \n"
4090    "       (declare (in) vec3 dPdx) \n"
4091    "       (declare (in) vec3 dPdy) )\n"
4092    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4093    "\n"
4094    "   (signature vec4\n"
4095    "     (parameters\n"
4096    "       (declare (in) samplerCube sampler)\n"
4097    "       (declare (in) vec3 P) \n"
4098    "       (declare (in) vec3 dPdx) \n"
4099    "       (declare (in) vec3 dPdy) )\n"
4100    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4101    "\n"
4102    "   (signature ivec4\n"
4103    "     (parameters\n"
4104    "       (declare (in) isamplerCube sampler)\n"
4105    "       (declare (in) vec3 P) \n"
4106    "       (declare (in) vec3 dPdx) \n"
4107    "       (declare (in) vec3 dPdy) )\n"
4108    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4109    "\n"
4110    "   (signature uvec4\n"
4111    "     (parameters\n"
4112    "       (declare (in) usamplerCube sampler)\n"
4113    "       (declare (in) vec3 P) \n"
4114    "       (declare (in) vec3 dPdx) \n"
4115    "       (declare (in) vec3 dPdy) )\n"
4116    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4117    "\n"
4118    "   (signature vec4\n"
4119    "     (parameters\n"
4120    "       (declare (in) sampler1DArray sampler)\n"
4121    "       (declare (in) vec2 P) \n"
4122    "       (declare (in) vec2 dPdx) \n"
4123    "       (declare (in) vec2 dPdy) )\n"
4124    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4125    "\n"
4126    "   (signature ivec4\n"
4127    "     (parameters\n"
4128    "       (declare (in) isampler1DArray sampler)\n"
4129    "       (declare (in) vec2 P) \n"
4130    "       (declare (in) vec2 dPdx) \n"
4131    "       (declare (in) vec2 dPdy) )\n"
4132    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4133    "\n"
4134    "   (signature uvec4\n"
4135    "     (parameters\n"
4136    "       (declare (in) usampler1DArray sampler)\n"
4137    "       (declare (in) vec2 P) \n"
4138    "       (declare (in) vec2 dPdx) \n"
4139    "       (declare (in) vec2 dPdy) )\n"
4140    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4141    "\n"
4142    "   (signature vec4\n"
4143    "     (parameters\n"
4144    "       (declare (in) sampler2DArray sampler)\n"
4145    "       (declare (in) vec3 P) \n"
4146    "       (declare (in) vec3 dPdx) \n"
4147    "       (declare (in) vec3 dPdy) )\n"
4148    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4149    "\n"
4150    "   (signature ivec4\n"
4151    "     (parameters\n"
4152    "       (declare (in) isampler2DArray sampler)\n"
4153    "       (declare (in) vec3 P) \n"
4154    "       (declare (in) vec3 dPdx) \n"
4155    "       (declare (in) vec3 dPdy) )\n"
4156    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4157    "\n"
4158    "   (signature uvec4\n"
4159    "     (parameters\n"
4160    "       (declare (in) usampler2DArray sampler)\n"
4161    "       (declare (in) vec3 P) \n"
4162    "       (declare (in) vec3 dPdx) \n"
4163    "       (declare (in) vec3 dPdy) )\n"
4164    "     ((return (txd (var_ref sampler) (var_ref P) (0 0 0) 1 () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4165    "\n"
4166    ")\n"
4167    ")\n"
4168 };
4169
4170 static const char *builtins_130_textureLod = {
4171    "((function textureLod\n"
4172    "   (signature vec4\n"
4173    "     (parameters\n"
4174    "       (declare (in) sampler1D sampler)\n"
4175    "       (declare (in) float P) \n"
4176    "       (declare (in) float lod) )\n"
4177    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4178    "\n"
4179    "   (signature ivec4\n"
4180    "     (parameters\n"
4181    "       (declare (in) isampler1D sampler)\n"
4182    "       (declare (in) float P) \n"
4183    "       (declare (in) float lod) )\n"
4184    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4185    "\n"
4186    "   (signature uvec4\n"
4187    "     (parameters\n"
4188    "       (declare (in) usampler1D sampler)\n"
4189    "       (declare (in) float P) \n"
4190    "       (declare (in) float lod) )\n"
4191    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4192    "\n"
4193    "   (signature vec4\n"
4194    "     (parameters\n"
4195    "       (declare (in) sampler2D sampler)\n"
4196    "       (declare (in) vec2 P) \n"
4197    "       (declare (in) float lod) )\n"
4198    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4199    "\n"
4200    "   (signature ivec4\n"
4201    "     (parameters\n"
4202    "       (declare (in) isampler2D sampler)\n"
4203    "       (declare (in) vec2 P) \n"
4204    "       (declare (in) float lod) )\n"
4205    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4206    "\n"
4207    "   (signature uvec4\n"
4208    "     (parameters\n"
4209    "       (declare (in) usampler2D sampler)\n"
4210    "       (declare (in) vec2 P) \n"
4211    "       (declare (in) float lod) )\n"
4212    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4213    "\n"
4214    "   (signature vec4\n"
4215    "     (parameters\n"
4216    "       (declare (in) sampler3D sampler)\n"
4217    "       (declare (in) vec3 P) \n"
4218    "       (declare (in) float lod) )\n"
4219    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4220    "\n"
4221    "   (signature ivec4\n"
4222    "     (parameters\n"
4223    "       (declare (in) isampler3D sampler)\n"
4224    "       (declare (in) vec3 P) \n"
4225    "       (declare (in) float lod) )\n"
4226    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4227    "\n"
4228    "   (signature uvec4\n"
4229    "     (parameters\n"
4230    "       (declare (in) usampler3D sampler)\n"
4231    "       (declare (in) vec3 P) \n"
4232    "       (declare (in) float lod) )\n"
4233    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4234    "\n"
4235    "   (signature vec4\n"
4236    "     (parameters\n"
4237    "       (declare (in) samplerCube sampler)\n"
4238    "       (declare (in) vec3 P) \n"
4239    "       (declare (in) float lod) )\n"
4240    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4241    "\n"
4242    "   (signature ivec4\n"
4243    "     (parameters\n"
4244    "       (declare (in) isamplerCube sampler)\n"
4245    "       (declare (in) vec3 P) \n"
4246    "       (declare (in) float lod) )\n"
4247    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4248    "\n"
4249    "   (signature uvec4\n"
4250    "     (parameters\n"
4251    "       (declare (in) usamplerCube sampler)\n"
4252    "       (declare (in) vec3 P) \n"
4253    "       (declare (in) float lod) )\n"
4254    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4255    "\n"
4256    "   (signature vec4\n"
4257    "     (parameters\n"
4258    "       (declare (in) sampler1DArray sampler)\n"
4259    "       (declare (in) vec2 P) \n"
4260    "       (declare (in) float lod) )\n"
4261    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4262    "\n"
4263    "   (signature ivec4\n"
4264    "     (parameters\n"
4265    "       (declare (in) isampler1DArray sampler)\n"
4266    "       (declare (in) vec2 P) \n"
4267    "       (declare (in) float lod) )\n"
4268    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4269    "\n"
4270    "   (signature uvec4\n"
4271    "     (parameters\n"
4272    "       (declare (in) usampler1DArray sampler)\n"
4273    "       (declare (in) vec2 P) \n"
4274    "       (declare (in) float lod) )\n"
4275    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4276    "\n"
4277    "   (signature vec4\n"
4278    "     (parameters\n"
4279    "       (declare (in) sampler2DArray sampler)\n"
4280    "       (declare (in) vec3 P) \n"
4281    "       (declare (in) float lod) )\n"
4282    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4283    "\n"
4284    "   (signature ivec4\n"
4285    "     (parameters\n"
4286    "       (declare (in) isampler2DArray sampler)\n"
4287    "       (declare (in) vec3 P) \n"
4288    "       (declare (in) float lod) )\n"
4289    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4290    "\n"
4291    "   (signature uvec4\n"
4292    "     (parameters\n"
4293    "       (declare (in) usampler2DArray sampler)\n"
4294    "       (declare (in) vec3 P) \n"
4295    "       (declare (in) float lod) )\n"
4296    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4297    "\n"
4298    "))\n"
4299 };
4300
4301 static const char *builtins_130_textureProj = {
4302    "((function textureProj\n"
4303    "   (signature vec4\n"
4304    "     (parameters\n"
4305    "       (declare (in) sampler1D sampler)\n"
4306    "       (declare (in) vec2 P) )\n"
4307    "     ((return (tex (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () ))))\n"
4308    "\n"
4309    "   (signature ivec4\n"
4310    "     (parameters\n"
4311    "       (declare (in) isampler1D sampler)\n"
4312    "       (declare (in) vec2 P) )\n"
4313    "     ((return (tex (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () ))))\n"
4314    "\n"
4315    "   (signature uvec4\n"
4316    "     (parameters\n"
4317    "       (declare (in) usampler1D sampler)\n"
4318    "       (declare (in) vec2 P) )\n"
4319    "     ((return (tex (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () ))))\n"
4320    "\n"
4321    "   (signature vec4\n"
4322    "     (parameters\n"
4323    "       (declare (in) sampler1D sampler)\n"
4324    "       (declare (in) vec4 P) )\n"
4325    "     ((return (tex (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ))))\n"
4326    "\n"
4327    "   (signature ivec4\n"
4328    "     (parameters\n"
4329    "       (declare (in) isampler1D sampler)\n"
4330    "       (declare (in) vec4 P) )\n"
4331    "     ((return (tex (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ))))\n"
4332    "\n"
4333    "   (signature uvec4\n"
4334    "     (parameters\n"
4335    "       (declare (in) usampler1D sampler)\n"
4336    "       (declare (in) vec4 P) )\n"
4337    "     ((return (tex (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ))))\n"
4338    "\n"
4339    "   (signature vec4\n"
4340    "     (parameters\n"
4341    "       (declare (in) sampler2D sampler)\n"
4342    "       (declare (in) vec3 P) )\n"
4343    "     ((return (tex (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () ))))\n"
4344    "\n"
4345    "   (signature ivec4\n"
4346    "     (parameters\n"
4347    "       (declare (in) isampler2D sampler)\n"
4348    "       (declare (in) vec3 P) )\n"
4349    "     ((return (tex (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () ))))\n"
4350    "\n"
4351    "   (signature uvec4\n"
4352    "     (parameters\n"
4353    "       (declare (in) usampler2D sampler)\n"
4354    "       (declare (in) vec3 P) )\n"
4355    "     ((return (tex (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () ))))\n"
4356    "\n"
4357    "   (signature vec4\n"
4358    "     (parameters\n"
4359    "       (declare (in) sampler2D sampler)\n"
4360    "       (declare (in) vec4 P) )\n"
4361    "     ((return (tex (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ))))\n"
4362    "\n"
4363    "   (signature ivec4\n"
4364    "     (parameters\n"
4365    "       (declare (in) isampler2D sampler)\n"
4366    "       (declare (in) vec4 P) )\n"
4367    "     ((return (tex (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ))))\n"
4368    "\n"
4369    "   (signature uvec4\n"
4370    "     (parameters\n"
4371    "       (declare (in) usampler2D sampler)\n"
4372    "       (declare (in) vec4 P) )\n"
4373    "     ((return (tex (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ))))\n"
4374    "\n"
4375    "   (signature vec4\n"
4376    "     (parameters\n"
4377    "       (declare (in) sampler3D sampler)\n"
4378    "       (declare (in) vec4 P) )\n"
4379    "     ((return (tex (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ))))\n"
4380    "\n"
4381    "   (signature ivec4\n"
4382    "     (parameters\n"
4383    "       (declare (in) isampler3D sampler)\n"
4384    "       (declare (in) vec4 P) )\n"
4385    "     ((return (tex (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ))))\n"
4386    "\n"
4387    "   (signature uvec4\n"
4388    "     (parameters\n"
4389    "       (declare (in) usampler3D sampler)\n"
4390    "       (declare (in) vec4 P) )\n"
4391    "     ((return (tex (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ))))\n"
4392    "\n"
4393    "))\n"
4394 };
4395
4396 static const char *builtins_130_textureProjGrad = {
4397    "((function textureLod\n"
4398    "   (signature vec4\n"
4399    "     (parameters\n"
4400    "       (declare (in) sampler1D sampler)\n"
4401    "       (declare (in) vec2 P) \n"
4402    "       (declare (in) float dPdx) \n"
4403    "       (declare (in) float dPdy) )\n"
4404    "     ((return (txd (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4405    "\n"
4406    "   (signature ivec4\n"
4407    "     (parameters\n"
4408    "       (declare (in) isampler1D sampler)\n"
4409    "       (declare (in) vec2 P) \n"
4410    "       (declare (in) float dPdx) \n"
4411    "       (declare (in) float dPdy) )\n"
4412    "     ((return (txd (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4413    "\n"
4414    "   (signature uvec4\n"
4415    "     (parameters\n"
4416    "       (declare (in) usampler1D sampler)\n"
4417    "       (declare (in) vec2 P) \n"
4418    "       (declare (in) float dPdx) \n"
4419    "       (declare (in) float dPdy) )\n"
4420    "     ((return (txd (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4421    "\n"
4422    "   (signature vec4\n"
4423    "     (parameters\n"
4424    "       (declare (in) sampler1D sampler)\n"
4425    "       (declare (in) vec4 P) \n"
4426    "       (declare (in) float dPdx) \n"
4427    "       (declare (in) float dPdy) )\n"
4428    "     ((return (txd (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4429    "\n"
4430    "   (signature ivec4\n"
4431    "     (parameters\n"
4432    "       (declare (in) isampler1D sampler)\n"
4433    "       (declare (in) vec4 P) \n"
4434    "       (declare (in) float dPdx) \n"
4435    "       (declare (in) float dPdy) )\n"
4436    "     ((return (txd (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4437    "\n"
4438    "   (signature uvec4\n"
4439    "     (parameters\n"
4440    "       (declare (in) usampler1D sampler)\n"
4441    "       (declare (in) vec4 P) \n"
4442    "       (declare (in) float dPdx) \n"
4443    "       (declare (in) float dPdy) )\n"
4444    "     ((return (txd (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4445    "\n"
4446    "   (signature vec4\n"
4447    "     (parameters\n"
4448    "       (declare (in) sampler2D sampler)\n"
4449    "       (declare (in) vec3 P) \n"
4450    "       (declare (in) vec2 dPdx) \n"
4451    "       (declare (in) vec2 dPdy) )\n"
4452    "     ((return (txd (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4453    "\n"
4454    "   (signature ivec4\n"
4455    "     (parameters\n"
4456    "       (declare (in) isampler2D sampler)\n"
4457    "       (declare (in) vec3 P) \n"
4458    "       (declare (in) vec2 dPdx) \n"
4459    "       (declare (in) vec2 dPdy) )\n"
4460    "     ((return (txd (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4461    "\n"
4462    "   (signature uvec4\n"
4463    "     (parameters\n"
4464    "       (declare (in) usampler2D sampler)\n"
4465    "       (declare (in) vec3 P) \n"
4466    "       (declare (in) vec2 dPdx) \n"
4467    "       (declare (in) vec2 dPdy) )\n"
4468    "     ((return (txd (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4469    "\n"
4470    "   (signature vec4\n"
4471    "     (parameters\n"
4472    "       (declare (in) sampler2D sampler)\n"
4473    "       (declare (in) vec4 P) \n"
4474    "       (declare (in) vec2 dPdx) \n"
4475    "       (declare (in) vec2 dPdy) )\n"
4476    "     ((return (txd (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4477    "\n"
4478    "   (signature ivec4\n"
4479    "     (parameters\n"
4480    "       (declare (in) isampler2D sampler)\n"
4481    "       (declare (in) vec4 P) \n"
4482    "       (declare (in) vec2 dPdx) \n"
4483    "       (declare (in) vec2 dPdy) )\n"
4484    "     ((return (txd (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4485    "\n"
4486    "   (signature uvec4\n"
4487    "     (parameters\n"
4488    "       (declare (in) usampler2D sampler)\n"
4489    "       (declare (in) vec4 P) \n"
4490    "       (declare (in) vec2 dPdx) \n"
4491    "       (declare (in) vec2 dPdy) )\n"
4492    "     ((return (txd (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4493    "\n"
4494    "   (signature vec4\n"
4495    "     (parameters\n"
4496    "       (declare (in) sampler3D sampler)\n"
4497    "       (declare (in) vec4 P) \n"
4498    "       (declare (in) vec3 dPdx) \n"
4499    "       (declare (in) vec3 dPdy) )\n"
4500    "     ((return (txd (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4501    "\n"
4502    "   (signature ivec4\n"
4503    "     (parameters\n"
4504    "       (declare (in) isampler3D sampler)\n"
4505    "       (declare (in) vec4 P) \n"
4506    "       (declare (in) vec3 dPdx) \n"
4507    "       (declare (in) vec3 dPdy) )\n"
4508    "     ((return (txd (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4509    "\n"
4510    "   (signature uvec4\n"
4511    "     (parameters\n"
4512    "       (declare (in) usampler3D sampler)\n"
4513    "       (declare (in) vec4 P) \n"
4514    "       (declare (in) vec3 dPdx) \n"
4515    "       (declare (in) vec3 dPdy) )\n"
4516    "     ((return (txd (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () ((var_ref dPdx) (var_ref dPdy)) ))))\n"
4517    "\n"
4518    "))\n"
4519 };
4520
4521 static const char *builtins_130_textureProjLod = {
4522    "((function textureLod\n"
4523    "   (signature vec4\n"
4524    "     (parameters\n"
4525    "       (declare (in) sampler1D sampler)\n"
4526    "       (declare (in) vec2 P) \n"
4527    "       (declare (in) float lod) )\n"
4528    "     ((return (txl (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () (var_ref lod) ))))\n"
4529    "\n"
4530    "   (signature ivec4\n"
4531    "     (parameters\n"
4532    "       (declare (in) isampler1D sampler)\n"
4533    "       (declare (in) vec2 P) \n"
4534    "       (declare (in) float lod) )\n"
4535    "     ((return (txl (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () (var_ref lod) ))))\n"
4536    "\n"
4537    "   (signature uvec4\n"
4538    "     (parameters\n"
4539    "       (declare (in) usampler1D sampler)\n"
4540    "       (declare (in) vec2 P) \n"
4541    "       (declare (in) float lod) )\n"
4542    "     ((return (txl (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () (var_ref lod) ))))\n"
4543    "\n"
4544    "   (signature vec4\n"
4545    "     (parameters\n"
4546    "       (declare (in) sampler1D sampler)\n"
4547    "       (declare (in) vec4 P) \n"
4548    "       (declare (in) float lod) )\n"
4549    "     ((return (txl (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref lod) ))))\n"
4550    "\n"
4551    "   (signature ivec4\n"
4552    "     (parameters\n"
4553    "       (declare (in) isampler1D sampler)\n"
4554    "       (declare (in) vec4 P) \n"
4555    "       (declare (in) float lod) )\n"
4556    "     ((return (txl (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref lod) ))))\n"
4557    "\n"
4558    "   (signature uvec4\n"
4559    "     (parameters\n"
4560    "       (declare (in) usampler1D sampler)\n"
4561    "       (declare (in) vec4 P) \n"
4562    "       (declare (in) float lod) )\n"
4563    "     ((return (txl (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref lod) ))))\n"
4564    "\n"
4565    "   (signature vec4\n"
4566    "     (parameters\n"
4567    "       (declare (in) sampler2D sampler)\n"
4568    "       (declare (in) vec3 P) \n"
4569    "       (declare (in) float lod) )\n"
4570    "     ((return (txl (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () (var_ref lod) ))))\n"
4571    "\n"
4572    "   (signature ivec4\n"
4573    "     (parameters\n"
4574    "       (declare (in) isampler2D sampler)\n"
4575    "       (declare (in) vec3 P) \n"
4576    "       (declare (in) float lod) )\n"
4577    "     ((return (txl (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () (var_ref lod) ))))\n"
4578    "\n"
4579    "   (signature uvec4\n"
4580    "     (parameters\n"
4581    "       (declare (in) usampler2D sampler)\n"
4582    "       (declare (in) vec3 P) \n"
4583    "       (declare (in) float lod) )\n"
4584    "     ((return (txl (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () (var_ref lod) ))))\n"
4585    "\n"
4586    "   (signature vec4\n"
4587    "     (parameters\n"
4588    "       (declare (in) sampler2D sampler)\n"
4589    "       (declare (in) vec4 P) \n"
4590    "       (declare (in) float lod) )\n"
4591    "     ((return (txl (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref lod) ))))\n"
4592    "\n"
4593    "   (signature ivec4\n"
4594    "     (parameters\n"
4595    "       (declare (in) isampler2D sampler)\n"
4596    "       (declare (in) vec4 P) \n"
4597    "       (declare (in) float lod) )\n"
4598    "     ((return (txl (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref lod) ))))\n"
4599    "\n"
4600    "   (signature uvec4\n"
4601    "     (parameters\n"
4602    "       (declare (in) usampler2D sampler)\n"
4603    "       (declare (in) vec4 P) \n"
4604    "       (declare (in) float lod) )\n"
4605    "     ((return (txl (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref lod) ))))\n"
4606    "\n"
4607    "   (signature vec4\n"
4608    "     (parameters\n"
4609    "       (declare (in) sampler3D sampler)\n"
4610    "       (declare (in) vec4 P) \n"
4611    "       (declare (in) float lod) )\n"
4612    "     ((return (txl (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref lod) ))))\n"
4613    "\n"
4614    "   (signature ivec4\n"
4615    "     (parameters\n"
4616    "       (declare (in) isampler3D sampler)\n"
4617    "       (declare (in) vec4 P) \n"
4618    "       (declare (in) float lod) )\n"
4619    "     ((return (txl (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref lod) ))))\n"
4620    "\n"
4621    "   (signature uvec4\n"
4622    "     (parameters\n"
4623    "       (declare (in) usampler3D sampler)\n"
4624    "       (declare (in) vec4 P) \n"
4625    "       (declare (in) float lod) )\n"
4626    "     ((return (txl (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref lod) ))))\n"
4627    "\n"
4628    "))\n"
4629 };
4630
4631 static const char *functions_for_130 [] = {
4632    builtins_130_clamp,
4633    builtins_130_cosh,
4634    builtins_130_equal,
4635    builtins_130_greaterThan,
4636    builtins_130_greaterThanEqual,
4637    builtins_130_lessThan,
4638    builtins_130_lessThanEqual,
4639    builtins_130_max,
4640    builtins_130_min,
4641    builtins_130_notEqual,
4642    builtins_130_sign,
4643    builtins_130_sinh,
4644    builtins_130_tanh,
4645    builtins_130_texelFetch,
4646    builtins_130_texture,
4647    builtins_130_textureGrad,
4648    builtins_130_textureLod,
4649    builtins_130_textureProj,
4650    builtins_130_textureProjGrad,
4651    builtins_130_textureProjLod,
4652 };
4653
4654 /* 130_fs builtins */
4655
4656 static const char *builtins_130_fs_texture = {
4657    "((function texture\n"
4658    "   (signature vec4\n"
4659    "     (parameters\n"
4660    "       (declare (in) sampler1D sampler)\n"
4661    "       (declare (in) float P) \n"
4662    "       (declare (in) float bias) )\n"
4663    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4664    "\n"
4665    "   (signature ivec4\n"
4666    "     (parameters\n"
4667    "       (declare (in) isampler1D sampler)\n"
4668    "       (declare (in) float P) \n"
4669    "       (declare (in) float bias) )\n"
4670    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4671    "\n"
4672    "   (signature uvec4\n"
4673    "     (parameters\n"
4674    "       (declare (in) usampler1D sampler)\n"
4675    "       (declare (in) float P) \n"
4676    "       (declare (in) float bias) )\n"
4677    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4678    "\n"
4679    "   (signature vec4\n"
4680    "     (parameters\n"
4681    "       (declare (in) sampler2D sampler)\n"
4682    "       (declare (in) vec2 P) \n"
4683    "       (declare (in) float bias) )\n"
4684    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4685    "\n"
4686    "   (signature ivec4\n"
4687    "     (parameters\n"
4688    "       (declare (in) isampler2D sampler)\n"
4689    "       (declare (in) vec2 P) \n"
4690    "       (declare (in) float bias) )\n"
4691    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4692    "\n"
4693    "   (signature uvec4\n"
4694    "     (parameters\n"
4695    "       (declare (in) usampler2D sampler)\n"
4696    "       (declare (in) vec2 P) \n"
4697    "       (declare (in) float bias) )\n"
4698    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4699    "\n"
4700    "   (signature vec4\n"
4701    "     (parameters\n"
4702    "       (declare (in) sampler3D sampler)\n"
4703    "       (declare (in) vec3 P) \n"
4704    "       (declare (in) float bias) )\n"
4705    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4706    "\n"
4707    "   (signature ivec4\n"
4708    "     (parameters\n"
4709    "       (declare (in) isampler3D sampler)\n"
4710    "       (declare (in) vec3 P) \n"
4711    "       (declare (in) float bias) )\n"
4712    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4713    "\n"
4714    "   (signature uvec4\n"
4715    "     (parameters\n"
4716    "       (declare (in) usampler3D sampler)\n"
4717    "       (declare (in) vec3 P) \n"
4718    "       (declare (in) float bias) )\n"
4719    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4720    "\n"
4721    "   (signature vec4\n"
4722    "     (parameters\n"
4723    "       (declare (in) samplerCube sampler)\n"
4724    "       (declare (in) vec3 P) \n"
4725    "       (declare (in) float bias) )\n"
4726    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4727    "\n"
4728    "   (signature ivec4\n"
4729    "     (parameters\n"
4730    "       (declare (in) isamplerCube sampler)\n"
4731    "       (declare (in) vec3 P) \n"
4732    "       (declare (in) float bias) )\n"
4733    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4734    "\n"
4735    "   (signature uvec4\n"
4736    "     (parameters\n"
4737    "       (declare (in) usamplerCube sampler)\n"
4738    "       (declare (in) vec3 P) \n"
4739    "       (declare (in) float bias) )\n"
4740    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4741    "\n"
4742    "   (signature vec4\n"
4743    "     (parameters\n"
4744    "       (declare (in) sampler1DArray sampler)\n"
4745    "       (declare (in) vec2 P) \n"
4746    "       (declare (in) float bias) )\n"
4747    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4748    "\n"
4749    "   (signature ivec4\n"
4750    "     (parameters\n"
4751    "       (declare (in) isampler1DArray sampler)\n"
4752    "       (declare (in) vec2 P) \n"
4753    "       (declare (in) float bias) )\n"
4754    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4755    "\n"
4756    "   (signature uvec4\n"
4757    "     (parameters\n"
4758    "       (declare (in) usampler1DArray sampler)\n"
4759    "       (declare (in) vec2 P) \n"
4760    "       (declare (in) float bias) )\n"
4761    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4762    "\n"
4763    "   (signature vec4\n"
4764    "     (parameters\n"
4765    "       (declare (in) sampler2DArray sampler)\n"
4766    "       (declare (in) vec3 P) \n"
4767    "       (declare (in) float bias) )\n"
4768    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4769    "\n"
4770    "   (signature ivec4\n"
4771    "     (parameters\n"
4772    "       (declare (in) isampler2DArray sampler)\n"
4773    "       (declare (in) vec3 P) \n"
4774    "       (declare (in) float bias) )\n"
4775    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4776    "\n"
4777    "   (signature uvec4\n"
4778    "     (parameters\n"
4779    "       (declare (in) usampler2DArray sampler)\n"
4780    "       (declare (in) vec3 P) \n"
4781    "       (declare (in) float bias) )\n"
4782    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
4783    "\n"
4784    "))\n"
4785 };
4786
4787 static const char *builtins_130_fs_textureProj = {
4788    "((function textureProj\n"
4789    "   (signature vec4\n"
4790    "     (parameters\n"
4791    "       (declare (in) sampler1D sampler)\n"
4792    "       (declare (in) vec2 P) \n"
4793    "       (declare (in) float bias) )\n"
4794    "     ((return (txb (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () (var_ref bias) ))))\n"
4795    "\n"
4796    "   (signature ivec4\n"
4797    "     (parameters\n"
4798    "       (declare (in) isampler1D sampler)\n"
4799    "       (declare (in) vec2 P) \n"
4800    "       (declare (in) float bias) )\n"
4801    "     ((return (txb (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () (var_ref bias) ))))\n"
4802    "\n"
4803    "   (signature uvec4\n"
4804    "     (parameters\n"
4805    "       (declare (in) usampler1D sampler)\n"
4806    "       (declare (in) vec2 P) \n"
4807    "       (declare (in) float bias) )\n"
4808    "     ((return (txb (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz y (var_ref P)) () (var_ref bias) ))))\n"
4809    "\n"
4810    "   (signature vec4\n"
4811    "     (parameters\n"
4812    "       (declare (in) sampler1D sampler)\n"
4813    "       (declare (in) vec4 P) \n"
4814    "       (declare (in) float bias) )\n"
4815    "     ((return (txb (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref bias) ))))\n"
4816    "\n"
4817    "   (signature ivec4\n"
4818    "     (parameters\n"
4819    "       (declare (in) isampler1D sampler)\n"
4820    "       (declare (in) vec4 P) \n"
4821    "       (declare (in) float bias) )\n"
4822    "     ((return (txb (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref bias) ))))\n"
4823    "\n"
4824    "   (signature uvec4\n"
4825    "     (parameters\n"
4826    "       (declare (in) usampler1D sampler)\n"
4827    "       (declare (in) vec4 P) \n"
4828    "       (declare (in) float bias) )\n"
4829    "     ((return (txb (var_ref sampler) (swiz x (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref bias) ))))\n"
4830    "\n"
4831    "   (signature vec4\n"
4832    "     (parameters\n"
4833    "       (declare (in) sampler2D sampler)\n"
4834    "       (declare (in) vec3 P) \n"
4835    "       (declare (in) float bias) )\n"
4836    "     ((return (txb (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () (var_ref bias) ))))\n"
4837    "\n"
4838    "   (signature ivec4\n"
4839    "     (parameters\n"
4840    "       (declare (in) isampler2D sampler)\n"
4841    "       (declare (in) vec3 P) \n"
4842    "       (declare (in) float bias) )\n"
4843    "     ((return (txb (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () (var_ref bias) ))))\n"
4844    "\n"
4845    "   (signature uvec4\n"
4846    "     (parameters\n"
4847    "       (declare (in) usampler2D sampler)\n"
4848    "       (declare (in) vec3 P) \n"
4849    "       (declare (in) float bias) )\n"
4850    "     ((return (txb (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz z (var_ref P)) () (var_ref bias) ))))\n"
4851    "\n"
4852    "   (signature vec4\n"
4853    "     (parameters\n"
4854    "       (declare (in) sampler2D sampler)\n"
4855    "       (declare (in) vec4 P) \n"
4856    "       (declare (in) float bias) )\n"
4857    "     ((return (txb (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref bias) ))))\n"
4858    "\n"
4859    "   (signature ivec4\n"
4860    "     (parameters\n"
4861    "       (declare (in) isampler2D sampler)\n"
4862    "       (declare (in) vec4 P) \n"
4863    "       (declare (in) float bias) )\n"
4864    "     ((return (txb (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref bias) ))))\n"
4865    "\n"
4866    "   (signature uvec4\n"
4867    "     (parameters\n"
4868    "       (declare (in) usampler2D sampler)\n"
4869    "       (declare (in) vec4 P) \n"
4870    "       (declare (in) float bias) )\n"
4871    "     ((return (txb (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref bias) ))))\n"
4872    "\n"
4873    "   (signature vec4\n"
4874    "     (parameters\n"
4875    "       (declare (in) sampler3D sampler)\n"
4876    "       (declare (in) vec4 P) \n"
4877    "       (declare (in) float bias) )\n"
4878    "     ((return (txb (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref bias) ))))\n"
4879    "\n"
4880    "   (signature ivec4\n"
4881    "     (parameters\n"
4882    "       (declare (in) isampler3D sampler)\n"
4883    "       (declare (in) vec4 P) \n"
4884    "       (declare (in) float bias) )\n"
4885    "     ((return (txb (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref bias) ))))\n"
4886    "\n"
4887    "   (signature uvec4\n"
4888    "     (parameters\n"
4889    "       (declare (in) usampler3D sampler)\n"
4890    "       (declare (in) vec4 P) \n"
4891    "       (declare (in) float bias) )\n"
4892    "     ((return (txb (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) (swiz w (var_ref P)) () (var_ref bias) ))))\n"
4893    "\n"
4894    "))\n"
4895 };
4896
4897 static const char *functions_for_130_fs [] = {
4898    builtins_130_fs_texture,
4899    builtins_130_fs_textureProj,
4900 };
4901
4902 /* ARB_texture_rectangle builtins */
4903
4904 static const char *builtins_ARB_texture_rectangle_textures = {
4905    "((function texture2DRect\n"
4906    "   (signature vec4\n"
4907    "     (parameters\n"
4908    "       (declare (in) sampler2DRect sampler)\n"
4909    "       (declare (in) vec2 P) )\n"
4910    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
4911    "\n"
4912    ")\n"
4913    " (function shadow2DRect\n"
4914    "   (signature vec4\n"
4915    "     (parameters\n"
4916    "       (declare (in) sampler2DRectShadow sampler)\n"
4917    "       (declare (in) vec3 P) )\n"
4918    "     ((return (tex (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) 1 (swiz z (var_ref P)) ))))\n"
4919    "\n"
4920    "))\n"
4921 };
4922
4923 static const char *functions_for_ARB_texture_rectangle [] = {
4924    builtins_ARB_texture_rectangle_textures,
4925 };
4926
4927 /* EXT_texture_array builtins */
4928
4929 static const char *builtins_EXT_texture_array_textures = {
4930    "((function texture1DArray\n"
4931    "   (signature vec4\n"
4932    "     (parameters\n"
4933    "       (declare (in) sampler1DArray sampler)\n"
4934    "       (declare (in) vec2 P) )\n"
4935    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
4936    "\n"
4937    ")\n"
4938    " (function texture1DArrayLod\n"
4939    "   (signature vec4\n"
4940    "     (parameters\n"
4941    "       (declare (in) sampler1DArray sampler)\n"
4942    "       (declare (in) vec2 P) \n"
4943    "       (declare (in) float lod) )\n"
4944    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4945    "\n"
4946    ")\n"
4947    " (function texture2DArray\n"
4948    "   (signature vec4\n"
4949    "     (parameters\n"
4950    "       (declare (in) sampler2DArray sampler)\n"
4951    "       (declare (in) vec3 P) )\n"
4952    "     ((return (tex (var_ref sampler) (var_ref P) (0 0 0) 1 () ))))\n"
4953    "\n"
4954    ")\n"
4955    " (function texture2DArrayLod\n"
4956    "   (signature vec4\n"
4957    "     (parameters\n"
4958    "       (declare (in) sampler2DArray sampler)\n"
4959    "       (declare (in) vec3 P) \n"
4960    "       (declare (in) float lod) )\n"
4961    "     ((return (txl (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref lod) ))))\n"
4962    "\n"
4963    ")\n"
4964    " (function shadow1DArray\n"
4965    "   (signature vec4\n"
4966    "     (parameters\n"
4967    "       (declare (in) sampler1DArrayShadow sampler)\n"
4968    "       (declare (in) vec3 P) )\n"
4969    "     ((return (tex (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) 1 (swiz z (var_ref P)) ))))\n"
4970    "\n"
4971    ")\n"
4972    " (function shadow1DArrayLod\n"
4973    "   (signature vec4\n"
4974    "     (parameters\n"
4975    "       (declare (in) sampler1DArrayShadow sampler)\n"
4976    "       (declare (in) vec3 P) \n"
4977    "       (declare (in) float lod) )\n"
4978    "     ((return (txl (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) 1 (swiz z (var_ref P)) (var_ref lod) ))))\n"
4979    "\n"
4980    ")\n"
4981    " (function shadow2DArray\n"
4982    "   (signature vec4\n"
4983    "     (parameters\n"
4984    "       (declare (in) sampler2DArrayShadow sampler)\n"
4985    "       (declare (in) vec4 P) )\n"
4986    "     ((return (tex (var_ref sampler) (swiz xyz (var_ref P)) (0 0 0) 1 (swiz w (var_ref P)) ))))\n"
4987    "\n"
4988    "))\n"
4989 };
4990
4991 static const char *functions_for_EXT_texture_array [] = {
4992    builtins_EXT_texture_array_textures,
4993 };
4994
4995 /* EXT_texture_array_fs builtins */
4996
4997 static const char *builtins_EXT_texture_array_fs_textures = {
4998    "((function texture1DArray\n"
4999    "   (signature vec4\n"
5000    "     (parameters\n"
5001    "       (declare (in) sampler1DArray sampler)\n"
5002    "       (declare (in) vec2 P) \n"
5003    "       (declare (in) float bias) )\n"
5004    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
5005    "\n"
5006    ")\n"
5007    " (function texture2DArray\n"
5008    "   (signature vec4\n"
5009    "     (parameters\n"
5010    "       (declare (in) sampler2DArray sampler)\n"
5011    "       (declare (in) vec3 P) \n"
5012    "       (declare (in) float bias) )\n"
5013    "     ((return (txb (var_ref sampler) (var_ref P) (0 0 0) 1 () (var_ref bias) ))))\n"
5014    "\n"
5015    ")\n"
5016    " (function shadow1DArray\n"
5017    "   (signature vec4\n"
5018    "     (parameters\n"
5019    "       (declare (in) sampler1DArrayShadow sampler)\n"
5020    "       (declare (in) vec3 P) \n"
5021    "       (declare (in) float bias) )\n"
5022    "     ((return (txb (var_ref sampler) (swiz xy (var_ref P)) (0 0 0) 1 (swiz z (var_ref P)) (var_ref bias) ))))\n"
5023    "\n"
5024    "))\n"
5025 };
5026
5027 static const char *functions_for_EXT_texture_array_fs [] = {
5028    builtins_EXT_texture_array_fs_textures,
5029 };
5030
5031 void
5032 _mesa_glsl_initialize_functions(exec_list *instructions,
5033                                 struct _mesa_glsl_parse_state *state)
5034 {
5035    if (state->language_version >= 110)
5036       read_builtins(state, instructions,
5037                     functions_for_110,
5038                     sizeof(functions_for_110) / sizeof(const char *));
5039
5040    if (state->target == fragment_shader && state->language_version >= 110)
5041       read_builtins(state, instructions,
5042                     functions_for_110_fs,
5043                     sizeof(functions_for_110_fs) / sizeof(const char *));
5044
5045    if (state->target == vertex_shader && state->language_version >= 110)
5046       read_builtins(state, instructions,
5047                     functions_for_110_vs,
5048                     sizeof(functions_for_110_vs) / sizeof(const char *));
5049
5050    if (state->language_version >= 120)
5051       read_builtins(state, instructions,
5052                     functions_for_120,
5053                     sizeof(functions_for_120) / sizeof(const char *));
5054
5055    if (state->language_version >= 130)
5056       read_builtins(state, instructions,
5057                     functions_for_130,
5058                     sizeof(functions_for_130) / sizeof(const char *));
5059
5060    if (state->target == fragment_shader && state->language_version >= 130)
5061       read_builtins(state, instructions,
5062                     functions_for_130_fs,
5063                     sizeof(functions_for_130_fs) / sizeof(const char *));
5064
5065    if (state->ARB_texture_rectangle_enable)
5066       read_builtins(state, instructions,
5067                     functions_for_ARB_texture_rectangle,
5068                     sizeof(functions_for_ARB_texture_rectangle) / sizeof(const char *));
5069
5070    if (state->EXT_texture_array_enable)
5071       read_builtins(state, instructions,
5072                     functions_for_EXT_texture_array,
5073                     sizeof(functions_for_EXT_texture_array) / sizeof(const char *));
5074
5075    if (state->target == fragment_shader && state->EXT_texture_array_enable)
5076       read_builtins(state, instructions,
5077                     functions_for_EXT_texture_array_fs,
5078                     sizeof(functions_for_EXT_texture_array_fs) / sizeof(const char *));
5079
5080 }