OGRE-Next  2.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)
VkFence acquireCurrentFence ()
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 endAllEncoders (bool endRenderPassDesc=true)
void endComputeEncoder ()
void endCopyEncoder ()
void endRenderEncoder (const bool endRenderPassDesc=true)
void getComputeEncoder ()
void getCopyEncoder (const BufferPacked *buffer, TextureGpu *texture, const bool bDownload, CopyEncTransitionMode::CopyEncTransitionMode transitionMode)
 Call this function when you need to start copy/transfer operations. More...
void getCopyEncoderV1Buffer (const bool bDownload)
EncoderState getEncoderState () const
uint32 getFamilyIdx () const
void getGraphicsEncoder ()
VulkanVaoManagergetVaoManager ()
void init (VkDevice device, VkQueue queue, VulkanRenderSystem *renderSystem)
bool isFenceFlushed (VkFence fence) const
 If this function returns false, waiting on the fence would cause a deadlock since it will never signal. More...
void notifyTextureDestroyed (VulkanTextureGpu *texture)
void releaseFence (VkFence fence)
void setQueueData (VulkanDevice *owner, QueueFamily family, uint32 familyIdx, uint32 queueIdx)

Public Attributes

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

Member Enumeration Documentation

◆ EncoderState


◆ QueueFamily


Constructor & Destructor Documentation

◆ VulkanQueue()

Ogre::VulkanQueue::VulkanQueue ( )

◆ ~VulkanQueue()

Ogre::VulkanQueue::~VulkanQueue ( )

Member Function Documentation

◆ _isFrameFinished()

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

◆ _waitOnFrame()

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

◆ acquireCurrentFence()

VkFence Ogre::VulkanQueue::acquireCurrentFence ( )

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

◆ commitAndNextCommandBuffer()

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

◆ destroy()

void Ogre::VulkanQueue::destroy ( )

◆ endAllEncoders()

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

◆ endComputeEncoder()

void Ogre::VulkanQueue::endComputeEncoder ( )

◆ endCopyEncoder()

void Ogre::VulkanQueue::endCopyEncoder ( )

◆ endRenderEncoder()

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

◆ getComputeEncoder()

void Ogre::VulkanQueue::getComputeEncoder ( )

◆ getCopyEncoder()

void Ogre::VulkanQueue::getCopyEncoder ( const BufferPacked buffer,
TextureGpu texture,
const bool  bDownload,
CopyEncTransitionMode::CopyEncTransitionMode  transitionMode 

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 );
transitionModeOnly used if texture != nullptr See CopyEncTransitionMode::CopyEncTransitionMode

◆ getCopyEncoderV1Buffer()

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

◆ getEncoderState()

EncoderState Ogre::VulkanQueue::getEncoderState ( ) const

◆ getFamilyIdx()

uint32 Ogre::VulkanQueue::getFamilyIdx ( ) const

◆ getGraphicsEncoder()

void Ogre::VulkanQueue::getGraphicsEncoder ( )

◆ getVaoManager()

VulkanVaoManager* Ogre::VulkanQueue::getVaoManager ( )

◆ init()

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

◆ isFenceFlushed()

bool Ogre::VulkanQueue::isFenceFlushed ( VkFence  fence) const

If this function returns false, waiting on the fence would cause a deadlock since it will never signal.

You must call commitAndNextCommandBuffer before waiting.

◆ notifyTextureDestroyed()

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

◆ releaseFence()

void Ogre::VulkanQueue::releaseFence ( VkFence  fence)

◆ setQueueData()

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

Member Data Documentation

◆ mCurrentCmdBuffer

VkCommandBuffer Ogre::VulkanQueue::mCurrentCmdBuffer

◆ mDevice

VkDevice Ogre::VulkanQueue::mDevice

◆ mFamily

QueueFamily Ogre::VulkanQueue::mFamily

◆ mFamilyIdx

uint32 Ogre::VulkanQueue::mFamilyIdx

◆ mOwnerDevice

VulkanDevice* Ogre::VulkanQueue::mOwnerDevice

◆ mQueue

VkQueue Ogre::VulkanQueue::mQueue

◆ mQueueIdx

uint32 Ogre::VulkanQueue::mQueueIdx

◆ mWindowsPendingSwap

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

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