Fix T57963: Cycles crash using AO for displacement.
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Thu, 6 Dec 2018 18:50:05 +0000 (19:50 +0100)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Thu, 6 Dec 2018 18:50:05 +0000 (19:50 +0100)
Note this is not supported, there exists no geometry at this point, but
it should not crash at least.

intern/cycles/kernel/svm/svm_ao.h
intern/cycles/kernel/svm/svm_bevel.h

index 0337c88a5434556b55c85c119fac645e0299c81e..15d074780c4353dd504671037a3ac6d7dce13d4f 100644 (file)
@@ -33,6 +33,11 @@ ccl_device_noinline float svm_ao(KernelGlobals *kg,
                return 1.0f;
        }
 
+       /* Can't raytrace from shaders like displacement, before BVH exists. */
+       if (kernel_data.bvh.bvh_layout == BVH_LAYOUT_NONE) {
+               return 1.0f;
+       }
+
        if(flags & NODE_AO_INSIDE) {
                N = -N;
        }
index 79d0fb6ddbecc59b191e1210a2b0d55cd58014af..96d132acd73c4a156906735f7253b6fb6a134a1f 100644 (file)
@@ -34,6 +34,11 @@ ccl_device_noinline float3 svm_bevel(
                return sd->N;
        }
 
+       /* Can't raytrace from shaders like displacement, before BVH exists. */
+       if (kernel_data.bvh.bvh_layout == BVH_LAYOUT_NONE) {
+               return sd->N;
+       }
+
        /* Don't bevel for blurry indirect rays. */
        if(state->min_ray_pdf < 8.0f) {
                return sd->N;