summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBrian <[email protected]>2007-05-10 14:48:55 -0600
committerBrian <[email protected]>2007-05-10 16:14:15 -0600
commitfa546c367d3251b6917f99158c6230fb375a4935 (patch)
treec36761191c808064de699264a9ad9de1ffa9933d /src
parent64a6a50155e665c2b81e9d70ce71cfd5f1fcaef1 (diff)
Implement exp() in terms of __asm float_power. Fix typo in mod(vec4) function.
exp() was using __asm float_exp (OPCODE_EXP) but that computes base two, not e. See bug 10907.
Diffstat (limited to 'src')
-rw-r--r--src/mesa/shader/slang/library/slang_common_builtin.gc26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/mesa/shader/slang/library/slang_common_builtin.gc b/src/mesa/shader/slang/library/slang_common_builtin.gc
index 04876ad1554..45cf1c6fd09 100644
--- a/src/mesa/shader/slang/library/slang_common_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_common_builtin.gc
@@ -471,28 +471,32 @@ vec4 pow(const vec4 a, const vec4 b)
float exp(const float a)
{
- __asm float_exp __retVal.x, a;
+ const float e = 2.71828;
+ __asm float_power __retVal, e, a;
}
vec2 exp(const vec2 a)
{
- __asm float_exp __retVal.x, a.x;
- __asm float_exp __retVal.y, a.y;
+ const float e = 2.71828;
+ __asm float_power __retVal.x, e, a.x;
+ __asm float_power __retVal.y, e, a.y;
}
vec3 exp(const vec3 a)
{
- __asm float_exp __retVal.x, a.x;
- __asm float_exp __retVal.y, a.y;
- __asm float_exp __retVal.z, a.z;
+ const float e = 2.71828;
+ __asm float_power __retVal.x, e, a.x;
+ __asm float_power __retVal.y, e, a.y;
+ __asm float_power __retVal.z, e, a.z;
}
vec4 exp(const vec4 a)
{
- __asm float_exp __retVal.x, a.x;
- __asm float_exp __retVal.y, a.y;
- __asm float_exp __retVal.z, a.z;
- __asm float_exp __retVal.w, a.w;
+ const float e = 2.71828;
+ __asm float_power __retVal.x, e, a.x;
+ __asm float_power __retVal.y, e, a.y;
+ __asm float_power __retVal.z, e, a.z;
+ __asm float_power __retVal.w, e, a.w;
}
@@ -894,7 +898,7 @@ vec4 mod(const vec4 a, const vec4 b)
__retVal.x = a.x - b.x * floor(a.x * oneOverBx);
__retVal.y = a.y - b.y * floor(a.y * oneOverBy);
__retVal.z = a.z - b.z * floor(a.z * oneOverBz);
- __retVal.w = a.w - b.w * floor(a.w * oneOverBz);
+ __retVal.w = a.w - b.w * floor(a.w * oneOverBw);
}