Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brecht@blender.org>2022-08-05 18:19:19 +0300
committerBrecht Van Lommel <brecht@blender.org>2022-08-05 18:19:19 +0300
commitd95100e821483fa6c53be0117cd6169658e2fd97 (patch)
tree1c19788af39bc22de35925c5fa3c2711f5a6dbf2 /intern
parente4379971746c8b7fadb7c0c0f0933533e15376a3 (diff)
Fix T98769: Cycles crash with multi-device rendering and BVH refits
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/bvh/bvh.h7
-rw-r--r--intern/cycles/bvh/multi.cpp8
-rw-r--r--intern/cycles/bvh/multi.h3
-rw-r--r--intern/cycles/scene/geometry.cpp3
4 files changed, 19 insertions, 2 deletions
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);
}