Fixes for exp and log functions
- Fixed how logarithm2() handles infinity
- Fixed a typo in exponential()
These fixes combined fix all dEQP failures for:
sinh, cosh, pow, exp, log, log2
Change-Id: I2d427892032fc5f75909a5609f606a787b08505a
Reviewed-on: https://swiftshader-review.googlesource.com/13708
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Shader/ShaderCore.cpp b/src/Shader/ShaderCore.cpp
index dfe3e78..29fea75 100644
--- a/src/Shader/ShaderCore.cpp
+++ b/src/Shader/ShaderCore.cpp
@@ -166,13 +166,14 @@
x1 += (x0 - Float4(1.0f)) * x2;
- return x1;
+ Int4 pos_inf_x = CmpEQ(As<Int4>(x), Int4(0x7F800000));
+ return As<Float4>((pos_inf_x & As<Int4>(x)) | (~pos_inf_x & As<Int4>(x1)));
}
Float4 exponential(RValue<Float4> x, bool pp)
{
// FIXME: Propagate the constant
- return exponential2(Float4(1.44269541f) * x, pp); // 1/ln(2)
+ return exponential2(Float4(1.44269504f) * x, pp); // 1/ln(2)
}
Float4 logarithm(RValue<Float4> x, bool absolute, bool pp)