37 static std::shared_ptr<GPU_COMPUTE>
Get();
58 explicit GPU_COMPUTE( std::unique_ptr<RHI_DEVICE> aDevice );
void DestroyBindGroupLayout(RHI_BindGroupLayoutHandle aLayout)
GPU_COMPUTE(const GPU_COMPUTE &)=delete
GPU_COMPUTE & operator=(const GPU_COMPUTE &)=delete
RHI_ComputePipelineHandle CreatePipeline(const RHI_COMPUTE_PIPELINE_DESC &aDesc)
RHI_COMPUTE_RESULT Submit(const RHI_COMPUTE_JOB &aJob)
Run the whole job and copy its readbacks before returning.
static std::shared_ptr< GPU_COMPUTE > Get()
Return nullptr if compute is unavailable; replace a lost instance on the next call.
void DestroyPipeline(RHI_ComputePipelineHandle aPipeline)
const RHI_COMPUTE_DEVICE_LIMITS & DeviceLimits() const
std::atomic< bool > m_lost
RHI_COMPUTE_DEVICE_LIMITS m_limits
RHI_BindGroupLayoutHandle CreateBindGroupLayout(const RHI_BIND_GROUP_LAYOUT_DESC &aDesc)
std::unique_ptr< RHI_DEVICE > m_device
void DestroyBuffer(RHI_BufferHandle aBuffer)
RHI_COMPUTE_PIPELINE_LIMITS PipelineLimits(RHI_ComputePipelineHandle aPipeline)
void DestroyBindGroup(RHI_BindGroupHandle aGroup)
RHI_BindGroupHandle CreateBindGroup(const RHI_BIND_GROUP_DESC &aDesc)
RHI_BufferHandle CreateStorageBuffer(size_t aBytes)
void destroy(F aDestroy)
Destroy under the lock, then retire the release at once since no job can still be using it.
Plain owning command data, recordable on any thread without device access.
Creates, uses and destroys GPU resources through one graphics API backend.
RHI_HANDLE< RHI_TAG_BUFFER > RHI_BufferHandle
RHI_HANDLE< RHI_TAG_BIND_GROUP > RHI_BindGroupHandle
RHI_HANDLE< RHI_TAG_COMPUTE_PIPELINE > RHI_ComputePipelineHandle
RHI_HANDLE< RHI_TAG_BIND_GROUP_LAYOUT > RHI_BindGroupLayoutHandle