Mesa (glsl2): glsl2: Fix asin() implementation.

Eric Anholt anholt at kemper.freedesktop.org
Tue Jul 20 19:25:03 UTC 2010


Module: Mesa
Branch: glsl2
Commit: 1245babe0c69846d227a78a11429584433e77a9e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1245babe0c69846d227a78a11429584433e77a9e

Author: Eric Anholt <eric at anholt.net>
Date:   Tue Jul 20 12:22:37 2010 -0700

glsl2: Fix asin() implementation.

I'd flipped around the order of two operations in paren-balancing
adventures, and left out the multiply by sign(x) required for negative x.

Fixes:
glsl1-acos(vec4) function
glsl1-asin(vec4) function
glsl1-atan(vec4) function

---

 src/glsl/builtin_function.cpp |  130 ++++++++++++++++++++++-------------------
 src/glsl/builtins/110/asin    |  130 ++++++++++++++++++++++-------------------
 2 files changed, 138 insertions(+), 122 deletions(-)

diff --git a/src/glsl/builtin_function.cpp b/src/glsl/builtin_function.cpp
index be7a4f2..967bcd0 100644
--- a/src/glsl/builtin_function.cpp
+++ b/src/glsl/builtin_function.cpp
@@ -113,90 +113,98 @@ static const char *builtins_110_asin = {
    "     (parameters\n"
    "       (declare (in) float x))\n"
    "     ((return (expression float *\n"
-   "     	       (expression float -\n"
-   "	        (expression float *\n"
+   "	       (expression float sign (var_ref x))\n"
+   "	       (expression float -\n"
+   "		(expression float *\n"
    "		 (constant float (3.1415926))\n"
    "		 (constant float (0.5)))\n"
-   "		(expression float sqrt\n"
-   "		 (expression float -\n"
-   "		  (constant float (1.0))\n"
-   "		  (expression float abs (var_ref x)))))\n"
-   "     	       (expression float +\n"
-   "     	        (constant float (1.5707288))\n"
-   "	        (expression float *\n"
-   "     	         (expression float abs (var_ref x))\n"
-   "     	         (expression float +\n"
-   "	          (constant float (-0.2121144))\n"
-   "     	          (expression float *\n"
-   "     	           (constant float (0.0742610))\n"
-   "	           (expression float abs (var_ref x))))))))))\n"
+   "		(expression float *\n"
+   "		 (expression float sqrt\n"
+   "		  (expression float -\n"
+   "		   (constant float (1.0))\n"
+   "		   (expression float abs (var_ref x))))\n"
+   "		 (expression float +\n"
+   "		  (constant float (1.5707288))\n"
+   "		  (expression float *\n"
+   "		   (expression float abs (var_ref x))\n"
+   "		   (expression float +\n"
+   "		    (constant float (-0.2121144))\n"
+   "		    (expression float *\n"
+   "		     (constant float (0.0742610))\n"
+   "		     (expression float abs (var_ref x))))))))))))\n"
    "\n"
    "   (signature vec2\n"
    "     (parameters\n"
    "       (declare (in) vec2 x))\n"
    "     ((return (expression vec2 *\n"
-   "     	       (expression float -\n"
-   "	        (expression float *\n"
+   "	       (expression vec2 sign (var_ref x))\n"
+   "	       (expression vec2 -\n"
+   "		(expression float *\n"
    "		 (constant float (3.1415926))\n"
    "		 (constant float (0.5)))\n"
-   "		(expression vec2 sqrt\n"
-   "		 (expression vec2 -\n"
-   "		  (constant float (1.0))\n"
-   "		  (expression vec2 abs (var_ref x)))))\n"
-   "     	       (expression vec2 +\n"
-   "     	        (constant float (1.5707288))\n"
-   "	        (expression vec2 *\n"
-   "     	         (expression vec2 abs (var_ref x))\n"
-   "     	         (expression vec2 +\n"
-   "	          (constant float (-0.2121144))\n"
-   "     	          (expression vec2 *\n"
-   "     	           (constant float (0.0742610))\n"
-   "	           (expression vec2 abs (var_ref x))))))))))\n"
+   "		(expression vec2 *\n"
+   "		 (expression vec2 sqrt\n"
+   "		  (expression vec2 -\n"
+   "		   (constant float (1.0))\n"
+   "		   (expression vec2 abs (var_ref x))))\n"
+   "		 (expression vec2 +\n"
+   "		  (constant float (1.5707288))\n"
+   "		  (expression vec2 *\n"
+   "		   (expression vec2 abs (var_ref x))\n"
+   "		   (expression vec2 +\n"
+   "		    (constant float (-0.2121144))\n"
+   "		    (expression vec2 *\n"
+   "		     (constant float (0.0742610))\n"
+   "		     (expression vec2 abs (var_ref x))))))))))))\n"
    "\n"
    "   (signature vec3\n"
    "     (parameters\n"
    "       (declare (in) vec3 x))\n"
    "     ((return (expression vec3 *\n"
-   "     	       (expression vec3 -\n"
-   "	        (expression float *\n"
+   "	       (expression vec3 sign (var_ref x))\n"
+   "	       (expression vec3 -\n"
+   "		(expression float *\n"
    "		 (constant float (3.1415926))\n"
    "		 (constant float (0.5)))\n"
-   "		(expression vec3 sqrt\n"
-   "		 (expression vec3 -\n"
-   "		  (constant float (1.0))\n"
-   "		  (expression vec3 abs (var_ref x)))))\n"
-   "     	       (expression vec3 +\n"
-   "     	        (constant float (1.5707288))\n"
-   "	        (expression vec3 *\n"
-   "     	         (expression vec3 abs (var_ref x))\n"
-   "     	         (expression vec3 +\n"
-   "	          (constant float (-0.2121144))\n"
-   "     	          (expression vec3 *\n"
-   "     	           (constant float (0.0742610))\n"
-   "	           (expression vec3 abs (var_ref x))))))))))\n"
+   "		(expression vec3 *\n"
+   "		 (expression vec3 sqrt\n"
+   "		  (expression vec3 -\n"
+   "		   (constant float (1.0))\n"
+   "		   (expression vec3 abs (var_ref x))))\n"
+   "		 (expression vec3 +\n"
+   "		  (constant float (1.5707288))\n"
+   "		  (expression vec3 *\n"
+   "		   (expression vec3 abs (var_ref x))\n"
+   "		   (expression vec3 +\n"
+   "		    (constant float (-0.2121144))\n"
+   "		    (expression vec3 *\n"
+   "		     (constant float (0.0742610))\n"
+   "		     (expression vec3 abs (var_ref x))))))))))))\n"
    "\n"
    "   (signature vec4\n"
    "     (parameters\n"
    "       (declare (in) vec4 x))\n"
    "     ((return (expression vec4 *\n"
-   "     	       (expression vec4 -\n"
-   "	        (expression float *\n"
+   "	       (expression vec4 sign (var_ref x))\n"
+   "	       (expression vec4 -\n"
+   "		(expression float *\n"
    "		 (constant float (3.1415926))\n"
    "		 (constant float (0.5)))\n"
-   "		(expression vec4 sqrt\n"
-   "		 (expression vec4 -\n"
-   "		  (constant float (1.0))\n"
-   "		  (expression vec4 abs (var_ref x)))))\n"
-   "     	       (expression vec4 +\n"
-   "     	        (constant float (1.5707288))\n"
-   "	        (expression vec4 *\n"
-   "     	         (expression vec4 abs (var_ref x))\n"
-   "     	         (expression vec4 +\n"
-   "	          (constant float (-0.2121144))\n"
-   "     	          (expression vec4 *\n"
-   "     	           (constant float (0.0742610))\n"
-   "	           (expression vec4 abs (var_ref x))))))))))\n"
-   ")\n"
+   "		(expression vec4 *\n"
+   "		 (expression vec4 sqrt\n"
+   "		  (expression vec4 -\n"
+   "		   (constant float (1.0))\n"
+   "		   (expression vec4 abs (var_ref x))))\n"
+   "		 (expression vec4 +\n"
+   "		  (constant float (1.5707288))\n"
+   "		  (expression vec4 *\n"
+   "		   (expression vec4 abs (var_ref x))\n"
+   "		   (expression vec4 +\n"
+   "		    (constant float (-0.2121144))\n"
+   "		    (expression vec4 *\n"
+   "		     (constant float (0.0742610))\n"
+   "		     (expression vec4 abs (var_ref x)))))))))))\n"
+   "))\n"
    "\n"
    " (function acos\n"
    "   (signature float\n"
diff --git a/src/glsl/builtins/110/asin b/src/glsl/builtins/110/asin
index fe93337..d26bde3 100644
--- a/src/glsl/builtins/110/asin
+++ b/src/glsl/builtins/110/asin
@@ -3,90 +3,98 @@
      (parameters
        (declare (in) float x))
      ((return (expression float *
-     	       (expression float -
-	        (expression float *
+	       (expression float sign (var_ref x))
+	       (expression float -
+		(expression float *
 		 (constant float (3.1415926))
 		 (constant float (0.5)))
-		(expression float sqrt
-		 (expression float -
-		  (constant float (1.0))
-		  (expression float abs (var_ref x)))))
-     	       (expression float +
-     	        (constant float (1.5707288))
-	        (expression float *
-     	         (expression float abs (var_ref x))
-     	         (expression float +
-	          (constant float (-0.2121144))
-     	          (expression float *
-     	           (constant float (0.0742610))
-	           (expression float abs (var_ref x))))))))))
+		(expression float *
+		 (expression float sqrt
+		  (expression float -
+		   (constant float (1.0))
+		   (expression float abs (var_ref x))))
+		 (expression float +
+		  (constant float (1.5707288))
+		  (expression float *
+		   (expression float abs (var_ref x))
+		   (expression float +
+		    (constant float (-0.2121144))
+		    (expression float *
+		     (constant float (0.0742610))
+		     (expression float abs (var_ref x))))))))))))
 
    (signature vec2
      (parameters
        (declare (in) vec2 x))
      ((return (expression vec2 *
-     	       (expression float -
-	        (expression float *
+	       (expression vec2 sign (var_ref x))
+	       (expression vec2 -
+		(expression float *
 		 (constant float (3.1415926))
 		 (constant float (0.5)))
-		(expression vec2 sqrt
-		 (expression vec2 -
-		  (constant float (1.0))
-		  (expression vec2 abs (var_ref x)))))
-     	       (expression vec2 +
-     	        (constant float (1.5707288))
-	        (expression vec2 *
-     	         (expression vec2 abs (var_ref x))
-     	         (expression vec2 +
-	          (constant float (-0.2121144))
-     	          (expression vec2 *
-     	           (constant float (0.0742610))
-	           (expression vec2 abs (var_ref x))))))))))
+		(expression vec2 *
+		 (expression vec2 sqrt
+		  (expression vec2 -
+		   (constant float (1.0))
+		   (expression vec2 abs (var_ref x))))
+		 (expression vec2 +
+		  (constant float (1.5707288))
+		  (expression vec2 *
+		   (expression vec2 abs (var_ref x))
+		   (expression vec2 +
+		    (constant float (-0.2121144))
+		    (expression vec2 *
+		     (constant float (0.0742610))
+		     (expression vec2 abs (var_ref x))))))))))))
 
    (signature vec3
      (parameters
        (declare (in) vec3 x))
      ((return (expression vec3 *
-     	       (expression vec3 -
-	        (expression float *
+	       (expression vec3 sign (var_ref x))
+	       (expression vec3 -
+		(expression float *
 		 (constant float (3.1415926))
 		 (constant float (0.5)))
-		(expression vec3 sqrt
-		 (expression vec3 -
-		  (constant float (1.0))
-		  (expression vec3 abs (var_ref x)))))
-     	       (expression vec3 +
-     	        (constant float (1.5707288))
-	        (expression vec3 *
-     	         (expression vec3 abs (var_ref x))
-     	         (expression vec3 +
-	          (constant float (-0.2121144))
-     	          (expression vec3 *
-     	           (constant float (0.0742610))
-	           (expression vec3 abs (var_ref x))))))))))
+		(expression vec3 *
+		 (expression vec3 sqrt
+		  (expression vec3 -
+		   (constant float (1.0))
+		   (expression vec3 abs (var_ref x))))
+		 (expression vec3 +
+		  (constant float (1.5707288))
+		  (expression vec3 *
+		   (expression vec3 abs (var_ref x))
+		   (expression vec3 +
+		    (constant float (-0.2121144))
+		    (expression vec3 *
+		     (constant float (0.0742610))
+		     (expression vec3 abs (var_ref x))))))))))))
 
    (signature vec4
      (parameters
        (declare (in) vec4 x))
      ((return (expression vec4 *
-     	       (expression vec4 -
-	        (expression float *
+	       (expression vec4 sign (var_ref x))
+	       (expression vec4 -
+		(expression float *
 		 (constant float (3.1415926))
 		 (constant float (0.5)))
-		(expression vec4 sqrt
-		 (expression vec4 -
-		  (constant float (1.0))
-		  (expression vec4 abs (var_ref x)))))
-     	       (expression vec4 +
-     	        (constant float (1.5707288))
-	        (expression vec4 *
-     	         (expression vec4 abs (var_ref x))
-     	         (expression vec4 +
-	          (constant float (-0.2121144))
-     	          (expression vec4 *
-     	           (constant float (0.0742610))
-	           (expression vec4 abs (var_ref x))))))))))
-)
+		(expression vec4 *
+		 (expression vec4 sqrt
+		  (expression vec4 -
+		   (constant float (1.0))
+		   (expression vec4 abs (var_ref x))))
+		 (expression vec4 +
+		  (constant float (1.5707288))
+		  (expression vec4 *
+		   (expression vec4 abs (var_ref x))
+		   (expression vec4 +
+		    (constant float (-0.2121144))
+		    (expression vec4 *
+		     (constant float (0.0742610))
+		     (expression vec4 abs (var_ref x)))))))))))
+))
 
  (function acos
    (signature float




More information about the mesa-commit mailing list