Skip to content

Commit 8ed4a5d

Browse files
committed
fix helide API thread safety
1 parent 6ab3858 commit 8ed4a5d

File tree

4 files changed

+6
-26
lines changed

4 files changed

+6
-26
lines changed

src/devices/helide/HelideDevice.cpp

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -207,23 +207,6 @@ const void *HelideDevice::getParameterInfo(ANARIDataType objectType,
207207
infoType);
208208
}
209209

210-
// Object + Parameter Lifetime Management /////////////////////////////////////
211-
212-
int HelideDevice::getProperty(ANARIObject object,
213-
const char *name,
214-
ANARIDataType type,
215-
void *mem,
216-
uint64_t size,
217-
uint32_t mask)
218-
{
219-
if (mask == ANARI_WAIT) {
220-
auto lock = scopeLockObject();
221-
deviceState()->waitOnCurrentFrame();
222-
}
223-
224-
return helium::BaseDevice::getProperty(object, name, type, mem, size, mask);
225-
}
226-
227210
// Other HelideDevice definitions /////////////////////////////////////////////
228211

229212
HelideDevice::HelideDevice(ANARIStatusCallback cb, const void *ptr)

src/devices/helide/HelideDevice.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,6 @@ struct HelideDevice : public helium::BaseDevice
7070
const char *infoName,
7171
ANARIDataType infoType) override;
7272

73-
// Object + Parameter Lifetime Management ///////////////////////////////////
74-
75-
int getProperty(ANARIObject object,
76-
const char *name,
77-
ANARIDataType type,
78-
void *mem,
79-
uint64_t size,
80-
uint32_t mask) override;
81-
8273
/////////////////////////////////////////////////////////////////////////////
8374
// Helper/other functions and data members
8475
/////////////////////////////////////////////////////////////////////////////

src/devices/helide/frame/Frame.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,9 @@ void Frame::renderFrame()
159159

160160
m_frameLastRendered = helium::newTimeStamp();
161161

162+
// NOTE(jda) - We don't want any anariGetProperty() calls also trying to
163+
// rebuild the Embree scene in parallel to us doing a rebuild.
164+
auto worldLock = m_world->scopeLockObject();
162165
m_world->embreeSceneUpdate();
163166

164167
const auto taskGrainSize = uint2(m_renderer->taskGrainSize());

src/devices/helide/scene/World.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ bool World::getProperty(
3131
if (name == "bounds" && type == ANARI_FLOAT32_BOX3) {
3232
if (flags & ANARI_WAIT)
3333
embreeSceneUpdate();
34+
if (!m_embreeScene)
35+
return false;
36+
3437
auto bounds = getEmbreeSceneBounds(m_embreeScene);
3538
for (auto *i : instances()) {
3639
for (auto *v : i->group()->volumes()) {

0 commit comments

Comments
 (0)