isnan and isinf implementation
Added the missing implementation for isinf and isnan.
Change-Id: Ice603956a4ed8ef9515ae8f501b2876ce5fab584
Reviewed-on: https://swiftshader-review.googlesource.com/13608
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 d7897f9..dfe3e78 100644
--- a/src/Shader/ShaderCore.cpp
+++ b/src/Shader/ShaderCore.cpp
@@ -1030,6 +1030,22 @@
dst.w = src0.w * (src1.w - src2.w) + src2.w;
}
+ void ShaderCore::isinf(Vector4f &dst, const Vector4f &src)
+ {
+ dst.x = As<Float4>(IsInf(src.x));
+ dst.y = As<Float4>(IsInf(src.y));
+ dst.z = As<Float4>(IsInf(src.z));
+ dst.w = As<Float4>(IsInf(src.w));
+ }
+
+ void ShaderCore::isnan(Vector4f &dst, const Vector4f &src)
+ {
+ dst.x = As<Float4>(IsNan(src.x));
+ dst.y = As<Float4>(IsNan(src.y));
+ dst.z = As<Float4>(IsNan(src.z));
+ dst.w = As<Float4>(IsNan(src.w));
+ }
+
void ShaderCore::smooth(Vector4f &dst, const Vector4f &edge0, const Vector4f &edge1, const Vector4f &x)
{
Float4 tx = Min(Max((x.x - edge0.x) / (edge1.x - edge0.x), Float4(0.0f)), Float4(1.0f)); dst.x = tx * tx * (Float4(3.0f) - Float4(2.0f) * tx);