glsl: Implement the asinh, acosh, and atanh built-in functions.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 15 Nov 2010 21:58:51 +0000 (13:58 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 15 Nov 2010 22:02:52 +0000 (14:02 -0800)
src/glsl/builtins/ir/acosh [new file with mode: 0644]
src/glsl/builtins/ir/asinh [new file with mode: 0644]
src/glsl/builtins/ir/atanh [new file with mode: 0644]
src/glsl/builtins/profiles/130.frag
src/glsl/builtins/profiles/130.vert

diff --git a/src/glsl/builtins/ir/acosh b/src/glsl/builtins/ir/acosh
new file mode 100644 (file)
index 0000000..5518e75
--- /dev/null
@@ -0,0 +1,21 @@
+((function acosh
+   (signature float
+     (parameters
+       (declare (in) float x))
+     ((return (expression float log (expression float + (var_ref x) (expression float sqrt (expression float - (expression float * (var_ref x) (var_ref x)) (constant float (1)))))))))
+
+   (signature vec2
+     (parameters
+       (declare (in) vec2 x))
+     ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 - (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1)))))))))
+
+   (signature vec3
+     (parameters
+       (declare (in) vec3 x))
+     ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 - (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1)))))))))
+
+   (signature vec4
+     (parameters
+       (declare (in) vec4 x))
+     ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 - (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1)))))))))
+))
diff --git a/src/glsl/builtins/ir/asinh b/src/glsl/builtins/ir/asinh
new file mode 100644 (file)
index 0000000..cdc2c20
--- /dev/null
@@ -0,0 +1,21 @@
+((function asinh
+   (signature float
+     (parameters
+       (declare (in) float x))
+     ((return (expression float log (expression float + (var_ref x) (expression float sqrt (expression float + (expression float * (var_ref x) (var_ref x)) (constant float (1)))))))))
+
+   (signature vec2
+     (parameters
+       (declare (in) vec2 x))
+     ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 + (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1)))))))))
+
+   (signature vec3
+     (parameters
+       (declare (in) vec3 x))
+     ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 + (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1)))))))))
+
+   (signature vec4
+     (parameters
+       (declare (in) vec4 x))
+     ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 + (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1)))))))))
+))
diff --git a/src/glsl/builtins/ir/atanh b/src/glsl/builtins/ir/atanh
new file mode 100644 (file)
index 0000000..5559e97
--- /dev/null
@@ -0,0 +1,37 @@
+((function atanh
+   (signature float
+     (parameters
+       (declare (in) float x))
+     ((return (expression float * (constant float (0.5))
+                (expression float log
+                 (expression float /
+                    (expression float + (constant float (1)) (var_ref x))
+                    (expression float - (constant float (1)) (var_ref x))))))))
+
+   (signature vec2
+     (parameters
+       (declare (in) vec2 x))
+     ((return (expression vec2 * (constant vec2 (0.5))
+                (expression vec2 log
+                 (expression vec2 /
+                    (expression vec2 + (constant vec2 (1)) (var_ref x))
+                    (expression vec2 - (constant vec2 (1)) (var_ref x))))))))
+
+   (signature vec3
+     (parameters
+       (declare (in) vec3 x))
+     ((return (expression vec3 * (constant vec3 (0.5))
+                (expression vec3 log
+                 (expression vec3 /
+                    (expression vec3 + (constant vec3 (1)) (var_ref x))
+                    (expression vec3 - (constant vec3 (1)) (var_ref x))))))))
+
+   (signature vec4
+     (parameters
+       (declare (in) vec4 x))
+     ((return (expression vec4 * (constant vec4 (0.5))
+                (expression vec4 log
+                 (expression vec4 /
+                    (expression vec4 + (constant vec4 (1)) (var_ref x))
+                    (expression vec4 - (constant vec4 (1)) (var_ref x))))))))
+))
index 0d860eb9ed43519c99c4eeb286da1baf43bfc4e9..329116f2a28843b1816e3e4dcf5d9099dc22b304 100644 (file)
@@ -62,7 +62,6 @@ vec2  tanh(vec2  x);
 vec3  tanh(vec3  x);
 vec4  tanh(vec4  x);
 
-#if 0
 float asinh(float x);
 vec2  asinh(vec2  x);
 vec3  asinh(vec3  x);
@@ -77,7 +76,6 @@ float atanh(float x);
 vec2  atanh(vec2  x);
 vec3  atanh(vec3  x);
 vec4  atanh(vec4  x);
-#endif
 
 /*
  * 8.2 - Exponential Functions
index 2fd44dce8c7e6e46c8304a0a7bea4eb8e27a48a2..1c212ebb3c5ef8da79e9b7eba8b9cb4ef195712c 100644 (file)
@@ -62,7 +62,6 @@ vec2  tanh(vec2  x);
 vec3  tanh(vec3  x);
 vec4  tanh(vec4  x);
 
-#if 0
 float asinh(float x);
 vec2  asinh(vec2  x);
 vec3  asinh(vec3  x);
@@ -77,7 +76,6 @@ float atanh(float x);
 vec2  atanh(vec2  x);
 vec3  atanh(vec3  x);
 vec4  atanh(vec4  x);
-#endif
 
 /*
  * 8.2 - Exponential Functions