[Bf-blender-cvs] [d95100e8214] blender-v3.3-release: Fix T98769: Cycles crash with multi-device rendering and BVH refits

Brecht Van Lommel noreply at git.blender.org
Fri Aug 5 19:41:33 CEST 2022


Commit: d95100e821483fa6c53be0117cd6169658e2fd97
Author: Brecht Van Lommel
Date:   Fri Aug 5 17:19:19 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rBd95100e821483fa6c53be0117cd6169658e2fd97

Fix T98769: Cycles crash with multi-device rendering and BVH refits

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

M	intern/cycles/bvh/bvh.h
M	intern/cycles/bvh/multi.cpp
M	intern/cycles/bvh/multi.h
M	intern/cycles/scene/geometry.cpp

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

diff --git a/intern/cycles/bvh/bvh.h b/intern/cycles/bvh/bvh.h
index be390f8a673..19ebf7f68ba 100644
--- a/intern/cycles/bvh/bvh.h
+++ b/intern/cycles/bvh/bvh.h
@@ -74,6 +74,13 @@ class BVH {
   {
   }
 
+  virtual void replace_geometry(const vector<Geometry *> &geometry,
+                                const vector<Object *> &objects)
+  {
+    this->geometry = geometry;
+    this->objects = objects;
+  }
+
  protected:
   BVH(const BVHParams &params,
       const vector<Geometry *> &geometry,
diff --git a/intern/cycles/bvh/multi.cpp b/intern/cycles/bvh/multi.cpp
index 7211720b56b..d9ee2fce966 100644
--- a/intern/cycles/bvh/multi.cpp
+++ b/intern/cycles/bvh/multi.cpp
@@ -21,4 +21,12 @@ BVHMulti::~BVHMulti()
   }
 }
 
+void BVHMulti::replace_geometry(const vector<Geometry *> &geometry,
+                                const vector<Object *> &objects)
+{
+  foreach (BVH *bvh, sub_bvhs) {
+    bvh->replace_geometry(geometry, objects);
+  }
+}
+
 CCL_NAMESPACE_END
diff --git a/intern/cycles/bvh/multi.h b/intern/cycles/bvh/multi.h
index 824899f3101..aafbfae19e0 100644
--- a/intern/cycles/bvh/multi.h
+++ b/intern/cycles/bvh/multi.h
@@ -19,6 +19,9 @@ class BVHMulti : public BVH {
            const vector<Geometry *> &geometry,
            const vector<Object *> &objects);
   virtual ~BVHMulti();
+
+  virtual void replace_geometry(const vector<Geometry *> &geometry,
+                                const vector<Object *> &objects);
 };
 
 CCL_NAMESPACE_END
diff --git a/intern/cycles/scene/geometry.cpp b/intern/cycles/scene/geometry.cpp
index 67ff118692e..ae8dcaa43b6 100644
--- a/intern/cycles/scene/geometry.cpp
+++ b/intern/cycles/scene/geometry.cpp
@@ -217,8 +217,7 @@ void Geometry::compute_bvh(Device *device,
     if (bvh && !need_update_rebuild) {
       progress->set_status(msg, "Refitting BVH");
 
-      bvh->geometry = geometry;
-      bvh->objects = objects;
+      bvh->replace_geometry(geometry, objects);
 
       device->build_bvh(bvh, *progress, true);
     }



More information about the Bf-blender-cvs mailing list