XII Release 0.1.0
Loading...
Searching...
No Matches
xiiGALCommandList Class Reference

Interface that defines methods to manipulate a command list object. More...

#include <CommandList.h>

Inheritance diagram for xiiGALCommandList:
[legend]

Classes

struct  VertexStreamDescription
 

Public Types

enum class  RecordingState { Recording , Ended , Reset , Submitted }
 Enum class representing the state of a command list recording. More...
 

Public Member Functions

XII_ALWAYS_INLINE const xiiGALCommandListCreationDescriptionGetDescription () const
 This returns the creation description for this object.
 
XII_ALWAYS_INLINE xiiGALCommandQueueGetCommandQueue () const
 This returns the command queue for this object.
 
XII_ALWAYS_INLINE xiiSharedPtr< xiiGALPipelineStateGetPipelineState () const
 This returns the active pipeline state handle for this object.
 
XII_ALWAYS_INLINE xiiSharedPtr< xiiGALPipelineResourceSignatureGetPipelineResourceSignature () const
 This returns the active pipeline resource signature handle for this object.
 
XII_ALWAYS_INLINE xiiSharedPtr< xiiGALRenderPassGetRenderPass () const
 This returns the active render pass handle for this object.
 
XII_ALWAYS_INLINE xiiSharedPtr< xiiGALFramebufferGetFramebuffer () const
 This returns the active frame buffer handle for this object.
 
XII_ALWAYS_INLINE const xiiGALCommandListStatisticsGetCommandListStatistics () const
 This returns the command list statistics.
 
xiiUInt64 Submit ()
 Submits a command list to the command queue for execution. The command list is reset after the execution on the command queue.
 
void SetPipelineState (xiiSharedPtr< xiiGALPipelineState > pPipelineState)
 Sets the pipeline state object for the command list.
 
void SetStencilRef (xiiUInt32 uiStencilRef)
 Sets the stencil reference value used in the stencil test.
 
void SetBlendFactor (const xiiColor &blendFactor)
 Sets the blend factors used in the blend state.
 
void SetViewports (xiiArrayPtr< const xiiGALViewport > pViewports)
 Sets the viewports used in the rasterizer stage. This defines the area of the render target to which the rasterizer will clip.
 
XII_ALWAYS_INLINE void SetViewport (const xiiGALViewport &viewport)
 Sets a single viewport for the rasterizer stage. This simplifies the process when only one viewport is needed.
 
void SetScissorRects (xiiArrayPtr< const xiiRectU32 > pRects)
 Sets the scissor rectangles used in the rasterizer stage. This defines the area of the render target to which the rasterizer will clip.
 
XII_ALWAYS_INLINE void SetScissorRect (const xiiRectU32 &rect)
 Sets a single scissor rectangle for the rasterizer stage. This simplifies the process when only one scissor rectangle is needed.
 
void SetIndexBuffer (xiiSharedPtr< xiiGALBuffer > pIndexBuffer, xiiUInt64 uiByteOffset=0U, xiiEnum< xiiGALStateTransitionMode > transitionMode=xiiGALStateTransitionMode::Transition)
 Sets the index buffer for the input-assembler stage of the pipeline. This contains the indices into the vertex buffers.
 
void SetVertexBuffers (xiiUInt32 uiStartSlot, xiiArrayPtr< xiiSharedPtr< xiiGALBuffer > > pVertexBuffers, xiiArrayPtr< xiiUInt64 > pByteOffsets, xiiBitflags< xiiGALSetVertexBufferFlags > flags=xiiGALSetVertexBufferFlags::None, xiiEnum< xiiGALStateTransitionMode > transitionMode=xiiGALStateTransitionMode::Transition)
 Sets the vertex buffers for the input-assembler stage of the pipeline. This contains the vertex data.
 
void SetConstantBuffer (const xiiGALPipelineResourceDescription &bindingInformation, xiiSharedPtr< xiiGALBuffer > pConstantBuffer)
 This is used to set the constant (uniform) buffer for a shader resource.
 
void SetShaderResourceBufferView (const xiiGALPipelineResourceDescription &bindingInformation, xiiSharedPtr< xiiGALBufferView > pBufferView)
 This is used to set the buffer view for a shader resource.
 
void SetShaderResourceTextureView (const xiiGALPipelineResourceDescription &bindingInformation, xiiSharedPtr< xiiGALTextureView > pTextureView)
 This is used to set the texture view for a shader resource.
 
void SetUnorderedAccessBufferView (const xiiGALPipelineResourceDescription &bindingInformation, xiiSharedPtr< xiiGALBufferView > pBufferView)
 
void SetUnorderedAccessTextureView (const xiiGALPipelineResourceDescription &bindingInformation, xiiSharedPtr< xiiGALTextureView > pTextureView)
 This is used to set the texture view for an unordered access.
 
void SetSampler (const xiiGALPipelineResourceDescription &bindingInformation, xiiSharedPtr< xiiGALSampler > pSampler)
 This is used to set the sampler for a sampler resource.
 
void ResolveAndSetConstantBuffer (const xiiTempHashedString &sResourceName, xiiSharedPtr< xiiGALBuffer > pConstantBuffer, xiiBitflags< xiiGALShaderType > shaderStages=xiiGALShaderType::Unknown)
 Resolves and sets a constant buffer for the given resource name.
 
void ResolveAndSetShaderResourceBufferView (const xiiTempHashedString &sResourceName, xiiSharedPtr< xiiGALBufferView > pBufferView, xiiBitflags< xiiGALShaderType > shaderStages=xiiGALShaderType::Unknown)
 Resolves and sets a shader resource buffer view for the given resource name.
 
void ResolveAndSetShaderResourceTextureView (const xiiTempHashedString &sResourceName, xiiSharedPtr< xiiGALTextureView > pTextureView, xiiBitflags< xiiGALShaderType > shaderStages=xiiGALShaderType::Unknown)
 Resolves and sets a shader resource texture view for the given resource name.
 
void ResolveAndSetUnorderedAccessBufferView (const xiiTempHashedString &sResourceName, xiiSharedPtr< xiiGALBufferView > pBufferView, xiiBitflags< xiiGALShaderType > shaderStages=xiiGALShaderType::Unknown)
 Resolves and sets an unordered access buffer view for the given resource name.
 
