From ca72ff599a96b64e6159e8e8f891f9649c0717a3 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 18 Feb 2020 00:20:58 +0100 Subject: [PATCH] Fix Cycles Embree crash with AO shader local only option Ref T73778 --- intern/cycles/kernel/bvh/bvh.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/intern/cycles/kernel/bvh/bvh.h b/intern/cycles/kernel/bvh/bvh.h index 75081085af5..b3992c03a9a 100644 --- a/intern/cycles/kernel/bvh/bvh.h +++ b/intern/cycles/kernel/bvh/bvh.h @@ -336,7 +336,9 @@ ccl_device_intersect bool scene_intersect_local(KernelGlobals *kg, ctx.lcg_state = lcg_state; ctx.max_hits = max_hits; ctx.local_isect = local_isect; - local_isect->num_hits = 0; + if (local_isect) { + local_isect->num_hits = 0; + } ctx.local_object_id = local_object; IntersectContext rtc_ctx(&ctx); RTCRay rtc_ray; @@ -373,7 +375,9 @@ ccl_device_intersect bool scene_intersect_local(KernelGlobals *kg, rtcOccluded1(kernel_data.bvh.scene, &rtc_ctx.context, &rtc_ray); } - return local_isect->num_hits > 0; + /* rtcOccluded1 sets tfar to -inf if a hit was found. */ + return (local_isect && local_isect->num_hits > 0) || (rtc_ray.tfar < 0); + ; } # endif /* __EMBREE__ */