Fix T70685: Cycles crash using WITH_CYCLES_NATIVE_ONLY on Windows
authorRay molenkamp <LazyDodo>
Fri, 14 Feb 2020 12:54:09 +0000 (13:54 +0100)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Fri, 14 Feb 2020 12:55:11 +0000 (13:55 +0100)
MSVC does not have -march=native, so the kernel gets built without AVX2 and
BVH8 support. The code assumed it to be available and crashed

Differential Revision: https://developer.blender.org/D6082

intern/cycles/device/device_cpu.cpp

index 42ebf3a8399e06eebcf7961e6d2e2a1ad64ba1c9..795781ee072db39858db7fda23ebb9066f23b7c7 100644 (file)
@@ -338,7 +338,10 @@ class CPUDevice : public Device {
     if (DebugFlags().cpu.has_sse2() && system_cpu_support_sse2()) {
       bvh_layout_mask |= BVH_LAYOUT_BVH4;
     }
-#if defined(__x86_64__) || defined(_M_X64)
+    /* MSVC does not support the -march=native switch and you always end up  */
+    /* with an sse2 kernel when you use WITH_KERNEL_NATIVE. We *cannot* feed */
+    /* that kernel BVH8 even if the CPU flags would allow for it. */
+#if (defined(__x86_64__) || defined(_M_X64)) && !(defined(_MSC_VER) && defined(WITH_KERNEL_NATIVE))
     if (DebugFlags().cpu.has_avx2() && system_cpu_support_avx2()) {
       bvh_layout_mask |= BVH_LAYOUT_BVH8;
     }