void ResolveAndSetUnorderedAccessTextureView (const xiiTempHashedString &sResourceName, xiiSharedPtr< xiiGALTextureView > pTextureView, xiiBitflags< xiiGALShaderType > shaderStages=xiiGALShaderType::Unknown)
 Resolves and sets an unordered access texture view for the given resource name.
 
void ResolveAndSetSampler (const xiiTempHashedString &sResourceName, xiiSharedPtr< xiiGALSampler > pSampler, xiiBitflags< xiiGALShaderType > shaderStages=xiiGALShaderType::Unknown)
 Resolves and sets a sampler for the given resource name.
 
xiiResult CommitShaderResources (xiiEnum< xiiGALStateTransitionMode > mode=xiiGALStateTransitionMode::Transition)
 This commits the pipeline shader resources to the GPU, and ensures that all necessary state transitions are performed.
 
void ClearRenderTargetView (xiiSharedPtr< xiiGALTextureView > pRenderTargetView, const xiiColor &clearColor)
 This clears the specified render target view to the specified color.
 
void ClearDepthStencilView (xiiSharedPtr< xiiGALTextureView > pDepthStencilView, bool bClearDepth, bool bClearStencil, float fDepthClear, xiiUInt8 uiStencilClear)
 This clears the specified depth stencil view to the specified depth and stencil values.
 
void BeginRenderPass (const xiiGALBeginRenderPassDescription &beginRenderPass)
 This begins a render pass, which contains a collection of attachments, subpasses, and dependencies between the subpasses, and describes how the attachments are used over the course of the subpasses.
 
void NextSubpass ()
 This transitions to the next subpass of the begun render pass.
 
void EndRenderPass ()
 This ends a render pass that has already begun.
 
void Draw (const xiiGALDrawDescription &description)
 Issues a non-indexed draw call using the specified parameters.
 
void DrawIndexed (const xiiGALDrawIndexedDescription &description)
 Issues an indexed draw call using the specified parameters.
 
void DrawIndirect (const xiiGALDrawIndirectDescription &description)
 Issues an indirect draw call based on arguments stored in a GPU buffer.
 
void DrawIndexedIndirect (const xiiGALDrawIndexedIndirectDescription &description)
 Issues an indexed indirect draw call based on arguments stored in a GPU buffer.
 
void DrawMesh (const xiiGALDrawMeshDescription &description)
 Issues a draw call that dispatches GPU mesh shaders directly.
 
void DrawMeshIndirect (const xiiGALDrawMeshIndirectDescription &description)
 Issues an indirect mesh shader draw using arguments stored in a GPU buffer.
 
void MultiDraw (const xiiGALMultiDrawDescription &description)
 Executes a batch of non-indexed draw calls using an array of parameters.
 
void MultiDrawIndexed (const xiiGALMultiDrawIndexedDescription &description)
 Executes a batch of indexed draw calls using an array of parameters.
 
void DispatchCompute (const xiiGALDispatchComputeDescription &description)
 Dispatches a compute workload using the specified thread group dimensions.
 
void DispatchComputeIndirect (const xiiGALDispatchComputeIndirectDescription &description)
 Dispatches a compute workload using arguments stored in a GPU buffer.
 
void BeginQuery (xiiSharedPtr< xiiGALQuery > pQuery)
 Begins a query.
 
void EndQuery (xiiSharedPtr< xiiGALQuery > pQuery)
 Ends a query.
 
void UpdateBuffer (xiiSharedPtr< xiiGALBuffer > pBuffer, xiiUInt32 uiDestinationOffset, xiiArrayPtr< const xiiUInt8 > pSourceData)
 Updates a buffer.
 
void CopyBuffer (xiiSharedPtr< xiiGALBuffer > pSourceBuffer, xiiSharedPtr< xiiGALBuffer > pDestinationBuffer)
 Copies the entire contents of the source buffer to the destination buffer.
 
void CopyBufferRegion (xiiSharedPtr< xiiGALBuffer > pSourceBuffer, xiiUInt64 uiSourceOffset, xiiSharedPtr< xiiGALBuffer > pDestinationBuffer, xiiUInt64 uiDestinationOffset, xiiUInt64 uiSize)
 Copies a region from the source buffer to the destination buffer.
 
xiiResult MapBuffer (xiiSharedPtr< xiiGALBuffer > pBuffer, xiiEnum< xiiGALMapType > mapType, xiiBitflags< xiiGALMapFlags > mapFlags, void *&pMappedData)
 Maps a buffer into the CPU's address space.
 
xiiResult UnmapBuffer (xiiSharedPtr< xiiGALBuffer > pBuffer, xiiEnum< xiiGALMapType > mapType)
 Unmaps a buffer from the CPU's address space.
 
void UpdateTexture (xiiSharedPtr< xiiGALTexture > pTexture, const xiiGALTextureMipLevelData &textureMiplevelData, const xiiBoundingBoxU32 &textureBox, const xiiGALTextureSubResourceData &subresourceData)
 Updates a texture.
 
void CopyTexture (xiiSharedPtr< xiiGALTexture > pSourceTexture, xiiSharedPtr< xiiGALTexture > pDestinationTexture)
 Copies the entire contents of the source texture to the destination texture.
 
void CopyTextureRegion (xiiSharedPtr< xiiGALTexture > pSourceTexture, const xiiGALTextureMipLevelData &sourceMipLevelData, const xiiBoundingBoxU32 &box, xiiSharedPtr< xiiGALTexture > pDestinationTexture, const xiiGALTextureMipLevelData &destinationMipLevelData, const xiiVec3U32 &vDestinationPoint)
 Copies a region from the source texture to the destination texture.
 
void ResolveTextureSubResource (xiiSharedPtr< xiiGALTexture > pSourceTexture, xiiSharedPtr< xiiGALTexture > pDestinationTexture, const xiiGALResolveTextureSubresourceDescription &description)
 Resolves a multisampled source texture into a non-multisampled destination texture.
 
void GenerateMips (xiiSharedPtr< xiiGALTextureView > pTextureView)
 Generates mipmap levels for a texture.
 
