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

This commit is contained in:
Brecht Van Lommel 2022-08-05 17:19:19 +02:00
parent e437997174
commit d95100e821
Notes: blender-bot 2023-02-14 08:59:10 +01:00
Referenced by issue #98769, Crash While Rendering
4 changed files with 19 additions and 2 deletions

View File

@ -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,

View File

@ -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

View File

@ -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

View File

@ -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);
}