[Bf-blender-cvs] [5cfbc722d09] master: Fix T78047: Fix failing denoiser tests on windows

Ray Molenkamp noreply at git.blender.org
Wed Jun 24 18:42:05 CEST 2020


Commit: 5cfbc722d095664c3d2496f21d9deb21c47f2e12
Author: Ray Molenkamp
Date:   Wed Jun 24 10:42:00 2020 -0600
Branches: master
https://developer.blender.org/rB5cfbc722d095664c3d2496f21d9deb21c47f2e12

Fix T78047: Fix failing denoiser tests on windows

When we switched to MSVC2019 and C++17 we seemingly
managed to trigger a code-gen bug with MSVC in the
AVX code-path.

This change works around the issue by (hopefully
temporary) disabling the optimizer for the fast_exp2f4
function, given it is only used in a single pass
of the denoiser and nowhere else, this is luckily
not as bad as it could have been.

Once the compiler is fixed or a different fix is
available we'll have to revisit this.

Details and link to the repro posted to MS is
available in T78047

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

M	intern/cycles/util/util_math_fast.h

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

diff --git a/intern/cycles/util/util_math_fast.h b/intern/cycles/util/util_math_fast.h
index dbed83ab84d..1e0792859a2 100644
--- a/intern/cycles/util/util_math_fast.h
+++ b/intern/cycles/util/util_math_fast.h
@@ -446,6 +446,11 @@ ccl_device_inline float fast_expf(float x)
 }
 
 #ifndef __KERNEL_GPU__
+/* MSVC seems to have a codegen bug here in atleast SSE41/AVX 
+ * see T78047 for details. */
+#ifdef _MSC_VER
+#  pragma optimize( "", off )
+#endif
 ccl_device float4 fast_exp2f4(float4 x)
 {
   const float4 one = make_float4(1.0f);
@@ -461,6 +466,9 @@ ccl_device float4 fast_exp2f4(float4 x)
   r = madd4(x, r, make_float4(1.0f));
   return __int4_as_float4(__float4_as_int4(r) + (m << 23));
 }
+#ifdef _MSC_VER
+#  pragma optimize( "", on )
+#endif
 
 ccl_device_inline float4 fast_expf4(float4 x)
 {



More information about the Bf-blender-cvs mailing list