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

#include <OgreVulkanQueue.h>


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, VkDeviceMemory memory)
void setQueueData (VulkanDevice *owner, QueueFamily family, uint32 familyIdx, uint32 queueIdx)

Public Attributes

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

Member Enumeration Documentation

◆ QueueFamily


◆ EncoderState


Constructor & Destructor Documentation

◆ VulkanQueue()

Ogre::VulkanQueue::VulkanQueue ( )

◆ ~VulkanQueue()

Ogre::VulkanQueue::~VulkanQueue ( )

Member Function Documentation

◆ getFamilyIdx()

uint32 Ogre::VulkanQueue::getFamilyIdx ( ) const

◆ 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,
VkDeviceMemory  memory 

◆ queueForDeletion() [2/2]

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

◆ getEncoderState()

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

◆ 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.

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
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

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: