[Bf-blender-cvs] [80d141e3584] cycles_procedural_api: fix crashes with embree

Kévin Dietrich noreply at git.blender.org
Fri Nov 6 18:48:01 CET 2020


Commit: 80d141e358487f3acc058c13f87f71d505d2ef81
Author: Kévin Dietrich
Date:   Fri Nov 6 18:35:57 2020 +0100
Branches: cycles_procedural_api
https://developer.blender.org/rB80d141e358487f3acc058c13f87f71d505d2ef81

fix crashes with embree

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

M	intern/cycles/render/geometry.cpp

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

diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp
index 589392dca53..8ed410c9388 100644
--- a/intern/cycles/render/geometry.cpp
+++ b/intern/cycles/render/geometry.cpp
@@ -1252,12 +1252,16 @@ void GeometryManager::device_update_bvh(Device *device,
 
     VLOG(1) << "Using " << bvh_layout_name(bparams.bvh_layout) << " layout.";
 
-    if (bvh && !(device_update_flags & DEVICE_DATA_NEEDS_REALLOC)) {
+    if (bvh) {
       bvh->pack = {};
-      bvh->refit(progress);
+
+      if (!(device_update_flags & DEVICE_DATA_NEEDS_REALLOC) && bparams.bvh_layout == BVHLayout::BVH_LAYOUT_OPTIX) {
+        bvh->refit(progress);
+      }
     }
 
     if (!bvh || (device_update_flags & DEVICE_DATA_NEEDS_REALLOC)) {
+      delete bvh;
       bvh = BVH::create(bparams, scene->geometry, scene->objects, device);
     }
 
@@ -1817,8 +1821,12 @@ void GeometryManager::device_free(Device *device, DeviceScene *dscene)
 {
 #ifdef WITH_EMBREE
   if (dscene->data.bvh.scene) {
-    if (dscene->data.bvh.bvh_layout == BVH_LAYOUT_EMBREE)
+    if (dscene->data.bvh.bvh_layout == BVH_LAYOUT_EMBREE) {
       BVHEmbree::destroy(dscene->data.bvh.scene);
+      if (bvh) {
+        static_cast<BVHEmbree *>(bvh)->scene = NULL;
+      }
+    }
     dscene->data.bvh.scene = NULL;
   }
 #endif



More information about the Bf-blender-cvs mailing list