diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/glsl/builtin_function.cpp | 2364 | ||||
| -rw-r--r-- | src/glsl/builtins/profiles/100.frag | 300 | ||||
| -rw-r--r-- | src/glsl/builtins/profiles/100.vert | 300 | 
3 files changed, 2953 insertions, 11 deletions
| diff --git a/src/glsl/builtin_function.cpp b/src/glsl/builtin_function.cpp index e2765b2429..4a319ef999 100644 --- a/src/glsl/builtin_function.cpp +++ b/src/glsl/builtin_function.cpp @@ -4762,6 +4762,2334 @@ static const char *builtin_transpose =     "\n"     ""  ; +static const char *prototypes_for_100_frag = +   "(\n" +   "(function radians\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float degrees))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 degrees))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 degrees))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 degrees))\n" +   "    ()))\n" +   "(function degrees\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float radians))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 radians))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 radians))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 radians))\n" +   "    ()))\n" +   "(function sin\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float angle))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 angle))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 angle))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 angle))\n" +   "    ()))\n" +   "(function cos\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float angle))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 angle))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 angle))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 angle))\n" +   "    ()))\n" +   "(function tan\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float angle))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 angle))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 angle))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 angle))\n" +   "    ()))\n" +   "(function asin\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float angle))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 angle))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 angle))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 angle))\n" +   "    ()))\n" +   "(function acos\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float angle))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 angle))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 angle))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 angle))\n" +   "    ()))\n" +   "(function atan\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float y)\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 y)\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 y)\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 y)\n" +   "      (declare (in) vec4 x))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float y_over_x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 y_over_x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 y_over_x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 y_over_x))\n" +   "    ()))\n" +   "(function pow\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ()))\n" +   "(function exp\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function log\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function exp2\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function log2\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function sqrt\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function inversesqrt\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function abs\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function sign\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function floor\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function ceil\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function fract\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function mod\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ()))\n" +   "(function min\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) float y))\n" +   "    ()))\n" +   "(function max\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) float y))\n" +   "    ()))\n" +   "(function clamp\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float minVal)\n" +   "      (declare (in) float maxVal))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 minVal)\n" +   "      (declare (in) vec2 maxVal))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 minVal)\n" +   "      (declare (in) vec3 maxVal))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 minVal)\n" +   "      (declare (in) vec4 maxVal))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) float minVal)\n" +   "      (declare (in) float maxVal))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) float minVal)\n" +   "      (declare (in) float maxVal))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) float minVal)\n" +   "      (declare (in) float maxVal))\n" +   "    ()))\n" +   "(function mix\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float y)\n" +   "      (declare (in) float a))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y)\n" +   "      (declare (in) vec2 a))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y)\n" +   "      (declare (in) vec3 a))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y)\n" +   "      (declare (in) vec4 a))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y)\n" +   "      (declare (in) float a))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y)\n" +   "      (declare (in) float a))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y)\n" +   "      (declare (in) float a))\n" +   "    ()))\n" +   "(function step\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float edge)\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 edge)\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 edge)\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 edge)\n" +   "      (declare (in) vec4 x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) float edge)\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) float edge)\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) float edge)\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function smoothstep\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float edge0)\n" +   "      (declare (in) float edge1)\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 edge0)\n" +   "      (declare (in) vec2 edge1)\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 edge0)\n" +   "      (declare (in) vec3 edge1)\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 edge0)\n" +   "      (declare (in) vec4 edge1)\n" +   "      (declare (in) vec4 x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) float edge0)\n" +   "      (declare (in) float edge1)\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) float edge0)\n" +   "      (declare (in) float edge1)\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) float edge0)\n" +   "      (declare (in) float edge1)\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function length\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function distance\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float p0)\n" +   "      (declare (in) float p1))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec2 p0)\n" +   "      (declare (in) vec2 p1))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec3 p0)\n" +   "      (declare (in) vec3 p1))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec4 p0)\n" +   "      (declare (in) vec4 p1))\n" +   "    ()))\n" +   "(function dot\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ()))\n" +   "(function cross\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ()))\n" +   "(function normalize\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function faceforward\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float N)\n" +   "      (declare (in) float I)\n" +   "      (declare (in) float Nref))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 N)\n" +   "      (declare (in) vec2 I)\n" +   "      (declare (in) vec2 Nref))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 N)\n" +   "      (declare (in) vec3 I)\n" +   "      (declare (in) vec3 Nref))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 N)\n" +   "      (declare (in) vec4 I)\n" +   "      (declare (in) vec4 Nref))\n" +   "    ()))\n" +   "(function reflect\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float I)\n" +   "      (declare (in) float N))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 I)\n" +   "      (declare (in) vec2 N))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 I)\n" +   "      (declare (in) vec3 N))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 I)\n" +   "      (declare (in) vec4 N))\n" +   "    ()))\n" +   "(function refract\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float I)\n" +   "      (declare (in) float N)\n" +   "      (declare (in) float eta))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 I)\n" +   "      (declare (in) vec2 N)\n" +   "      (declare (in) float eta))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 I)\n" +   "      (declare (in) vec3 N)\n" +   "      (declare (in) float eta))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 I)\n" +   "      (declare (in) vec4 N)\n" +   "      (declare (in) float eta))\n" +   "    ()))\n" +   "(function matrixCompMult\n" +   "  (signature mat2\n" +   "    (parameters\n" +   "      (declare (in) mat2 x)\n" +   "      (declare (in) mat2 y))\n" +   "    ())\n" +   "  (signature mat3\n" +   "    (parameters\n" +   "      (declare (in) mat3 x)\n" +   "      (declare (in) mat3 y))\n" +   "    ())\n" +   "  (signature mat4\n" +   "    (parameters\n" +   "      (declare (in) mat4 x)\n" +   "      (declare (in) mat4 y))\n" +   "    ()))\n" +   "(function lessThan\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) ivec2 x)\n" +   "      (declare (in) ivec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) ivec3 x)\n" +   "      (declare (in) ivec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) ivec4 x)\n" +   "      (declare (in) ivec4 y))\n" +   "    ()))\n" +   "(function lessThanEqual\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) ivec2 x)\n" +   "      (declare (in) ivec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) ivec3 x)\n" +   "      (declare (in) ivec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) ivec4 x)\n" +   "      (declare (in) ivec4 y))\n" +   "    ()))\n" +   "(function greaterThan\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) ivec2 x)\n" +   "      (declare (in) ivec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) ivec3 x)\n" +   "      (declare (in) ivec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) ivec4 x)\n" +   "      (declare (in) ivec4 y))\n" +   "    ()))\n" +   "(function greaterThanEqual\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) ivec2 x)\n" +   "      (declare (in) ivec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) ivec3 x)\n" +   "      (declare (in) ivec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) ivec4 x)\n" +   "      (declare (in) ivec4 y))\n" +   "    ()))\n" +   "(function equal\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) ivec2 x)\n" +   "      (declare (in) ivec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) ivec3 x)\n" +   "      (declare (in) ivec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) ivec4 x)\n" +   "      (declare (in) ivec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) bvec2 x)\n" +   "      (declare (in) bvec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) bvec3 x)\n" +   "      (declare (in) bvec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) bvec4 x)\n" +   "      (declare (in) bvec4 y))\n" +   "    ()))\n" +   "(function notEqual\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) ivec2 x)\n" +   "      (declare (in) ivec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) ivec3 x)\n" +   "      (declare (in) ivec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) ivec4 x)\n" +   "      (declare (in) ivec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) bvec2 x)\n" +   "      (declare (in) bvec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) bvec3 x)\n" +   "      (declare (in) bvec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) bvec4 x)\n" +   "      (declare (in) bvec4 y))\n" +   "    ()))\n" +   "(function any\n" +   "  (signature bool\n" +   "    (parameters\n" +   "      (declare (in) bvec2 x))\n" +   "    ())\n" +   "  (signature bool\n" +   "    (parameters\n" +   "      (declare (in) bvec3 x))\n" +   "    ())\n" +   "  (signature bool\n" +   "    (parameters\n" +   "      (declare (in) bvec4 x))\n" +   "    ()))\n" +   "(function all\n" +   "  (signature bool\n" +   "    (parameters\n" +   "      (declare (in) bvec2 x))\n" +   "    ())\n" +   "  (signature bool\n" +   "    (parameters\n" +   "      (declare (in) bvec3 x))\n" +   "    ())\n" +   "  (signature bool\n" +   "    (parameters\n" +   "      (declare (in) bvec4 x))\n" +   "    ()))\n" +   "(function not\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) bvec2 x))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) bvec3 x))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) bvec4 x))\n" +   "    ()))\n" +   "(function texture2D\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) sampler2D sampler)\n" +   "      (declare (in) vec2 coord))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) sampler2D sampler)\n" +   "      (declare (in) vec2 coord)\n" +   "      (declare (in) float bias))\n" +   "    ()))\n" +   "(function texture2DProj\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) sampler2D sampler)\n" +   "      (declare (in) vec3 coord))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) sampler2D sampler)\n" +   "      (declare (in) vec4 coord))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) sampler2D sampler)\n" +   "      (declare (in) vec3 coord)\n" +   "      (declare (in) float bias))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) sampler2D sampler)\n" +   "      (declare (in) vec4 coord)\n" +   "      (declare (in) float bias))\n" +   "    ()))\n" +   "(function textureCube\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) samplerCube sampler)\n" +   "      (declare (in) vec3 coord))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) samplerCube sampler)\n" +   "      (declare (in) vec3 coord)\n" +   "      (declare (in) float bias))\n" +   "    ())))" +; +static const char *functions_for_100_frag [] = { +   builtin_abs, +   builtin_acos, +   builtin_all, +   builtin_any, +   builtin_asin, +   builtin_atan, +   builtin_ceil, +   builtin_clamp, +   builtin_cos, +   builtin_cross, +   builtin_degrees, +   builtin_distance, +   builtin_dot, +   builtin_equal, +   builtin_exp, +   builtin_exp2, +   builtin_faceforward, +   builtin_floor, +   builtin_fract, +   builtin_greaterThan, +   builtin_greaterThanEqual, +   builtin_inversesqrt, +   builtin_length, +   builtin_lessThan, +   builtin_lessThanEqual, +   builtin_log, +   builtin_log2, +   builtin_matrixCompMult, +   builtin_max, +   builtin_min, +   builtin_mix, +   builtin_mod, +   builtin_normalize, +   builtin_not, +   builtin_notEqual, +   builtin_pow, +   builtin_radians, +   builtin_reflect, +   builtin_refract, +   builtin_sign, +   builtin_sin, +   builtin_smoothstep, +   builtin_sqrt, +   builtin_step, +   builtin_tan, +   builtin_texture2D, +   builtin_texture2DProj, +   builtin_textureCube, +}; +static const char *prototypes_for_100_vert = +   "(\n" +   "(function radians\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float degrees))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 degrees))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 degrees))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 degrees))\n" +   "    ()))\n" +   "(function degrees\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float radians))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 radians))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 radians))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 radians))\n" +   "    ()))\n" +   "(function sin\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float angle))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 angle))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 angle))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 angle))\n" +   "    ()))\n" +   "(function cos\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float angle))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 angle))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 angle))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 angle))\n" +   "    ()))\n" +   "(function tan\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float angle))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 angle))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 angle))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 angle))\n" +   "    ()))\n" +   "(function asin\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float angle))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 angle))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 angle))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 angle))\n" +   "    ()))\n" +   "(function acos\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float angle))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 angle))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 angle))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 angle))\n" +   "    ()))\n" +   "(function atan\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float y)\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 y)\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 y)\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 y)\n" +   "      (declare (in) vec4 x))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float y_over_x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 y_over_x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 y_over_x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 y_over_x))\n" +   "    ()))\n" +   "(function pow\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ()))\n" +   "(function exp\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function log\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function exp2\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function log2\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function sqrt\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function inversesqrt\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function abs\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function sign\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function floor\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function ceil\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function fract\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function mod\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ()))\n" +   "(function min\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) float y))\n" +   "    ()))\n" +   "(function max\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) float y))\n" +   "    ()))\n" +   "(function clamp\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float minVal)\n" +   "      (declare (in) float maxVal))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 minVal)\n" +   "      (declare (in) vec2 maxVal))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 minVal)\n" +   "      (declare (in) vec3 maxVal))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 minVal)\n" +   "      (declare (in) vec4 maxVal))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) float minVal)\n" +   "      (declare (in) float maxVal))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) float minVal)\n" +   "      (declare (in) float maxVal))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) float minVal)\n" +   "      (declare (in) float maxVal))\n" +   "    ()))\n" +   "(function mix\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float y)\n" +   "      (declare (in) float a))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y)\n" +   "      (declare (in) vec2 a))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y)\n" +   "      (declare (in) vec3 a))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y)\n" +   "      (declare (in) vec4 a))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y)\n" +   "      (declare (in) float a))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y)\n" +   "      (declare (in) float a))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y)\n" +   "      (declare (in) float a))\n" +   "    ()))\n" +   "(function step\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float edge)\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 edge)\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 edge)\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 edge)\n" +   "      (declare (in) vec4 x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) float edge)\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) float edge)\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) float edge)\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function smoothstep\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float edge0)\n" +   "      (declare (in) float edge1)\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 edge0)\n" +   "      (declare (in) vec2 edge1)\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 edge0)\n" +   "      (declare (in) vec3 edge1)\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 edge0)\n" +   "      (declare (in) vec4 edge1)\n" +   "      (declare (in) vec4 x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) float edge0)\n" +   "      (declare (in) float edge1)\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) float edge0)\n" +   "      (declare (in) float edge1)\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) float edge0)\n" +   "      (declare (in) float edge1)\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function length\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function distance\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float p0)\n" +   "      (declare (in) float p1))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec2 p0)\n" +   "      (declare (in) vec2 p1))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec3 p0)\n" +   "      (declare (in) vec3 p1))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec4 p0)\n" +   "      (declare (in) vec4 p1))\n" +   "    ()))\n" +   "(function dot\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x)\n" +   "      (declare (in) float y))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ()))\n" +   "(function cross\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ()))\n" +   "(function normalize\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float x))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x))\n" +   "    ()))\n" +   "(function faceforward\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float N)\n" +   "      (declare (in) float I)\n" +   "      (declare (in) float Nref))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 N)\n" +   "      (declare (in) vec2 I)\n" +   "      (declare (in) vec2 Nref))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 N)\n" +   "      (declare (in) vec3 I)\n" +   "      (declare (in) vec3 Nref))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 N)\n" +   "      (declare (in) vec4 I)\n" +   "      (declare (in) vec4 Nref))\n" +   "    ()))\n" +   "(function reflect\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float I)\n" +   "      (declare (in) float N))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 I)\n" +   "      (declare (in) vec2 N))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 I)\n" +   "      (declare (in) vec3 N))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 I)\n" +   "      (declare (in) vec4 N))\n" +   "    ()))\n" +   "(function refract\n" +   "  (signature float\n" +   "    (parameters\n" +   "      (declare (in) float I)\n" +   "      (declare (in) float N)\n" +   "      (declare (in) float eta))\n" +   "    ())\n" +   "  (signature vec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 I)\n" +   "      (declare (in) vec2 N)\n" +   "      (declare (in) float eta))\n" +   "    ())\n" +   "  (signature vec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 I)\n" +   "      (declare (in) vec3 N)\n" +   "      (declare (in) float eta))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 I)\n" +   "      (declare (in) vec4 N)\n" +   "      (declare (in) float eta))\n" +   "    ()))\n" +   "(function matrixCompMult\n" +   "  (signature mat2\n" +   "    (parameters\n" +   "      (declare (in) mat2 x)\n" +   "      (declare (in) mat2 y))\n" +   "    ())\n" +   "  (signature mat3\n" +   "    (parameters\n" +   "      (declare (in) mat3 x)\n" +   "      (declare (in) mat3 y))\n" +   "    ())\n" +   "  (signature mat4\n" +   "    (parameters\n" +   "      (declare (in) mat4 x)\n" +   "      (declare (in) mat4 y))\n" +   "    ()))\n" +   "(function lessThan\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) ivec2 x)\n" +   "      (declare (in) ivec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) ivec3 x)\n" +   "      (declare (in) ivec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) ivec4 x)\n" +   "      (declare (in) ivec4 y))\n" +   "    ()))\n" +   "(function lessThanEqual\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) ivec2 x)\n" +   "      (declare (in) ivec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) ivec3 x)\n" +   "      (declare (in) ivec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) ivec4 x)\n" +   "      (declare (in) ivec4 y))\n" +   "    ()))\n" +   "(function greaterThan\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) ivec2 x)\n" +   "      (declare (in) ivec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) ivec3 x)\n" +   "      (declare (in) ivec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) ivec4 x)\n" +   "      (declare (in) ivec4 y))\n" +   "    ()))\n" +   "(function greaterThanEqual\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) ivec2 x)\n" +   "      (declare (in) ivec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) ivec3 x)\n" +   "      (declare (in) ivec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) ivec4 x)\n" +   "      (declare (in) ivec4 y))\n" +   "    ()))\n" +   "(function equal\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) ivec2 x)\n" +   "      (declare (in) ivec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) ivec3 x)\n" +   "      (declare (in) ivec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) ivec4 x)\n" +   "      (declare (in) ivec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) bvec2 x)\n" +   "      (declare (in) bvec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) bvec3 x)\n" +   "      (declare (in) bvec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) bvec4 x)\n" +   "      (declare (in) bvec4 y))\n" +   "    ()))\n" +   "(function notEqual\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) vec2 x)\n" +   "      (declare (in) vec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) vec3 x)\n" +   "      (declare (in) vec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) vec4 x)\n" +   "      (declare (in) vec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) ivec2 x)\n" +   "      (declare (in) ivec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) ivec3 x)\n" +   "      (declare (in) ivec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) ivec4 x)\n" +   "      (declare (in) ivec4 y))\n" +   "    ())\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) bvec2 x)\n" +   "      (declare (in) bvec2 y))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) bvec3 x)\n" +   "      (declare (in) bvec3 y))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) bvec4 x)\n" +   "      (declare (in) bvec4 y))\n" +   "    ()))\n" +   "(function any\n" +   "  (signature bool\n" +   "    (parameters\n" +   "      (declare (in) bvec2 x))\n" +   "    ())\n" +   "  (signature bool\n" +   "    (parameters\n" +   "      (declare (in) bvec3 x))\n" +   "    ())\n" +   "  (signature bool\n" +   "    (parameters\n" +   "      (declare (in) bvec4 x))\n" +   "    ()))\n" +   "(function all\n" +   "  (signature bool\n" +   "    (parameters\n" +   "      (declare (in) bvec2 x))\n" +   "    ())\n" +   "  (signature bool\n" +   "    (parameters\n" +   "      (declare (in) bvec3 x))\n" +   "    ())\n" +   "  (signature bool\n" +   "    (parameters\n" +   "      (declare (in) bvec4 x))\n" +   "    ()))\n" +   "(function not\n" +   "  (signature bvec2\n" +   "    (parameters\n" +   "      (declare (in) bvec2 x))\n" +   "    ())\n" +   "  (signature bvec3\n" +   "    (parameters\n" +   "      (declare (in) bvec3 x))\n" +   "    ())\n" +   "  (signature bvec4\n" +   "    (parameters\n" +   "      (declare (in) bvec4 x))\n" +   "    ()))\n" +   "(function texture2D\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) sampler2D sampler)\n" +   "      (declare (in) vec2 coord))\n" +   "    ()))\n" +   "(function texture2DProj\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) sampler2D sampler)\n" +   "      (declare (in) vec3 coord))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) sampler2D sampler)\n" +   "      (declare (in) vec4 coord))\n" +   "    ()))\n" +   "(function texture2DLod\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) sampler2D sampler)\n" +   "      (declare (in) vec2 coord)\n" +   "      (declare (in) float lod))\n" +   "    ()))\n" +   "(function texture2DProjLod\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) sampler2D sampler)\n" +   "      (declare (in) vec3 coord)\n" +   "      (declare (in) float lod))\n" +   "    ())\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) sampler2D sampler)\n" +   "      (declare (in) vec4 coord)\n" +   "      (declare (in) float lod))\n" +   "    ()))\n" +   "(function textureCube\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) samplerCube sampler)\n" +   "      (declare (in) vec3 coord))\n" +   "    ()))\n" +   "(function textureCubeLod\n" +   "  (signature vec4\n" +   "    (parameters\n" +   "      (declare (in) samplerCube sampler)\n" +   "      (declare (in) vec3 coord)\n" +   "      (declare (in) float lod))\n" +   "    ())))" +; +static const char *functions_for_100_vert [] = { +   builtin_abs, +   builtin_acos, +   builtin_all, +   builtin_any, +   builtin_asin, +   builtin_atan, +   builtin_ceil, +   builtin_clamp, +   builtin_cos, +   builtin_cross, +   builtin_degrees, +   builtin_distance, +   builtin_dot, +   builtin_equal, +   builtin_exp, +   builtin_exp2, +   builtin_faceforward, +   builtin_floor, +   builtin_fract, +   builtin_greaterThan, +   builtin_greaterThanEqual, +   builtin_inversesqrt, +   builtin_length, +   builtin_lessThan, +   builtin_lessThanEqual, +   builtin_log, +   builtin_log2, +   builtin_matrixCompMult, +   builtin_max, +   builtin_min, +   builtin_mix, +   builtin_mod, +   builtin_normalize, +   builtin_not, +   builtin_notEqual, +   builtin_pow, +   builtin_radians, +   builtin_reflect, +   builtin_refract, +   builtin_sign, +   builtin_sin, +   builtin_smoothstep, +   builtin_sqrt, +   builtin_step, +   builtin_tan, +   builtin_texture2D, +   builtin_texture2DLod, +   builtin_texture2DProj, +   builtin_texture2DProjLod, +   builtin_textureCube, +   builtin_textureCubeLod, +};  static const char *prototypes_for_110_frag =     "(\n"     "(function radians\n" @@ -16807,7 +19135,7 @@ static const char *functions_for_EXT_texture_array_vert [] = {     builtin_texture2DArray,     builtin_texture2DArrayLod,  }; -static gl_shader *builtin_profiles[10]; +static gl_shader *builtin_profiles[12];  void *builtin_mem_ctx = NULL; @@ -16850,71 +19178,85 @@ _mesa_glsl_initialize_functions(exec_list *instructions,     state->num_builtins_to_link = 0; -   if (state->target == fragment_shader && state->language_version == 110) { +   if (state->target == fragment_shader && state->language_version == 100) {        _mesa_read_profile(state, instructions, 0, +                         prototypes_for_100_frag, +                         functions_for_100_frag, +                         Elements(functions_for_100_frag)); +   } + +   if (state->target == vertex_shader && state->language_version == 100) { +      _mesa_read_profile(state, instructions, 1, +                         prototypes_for_100_vert, +                         functions_for_100_vert, +                         Elements(functions_for_100_vert)); +   } + +   if (state->target == fragment_shader && state->language_version == 110) { +      _mesa_read_profile(state, instructions, 2,                           prototypes_for_110_frag,                           functions_for_110_frag,                           Elements(functions_for_110_frag));     }     if (state->target == vertex_shader && state->language_version == 110) { -      _mesa_read_profile(state, instructions, 1, +      _mesa_read_profile(state, instructions, 3,                           prototypes_for_110_vert,                           functions_for_110_vert,                           Elements(functions_for_110_vert));     }     if (state->target == fragment_shader && state->language_version == 120) { -      _mesa_read_profile(state, instructions, 2, +      _mesa_read_profile(state, instructions, 4,                           prototypes_for_120_frag,                           functions_for_120_frag,                           Elements(functions_for_120_frag));     }     if (state->target == vertex_shader && state->language_version == 120) { -      _mesa_read_profile(state, instructions, 3, +      _mesa_read_profile(state, instructions, 5,                           prototypes_for_120_vert,                           functions_for_120_vert,                           Elements(functions_for_120_vert));     }     if (state->target == fragment_shader && state->language_version == 130) { -      _mesa_read_profile(state, instructions, 4, +      _mesa_read_profile(state, instructions, 6,                           prototypes_for_130_frag,                           functions_for_130_frag,                           Elements(functions_for_130_frag));     }     if (state->target == vertex_shader && state->language_version == 130) { -      _mesa_read_profile(state, instructions, 5, +      _mesa_read_profile(state, instructions, 7,                           prototypes_for_130_vert,                           functions_for_130_vert,                           Elements(functions_for_130_vert));     }     if (state->target == fragment_shader && state->ARB_texture_rectangle_enable) { -      _mesa_read_profile(state, instructions, 6, +      _mesa_read_profile(state, instructions, 8,                           prototypes_for_ARB_texture_rectangle_frag,                           functions_for_ARB_texture_rectangle_frag,                           Elements(functions_for_ARB_texture_rectangle_frag));     }     if (state->target == vertex_shader && state->ARB_texture_rectangle_enable) { -      _mesa_read_profile(state, instructions, 7, +      _mesa_read_profile(state, instructions, 9,                           prototypes_for_ARB_texture_rectangle_vert,                           functions_for_ARB_texture_rectangle_vert,                           Elements(functions_for_ARB_texture_rectangle_vert));     }     if (state->target == fragment_shader && state->EXT_texture_array_enable) { -      _mesa_read_profile(state, instructions, 8, +      _mesa_read_profile(state, instructions, 10,                           prototypes_for_EXT_texture_array_frag,                           functions_for_EXT_texture_array_frag,                           Elements(functions_for_EXT_texture_array_frag));     }     if (state->target == vertex_shader && state->EXT_texture_array_enable) { -      _mesa_read_profile(state, instructions, 9, +      _mesa_read_profile(state, instructions, 11,                           prototypes_for_EXT_texture_array_vert,                           functions_for_EXT_texture_array_vert,                           Elements(functions_for_EXT_texture_array_vert)); diff --git a/src/glsl/builtins/profiles/100.frag b/src/glsl/builtins/profiles/100.frag new file mode 100644 index 0000000000..df4c7f042c --- /dev/null +++ b/src/glsl/builtins/profiles/100.frag @@ -0,0 +1,300 @@ +#version 100 +/* + * 8.1 - Angle and Trigonometry Functions + */ +float radians(float degrees); +vec2  radians(vec2  degrees); +vec3  radians(vec3  degrees); +vec4  radians(vec4  degrees); + +float degrees(float radians); +vec2  degrees(vec2  radians); +vec3  degrees(vec3  radians); +vec4  degrees(vec4  radians); + +float sin(float angle); +vec2  sin(vec2  angle); +vec3  sin(vec3  angle); +vec4  sin(vec4  angle); + +float cos(float angle); +vec2  cos(vec2  angle); +vec3  cos(vec3  angle); +vec4  cos(vec4  angle); + +float tan(float angle); +vec2  tan(vec2  angle); +vec3  tan(vec3  angle); +vec4  tan(vec4  angle); + +float asin(float angle); +vec2  asin(vec2  angle); +vec3  asin(vec3  angle); +vec4  asin(vec4  angle); + +float acos(float angle); +vec2  acos(vec2  angle); +vec3  acos(vec3  angle); +vec4  acos(vec4  angle); + +float atan(float y, float x); +vec2  atan(vec2  y, vec2  x); +vec3  atan(vec3  y, vec3  x); +vec4  atan(vec4  y, vec4  x); + +float atan(float y_over_x); +vec2  atan(vec2  y_over_x); +vec3  atan(vec3  y_over_x); +vec4  atan(vec4  y_over_x); + +/* + * 8.2 - Exponential Functions + */ +float pow(float x, float y); +vec2  pow(vec2  x, vec2  y); +vec3  pow(vec3  x, vec3  y); +vec4  pow(vec4  x, vec4  y); + +float exp(float x); +vec2  exp(vec2  x); +vec3  exp(vec3  x); +vec4  exp(vec4  x); + +float log(float x); +vec2  log(vec2  x); +vec3  log(vec3  x); +vec4  log(vec4  x); + +float exp2(float x); +vec2  exp2(vec2  x); +vec3  exp2(vec3  x); +vec4  exp2(vec4  x); + +float log2(float x); +vec2  log2(vec2  x); +vec3  log2(vec3  x); +vec4  log2(vec4  x); + +float sqrt(float x); +vec2  sqrt(vec2  x); +vec3  sqrt(vec3  x); +vec4  sqrt(vec4  x); + +float inversesqrt(float x); +vec2  inversesqrt(vec2  x); +vec3  inversesqrt(vec3  x); +vec4  inversesqrt(vec4  x); + +/* + * 8.3 - Common Functions + */ +float abs(float x); +vec2  abs(vec2  x); +vec3  abs(vec3  x); +vec4  abs(vec4  x); + +float sign(float x); +vec2  sign(vec2  x); +vec3  sign(vec3  x); +vec4  sign(vec4  x); + +float floor(float x); +vec2  floor(vec2  x); +vec3  floor(vec3  x); +vec4  floor(vec4  x); + +float ceil(float x); +vec2  ceil(vec2  x); +vec3  ceil(vec3  x); +vec4  ceil(vec4  x); + +float fract(float x); +vec2  fract(vec2  x); +vec3  fract(vec3  x); +vec4  fract(vec4  x); + +float mod(float x, float y); +vec2  mod(vec2  x, float y); +vec3  mod(vec3  x, float y); +vec4  mod(vec4  x, float y); + +vec2  mod(vec2  x, vec2  y); +vec3  mod(vec3  x, vec3  y); +vec4  mod(vec4  x, vec4  y); + +float min(float x, float y); +vec2  min(vec2  x, vec2  y); +vec3  min(vec3  x, vec3  y); +vec4  min(vec4  x, vec4  y); + +vec2  min(vec2  x, float y); +vec3  min(vec3  x, float y); +vec4  min(vec4  x, float y); + +float max(float x, float y); +vec2  max(vec2  x, vec2  y); +vec3  max(vec3  x, vec3  y); +vec4  max(vec4  x, vec4  y); + +vec2  max(vec2  x, float y); +vec3  max(vec3  x, float y); +vec4  max(vec4  x, float y); + +float clamp(float x, float minVal, float maxVal); +vec2  clamp(vec2  x, vec2  minVal, vec2  maxVal); +vec3  clamp(vec3  x, vec3  minVal, vec3  maxVal); +vec4  clamp(vec4  x, vec4  minVal, vec4  maxVal); + +vec2  clamp(vec2  x, float minVal, float maxVal); +vec3  clamp(vec3  x, float minVal, float maxVal); +vec4  clamp(vec4  x, float minVal, float maxVal); + +float mix(float x, float y, float a); +vec2  mix(vec2  x, vec2  y, vec2  a); +vec3  mix(vec3  x, vec3  y, vec3  a); +vec4  mix(vec4  x, vec4  y, vec4  a); + +vec2  mix(vec2  x, vec2  y, float a); +vec3  mix(vec3  x, vec3  y, float a); +vec4  mix(vec4  x, vec4  y, float a); + +float step(float edge, float x); +vec2  step(vec2  edge, vec2  x); +vec3  step(vec3  edge, vec3  x); +vec4  step(vec4  edge, vec4  x); + +vec2  step(float edge, vec2  x); +vec3  step(float edge, vec3  x); +vec4  step(float edge, vec4  x); + +float smoothstep(float edge0, float edge1, float x); +vec2  smoothstep(vec2  edge0, vec2  edge1, vec2  x); +vec3  smoothstep(vec3  edge0, vec3  edge1, vec3  x); +vec4  smoothstep(vec4  edge0, vec4  edge1, vec4  x); + +vec2  smoothstep(float edge0, float edge1, vec2  x); +vec3  smoothstep(float edge0, float edge1, vec3  x); +vec4  smoothstep(float edge0, float edge1, vec4  x); + +/* + * 8.4 - Geometric Functions + */ +float length(float x); +float length(vec2  x); +float length(vec3  x); +float length(vec4  x); + +float distance(float p0, float p1); +float distance(vec2  p0, vec2  p1); +float distance(vec3  p0, vec3  p1); +float distance(vec4  p0, vec4  p1); + +float dot(float x, float y); +float dot(vec2  x, vec2  y); +float dot(vec3  x, vec3  y); +float dot(vec4  x, vec4  y); + +vec3 cross(vec3 x, vec3 y); + +float normalize(float x); +vec2  normalize(vec2  x); +vec3  normalize(vec3  x); +vec4  normalize(vec4  x); + +float faceforward(float N, float I, float Nref); +vec2  faceforward(vec2  N, vec2  I, vec2  Nref); +vec3  faceforward(vec3  N, vec3  I, vec3  Nref); +vec4  faceforward(vec4  N, vec4  I, vec4  Nref); + +float reflect(float I, float N); +vec2  reflect(vec2  I, vec2  N); +vec3  reflect(vec3  I, vec3  N); +vec4  reflect(vec4  I, vec4  N); + +float refract(float I, float N, float eta); +vec2  refract(vec2  I, vec2  N, float eta); +vec3  refract(vec3  I, vec3  N, float eta); +vec4  refract(vec4  I, vec4  N, float eta); + +/* + * 8.5 - Matrix Functions + */ +mat2 matrixCompMult(mat2 x, mat2 y); +mat3 matrixCompMult(mat3 x, mat3 y); +mat4 matrixCompMult(mat4 x, mat4 y); + +/* + * 8.6 - Vector Relational Functions + */ +bvec2 lessThan( vec2 x,  vec2 y); +bvec3 lessThan( vec3 x,  vec3 y); +bvec4 lessThan( vec4 x,  vec4 y); +bvec2 lessThan(ivec2 x, ivec2 y); +bvec3 lessThan(ivec3 x, ivec3 y); +bvec4 lessThan(ivec4 x, ivec4 y); + +bvec2 lessThanEqual( vec2 x,  vec2 y); +bvec3 lessThanEqual( vec3 x,  vec3 y); +bvec4 lessThanEqual( vec4 x,  vec4 y); +bvec2 lessThanEqual(ivec2 x, ivec2 y); +bvec3 lessThanEqual(ivec3 x, ivec3 y); +bvec4 lessThanEqual(ivec4 x, ivec4 y); + +bvec2 greaterThan( vec2 x,  vec2 y); +bvec3 greaterThan( vec3 x,  vec3 y); +bvec4 greaterThan( vec4 x,  vec4 y); +bvec2 greaterThan(ivec2 x, ivec2 y); +bvec3 greaterThan(ivec3 x, ivec3 y); +bvec4 greaterThan(ivec4 x, ivec4 y); + +bvec2 greaterThanEqual( vec2 x,  vec2 y); +bvec3 greaterThanEqual( vec3 x,  vec3 y); +bvec4 greaterThanEqual( vec4 x,  vec4 y); +bvec2 greaterThanEqual(ivec2 x, ivec2 y); +bvec3 greaterThanEqual(ivec3 x, ivec3 y); +bvec4 greaterThanEqual(ivec4 x, ivec4 y); + +bvec2 equal( vec2 x,  vec2 y); +bvec3 equal( vec3 x,  vec3 y); +bvec4 equal( vec4 x,  vec4 y); +bvec2 equal(ivec2 x, ivec2 y); +bvec3 equal(ivec3 x, ivec3 y); +bvec4 equal(ivec4 x, ivec4 y); +bvec2 equal(bvec2 x, bvec2 y); +bvec3 equal(bvec3 x, bvec3 y); +bvec4 equal(bvec4 x, bvec4 y); + +bvec2 notEqual( vec2 x,  vec2 y); +bvec3 notEqual( vec3 x,  vec3 y); +bvec4 notEqual( vec4 x,  vec4 y); +bvec2 notEqual(ivec2 x, ivec2 y); +bvec3 notEqual(ivec3 x, ivec3 y); +bvec4 notEqual(ivec4 x, ivec4 y); +bvec2 notEqual(bvec2 x, bvec2 y); +bvec3 notEqual(bvec3 x, bvec3 y); +bvec4 notEqual(bvec4 x, bvec4 y); + +bool any(bvec2 x); +bool any(bvec3 x); +bool any(bvec4 x); + +bool all(bvec2 x); +bool all(bvec3 x); +bool all(bvec4 x); + +bvec2 not(bvec2 x); +bvec3 not(bvec3 x); +bvec4 not(bvec4 x); + +/* + * 8.7 - Texture Lookup Functions + */ +vec4 texture2D       (sampler2D sampler, vec2 coord); +vec4 texture2DProj   (sampler2D sampler, vec3 coord); +vec4 texture2DProj   (sampler2D sampler, vec4 coord); +vec4 texture2D       (sampler2D sampler, vec2 coord, float bias); +vec4 texture2DProj   (sampler2D sampler, vec3 coord, float bias); +vec4 texture2DProj   (sampler2D sampler, vec4 coord, float bias); + +vec4 textureCube     (samplerCube sampler, vec3 coord); +vec4 textureCube     (samplerCube sampler, vec3 coord, float bias); diff --git a/src/glsl/builtins/profiles/100.vert b/src/glsl/builtins/profiles/100.vert new file mode 100644 index 0000000000..e5d96f1db7 --- /dev/null +++ b/src/glsl/builtins/profiles/100.vert @@ -0,0 +1,300 @@ +#version 100 +/* + * 8.1 - Angle and Trigonometry Functions + */ +float radians(float degrees); +vec2  radians(vec2  degrees); +vec3  radians(vec3  degrees); +vec4  radians(vec4  degrees); + +float degrees(float radians); +vec2  degrees(vec2  radians); +vec3  degrees(vec3  radians); +vec4  degrees(vec4  radians); + +float sin(float angle); +vec2  sin(vec2  angle); +vec3  sin(vec3  angle); +vec4  sin(vec4  angle); + +float cos(float angle); +vec2  cos(vec2  angle); +vec3  cos(vec3  angle); +vec4  cos(vec4  angle); + +float tan(float angle); +vec2  tan(vec2  angle); +vec3  tan(vec3  angle); +vec4  tan(vec4  angle); + +float asin(float angle); +vec2  asin(vec2  angle); +vec3  asin(vec3  angle); +vec4  asin(vec4  angle); + +float acos(float angle); +vec2  acos(vec2  angle); +vec3  acos(vec3  angle); +vec4  acos(vec4  angle); + +float atan(float y, float x); +vec2  atan(vec2  y, vec2  x); +vec3  atan(vec3  y, vec3  x); +vec4  atan(vec4  y, vec4  x); + +float atan(float y_over_x); +vec2  atan(vec2  y_over_x); +vec3  atan(vec3  y_over_x); +vec4  atan(vec4  y_over_x); + +/* + * 8.2 - Exponential Functions + */ +float pow(float x, float y); +vec2  pow(vec2  x, vec2  y); +vec3  pow(vec3  x, vec3  y); +vec4  pow(vec4  x, vec4  y); + +float exp(float x); +vec2  exp(vec2  x); +vec3  exp(vec3  x); +vec4  exp(vec4  x); + +float log(float x); +vec2  log(vec2  x); +vec3  log(vec3  x); +vec4  log(vec4  x); + +float exp2(float x); +vec2  exp2(vec2  x); +vec3  exp2(vec3  x); +vec4  exp2(vec4  x); + +float log2(float x); +vec2  log2(vec2  x); +vec3  log2(vec3  x); +vec4  log2(vec4  x); + +float sqrt(float x); +vec2  sqrt(vec2  x); +vec3  sqrt(vec3  x); +vec4  sqrt(vec4  x); + +float inversesqrt(float x); +vec2  inversesqrt(vec2  x); +vec3  inversesqrt(vec3  x); +vec4  inversesqrt(vec4  x); + +/* + * 8.3 - Common Functions + */ +float abs(float x); +vec2  abs(vec2  x); +vec3  abs(vec3  x); +vec4  abs(vec4  x); + +float sign(float x); +vec2  sign(vec2  x); +vec3  sign(vec3  x); +vec4  sign(vec4  x); + +float floor(float x); +vec2  floor(vec2  x); +vec3  floor(vec3  x); +vec4  floor(vec4  x); + +float ceil(float x); +vec2  ceil(vec2  x); +vec3  ceil(vec3  x); +vec4  ceil(vec4  x); + +float fract(float x); +vec2  fract(vec2  x); +vec3  fract(vec3  x); +vec4  fract(vec4  x); + +float mod(float x, float y); +vec2  mod(vec2  x, float y); +vec3  mod(vec3  x, float y); +vec4  mod(vec4  x, float y); + +vec2  mod(vec2  x, vec2  y); +vec3  mod(vec3  x, vec3  y); +vec4  mod(vec4  x, vec4  y); + +float min(float x, float y); +vec2  min(vec2  x, vec2  y); +vec3  min(vec3  x, vec3  y); +vec4  min(vec4  x, vec4  y); + +vec2  min(vec2  x, float y); +vec3  min(vec3  x, float y); +vec4  min(vec4  x, float y); + +float max(float x, float y); +vec2  max(vec2  x, vec2  y); +vec3  max(vec3  x, vec3  y); +vec4  max(vec4  x, vec4  y); + +vec2  max(vec2  x, float y); +vec3  max(vec3  x, float y); +vec4  max(vec4  x, float y); + +float clamp(float x, float minVal, float maxVal); +vec2  clamp(vec2  x, vec2  minVal, vec2  maxVal); +vec3  clamp(vec3  x, vec3  minVal, vec3  maxVal); +vec4  clamp(vec4  x, vec4  minVal, vec4  maxVal); + +vec2  clamp(vec2  x, float minVal, float maxVal); +vec3  clamp(vec3  x, float minVal, float maxVal); +vec4  clamp(vec4  x, float minVal, float maxVal); + +float mix(float x, float y, float a); +vec2  mix(vec2  x, vec2  y, vec2  a); +vec3  mix(vec3  x, vec3  y, vec3  a); +vec4  mix(vec4  x, vec4  y, vec4  a); + +vec2  mix(vec2  x, vec2  y, float a); +vec3  mix(vec3  x, vec3  y, float a); +vec4  mix(vec4  x, vec4  y, float a); + +float step(float edge, float x); +vec2  step(vec2  edge, vec2  x); +vec3  step(vec3  edge, vec3  x); +vec4  step(vec4  edge, vec4  x); + +vec2  step(float edge, vec2  x); +vec3  step(float edge, vec3  x); +vec4  step(float edge, vec4  x); + +float smoothstep(float edge0, float edge1, float x); +vec2  smoothstep(vec2  edge0, vec2  edge1, vec2  x); +vec3  smoothstep(vec3  edge0, vec3  edge1, vec3  x); +vec4  smoothstep(vec4  edge0, vec4  edge1, vec4  x); + +vec2  smoothstep(float edge0, float edge1, vec2  x); +vec3  smoothstep(float edge0, float edge1, vec3  x); +vec4  smoothstep(float edge0, float edge1, vec4  x); + +/* + * 8.4 - Geometric Functions + */ +float length(float x); +float length(vec2  x); +float length(vec3  x); +float length(vec4  x); + +float distance(float p0, float p1); +float distance(vec2  p0, vec2  p1); +float distance(vec3  p0, vec3  p1); +float distance(vec4  p0, vec4  p1); + +float dot(float x, float y); +float dot(vec2  x, vec2  y); +float dot(vec3  x, vec3  y); +float dot(vec4  x, vec4  y); + +vec3 cross(vec3 x, vec3 y); + +float normalize(float x); +vec2  normalize(vec2  x); +vec3  normalize(vec3  x); +vec4  normalize(vec4  x); + +float faceforward(float N, float I, float Nref); +vec2  faceforward(vec2  N, vec2  I, vec2  Nref); +vec3  faceforward(vec3  N, vec3  I, vec3  Nref); +vec4  faceforward(vec4  N, vec4  I, vec4  Nref); + +float reflect(float I, float N); +vec2  reflect(vec2  I, vec2  N); +vec3  reflect(vec3  I, vec3  N); +vec4  reflect(vec4  I, vec4  N); + +float refract(float I, float N, float eta); +vec2  refract(vec2  I, vec2  N, float eta); +vec3  refract(vec3  I, vec3  N, float eta); +vec4  refract(vec4  I, vec4  N, float eta); + +/* + * 8.5 - Matrix Functions + */ +mat2 matrixCompMult(mat2 x, mat2 y); +mat3 matrixCompMult(mat3 x, mat3 y); +mat4 matrixCompMult(mat4 x, mat4 y); + +/* + * 8.6 - Vector Relational Functions + */ +bvec2 lessThan( vec2 x,  vec2 y); +bvec3 lessThan( vec3 x,  vec3 y); +bvec4 lessThan( vec4 x,  vec4 y); +bvec2 lessThan(ivec2 x, ivec2 y); +bvec3 lessThan(ivec3 x, ivec3 y); +bvec4 lessThan(ivec4 x, ivec4 y); + +bvec2 lessThanEqual( vec2 x,  vec2 y); +bvec3 lessThanEqual( vec3 x,  vec3 y); +bvec4 lessThanEqual( vec4 x,  vec4 y); +bvec2 lessThanEqual(ivec2 x, ivec2 y); +bvec3 lessThanEqual(ivec3 x, ivec3 y); +bvec4 lessThanEqual(ivec4 x, ivec4 y); + +bvec2 greaterThan( vec2 x,  vec2 y); +bvec3 greaterThan( vec3 x,  vec3 y); +bvec4 greaterThan( vec4 x,  vec4 y); +bvec2 greaterThan(ivec2 x, ivec2 y); +bvec3 greaterThan(ivec3 x, ivec3 y); +bvec4 greaterThan(ivec4 x, ivec4 y); + +bvec2 greaterThanEqual( vec2 x,  vec2 y); +bvec3 greaterThanEqual( vec3 x,  vec3 y); +bvec4 greaterThanEqual( vec4 x,  vec4 y); +bvec2 greaterThanEqual(ivec2 x, ivec2 y); +bvec3 greaterThanEqual(ivec3 x, ivec3 y); +bvec4 greaterThanEqual(ivec4 x, ivec4 y); + +bvec2 equal( vec2 x,  vec2 y); +bvec3 equal( vec3 x,  vec3 y); +bvec4 equal( vec4 x,  vec4 y); +bvec2 equal(ivec2 x, ivec2 y); +bvec3 equal(ivec3 x, ivec3 y); +bvec4 equal(ivec4 x, ivec4 y); +bvec2 equal(bvec2 x, bvec2 y); +bvec3 equal(bvec3 x, bvec3 y); +bvec4 equal(bvec4 x, bvec4 y); + +bvec2 notEqual( vec2 x,  vec2 y); +bvec3 notEqual( vec3 x,  vec3 y); +bvec4 notEqual( vec4 x,  vec4 y); +bvec2 notEqual(ivec2 x, ivec2 y); +bvec3 notEqual(ivec3 x, ivec3 y); +bvec4 notEqual(ivec4 x, ivec4 y); +bvec2 notEqual(bvec2 x, bvec2 y); +bvec3 notEqual(bvec3 x, bvec3 y); +bvec4 notEqual(bvec4 x, bvec4 y); + +bool any(bvec2 x); +bool any(bvec3 x); +bool any(bvec4 x); + +bool all(bvec2 x); +bool all(bvec3 x); +bool all(bvec4 x); + +bvec2 not(bvec2 x); +bvec3 not(bvec3 x); +bvec4 not(bvec4 x); + +/* + * 8.7 - Texture Lookup Functions + */ +vec4 texture2D       (sampler2D sampler, vec2 coord); +vec4 texture2DProj   (sampler2D sampler, vec3 coord); +vec4 texture2DProj   (sampler2D sampler, vec4 coord); +vec4 texture2DLod    (sampler2D sampler, vec2 coord, float lod); +vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod); +vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod); + +vec4 textureCube     (samplerCube sampler, vec3 coord); +vec4 textureCubeLod  (samplerCube sampler, vec3 coord, float lod); | 
