OSDN Git Service

glsl2: Fix asin() implementation.
authorEric Anholt <eric@anholt.net>
Tue, 20 Jul 2010 19:22:37 +0000 (12:22 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 20 Jul 2010 19:24:01 +0000 (12:24 -0700)
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
src/glsl/builtins/110/asin

index be7a4f2..967bcd0 100644 (file)
@@ -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"
index fe93337..d26bde3 100644 (file)
@@ -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