xiiResult MapTextureSubresource (xiiSharedPtr< xiiGALTexture > pTexture, xiiGALTextureMipLevelData textureMipLevelData, xiiEnum< xiiGALMapType > mapType, xiiBitflags< xiiGALMapFlags > mapFlags, xiiBoundingBoxU32 *pTextureBox, xiiGALMappedTextureSubresource &mappedData)
 Maps a texture subresource into the address space of the command list.
 
xiiResult UnmapTextureSubresource (xiiSharedPtr< xiiGALTexture > pTexture, xiiGALTextureMipLevelData textureMipLevelData)
 Unmaps a texture subresource from the address space of the command list.
 
void TransitionResourceStates (xiiArrayPtr< xiiGALStateTransitionDescription > pResourceBarriers)
 Transitions the resource states.
 
void EnqueueSignal (xiiSharedPtr< xiiGALFence > pFence, xiiUInt64 uiValue)
 Tells the GPU to set a fence to a specified value after all previous work has completed.
 
void DeviceWaitForFence (xiiSharedPtr< xiiGALFence > pFence, xiiUInt64 uiValue)
 Waits until the specified fence reaches or exceeds the specified value, on the device.
 
void BeginDebugGroup (xiiStringView sName, const xiiColor &color=xiiColor::Black)
 Begins a new debug group with a specified name and color.
 
void EndDebugGroup ()
 Ends the current debug group.
 
void InsertDebugLabel (xiiStringView sName, const xiiColor &color=xiiColor::Black)
 Inserts a debug label into the command list.
 
void InvalidateState ()
 Invalidates the current state of the command list. It is typically called when the command list is reset or when the pipeline state is changed.
 
XII_ALWAYS_INLINE void AssertRenderingThread () const
 
XII_ALWAYS_INLINE RecordingState GetRecordingState () const
 This returns the command list recording state.
 
XII_ALWAYS_INLINE const xiiGALCommandListStatisticsGetStatistics () const
 This returns the command list statistics.
 
- Public Member Functions inherited from xiiGALDeviceObject
XII_ALWAYS_INLINE xiiSharedPtr< xiiGALDeviceGetDevice () const
 Returns the xiiGALDevice that created this resource.
 
- Public Member Functions inherited from xiiGALObject
XII_ALWAYS_INLINE xiiStringView GetDebugName () const
 Returns the debug name of this resource.
 
void SetDebugName (xiiStringView sDebugName) const
 Sets the debug name for this resource.
 
- Public Member Functions inherited from xiiReflectedClass
virtual const xiiRTTIGetDynamicRTTI () const
 
bool IsInstanceOf (const xiiRTTI *pType) const
 Returns whether the type of this instance is of the given type or derived from it.
 
template<typename T>
XII_ALWAYS_INLINE bool IsInstanceOf () const
 Returns whether the type of this instance is of the given type or derived from it.
 
- Public Member Functions inherited from xiiRefCounted
virtual ~xiiRefCounted ()=default
 Adds a virtual destructor.
 
- Public Member Functions inherited from xiiRefCountingImpl
 xiiRefCountingImpl ()=default
 Constructor.
 
 xiiRefCountingImpl (const xiiRefCountingImpl &rhs)
 
void operator= (const xiiRefCountingImpl &rhs)
 
xiiUInt32 AddRef () const
 Increments the reference counter. Returns the new reference count.
 
xiiUInt32 ReleaseRef () const
 Decrements the reference counter. Returns the new reference count.
 
bool IsReferenced () const
 Returns true if the reference count is greater than 0, false otherwise.
 
xiiUInt32 GetRefCount () const
 Returns the current reference count.
 

Protected Member Functions

 xiiGALCommandList (xiiSharedPtr< xiiGALDevice > pDevice, xiiGALCommandQueue *pCommandQueue, const xiiGALCommandListCreationDescription &creationDescription)
 
void Begin ()
 Begins the command list for recording commands. This method should be called before any command is issued.
 
void End ()
 Ends the command list. This method should be called after all commands are issued.
 
void Reset ()
 Resets the command list. This method is used to clear all commands that have been recorded in the command list.
 
void ValidateTextureRegion (const xiiGALTextureCreationDescription &textureDescription, xiiUInt32 uiMipLevel, xiiUInt32 uiSlice, const xiiBoundingBoxU32 &box)
 
void ValidateTextureUpdateRegion (const xiiGALTextureCreationDescription &textureDescription, xiiUInt32 uiMipLevel, xiiUInt32 uiSlice, const xiiBoundingBoxU32 &destinationBox, const xiiGALTextureSubResourceData &subresourceData)
 
bool VerifyResourceState (xiiBitflags< xiiGALResourceStateFlags > stateFlags, xiiBitflags< xiiGALCommandQueueType > queueType, const char *szParameterName) const
 
bool VerifyResourceStates (xiiBitflags< xiiGALResourceStateFlags > stateFlags, bool bIsTexture) const
 
void VerifyBufferState (xiiGALBuffer *pBuffer, xiiBitflags< xiiGALResourceStateFlags > requiredState, const char *szOperationName)
 
void VerifyTextureState (xiiGALTexture *pTexture, xiiBitflags< xiiGALResourceStateFlags > requiredState, const char *szOperationName)
 
void VerifyBottomLevelASState (xiiGALBottomLevelAS *pBottomLevelAS, xiiBitflags< xiiGALResourceStateFlags > requiredState, const char *szOperationName)
 
void VerifyTopLevelASState (xiiGALTopLevelAS *pTopLevelAS, xiiBitflags< xiiGALResourceStateFlags > requiredState, const char *szOperationName)
 
- Protected Member Functions inherited from xiiGALDeviceObject
 xiiGALDeviceObject (xiiSharedPtr< xiiGALDevice > pDevice)
 
- Protected Member Functions inherited from xiiGALObject
virtual XII_ALWAYS_INLINE void SetDebugNamePlatform (xiiStringView sName) const
 

Protected Attributes

xiiGALCommandListCreationDescription m_Description
 
xiiGALCommandQueuem_pCommandQueue
 
RecordingState m_RecordingState = RecordingState::Reset
 
const bool m_bNativeMultiDrawSupported
 
xiiSharedPtr< xiiGALPipelineStatem_pPipelineState
 
