[Bf-blender-cvs] [4ecbe5e1c5] temp-cycles-denoising: Cycles Denoising: Use isfinite_safe instead of own function

Lukas Stockner noreply at git.blender.org
Fri Mar 24 20:18:56 CET 2017


Commit: 4ecbe5e1c565b82cba5c276deb7fc5a707f4fc04
Author: Lukas Stockner
Date:   Fri Mar 24 19:58:06 2017 +0100
Branches: temp-cycles-denoising
https://developer.blender.org/rB4ecbe5e1c565b82cba5c276deb7fc5a707f4fc04

Cycles Denoising: Use isfinite_safe instead of own function

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

M	intern/cycles/kernel/kernel_accumulate.h
M	intern/cycles/kernel/kernel_passes.h
M	intern/cycles/util/util_math.h

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

diff --git a/intern/cycles/kernel/kernel_accumulate.h b/intern/cycles/kernel/kernel_accumulate.h
index d697aea7a5..db5ba2acf2 100644
--- a/intern/cycles/kernel/kernel_accumulate.h
+++ b/intern/cycles/kernel/kernel_accumulate.h
@@ -612,6 +612,9 @@ ccl_device_inline void path_radiance_split_denoising(KernelGlobals *kg, PathRadi
 	*noisy = *L;
 	*clean = make_float3(0.0f, 0.0f, 0.0f);
 #endif
+
+	*noisy = ensure_finite3(*noisy);
+	*clean = ensure_finite3(*clean);
 }
 
 ccl_device_inline void path_radiance_accum_sample(PathRadiance *L, PathRadiance *L_sample, int num_samples)
diff --git a/intern/cycles/kernel/kernel_passes.h b/intern/cycles/kernel/kernel_passes.h
index 2c949f6cba..22e2e7943f 100644
--- a/intern/cycles/kernel/kernel_passes.h
+++ b/intern/cycles/kernel/kernel_passes.h
@@ -119,6 +119,9 @@ ccl_device_inline void kernel_write_denoising_shadow(KernelGlobals *kg, ccl_glob
 	if(sample & 1) buffer += 3;
 	buffer += kernel_data.film.pass_denoising_data + 14;
 
+	path_total = ensure_finite(path_total);
+	path_total_shaded = ensure_finite(path_total_shaded);
+
 	kernel_write_pass_float(buffer, sample/2, path_total);
 	kernel_write_pass_float(buffer+1, sample/2, path_total_shaded);
 
diff --git a/intern/cycles/util/util_math.h b/intern/cycles/util/util_math.h
index fb3a265fe7..e92b0103d5 100644
--- a/intern/cycles/util/util_math.h
+++ b/intern/cycles/util/util_math.h
@@ -1545,23 +1545,16 @@ ccl_device_inline int util_max_axis(float3 vec)
 #endif
 }
 
-/* An implementation of isfinite that works in combination with -ffast-math.
- * In IEEE 754 floats, bits 24 to 31 store the exponent, and an exponent of 0xff means either inf or nan. */
-ccl_device_inline bool safe_isfinite(float v)
-{
-	return (__float_as_int(v) & 0x7f800000) != 0x7f800000;
-}
-
 ccl_device_inline float ensure_finite(float v)
 {
-	return safe_isfinite(v)? v : 0.0f;
+	return isfinite_safe(v)? v : 0.0f;
 }
 
 ccl_device_inline float3 ensure_finite3(float3 v)
 {
-	if(!safe_isfinite(v.x)) v.x = 0.0;
-	if(!safe_isfinite(v.y)) v.y = 0.0;
-	if(!safe_isfinite(v.z)) v.z = 0.0;
+	if(!isfinite_safe(v.x)) v.x = 0.0;
+	if(!isfinite_safe(v.y)) v.y = 0.0;
+	if(!isfinite_safe(v.z)) v.z = 0.0;
 	return v;
 }




More information about the Bf-blender-cvs mailing list