OGRE-Next  4.0.0unstable
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)
 
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 getCopyEncoderAsyncTextureTicketUpload ()
 
void getCopyEncoderV1Buffer (const bool bDownload)
 
VkCommandBuffer getCurrentCmdBuffer ()
 
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 setExternalQueue (VulkanDevice *owner, QueueFamily family, VkQueue queue)
 
void setQueueData (VulkanDevice *owner, QueueFamily family, uint32 familyIdx, uint32 queueIdx)
 

Public Attributes

VkDevice mDevice
 
QueueFamily mFamily
 
uint32 mFamilyIdx
 
VulkanDevicemOwnerDevice
 
VkQueue mQueue
 
uint32 mQueueIdx
 
FastArray< VulkanWindowSwapChainBased * > mWindowsPendingSwap
 

Member Enumeration Documentation

◆ EncoderState

Enumerator
EncoderGraphicsOpen 
EncoderComputeOpen 
EncoderCopyOpen 
EncoderClosed 

◆ QueueFamily

Enumerator
Graphics 
Compute 
Transfer 
NumQueueFamilies 

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.

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

◆ getCopyEncoderAsyncTextureTicketUpload()

void Ogre::VulkanQueue::getCopyEncoderAsyncTextureTicketUpload ( )

◆ getCopyEncoderV1Buffer()

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

◆ getCurrentCmdBuffer()

VkCommandBuffer Ogre::VulkanQueue::getCurrentCmdBuffer ( )
inline

References OGRE_ASSERT_LOW.

◆ getEncoderState()

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

◆ getFamilyIdx()

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

◆ getGraphicsEncoder()

void Ogre::VulkanQueue::getGraphicsEncoder ( )

◆ getVaoManager()

VulkanVaoManager* Ogre::VulkanQueue::getVaoManager ( )
inline

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

◆ setExternalQueue()

void Ogre::VulkanQueue::setExternalQueue ( VulkanDevice owner,
QueueFamily  family,
VkQueue  queue 
)

◆ setQueueData()

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

Member Data Documentation

◆ 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<VulkanWindowSwapChainBased *> Ogre::VulkanQueue::mWindowsPendingSwap

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