xiiSharedPtr< xiiGALPipelineResourceSignaturem_pPipelineResourceSignature
 
xiiHybridArray< VertexStreamDescription, 2U > m_VertexStreams
 
xiiSharedPtr< xiiGALBufferm_pIndexBuffer
 
xiiUInt64 m_uiIndexDataOffset = 0ULL
 
xiiSharedPtr< xiiGALRenderPassm_pRenderPass
 
xiiSharedPtr< xiiGALFramebufferm_pFramebuffer
 
xiiColor m_BlendFactors = xiiColor::Black
 
xiiUInt32 m_uiStencilRef = 0U
 
xiiHybridArray< xiiGALViewport, 2U > m_Viewports
 
xiiHybridArray< xiiRectU32, 2U > m_ScissorRects
 
- Protected Attributes inherited from xiiGALDeviceObject
xiiSharedPtr< xiiGALDevicem_pDevice
 

Static Protected Attributes

static constexpr xiiUInt32 s_uiDrawMeshIndirectCommandStride = sizeof(xiiUInt32) * 3
 

Friends

class xiiGALDevice
 
class xiiMemoryUtils
 

Additional Inherited Members

- Static Public Member Functions inherited from xiiNoBase
static const xiiRTTIGetStaticRTTI ()
 

Detailed Description

Interface that defines methods to manipulate a command list object.

Member Enumeration Documentation

◆ RecordingState

Enum class representing the state of a command list recording.

Enumerator
Recording 

The command list is currently being recorded.

Ended 

The recording of the command list has ended.

Reset 

The command list has been reset and is ready to be recorded again.

Submitted 

The command list has been submitted and is no longer available for recording commands. A new command list has to be requested for recording more commands.

Member Function Documentation

◆ Begin()

void xiiGALCommandList::Begin ( )
protected

Begins the command list for recording commands. This method should be called before any command is issued.

Remarks
This method is called automatically when using xiiGALCommandQueue::BeginCommandList to request a command list.

◆ BeginDebugGroup()

void xiiGALCommandList::BeginDebugGroup ( xiiStringView sName,
const xiiColor & color = xiiColor::Black )

Begins a new debug group with a specified name and color.

Parameters
sName- The name of the debug group.
color- The color associated with the debug group.

◆ BeginQuery()

void xiiGALCommandList::BeginQuery ( xiiSharedPtr< xiiGALQuery > pQuery)

Begins a query.

Parameters
pQuery- The handle to the query object.

◆ BeginRenderPass()

void xiiGALCommandList::BeginRenderPass ( const xiiGALBeginRenderPassDescription & beginRenderPass)

This begins a render pass, which contains a collection of attachments, subpasses, and dependencies between the subpasses, and describes how the attachments are used over the course of the subpasses.

Parameters
beginRenderPass- The description of the render pass. See xiiGALBeginRenderPassDescription for more information.
Todo
GraphicsFoundation: Potentially reset the current render targets here.
Todo
Todo
GraphicsFoundation: Implement render pass attachment handling in the GAL, as well as state transitions in the begin render pass description.

◆ ClearDepthStencilView()

void xiiGALCommandList::ClearDepthStencilView ( xiiSharedPtr< xiiGALTextureView > pDepthStencilView,
bool bClearDepth,
bool bClearStencil,
float fDepthClear,
xiiUInt8 uiStencilClear )

This clears the specified depth stencil view to the specified depth and stencil values.

Parameters
pDepthStencilView- The handle to the depth stencil view object. The view must be a xiiGALTextureViewType::DepthStencil.
bClearDepth- Whether to clear the depth portion of the buffer.
bClearStencil- Whether to clear the stencil portion of the buffer.
fDepthClear- The value to which to clear the depth portion of the buffer with.
uiStencilClear- The value to which to clear the stencil portion of the buffer with.

◆ ClearRenderTargetView()

void xiiGALCommandList::ClearRenderTargetView ( xiiSharedPtr< xiiGALTextureView > pRenderTargetView,
const xiiColor & clearColor )

This clears the specified render target view to the specified color.

Parameters
pRenderTargetView- The handle to the render target view object. The view must be a xiiGALTextureViewType::RenderTarget.
clearColor- The color to which to clear the render target view.

◆ CommitShaderResources()

xiiResult xiiGALCommandList::CommitShaderResources ( xiiEnum< xiiGALStateTransitionMode > mode = xiiGALStateTransitionMode::Transition)

This commits the pipeline shader resources to the GPU, and ensures that all necessary state transitions are performed.

Parameters
mode- The state transition mode. The default is xiiGALStateTransitionMode::Transition.

◆ CopyBuffer()

void xiiGALCommandList::CopyBuffer ( xiiSharedPtr< xiiGALBuffer > pSourceBuffer,
xiiSharedPtr< xiiGALBuffer > pDestinationBuffer )

Copies the entire contents of the source buffer to the destination buffer.

Parameters
pSourceBuffer- The handle to the source buffer object.
pDestinationBuffer- The handle to the destination buffer object.

◆ CopyBufferRegion()

void xiiGALCommandList::CopyBufferRegion ( xiiSharedPtr< xiiGALBuffer > pSourceBuffer,
xiiUInt64 uiSourceOffset,
xiiSharedPtr< xiiGALBuffer > pDestinationBuffer,
xiiUInt64 uiDestinationOffset,
xiiUInt64 uiSize )

Copies a region from the source buffer to the destination buffer.

Parameters
pSourceBuffer- The handle to the source buffer object.
uiSourceOffset- Byte offset into the source buffer where the copy should start.
pDestinationBuffer- The handle to the destination buffer object.
uiDestinationOffset- Byte offset into the destination buffer where the copy should start.
uiSize- Size in bytes of the region to copy.

◆ CopyTexture()

void xiiGALCommandList::CopyTexture ( xiiSharedPtr< xiiGALTexture > pSourceTexture,
xiiSharedPtr< xiiGALTexture > pDestinationTexture )

Copies the entire contents of the source texture to the destination texture.

Parameters
pSourceTexture- The handle to the source texture object.
pDestinationTexture- The handle to the destination texture object.

◆ CopyTextureRegion()

