summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrian Paul <brian.paul@tungstengraphics.com>2008-07-17 10:03:10 -0600
committerBrian Paul <brian.paul@tungstengraphics.com>2008-07-17 10:08:14 -0600
commitd9f4d04111133a7dab5e645021e56245febea2ae (patch)
tree19c3909fa61b729013a28a691952823298f4a188 /src
parentf49d345a51bb208fee19fc25762bcdb0e7f67174 (diff)
mesa: fix/improve the atan(y,x) function
Diffstat (limited to 'src')
-rw-r--r--src/mesa/shader/slang/library/slang_common_builtin.gc21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/mesa/shader/slang/library/slang_common_builtin.gc b/src/mesa/shader/slang/library/slang_common_builtin.gc
index b095a6434b..3726335471 100644
--- a/src/mesa/shader/slang/library/slang_common_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_common_builtin.gc
@@ -401,16 +401,17 @@ vec4 atan(const vec4 y_over_x)
float atan(const float y, const float x)
{
- if (x == 0.0)
- return 0.0;
- float z = atan(y / x);
- if (x < 0.0)
- {
- if (y < 0.0)
- return z - 3.141593;
- return z + 3.141593;
- }
- return z;
+ float r;
+ if (abs(x) > 1.0e-4) {
+ r = atan(y / x);
+ if (x < 0.0) {
+ r = r + sign(y) * 3.141593;
+ }
+ }
+ else {
+ r = sign(y) * 1.5707965; // pi/2
+ }
+ return r;
}
vec2 atan(const vec2 u, const vec2 v)