Implement 1.30 hyperbolic trig builtins (sinh, cosh, tanh).
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 9 Jun 2010 23:08:36 +0000 (16:08 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 9 Jun 2010 23:08:36 +0000 (16:08 -0700)
builtin_function.cpp
builtins/130/cosh [new file with mode: 0644]
builtins/130/sinh [new file with mode: 0644]
builtins/130/tanh [new file with mode: 0644]

index 789e4df9c1eafffe26628f256512b4b727531236..7f221216d8b6153ebc59bd653e9e65f7731f3be3 100644 (file)
@@ -3056,6 +3056,39 @@ static const char *functions_for_120 [] = {
 
 /* 130 builtins */
 
+static const char *builtins_130_cosh = {
+   "((function cosh\n"
+   "   (signature float\n"
+   "     (parameters\n"
+   "       (declare (in) float x))\n"
+   "     ((return (expression float * (constant float (0.5))\n"
+   "                (expression float +\n"
+   "             (expression float exp (var_ref x))\n"
+   "             (expression float exp (expression float neg (var_ref x))))))))\n"
+   "   (signature vec2\n"
+   "     (parameters\n"
+   "       (declare (in) vec2 x))\n"
+   "     ((return (expression vec2 * (constant vec2 (0.5))\n"
+   "                (expression vec2 +\n"
+   "             (expression vec2 exp (var_ref x))\n"
+   "             (expression vec2 exp (expression vec2 neg (var_ref x))))))))\n"
+   "   (signature vec3\n"
+   "     (parameters\n"
+   "       (declare (in) vec3 x))\n"
+   "     ((return (expression vec3 * (constant vec3 (0.5))\n"
+   "                (expression vec3 +\n"
+   "             (expression vec3 exp (var_ref x))\n"
+   "             (expression vec3 exp (expression vec3 neg (var_ref x))))))))\n"
+   "   (signature vec4\n"
+   "     (parameters\n"
+   "       (declare (in) vec4 x))\n"
+   "     ((return (expression vec4 * (constant vec4 (0.5))\n"
+   "                (expression vec4 +\n"
+   "             (expression vec4 exp (var_ref x))\n"
+   "             (expression vec4 exp (expression vec4 neg (var_ref x))))))))\n"
+   "))\n"
+};
+
 static const char *builtins_130_equal = {
    "((function equal\n"
    "   (signature bvec2\n"
@@ -3297,6 +3330,84 @@ static const char *builtins_130_sign = {
    "\n"
 };
 
+static const char *builtins_130_sinh = {
+   "((function sinh\n"
+   "   (signature float\n"
+   "     (parameters\n"
+   "       (declare (in) float x))\n"
+   "     ((return (expression float * (constant float (0.5))\n"
+   "                (expression float -\n"
+   "             (expression float exp (var_ref x))\n"
+   "             (expression float exp (expression float neg (var_ref x))))))))\n"
+   "   (signature vec2\n"
+   "     (parameters\n"
+   "       (declare (in) vec2 x))\n"
+   "     ((return (expression vec2 * (constant vec2 (0.5))\n"
+   "                (expression vec2 -\n"
+   "             (expression vec2 exp (var_ref x))\n"
+   "             (expression vec2 exp (expression vec2 neg (var_ref x))))))))\n"
+   "   (signature vec3\n"
+   "     (parameters\n"
+   "       (declare (in) vec3 x))\n"
+   "     ((return (expression vec3 * (constant vec3 (0.5))\n"
+   "                (expression vec3 -\n"
+   "             (expression vec3 exp (var_ref x))\n"
+   "             (expression vec3 exp (expression vec3 neg (var_ref x))))))))\n"
+   "   (signature vec4\n"
+   "     (parameters\n"
+   "       (declare (in) vec4 x))\n"
+   "     ((return (expression vec4 * (constant vec4 (0.5))\n"
+   "                (expression vec4 -\n"
+   "             (expression vec4 exp (var_ref x))\n"
+   "             (expression vec4 exp (expression vec4 neg (var_ref x))))))))\n"
+   "))\n"
+};
+
+static const char *builtins_130_tanh = {
+   "((function tanh\n"
+   "   (signature float\n"
+   "     (parameters\n"
+   "       (declare (in) float x))\n"
+   "     ((return (expression float /\n"
+   "                (expression float -\n"
+   "             (expression float exp (var_ref x))\n"
+   "             (expression float exp (expression float neg (var_ref x))))\n"
+   "                (expression float +\n"
+   "             (expression float exp (var_ref x))\n"
+   "             (expression float exp (expression float neg (var_ref x))))))))\n"
+   "   (signature vec2\n"
+   "     (parameters\n"
+   "       (declare (in) vec2 x))\n"
+   "     ((return (expression vec2 /\n"
+   "                (expression vec2 -\n"
+   "             (expression vec2 exp (var_ref x))\n"
+   "             (expression vec2 exp (expression vec2 neg (var_ref x))))\n"
+   "                (expression vec2 +\n"
+   "             (expression vec2 exp (var_ref x))\n"
+   "             (expression vec2 exp (expression vec2 neg (var_ref x))))))))\n"
+   "   (signature vec3\n"
+   "     (parameters\n"
+   "       (declare (in) vec3 x))\n"
+   "     ((return (expression vec3 /\n"
+   "                (expression vec3 -\n"
+   "             (expression vec3 exp (var_ref x))\n"
+   "             (expression vec3 exp (expression vec3 neg (var_ref x))))\n"
+   "                (expression vec3 +\n"
+   "             (expression vec3 exp (var_ref x))\n"
+   "             (expression vec3 exp (expression vec3 neg (var_ref x))))))))\n"
+   "   (signature vec4\n"
+   "     (parameters\n"
+   "       (declare (in) vec4 x))\n"
+   "     ((return (expression vec4 /\n"
+   "                (expression vec4 -\n"
+   "             (expression vec4 exp (var_ref x))\n"
+   "             (expression vec4 exp (expression vec4 neg (var_ref x))))\n"
+   "                (expression vec4 +\n"
+   "             (expression vec4 exp (var_ref x))\n"
+   "             (expression vec4 exp (expression vec4 neg (var_ref x))))))))\n"
+   "))\n"
+};
+
 static const char *builtins_130_texelFetch = {
    "((function texelFetch\n"
    "   (signature vec4\n"
@@ -4132,6 +4243,7 @@ static const char *builtins_130_textureProjLod = {
 };
 
 static const char *functions_for_130 [] = {
+   builtins_130_cosh,
    builtins_130_equal,
    builtins_130_greaterThan,
    builtins_130_greaterThanEqual,
@@ -4139,6 +4251,8 @@ static const char *functions_for_130 [] = {
    builtins_130_lessThanEqual,
    builtins_130_notEqual,
    builtins_130_sign,
+   builtins_130_sinh,
+   builtins_130_tanh,
    builtins_130_texelFetch,
    builtins_130_texture,
    builtins_130_textureGrad,
diff --git a/builtins/130/cosh b/builtins/130/cosh
new file mode 100644 (file)
index 0000000..45e0ae4
--- /dev/null
@@ -0,0 +1,30 @@
+((function cosh
+   (signature float
+     (parameters
+       (declare (in) float x))
+     ((return (expression float * (constant float (0.5))
+                (expression float +
+                 (expression float exp (var_ref x))
+                 (expression float exp (expression float neg (var_ref x))))))))
+   (signature vec2
+     (parameters
+       (declare (in) vec2 x))
+     ((return (expression vec2 * (constant vec2 (0.5))
+                (expression vec2 +
+                 (expression vec2 exp (var_ref x))
+                 (expression vec2 exp (expression vec2 neg (var_ref x))))))))
+   (signature vec3
+     (parameters
+       (declare (in) vec3 x))
+     ((return (expression vec3 * (constant vec3 (0.5))
+                (expression vec3 +
+                 (expression vec3 exp (var_ref x))
+                 (expression vec3 exp (expression vec3 neg (var_ref x))))))))
+   (signature vec4
+     (parameters
+       (declare (in) vec4 x))
+     ((return (expression vec4 * (constant vec4 (0.5))
+                (expression vec4 +
+                 (expression vec4 exp (var_ref x))
+                 (expression vec4 exp (expression vec4 neg (var_ref x))))))))
+))
diff --git a/builtins/130/sinh b/builtins/130/sinh
new file mode 100644 (file)
index 0000000..7ad4f58
--- /dev/null
@@ -0,0 +1,30 @@
+((function sinh
+   (signature float
+     (parameters
+       (declare (in) float x))
+     ((return (expression float * (constant float (0.5))
+                (expression float -
+                 (expression float exp (var_ref x))
+                 (expression float exp (expression float neg (var_ref x))))))))
+   (signature vec2
+     (parameters
+       (declare (in) vec2 x))
+     ((return (expression vec2 * (constant vec2 (0.5))
+                (expression vec2 -
+                 (expression vec2 exp (var_ref x))
+                 (expression vec2 exp (expression vec2 neg (var_ref x))))))))
+   (signature vec3
+     (parameters
+       (declare (in) vec3 x))
+     ((return (expression vec3 * (constant vec3 (0.5))
+                (expression vec3 -
+                 (expression vec3 exp (var_ref x))
+                 (expression vec3 exp (expression vec3 neg (var_ref x))))))))
+   (signature vec4
+     (parameters
+       (declare (in) vec4 x))
+     ((return (expression vec4 * (constant vec4 (0.5))
+                (expression vec4 -
+                 (expression vec4 exp (var_ref x))
+                 (expression vec4 exp (expression vec4 neg (var_ref x))))))))
+))
diff --git a/builtins/130/tanh b/builtins/130/tanh
new file mode 100644 (file)
index 0000000..3b7271b
--- /dev/null
@@ -0,0 +1,42 @@
+((function tanh
+   (signature float
+     (parameters
+       (declare (in) float x))
+     ((return (expression float /
+                (expression float -
+                 (expression float exp (var_ref x))
+                 (expression float exp (expression float neg (var_ref x))))
+                (expression float +
+                 (expression float exp (var_ref x))
+                 (expression float exp (expression float neg (var_ref x))))))))
+   (signature vec2
+     (parameters
+       (declare (in) vec2 x))
+     ((return (expression vec2 /
+                (expression vec2 -
+                 (expression vec2 exp (var_ref x))
+                 (expression vec2 exp (expression vec2 neg (var_ref x))))
+                (expression vec2 +
+                 (expression vec2 exp (var_ref x))
+                 (expression vec2 exp (expression vec2 neg (var_ref x))))))))
+   (signature vec3
+     (parameters
+       (declare (in) vec3 x))
+     ((return (expression vec3 /
+                (expression vec3 -
+                 (expression vec3 exp (var_ref x))
+                 (expression vec3 exp (expression vec3 neg (var_ref x))))
+                (expression vec3 +
+                 (expression vec3 exp (var_ref x))
+                 (expression vec3 exp (expression vec3 neg (var_ref x))))))))
+   (signature vec4
+     (parameters
+       (declare (in) vec4 x))
+     ((return (expression vec4 /
+                (expression vec4 -
+                 (expression vec4 exp (var_ref x))
+                 (expression vec4 exp (expression vec4 neg (var_ref x))))
+                (expression vec4 +
+                 (expression vec4 exp (var_ref x))
+                 (expression vec4 exp (expression vec4 neg (var_ref x))))))))
+))