Open 3D Engine Atom Gem API Reference 23.10.0
O3DE is an open-source, fully-featured, high-fidelity, modular 3D engine for building games and simulations, available to every industry.
AZ::RHI::MultiDeviceFence Class Reference

#include <MultiDeviceFence.h>

Inherits AZ::RHI::MultiDeviceObject.

Public Types

using SignalCallback = AZStd::function< void()>
 

Public Member Functions

 AZ_CLASS_ALLOCATOR (MultiDeviceFence, AZ::SystemAllocator, 0)
 
 AZ_RTTI (MultiDeviceFence, "{5FF150A4-2C1E-4EC6-AE36-8EBD1CE22C31}", MultiDeviceObject)
 
ResultCode Init (MultiDevice::DeviceMask deviceMask, FenceState initialState)
 
void Shutdown () override final
 Waits on m_waitThread and shuts down all device-specific fences.
 
RHI::ResultCode SignalOnCpu ()
 Signals the device-specific fences managed by this class.
 
RHI::ResultCode WaitOnCpu () const
 Waits (blocks) for all device-specific fences managed by this class.
 
RHI::ResultCode Reset ()
 Resets the device-specific fences.
 
ResultCode WaitOnCpuAsync (SignalCallback callback)
 
const Ptr< Fence > & GetDeviceFence (int deviceIndex)
 Returns the device-specific Fence for the given index.
 
- Public Member Functions inherited from AZ::RHI::MultiDeviceObject
 AZ_RTTI (MultiDeviceObject, "{17D34F71-944C-4AF5-9823-627474C4C0A6}", Object)
 
bool IsInitialized () const
 Returns whether the device object is initialized.
 
MultiDevice::DeviceMask GetDeviceMask () const
 
- Public Member Functions inherited from AZ::RHI::Object
 AZ_RTTI (Object, "{E43378F1-2331-4173-94B8-990ED20E6003}")
 
void SetName (const Name &name)
 Sets the name of the object.
 
const Name & GetName () const
 Returns the name set on the object by SetName.
 
uint32_t use_count ()
 Returns the current use count of the object.
 

Protected Member Functions

bool ValidateIsInitialized () const
 
- Protected Member Functions inherited from AZ::RHI::MultiDeviceObject
void Init (MultiDevice::DeviceMask deviceMask)
 The derived class should call this method to assign the device.
 
void Shutdown () override
 Clears the current bound device to null.
 
template<typename T >
void IterateDevices (T callback)
 Helper method that will iterate over all selected devices and call the provided callback.
 
- Protected Member Functions inherited from AZ::RHI::Object
void add_ref () const
 
void release () const
 

Protected Attributes

AZStd::thread m_waitThread
 This can be used to asynchronously wait on all fences by calling WaitOnCpuAsync.
 
AZStd::unordered_map< int, Ptr< Fence > > m_deviceFences
 A map of all device-specific Fences, indexed by the device index.
 
- Protected Attributes inherited from AZ::RHI::Object
AZStd::atomic_int m_useCount = 0
 

Detailed Description

A multi-device synchronization primitive, holding device-specific Fences, than can be used to insert dependencies between a queue and a host

Member Function Documentation

◆ Init()

ResultCode AZ::RHI::MultiDeviceFence::Init ( MultiDevice::DeviceMask  deviceMask,
FenceState  initialState 
)

Initializes the multi-device fence using the provided deviceMask. It creates on device-specific fence for each bit set in the deviceMask and passes on the initial FenceState to each Fence

◆ Shutdown()

void AZ::RHI::MultiDeviceFence::Shutdown ( )
finaloverridevirtual

Waits on m_waitThread and shuts down all device-specific fences.

Reimplemented from AZ::RHI::Object.

◆ WaitOnCpuAsync()

ResultCode AZ::RHI::MultiDeviceFence::WaitOnCpuAsync ( SignalCallback  callback)

Spawns a dedicated thread to wait on all device-specific fences. The provided callback is invoked when the fences complete.


The documentation for this class was generated from the following file: