Skip to content

Commit 3cbfc60

Browse files
Proper handling of TLASBuffers (o3de#17566)
Signed-off-by: Martin Winter <[email protected]>
1 parent e04fe9b commit 3cbfc60

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

Gems/Atom/RHI/Code/Include/Atom/RHI/MultiDeviceRayTracingAccelerationStructure.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,9 @@ namespace AZ::RHI
226226
const RHI::Ptr<RHI::MultiDeviceBuffer> GetTlasInstancesBuffer() const;
227227

228228
private:
229+
//! Safe-guard access to creation of buffers cache during parallel access
230+
mutable AZStd::mutex m_tlasBufferMutex;
231+
mutable AZStd::mutex m_tlasInstancesBufferMutex;
229232
MultiDeviceRayTracingTlasDescriptor m_mdDescriptor;
230233
mutable RHI::Ptr<RHI::MultiDeviceBuffer> m_tlasBuffer;
231234
mutable RHI::Ptr<RHI::MultiDeviceBuffer> m_tlasInstancesBuffer;

Gems/Atom/RHI/Code/Source/RHI/MultiDeviceRayTracingAccelerationStructure.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,16 @@ namespace AZ::RHI
257257
MultiDeviceObject::Init(static_cast<MultiDevice::DeviceMask>(0u));
258258
}
259259

260+
// Each call to CreateBuffers advances m_currentBufferIndex internally, reset buffers to always receive currently active
261+
m_tlasBuffer.reset();
262+
m_tlasInstancesBuffer.reset();
263+
260264
return resultCode;
261265
}
262266

263267
const RHI::Ptr<RHI::MultiDeviceBuffer> MultiDeviceRayTracingTlas::GetTlasBuffer() const
264268
{
269+
AZStd::lock_guard lock(m_tlasBufferMutex);
265270
if (m_deviceObjects.empty())
266271
{
267272
return nullptr;
@@ -295,6 +300,8 @@ namespace AZ::RHI
295300

296301
const RHI::Ptr<RHI::MultiDeviceBuffer> MultiDeviceRayTracingTlas::GetTlasInstancesBuffer() const
297302
{
303+
AZStd::lock_guard lock(m_tlasInstancesBufferMutex);
304+
298305
if (m_deviceObjects.empty())
299306
{
300307
return nullptr;

0 commit comments

Comments
 (0)