[Bf-blender-cvs] [7f6530e5bdf] blender-v2.90-release: Cycles: Add finite checks for float4 and transforms

Sergey Sharybin noreply at git.blender.org
Tue Aug 4 12:07:55 CEST 2020


Commit: 7f6530e5bdf88ddfaa52809acd1c0b88fe834b3e
Author: Sergey Sharybin
Date:   Mon Aug 3 11:04:10 2020 +0200
Branches: blender-v2.90-release
https://developer.blender.org/rB7f6530e5bdf88ddfaa52809acd1c0b88fe834b3e

Cycles: Add finite checks for float4 and transforms

Currently unused, preparing for an upcoming development.

===================================================================

M	intern/cycles/util/util_math_float4.h
M	intern/cycles/util/util_transform.h

===================================================================

diff --git a/intern/cycles/util/util_math_float4.h b/intern/cycles/util/util_math_float4.h
index cd4b3e3b74c..ec5328adb31 100644
--- a/intern/cycles/util/util_math_float4.h
+++ b/intern/cycles/util/util_math_float4.h
@@ -477,6 +477,24 @@ ccl_device_inline float4 safe_divide_float4_float(const float4 a, const float b)
   return (b != 0.0f) ? a / b : make_float4(0.0f, 0.0f, 0.0f, 0.0f);
 }
 
+ccl_device_inline bool isfinite4_safe(float4 v)
+{
+  return isfinite_safe(v.x) && isfinite_safe(v.y) && isfinite_safe(v.z) && isfinite_safe(v.w);
+}
+
+ccl_device_inline float4 ensure_finite4(float4 v)
+{
+  if (!isfinite_safe(v.x))
+    v.x = 0.0f;
+  if (!isfinite_safe(v.y))
+    v.y = 0.0f;
+  if (!isfinite_safe(v.z))
+    v.z = 0.0f;
+  if (!isfinite_safe(v.w))
+    v.w = 0.0f;
+  return v;
+}
+
 CCL_NAMESPACE_END
 
 #endif /* __UTIL_MATH_FLOAT4_H__ */
diff --git a/intern/cycles/util/util_transform.h b/intern/cycles/util/util_transform.h
index d0a6264d5cf..d8bbd389aa6 100644
--- a/intern/cycles/util/util_transform.h
+++ b/intern/cycles/util/util_transform.h
@@ -466,6 +466,17 @@ ccl_device void transform_motion_array_interpolate(Transform *tfm,
   transform_compose(tfm, &decomp);
 }
 
+ccl_device_inline bool transform_isfinite_safe(Transform *tfm)
+{
+  return isfinite4_safe(tfm->x) && isfinite4_safe(tfm->y) && isfinite4_safe(tfm->z);
+}
+
+ccl_device_inline bool transform_decomposed_isfinite_safe(DecomposedTransform *decomp)
+{
+  return isfinite4_safe(decomp->x) && isfinite4_safe(decomp->y) && isfinite4_safe(decomp->z) &&
+         isfinite4_safe(decomp->w);
+}
+
 #ifndef __KERNEL_GPU__
 
 class BoundBox2D;



More information about the Bf-blender-cvs mailing list