glsl: Add built-in function profiles for GLSL ES 1.00.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 16 Aug 2010 20:04:09 +0000 (13:04 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 8 Sep 2010 00:30:38 +0000 (17:30 -0700)
src/glsl/builtin_function.cpp
src/glsl/builtins/profiles/100.frag [new file with mode: 0644]
src/glsl/builtins/profiles/100.vert [new file with mode: 0644]

index e2765b2429840cbe789a46e10bc483825a8d0402..4a319ef999acdf65ec568ba4e6718ea34b047a2d 100644 (file)
@@ -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 (file)
index 0000000..df4c7f0
--- /dev/null
@@ -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 (file)
index 0000000..e5d96f1
--- /dev/null
@@ -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);