glsl2: fix bug in atan(y, x) function
authorBrian Paul <brianp@vmware.com>
Wed, 1 Sep 2010 01:13:09 +0000 (19:13 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 1 Sep 2010 01:15:07 +0000 (19:15 -0600)
When x==0, the result was wrong.  Fixes piglit glsl-fs-atan-1.shader_test

src/glsl/builtin_function.cpp
src/glsl/builtins/ir/atan

index d3484cbcd332267b7bc8179a0606cfe2c0a61aea..e6feb55759dbba1f182690ed110bc431274793b7 100644 (file)
@@ -324,6 +324,8 @@ static const char *builtin_atan =
    ") \n"
    "        (assign (constant bool (1)) (var_ref r)  (var_ref atan_retval) ) \n"
    "        (if (expression bool < (var_ref x) (constant float (0.000000)) ) (\n"
+   "\n"
+   "\n"
    "          (if (expression bool >= (var_ref y) (constant float (0.000000)) ) (\n"
    "            (declare ( ) float assignment_tmp)\n"
    "            (assign (constant bool (1)) (var_ref assignment_tmp)  (expression float + (var_ref r) (constant float (3.141593)) ) ) \n"
@@ -341,12 +343,10 @@ static const char *builtin_atan =
    "\n"
    "      )\n"
    "      (\n"
-   "        (if (expression bool >= (var_ref y) (constant float (0.000000)) ) (\n"
-   "          (assign (constant bool (1)) (var_ref r)  (constant float (1.570796)) ) \n"
-   "        )\n"
-   "        (\n"
-   "          (assign (constant bool (1)) (var_ref r)  (constant float (-1.570796)) ) \n"
-   "        ))\n"
+   "\n"
+   "        (declare () float sgn)\n"
+   "        (assign (constant bool (1)) (var_ref sgn) (expression float sign (var_ref y)))\n"
+   "        (assign (constant bool (1)) (var_ref r) (expression float * (var_ref sgn) (constant float (1.5707965))))\n"
    "\n"
    "      ))\n"
    "\n"
index 8404829387039898428c0174aa9f1b9de06145b8..04e1898f9f39ff065ffb8568064b7b0a0eca4ee0 100644 (file)
 
       )
       (
-        (if (expression bool >= (var_ref y) (constant float (0.000000)) ) (
-          (assign (constant bool (1)) (var_ref r)  (constant float (1.570796)) ) 
-        )
-        (
-          (assign (constant bool (1)) (var_ref r)  (constant float (-1.570796)) ) 
-        ))
-
+        (declare () float sgn)
+        (assign (constant bool (1)) (var_ref sgn) (expression float sign (var_ref y)))
+        (assign (constant bool (1)) (var_ref r) (expression float * (var_ref sgn) (constant float (1.5707965))))
       ))
 
       (return (var_ref r) )