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

Persistent staging buffer(s) + immediate context(s) for quick, batchable uploads. More...

#include <ImmediateContext.hpp>

Classes

struct  UploadLane
 

Public Member Functions

 ImmediateUpload (RHIDevice *device, size_t capacity, RHIDeviceQueueType type=RHIDeviceQueueType::Graphics, size_t buffers=1)
 
RHICommandListGet () const
 
void Begin ()
 
charUpload (RHIBuffer *dst, size_t dataSize, size_t dstOffset)
 
charUpload (RHITexture *dst, size_t dataSize, RHITextureSubresourceLayer dstLayer={.aspect=RHITextureAspectFlagBits::Color}, RHIOffset2D dstOffset={}, RHIExtent2D dstExtent={})
 
charUpload (RHITexture *dst, size_t dataSize, RHITextureSubresourceLayer dstLayer, RHIOffset3D dstOffset, RHIExtent3D dstExtent)
 
bool Align (uint32_t alignment)
 
void End (RHIDeviceFence *completionFence=nullptr)
 
void End (ImmediateSubmitDesc const &desc)
 
void WaitIdle ()
 

Public Attributes

ImmediateContext ctx
 
RHIDeviceScopedHandle< RHIBufferstaging
 
charbegin
 
charptr
 
charend
 

Private Member Functions

ImmediateContextCurrentContext ()
 
ImmediateContext constCurrentContext () const
 
RHIBufferCurrentStaging () const
 
charCurrentBegin () const
 
charCurrentEnd () const
 
size_tCurrentSignalValue ()
 
void WaitCurrentLaneReusable ()
 
void SelectCurrentLane ()
 

Private Attributes

RHIDevicemDevice
 
size_t mLaneCount {1}
 
size_t mCurrentLane {0}
 
size_t mNextSignalValue {1}
 
size_t mLane0SignalValue {0}
 
charmLane0Begin {nullptr}
 
charmLane0End {nullptr}
 
RHIDeviceScopedHandle< RHIDeviceSemaphoremCompletionTimeline
 
Core::Vector< Core::UniquePtr< UploadLane > > mLanes
 
Core::Vector< RHIDeviceQueue::TimelinePairmSubmitSignals
 

Detailed Description

Persistent staging buffer(s) + immediate context(s) for quick, batchable uploads.

Note
When constructed with more than one buffer, End() advances to the next staging lane and Begin() only waits when the next lane is still in flight.

Constructor & Destructor Documentation

◆ ImmediateUpload()

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

Member Function Documentation

◆ Align()

bool Foundation::RenderCore::ImmediateUpload::Align ( uint32_t  alignment)

◆ Begin()

void Foundation::RenderCore::ImmediateUpload::Begin ( )

Resets the upload context for a new series of uploads. This MUST be called before any Upload calls.

◆ CurrentBegin()

char * Foundation::RenderCore::ImmediateUpload::CurrentBegin ( ) const
private

◆ CurrentContext() [1/2]

ImmediateContext & Foundation::RenderCore::ImmediateUpload::CurrentContext ( )
private

◆ CurrentContext() [2/2]

ImmediateContext const & Foundation::RenderCore::ImmediateUpload::CurrentContext ( ) const
private

◆ CurrentEnd()

char * Foundation::RenderCore::ImmediateUpload::CurrentEnd ( ) const
private

◆ CurrentSignalValue()

size_t & Foundation::RenderCore::ImmediateUpload::CurrentSignalValue ( )
private

◆ CurrentStaging()

RHIBuffer * Foundation::RenderCore::ImmediateUpload::CurrentStaging ( ) const
private

◆ End() [1/2]

void Foundation::RenderCore::ImmediateUpload::End ( ImmediateSubmitDesc const desc)

◆ End() [2/2]

void Foundation::RenderCore::ImmediateUpload::End ( RHIDeviceFence completionFence = nullptr)

Finalizes the upload context, submitting the copy commands.

Parameters
completionFenceOptional fence to signal upon completion.

◆ Get()

RHICommandList * Foundation::RenderCore::ImmediateUpload::Get ( ) const
Returns
Command list for the current upload lane.

◆ SelectCurrentLane()

void Foundation::RenderCore::ImmediateUpload::SelectCurrentLane ( )
private

◆ Upload() [1/3]

char * Foundation::RenderCore::ImmediateUpload::Upload ( RHIBuffer dst,
size_t  dataSize,
size_t  dstOffset 
)

Uploads data to dst buffer with a staging copy.

Returns
nullptr when upload fails (out of staging memory). At which point, a flush with End() -> Begin() is required. A mapped, writable pointer to the staging memory where the buffer data is expected to be written otherwise.

◆ Upload() [2/3]

char * Foundation::RenderCore::ImmediateUpload::Upload ( RHITexture dst,
size_t  dataSize,
RHITextureSubresourceLayer  dstLayer,
RHIOffset3D  dstOffset,
RHIExtent3D  dstExtent 
)

◆ Upload() [3/3]

char * Foundation::RenderCore::ImmediateUpload::Upload ( RHITexture dst,
size_t  dataSize,
RHITextureSubresourceLayer  dstLayer = {.aspect = RHITextureAspectFlagBits::Color},
RHIOffset2D  dstOffset = {},
RHIExtent2D  dstExtent = {} 
)

Uploads data to dst texture with a staging copy.

Returns
nullptr when upload fails (out of staging memory). At which point, a flush with End() -> Begin() is required. A mapped, writable pointer to the staging memory where the texture data is expected to be written otherwise.

◆ WaitCurrentLaneReusable()

void Foundation::RenderCore::ImmediateUpload::WaitCurrentLaneReusable ( )
private

◆ WaitIdle()

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

Member Data Documentation

◆ begin

char* Foundation::RenderCore::ImmediateUpload::begin

◆ ctx

ImmediateContext Foundation::RenderCore::ImmediateUpload::ctx

◆ end

char * Foundation::RenderCore::ImmediateUpload::end

◆ mCompletionTimeline

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

◆ mCurrentLane

size_t Foundation::RenderCore::ImmediateUpload::mCurrentLane {0}
private

◆ mDevice

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

◆ mLane0Begin

char* Foundation::RenderCore::ImmediateUpload::mLane0Begin {nullptr}
private

◆ mLane0End

char* Foundation::RenderCore::ImmediateUpload::mLane0End {nullptr}
private

◆ mLane0SignalValue

size_t Foundation::RenderCore::ImmediateUpload::mLane0SignalValue {0}
private

◆ mLaneCount

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

◆ mLanes

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

◆ mNextSignalValue

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

◆ mSubmitSignals

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

◆ ptr

char * Foundation::RenderCore::ImmediateUpload::ptr

◆ staging

RHIDeviceScopedHandle<RHIBuffer> Foundation::RenderCore::ImmediateUpload::staging

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