void xiiGALCommandList::CopyTextureRegion ( xiiSharedPtr< xiiGALTexture > pSourceTexture,
const xiiGALTextureMipLevelData & sourceMipLevelData,
const xiiBoundingBoxU32 & box,
xiiSharedPtr< xiiGALTexture > pDestinationTexture,
const xiiGALTextureMipLevelData & destinationMipLevelData,
const xiiVec3U32 & vDestinationPoint )

Copies a region from the source texture to the destination texture.

Parameters
pSourceTexture- The handle to the source texture object.
sourceMipLevelData- Specifies the subresource in the source texture. See xiiGALTextureMipLevelData for details.
box- Specifies the region within the source subresource to copy.
pDestinationTexture- The handle to the destination texture object.
destinationMipLevelData- Specifies the subresource in the destination texture. See xiiGALTextureMipLevelData for details.
vDestinationPoint- Specifies the point within the destination subresource where the region should be copied to.

◆ DeviceWaitForFence()

void xiiGALCommandList::DeviceWaitForFence ( xiiSharedPtr< xiiGALFence > pFence,
xiiUInt64 uiValue )

Waits until the specified fence reaches or exceeds the specified value, on the device.

Parameters
pFence- The fence to wait. The fence must be created with type xiiGALFenceType::General.
uiValue- The value that the command list is waiting for the fence to reach.
Note
If NativeFence feature is not enabled (see xiiGALDeviceFeatures), then uiValue must be less than or equal to the last signalled or pending value. uiValue becomes pending when the command list is submitted. Waiting for a value that is greater than any pending value will cause a deadlock.
If NativeFence feature is enabled (see xiiGALDeviceFeatures), then waiting for a value that is greater than any pending value will cause a GPU stall.

◆ DispatchCompute()

void xiiGALCommandList::DispatchCompute ( const xiiGALDispatchComputeDescription & description)

Dispatches a compute workload using the specified thread group dimensions.

Synchronously encodes compute workload dimensions per axis.

Parameters
description- Thread group count and Metal overrides (if any).
See also
xiiGALDispatchComputeDescription

◆ DispatchComputeIndirect()

void xiiGALCommandList::DispatchComputeIndirect ( const xiiGALDispatchComputeIndirectDescription & description)

Dispatches a compute workload using arguments stored in a GPU buffer.

Enables GPU-controlled compute invocation for async workloads or culling passes.

Parameters
description- Buffer containing dispatch dimensions and optional Metal overrides.
See also
xiiGALDispatchComputeIndirectDescription

◆ Draw()

void xiiGALCommandList::Draw ( const xiiGALDrawDescription & description)

Issues a non-indexed draw call using the specified parameters.

Executes a basic draw using vertex buffers without indexing.

Parameters
description- Vertex and instance counts, and vertex offsets.
See also
xiiGALDrawDescription

◆ DrawIndexed()

void xiiGALCommandList::DrawIndexed ( const xiiGALDrawIndexedDescription & description)

Issues an indexed draw call using the specified parameters.

Uses an index buffer to reference geometry vertices and enables instancing.

Parameters
description- Index type, counts, and offset information.
See also
xiiGALDrawIndexedDescription

◆ DrawIndexedIndirect()

void xiiGALCommandList::DrawIndexedIndirect ( const xiiGALDrawIndexedIndirectDescription & description)

Issues an indexed indirect draw call based on arguments stored in a GPU buffer.

Uses index data and indirect arguments pulled from a structured GPU buffer.

Parameters
description- Index type, buffer handles, offsets, and draw count.
See also
xiiGALDrawIndexedIndirectDescription

◆ DrawIndirect()

void xiiGALCommandList::DrawIndirect ( const xiiGALDrawIndirectDescription & description)

Issues an indirect draw call based on arguments stored in a GPU buffer.

Supports multi-draw and optional counter buffer for dynamic draw count.

Parameters
description- Buffer handles, offsets, draw count, and flags.
See also
xiiGALDrawIndirectDescription

◆ DrawMesh()

void xiiGALCommandList::DrawMesh ( const xiiGALDrawMeshDescription & description)

Issues a draw call that dispatches GPU mesh shaders directly.

Typically used when mesh shading pipelines are active and task amplification is desired.

Parameters
description- Thread group dimensions and flags.
See also
xiiGALDrawMeshDescription

◆ DrawMeshIndirect()

void xiiGALCommandList::DrawMeshIndirect ( const xiiGALDrawMeshIndirectDescription & description)

Issues an indirect mesh shader draw using arguments stored in a GPU buffer.

Supports GPU-driven workflows for meshlets with optional counter buffer.

Parameters
description- Buffer handles, offsets, draw count, and flags.
See also
xiiGALDrawMeshIndirectDescription

◆ End()

void xiiGALCommandList::End ( )
protected

Ends the command list. This method should be called after all commands are issued.

Remarks
This method is called automatically when using xiiGALCommandQueue::Submit execute a command list.

◆ EndQuery()

void xiiGALCommandList::EndQuery ( xiiSharedPtr< xiiGALQuery > pQuery)

Ends a query.

Parameters
pQuery- The handle to the query object.

◆ EnqueueSignal()

void xiiGALCommandList::EnqueueSignal ( xiiSharedPtr< xiiGALFence > pFence,
xiiUInt64 uiValue )

Tells the GPU to set a fence to a specified value after all previous work has completed.

Parameters
pFence- The fence to signal.
uiValue- The value to set the fence to. This value must be greater than the previously signalled value on the same fence.
Note
The fence will be signalled when the command list is submitted. If an application needs to wait for the fence in a loop, it must submit the command list after signalling the fence.

◆ GenerateMips()

void xiiGALCommandList::GenerateMips ( xiiSharedPtr< xiiGALTextureView > pTextureView)

Generates mipmap levels for a texture.

Parameters
pTextureView- The handle to the texture view object. The texture view must be of type xiiGALTextureViewType::ShaderResource.
Remarks
This method must only be called on a shader resource view. The texture must be created with xiiGALMiscTextureFlags::GenerateMips.

◆ InsertDebugLabel()

void xiiGALCommandList::InsertDebugLabel ( xiiStringView sName,
const xiiColor & color = xiiColor::Black )

Inserts a debug label into the command list.

Parameters
sName- The name of the debug label.
color- The color associated with the debug label.

◆ MapBuffer()

xiiResult xiiGALCommandList::MapBuffer ( xiiSharedPtr< xiiGALBuffer > pBuffer,
xiiEnum< xiiGALMapType > mapType,
xiiBitflags< xiiGALMapFlags > mapFlags,
void *& pMappedData )

Maps a buffer into the CPU's address space.

Parameters
pBuffer- The handle to the buffer object.
mapType- Specifies the CPU's access pattern for the map operation. See xiiGALMapType for details.
mapFlags- Flags specifying how the buffer should be mapped. See xiiGALMapFlags for details.
pMappedData- Pointer to the mapped data.

◆ MapTextureSubresource()

xiiResult xiiGALCommandList::MapTextureSubresource ( xiiSharedPtr< xiiGALTexture > pTexture,
xiiGALTextureMipLevelData textureMipLevelData,
xiiEnum< xiiGALMapType > mapType,
xiiBitflags< xiiGALMapFlags > mapFlags,
xiiBoundingBoxU32 * pTextureBox,
xiiGALMappedTextureSubresource & mappedData )

Maps a texture subresource into the address space of the command list.

Parameters
pTexture- The handle to the texture object. This is the texture that contains the subresource to map.
textureMipLevelData- Specifies the subresource to map. This is the mipmap level of the texture to map.
mapType- Specifies the CPU's read and write access to a resource.
mapFlags- Specifies the behavior of the map operation.
pTextureBox- Specifies the region of the resource to map. If this parameter is null, the entire resource is mapped.
mappedData- Receives information about the resource data when the function returns.

◆ MultiDraw()

void xiiGALCommandList::MultiDraw ( const xiiGALMultiDrawDescription & description)

Executes a batch of non-indexed draw calls using an array of parameters.

Enables multi-draw submission without index buffers, with per-draw configurations.

Parameters
description- Array of draw items and instance parameters.
See also
xiiGALMultiDrawDescription

◆ MultiDrawIndexed()

void xiiGALCommandList::MultiDrawIndexed ( const xiiGALMultiDrawIndexedDescription & description)

Executes a batch of indexed draw calls using an array of parameters.

Supports per-item base vertex and index range offsets across draws.

Parameters
description- Array of indexed draw items and instance parameters.
See also
xiiGALMultiDrawIndexedDescription

◆ Reset()

void xiiGALCommandList::Reset ( )
protected

Resets the command list. This method is used to clear all commands that have been recorded in the command list.

Remarks
This method can be called only if the command list has not yet been submitted for execution.

◆ ResolveAndSetConstantBuffer()

void xiiGALCommandList::ResolveAndSetConstantBuffer ( const xiiTempHashedString & sResourceName,
xiiSharedPtr< xiiGALBuffer > pConstantBuffer,
xiiBitflags< xiiGALShaderType > shaderStages = xiiGALShaderType::Unknown )

Resolves and sets a constant buffer for the given resource name.

If shaderStages is left as xiiGALShaderType::Unknown, the function resolves the resource based on whatever shader stage is found. Otherwise, it attempts to find a resource description that includes all the specified shader stages.

Parameters
sResourceName- The hashed name of the resource to resolve.
pConstantBuffer- Shared pointer to the constant buffer to set.
shaderStages- Bitflags specifying applicable shader stages (defaults to unknown).

◆ ResolveAndSetSampler()

void xiiGALCommandList::ResolveAndSetSampler ( const xiiTempHashedString & sResourceName,
xiiSharedPtr< xiiGALSampler > pSampler,
xiiBitflags< xiiGALShaderType > shaderStages = xiiGALShaderType::Unknown )

Resolves and sets a sampler for the given resource name.

If shaderStages is left as xiiGALShaderType::Unknown, the function resolves the resource based on whatever shader stage is found. Otherwise, it attempts to find a resource description that includes all the specified shader stages.

Parameters
sResourceName- The hashed name of the resource to resolve.
pSampler- Shared pointer to the sampler to set.
shaderStages- Bitflags specifying applicable shader stages (defaults to unknown).

◆ ResolveAndSetShaderResourceBufferView()

void xiiGALCommandList::ResolveAndSetShaderResourceBufferView ( const xiiTempHashedString & sResourceName,
xiiSharedPtr< xiiGALBufferView > pBufferView,
xiiBitflags< xiiGALShaderType > shaderStages = xiiGALShaderType::Unknown )

Resolves and sets a shader resource buffer view for the given resource name.

If shaderStages is left as xiiGALShaderType::Unknown, the function resolves the resource based on whatever shader stage is found. Otherwise, it attempts to find a resource description that includes all the specified shader stages.

Parameters
sResourceName- The hashed name of the resource to resolve.
pBufferView- Shared pointer to the buffer view to set.
shaderStages- Bitflags specifying applicable shader stages (defaults to unknown).

◆ ResolveAndSetShaderResourceTextureView()

void xiiGALCommandList::ResolveAndSetShaderResourceTextureView ( const xiiTempHashedString & sResourceName,
xiiSharedPtr< xiiGALTextureView > pTextureView,
xiiBitflags< xiiGALShaderType > shaderStages = xiiGALShaderType::Unknown )

Resolves and sets a shader resource texture view for the given resource name.

If shaderStages is left as xiiGALShaderType::Unknown, the function resolves the resource based on whatever shader stage is found. Otherwise, it attempts to find a resource description that includes all the specified shader stages.

Parameters
sResourceName- The hashed name of the resource to resolve.
pTextureView- Shared pointer to the texture view to set.
shaderStages- Bitflags specifying applicable shader stages (defaults to unknown).

◆ ResolveAndSetUnorderedAccessBufferView()

void xiiGALCommandList::ResolveAndSetUnorderedAccessBufferView ( const xiiTempHashedString & sResourceName,
xiiSharedPtr< xiiGALBufferView > pBufferView,
xiiBitflags< xiiGALShaderType > shaderStages = xiiGALShaderType::Unknown )

Resolves and sets an unordered access buffer view for the given resource name.

If shaderStages is left as xiiGALShaderType::Unknown, the function resolves the resource based on whatever shader stage is found. Otherwise, it attempts to find a resource description that includes all the specified shader stages.

Parameters
sResourceName- The hashed name of the resource to resolve.
pBufferView- Shared pointer to the unordered access buffer view to set.
shaderStages- Bitflags specifying applicable shader stages (defaults to unknown).

◆ ResolveAndSetUnorderedAccessTextureView()

void xiiGALCommandList::ResolveAndSetUnorderedAccessTextureView ( const xiiTempHashedString & sResourceName,
xiiSharedPtr< xiiGALTextureView > pTextureView,
xiiBitflags< xiiGALShaderType > shaderStages = xiiGALShaderType::Unknown )

Resolves and sets an unordered access texture view for the given resource name.

If shaderStages is left as xiiGALShaderType::Unknown, the function resolves the resource based on whatever shader stage is found. Otherwise, it attempts to find a resource description that includes all the specified shader stages.

Parameters
sResourceName- The hashed name of the resource to resolve.
pTextureView- Shared pointer to the unordered access texture view to set.
shaderStages- Bitflags specifying applicable shader stages (defaults to unknown).

◆ ResolveTextureSubResource()

void xiiGALCommandList::ResolveTextureSubResource ( xiiSharedPtr< xiiGALTexture > pSourceTexture,
xiiSharedPtr< xiiGALTexture > pDestinationTexture,
const xiiGALResolveTextureSubresourceDescription & description )

Resolves a multisampled source texture into a non-multisampled destination texture.

This operation performs a resolve from a multi-sampled texture (typically used for anti-aliasing) into a non-multi-sampled texture, commonly used for presenting or further processing.

Parameters
pSourceTexture- Handle to the multi-sampled source texture.
pDestinationTexture- Handle to the destination texture which must not be multi-sampled.
description- Structure that specifies the source and destination subresources, including mip levels, array slices, resource formats, and texture state transitions. See xiiGALResolveTextureSubresourceDescription for details.

◆ SetBlendFactor()

void xiiGALCommandList::SetBlendFactor ( const xiiColor & blendFactor)

Sets the blend factors used in the blend state.

blendFactor - The blend factors represented by a xiiColor.

◆ SetConstantBuffer()

void xiiGALCommandList::SetConstantBuffer ( const xiiGALPipelineResourceDescription & bindingInformation,
xiiSharedPtr< xiiGALBuffer > pConstantBuffer )

This is used to set the constant (uniform) buffer for a shader resource.

Parameters
bindingInformation- This describes the binding information for the shader resource, see xiiGALPipelineResourceDescription for details.
pConstantBuffer- The handle to the constant (uniform) buffer object to set.

◆ SetIndexBuffer()

void xiiGALCommandList::SetIndexBuffer ( xiiSharedPtr< xiiGALBuffer > pIndexBuffer,
xiiUInt64 uiByteOffset = 0U,
xiiEnum< xiiGALStateTransitionMode > transitionMode = xiiGALStateTransitionMode::Transition )

Sets the index buffer for the input-assembler stage of the pipeline. This contains the indices into the vertex buffers.

Parameters
pIndexBuffer- The handle to the index buffer object. The index buffer must be created with the xiiGALBindFlags::IndexBuffer bind flag.
uiByteOffset- The byte offset into the index buffer. That is, from the beginning of the buffer to the start of the index data.
transitionMode- Resource state transition mode. Specifies whether the buffer state should be transitioned to the required state automatically.

◆ SetPipelineState()

void xiiGALCommandList::SetPipelineState ( xiiSharedPtr< xiiGALPipelineState > pPipelineState)

Sets the pipeline state object for the command list.

Parameters
pPipelineState- The handle to the pipeline state object.

◆ SetSampler()

void xiiGALCommandList::SetSampler ( const xiiGALPipelineResourceDescription & bindingInformation,
xiiSharedPtr< xiiGALSampler > pSampler )

This is used to set the sampler for a sampler resource.

Parameters
bindingInformation- This describes the binding information for the sampler resource, see xiiGALPipelineResourceDescription for details.
pSampler- The handle to the sampler object to set.

◆ SetScissorRect()

XII_ALWAYS_INLINE void xiiGALCommandList::SetScissorRect ( const xiiRectU32 & rect)
inline

Sets a single scissor rectangle for the rasterizer stage. This simplifies the process when only one scissor rectangle is needed.

Parameters
rect- The rectangle describing the area to bind.

◆ SetScissorRects()

void xiiGALCommandList::SetScissorRects ( xiiArrayPtr< const xiiRectU32 > pRects)

Sets the scissor rectangles used in the rasterizer stage. This defines the area of the render target to which the rasterizer will clip.

Parameters
pRects- The array of rectangle structures, describing the scissor rectangles to bind.

◆ SetShaderResourceBufferView()

void xiiGALCommandList::SetShaderResourceBufferView ( const xiiGALPipelineResourceDescription & bindingInformation,
xiiSharedPtr< xiiGALBufferView > pBufferView )

This is used to set the buffer view for a shader resource.

Parameters
bindingInformation- This describes the binding information for the shader resource, see xiiGALPipelineResourceDescription for details.
pBufferView- The handle to the buffer view object to set.

◆ SetShaderResourceTextureView()

void xiiGALCommandList::SetShaderResourceTextureView ( const xiiGALPipelineResourceDescription & bindingInformation,
xiiSharedPtr< xiiGALTextureView > pTextureView )

This is used to set the texture view for a shader resource.

Parameters
bindingInformation- This describes the binding information for the shader resource, see xiiGALPipelineResourceDescription for details.
pTextureView- The handle to the texture view object to set.

◆ SetStencilRef()

void xiiGALCommandList::SetStencilRef ( xiiUInt32 uiStencilRef)

Sets the stencil reference value used in the stencil test.

Parameters
uiStencilRef- Stencil reference value.

◆ SetUnorderedAccessBufferView()

void xiiGALCommandList::SetUnorderedAccessBufferView ( const xiiGALPipelineResourceDescription & bindingInformation,
xiiSharedPtr< xiiGALBufferView > pBufferView )

This is used to set the buffer view for an unordered access.

Parameters
bindingInformation- This describes the binding information for the shader resource, see xiiGALPipelineResourceDescription for details.
pBufferView- The handle to the buffer view object to set.

◆ SetUnorderedAccessTextureView()

void xiiGALCommandList::SetUnorderedAccessTextureView ( const xiiGALPipelineResourceDescription & bindingInformation,
xiiSharedPtr< xiiGALTextureView > pTextureView )

This is used to set the texture view for an unordered access.

Parameters
bindingInformation- This describes the binding information for the shader resource, see xiiGALPipelineResourceDescription for details.
pTextureView- The handle to the texture view object to set.

◆ SetVertexBuffers()

void xiiGALCommandList::SetVertexBuffers ( xiiUInt32 uiStartSlot,
xiiArrayPtr< xiiSharedPtr< xiiGALBuffer > > pVertexBuffers,
xiiArrayPtr< xiiUInt64 > pByteOffsets,
xiiBitflags< xiiGALSetVertexBufferFlags > flags = xiiGALSetVertexBufferFlags::None,
xiiEnum< xiiGALStateTransitionMode > transitionMode = xiiGALStateTransitionMode::Transition )

Sets the vertex buffers for the input-assembler stage of the pipeline. This contains the vertex data.

Parameters
uiStartSlot- The starting slot for the vertex buffers, which is the first input slot for binding. The first vertex buffer is explicitly bound to the start slot; each additional vertex buffer in the array is implicitly bound to each subsequent input slot.
pVertexBuffers- The array of handles to the vertex buffer objects. The vertex buffers must be created with the xiiGALBindFlags::VertexBuffer bind flag.
pByteOffsets- The array of offset values; one offset value for each buffer in the vertex-buffer array. Each offset is the number of bytes between the first element of a vertex buffer and the first element that will be used. If this parameter is an empty array, zero offsets for all buffers will be used.
flags- Additional flags for setting vertex buffers. See xiiGALSetVertexBufferFlags for more information.
transitionMode- Resource state transition mode. Specifies whether the buffer state should be transitioned to the required state automatically.

◆ SetViewport()

XII_ALWAYS_INLINE void xiiGALCommandList::SetViewport ( const xiiGALViewport & viewport)
inline

Sets a single viewport for the rasterizer stage. This simplifies the process when only one viewport is needed.

Parameters
viewport- The viewport structure describing the area to bind.

◆ SetViewports()

void xiiGALCommandList::SetViewports ( xiiArrayPtr< const xiiGALViewport > pViewports)

Sets the viewports used in the rasterizer stage. This defines the area of the render target to which the rasterizer will clip.

Parameters
pViewports- The array of viewports structures, describing the viewports to bind.

◆ Submit()

xiiUInt64 xiiGALCommandList::Submit ( )

Submits a command list to the command queue for execution. The command list is reset after the execution on the command queue.

Returns
The current internal fence value.

◆ TransitionResourceStates()

void xiiGALCommandList::TransitionResourceStates ( xiiArrayPtr< xiiGALStateTransitionDescription > pResourceBarriers)

Transitions the resource states.

Parameters
pResourceBarriers- Pointer to the array of resource barriers.
Remarks
When both old and new states are xiiGALResourceState::UnorderedAccess, the GAL executes UAV barrier on the resource. The barrier makes sure that all UAV accesses (reads or writes) are complete before any future UAV accesses (read or write) can begin.
    There are two main usage scenarios for this method:
    1. An application knows specifics of resource state transitions not available to the GAL. For example, only single mip level needs to be transitioned.
    2. An application manages resource states in multiple threads in parallel.

    The method always reads the states of all resources to transition. If the state of a resource is managed by multiple threads in parallel, the resource must first be transitioned to unknown state (xiiGALResourceState::Unknown) to disable automatic state management in the GAL.

    When xiiGALStateTransitionFlags::UpdateState is set, the method may update the state of the corresponding resource which is not thread safe. No other threads should read or write the state of that resource.
Note
Resource states for shader access (e.g. xiiGALResourceState::ConstantBuffer, xiiGALResourceState::UnorderedAccess, xiiGALResourceState::ShaderResource) may map to different native state depending on what command queue type is used (see xiiGALCommandListCreationDescription). To synchronize write access in compute shader in a compute queue with a pixel shader read in graphics queue, an application should call TransitionResourceStates() in graphics queue. Using TransitionResourceStates() with NewState = xiiGALResourceState::ShaderResource will not invalidate cache in graphics shaders and may cause undefined behaviour.

◆ UnmapBuffer()

xiiResult xiiGALCommandList::UnmapBuffer ( xiiSharedPtr< xiiGALBuffer > pBuffer,
xiiEnum< xiiGALMapType > mapType )

Unmaps a buffer from the CPU's address space.

Parameters
pBuffer- The handle to the buffer object.
mapType- Specifies the CPU's access pattern for the map operation. See xiiGALMapType for details.

◆ UnmapTextureSubresource()

xiiResult xiiGALCommandList::UnmapTextureSubresource ( xiiSharedPtr< xiiGALTexture > pTexture,
xiiGALTextureMipLevelData textureMipLevelData )

Unmaps a texture subresource from the address space of the command list.

Parameters
pTexture- The handle to the texture object.
textureMipLevelData- Specifies the subresource to unmap.

◆ UpdateBuffer()

void xiiGALCommandList::UpdateBuffer ( xiiSharedPtr< xiiGALBuffer > pBuffer,
xiiUInt32 uiDestinationOffset,
xiiArrayPtr< const xiiUInt8 > pSourceData )

Updates a buffer.

Parameters
pBuffer- The handle to the buffer object.
uiDestinationOffset- Byte offset into the buffer where the update should start.
pSourceData- Pointer to the source data.

◆ UpdateTexture()

void xiiGALCommandList::UpdateTexture ( xiiSharedPtr< xiiGALTexture > pTexture,
const xiiGALTextureMipLevelData & textureMiplevelData,
const xiiBoundingBoxU32 & textureBox,
const xiiGALTextureSubResourceData & subresourceData )

Updates a texture.

Parameters
pTexture- The handle to the texture object.
textureMiplevelData- Specifies the subresource to update. See xiiGALTextureMipLevelData for details.
textureBox- Specifies the region within the subresource to update.
subresourceData- Specifies the new data. See xiiGALTextureSubResourceData for details.

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