glsl: avoid using rcp in length() functions
authorBrian Paul <brianp@vmware.com>
Mon, 29 Mar 2010 17:31:02 +0000 (11:31 -0600)
committerBrian Paul <brianp@vmware.com>
Mon, 29 Mar 2010 17:47:38 +0000 (11:47 -0600)
See prev commit for related info.

src/mesa/shader/slang/library/slang_common_builtin.gc

index 3d464630df2d8d5fb92e075f621b574e1d4a4a3b..d75354deffe71909da2bc2482dfd535d5fff2043 100644 (file)
@@ -1160,7 +1160,7 @@ float length(const vec2 v)
    float r;
    const float p = dot(v, v);      // p = v.x * v.x + v.y * v.y
    __asm float_rsq r, p;           // r = 1 / sqrt(p)
-   __asm float_rcp __retVal.x, r;  // retVal = 1 / r
+   __retVal = p * r;               // p * r = sqrt(p);
 }
 
 float length(const vec3 v)
@@ -1168,7 +1168,7 @@ float length(const vec3 v)
    float r;
    const float p = dot(v, v);      // p = v.x * v.x + v.y * v.y + v.z * v.z
    __asm float_rsq r, p;           // r = 1 / sqrt(p)
-   __asm float_rcp __retVal, r;    // retVal = 1 / r
+   __retVal = p * r;               // p * r = sqrt(p);
 }
 
 float length(const vec4 v)
@@ -1176,7 +1176,7 @@ float length(const vec4 v)
    float r;
    const float p = dot(v, v);      // p = v.x * v.x + v.y * v.y + ...
    __asm float_rsq r, p;           // r = 1 / sqrt(p)
-   __asm float_rcp __retVal, r;    // retVal = 1 / r
+   __retVal = p * r;               // p * r = sqrt(p);
 }