OGRE  13.6
Object-Oriented Graphics Rendering Engine
Ogre::VulkanQueue Class Reference

#include <OgreVulkanQueue.h>

Classes

struct  PerFrameData
 

Public Types

enum  EncoderState { EncoderGraphicsOpen , EncoderComputeOpen , EncoderCopyOpen , EncoderClosed }
 
enum  QueueFamily { Graphics , Compute , Transfer , NumQueueFamilies }
 

Public Member Functions

 VulkanQueue ()
 
 ~VulkanQueue ()
 
bool _isFrameFinished (uint8 frameIdx)
 
void _waitOnFrame (uint8 frameIdx)
 
void addWindowToWaitFor (VkSemaphore imageAcquisitionSemaph)
 When we'll call commitAndNextCommandBuffer, we'll have to wait for this semaphore on to execute STAGE_COLOR_ATTACHMENT_OUTPUT_BIT. More...
 
void commitAndNextCommandBuffer (SubmissionType::SubmissionType submissionType=SubmissionType::FlushOnly)
 
void destroy (void)
 
void endAllEncoders (bool endRenderPassDesc=true)
 
void endComputeEncoder (void)
 
void endCopyEncoder (void)
 
void endRenderEncoder (const bool endRenderPassDesc=true)
 
void getComputeEncoder (void)
 
void getCopyEncoder (const BufferPacked *buffer, VulkanTextureGpu *texture, const bool bDownload)
 Call this function when you need to start copy/transfer operations. More...
 
void getCopyEncoderV1Buffer (const bool bDownload)
 
EncoderState getEncoderState (void) const
 
uint32 getFamilyIdx () const
 
void getGraphicsEncoder (void)
 
void init (VkDevice device, VkQueue queue, VulkanRenderSystem *renderSystem)
 
void notifyTextureDestroyed (VulkanTextureGpu *texture)
 
void queueForDeletion (const std::shared_ptr< VulkanDescriptorPool > &descriptorPool)
 
void queueForDeletion (VkBuffer buffer, VmaAllocation allocation)
 
void setQueueData (VulkanDevice *owner, QueueFamily family, uint32 familyIdx, uint32 queueIdx)
 

Public Attributes

VkCommandBuffer mCurrentCmdBuffer
 
uint8 mCurrentFrameIdx
 
VkDevice mDevice
 
QueueFamily mFamily
 
uint32 mFamilyIdx
 
uint8 mNumFramesInFlight
 
VulkanDevicemOwnerDevice
 
VkQueue mQueue
 
uint32 mQueueIdx
 
FastArray< VulkanWindow * > mWindowsPendingSwap
 

Member Enumeration Documentation

◆ QueueFamily

Enumerator
Graphics 
Compute 
Transfer 
NumQueueFamilies 

◆ EncoderState

Enumerator
EncoderGraphicsOpen 
EncoderComputeOpen 
EncoderCopyOpen 
EncoderClosed 

Constructor & Destructor Documentation

◆ VulkanQueue()

Ogre::VulkanQueue::VulkanQueue ( )

◆ ~VulkanQueue()

Ogre::VulkanQueue::~VulkanQueue ( )

Member Function Documentation

◆ getFamilyIdx()

uint32 Ogre::VulkanQueue::getFamilyIdx ( ) const
inline

◆ setQueueData()

void Ogre::VulkanQueue::setQueueData ( VulkanDevice owner,
QueueFamily  family,
uint32  familyIdx,
uint32  queueIdx 
)

◆ init()

void Ogre::VulkanQueue::init ( VkDevice  device,
VkQueue  queue,
VulkanRenderSystem renderSystem 
)

◆ destroy()

void Ogre::VulkanQueue::destroy ( void  )

◆ queueForDeletion() [1/2]

void Ogre::VulkanQueue::queueForDeletion ( VkBuffer  buffer,
VmaAllocation  allocation 
)

◆ queueForDeletion() [2/2]

void Ogre::VulkanQueue::queueForDeletion ( const std::shared_ptr< VulkanDescriptorPool > &  descriptorPool)

