Foundation
Loading...
Searching...
No Matches
Classes | Public Member Functions | Private Member Functions | Private Attributes | List of all members
Foundation::RenderCore::ImmediateUpload Struct Reference

Persistent staging lanes + immediate contexts for batchable uploads. More...

#include <ImmediateContext.hpp>

Classes

class  UploadBatch
 
struct  UploadLane
 

Public Member Functions

 ImmediateUpload (RHIDevice *device, size_t capacity, RHIDeviceQueueType type=RHIDeviceQueueType::Graphics, size_t buffers=1)
 
size_t Capacity () const noexcept
 
size_t LaneCount () const noexcept
 
RHIDeviceSemaphoreCompletionTimeline () const
 
UploadBatch BeginBatch ()
 
bool TryBeginBatch (UploadBatch &out)
 
bool WaitTimeline (size_t value, size_t timeout) const
 
void WaitIdle ()
 

Private Member Functions

bool IsLaneReusable (size_t lane, size_t timeout)
 
void WaitLaneReusable (size_t lane)
 
bool TryAcquireLane (size_t lane, UploadBatch &out)
 
UploadBatch AcquireLane (size_t lane)
 
void ReleaseRecording (size_t lane) noexcept
 

Private Attributes

RHIDevicemDevice
 
size_t mCapacity {}
 
size_t mNextLane {}
 
size_t mNextSignalValue {1}
 
RHIDeviceScopedHandle< RHIDeviceSemaphoremCompletionTimeline
 
Core::Vector< Core::UniquePtr< UploadLane > > mLanes
 
Core::Vector< RHIDeviceQueue::TimelinePairmSubmitSignals
 

Detailed Description

Persistent staging lanes + immediate contexts for batchable uploads.

Note
Acquire an exclusive UploadBatch with BeginBatch / TryBeginBatch. Each batch owns one lane until UploadBatch::End, after which the lane stays in-flight until its completion timeline value is reached.

Constructor & Destructor Documentation

◆ ImmediateUpload()

Foundation::RenderCore::ImmediateUpload::ImmediateUpload ( RHIDevice device,
size_t  capacity,
RHIDeviceQueueType  type = RHIDeviceQueueType::Graphics,
size_t  buffers = 1 
)

Member Function Documentation

◆ AcquireLane()

ImmediateUpload::UploadBatch Foundation::RenderCore::ImmediateUpload::AcquireLane ( size_t  lane)
private

◆ BeginBatch()

ImmediateUpload::UploadBatch Foundation::RenderCore::ImmediateUpload::BeginBatch ( )

◆ Capacity()

size_t Foundation::RenderCore::ImmediateUpload::Capacity ( ) const
inlinenoexcept

◆ CompletionTimeline()

RHIDeviceSemaphore * Foundation::RenderCore::ImmediateUpload::CompletionTimeline ( ) const
inline

◆ IsLaneReusable()

bool Foundation::RenderCore::ImmediateUpload::IsLaneReusable ( size_t  lane,
size_t  timeout 
)
private

◆ LaneCount()

size_t Foundation::RenderCore::ImmediateUpload::LaneCount ( ) const
inlinenoexcept

◆ ReleaseRecording()

void Foundation::RenderCore::ImmediateUpload::ReleaseRecording ( size_t  lane)
privatenoexcept

◆ TryAcquireLane()

bool Foundation::RenderCore::ImmediateUpload::TryAcquireLane ( size_t  lane,
UploadBatch out 
)
private

◆ TryBeginBatch()

bool Foundation::RenderCore::ImmediateUpload::TryBeginBatch ( UploadBatch out)

◆ WaitIdle()

void Foundation::RenderCore::ImmediateUpload::WaitIdle ( )

◆ WaitLaneReusable()

void Foundation::RenderCore::ImmediateUpload::WaitLaneReusable ( size_t  lane)
private

◆ WaitTimeline()

bool Foundation::RenderCore::ImmediateUpload::WaitTimeline ( size_t  value,
size_t  timeout 
) const

Member Data Documentation

◆ mCapacity

size_t Foundation::RenderCore::ImmediateUpload::mCapacity {}
private

◆ mCompletionTimeline

RHIDeviceScopedHandle<RHIDeviceSemaphore> Foundation::RenderCore::ImmediateUpload::mCompletionTimeline
private

◆ mDevice

RHIDevice* Foundation::RenderCore::ImmediateUpload::mDevice
private

◆ mLanes

Core::Vector<Core::UniquePtr<UploadLane> > Foundation::RenderCore::ImmediateUpload::mLanes
private

◆ mNextLane

size_t Foundation::RenderCore::ImmediateUpload::mNextLane {}
private

◆ mNextSignalValue

size_t Foundation::RenderCore::ImmediateUpload::mNextSignalValue {1}
private

◆ mSubmitSignals

Core::Vector<RHIDeviceQueue::TimelinePair> Foundation::RenderCore::ImmediateUpload::mSubmitSignals
private

The documentation for this struct was generated from the following files: