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
This commit is contained in:
Ray molenkamp 2020-06-24 10:42:00 -06:00
parent c2ab069dfc
commit 5cfbc722d0
Notes: blender-bot 2023-02-14 05:04:52 +01:00
Referenced by issue #78047, Cycles/Tests/MSVC: cycles_denoise tests are failing
Referenced by issue #77023, blender either crashes immediately after rendering when using multiple denoise and file output nodes, or the output of random denoise nodes saved with the file output node are pure black.
1 changed files with 8 additions and 0 deletions

View File

@ -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)
{