◆ getEncoderState()

EncoderState Ogre::VulkanQueue::getEncoderState ( void  ) const
inline

◆ getGraphicsEncoder()

void Ogre::VulkanQueue::getGraphicsEncoder ( void  )

◆ getComputeEncoder()

void Ogre::VulkanQueue::getComputeEncoder ( void  )

◆ getCopyEncoder()

void Ogre::VulkanQueue::getCopyEncoder ( const BufferPacked *  buffer,
VulkanTextureGpu texture,
const bool  bDownload 
)

Call this function when you need to start copy/transfer operations.

Remarks
buffer and texture pointers cannot be both nullptr at the same time

You don't have to pair every getCopyEncoder call with an endCopyEncoder call. In fact this is discouraged.

Keep calling getCopyEncoder until you're done with all transfer operations

See also
VulkanQueue::prepareForUpload
VulkanQueue::prepareForDownload
Parameters
bufferThe buffer we're copying from/to. Can be nullptr
textureThe texture we're copying from/to. Can be nullptr

If uploading, the texture will be transitioned to VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL If downloading, the texture will be transitioned to VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL

Parameters
bDownloadTrue if we plan to do CPU -> GPU transfers False if we plan to do GPU -> CPU transfers

If you want to perform GPU -> GPU transfers, then you need to call:

queue->getCopyEncoder( src, src, true );
queue->getCopyEncoder( dst, dst, false );

◆ getCopyEncoderV1Buffer()

void Ogre::VulkanQueue::getCopyEncoderV1Buffer ( const bool  bDownload)

◆ endCopyEncoder()

void Ogre::VulkanQueue::endCopyEncoder ( void  )

◆ endRenderEncoder()

void Ogre::VulkanQueue::endRenderEncoder ( const bool  endRenderPassDesc = true)

◆ endComputeEncoder()

void Ogre::VulkanQueue::endComputeEncoder ( void  )

◆ endAllEncoders()

void Ogre::VulkanQueue::endAllEncoders ( bool  endRenderPassDesc = true)

◆ notifyTextureDestroyed()

void Ogre::VulkanQueue::notifyTextureDestroyed ( VulkanTextureGpu texture)

◆ addWindowToWaitFor()

void Ogre::VulkanQueue::addWindowToWaitFor ( VkSemaphore  imageAcquisitionSemaph)

When we'll call commitAndNextCommandBuffer, we'll have to wait for this semaphore on to execute STAGE_COLOR_ATTACHMENT_OUTPUT_BIT.

◆ _waitOnFrame()

void Ogre::VulkanQueue::_waitOnFrame ( uint8  frameIdx)

◆ _isFrameFinished()

bool Ogre::VulkanQueue::_isFrameFinished ( uint8  frameIdx)

◆ commitAndNextCommandBuffer()

void Ogre::VulkanQueue::commitAndNextCommandBuffer ( SubmissionType::SubmissionType  submissionType = SubmissionType::FlushOnly)

Member Data Documentation

◆ mDevice

VkDevice Ogre::VulkanQueue::mDevice

◆ mFamily

QueueFamily Ogre::VulkanQueue::mFamily

◆ mFamilyIdx

uint32 Ogre::VulkanQueue::mFamilyIdx

◆ mQueueIdx

uint32 Ogre::VulkanQueue::mQueueIdx

◆ mQueue

VkQueue Ogre::VulkanQueue::mQueue

◆ mCurrentCmdBuffer

VkCommandBuffer Ogre::VulkanQueue::mCurrentCmdBuffer

◆ mOwnerDevice

VulkanDevice* Ogre::VulkanQueue::mOwnerDevice

◆ mNumFramesInFlight

uint8 Ogre::VulkanQueue::mNumFramesInFlight

◆ mCurrentFrameIdx

uint8 Ogre::VulkanQueue::mCurrentFrameIdx

◆ mWindowsPendingSwap

FastArray<VulkanWindow *> Ogre::VulkanQueue::mWindowsPendingSwap

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