![]() |
Qt 6.x
The Qt SDK
|
#include <qrhivulkan_p.h>
Classes | |
struct | DynamicUpdate |
struct | UsageState |
Public Member Functions | |
QVkBuffer (QRhiImplementation *rhi, Type type, UsageFlags usage, quint32 size) | |
~QVkBuffer () | |
void | destroy () override |
Releases (or requests deferred releasing of) the underlying native graphics resources. | |
bool | create () override |
Creates the corresponding native graphics resources. | |
QRhiBuffer::NativeBuffer | nativeBuffer () override |
char * | beginFullDynamicBufferUpdateForCurrentFrame () override |
void | endFullDynamicBufferUpdateForCurrentFrame () override |
To be called when the entire contents of the buffer data has been updated in the memory block returned from beginFullDynamicBufferUpdateForCurrentFrame(). | |
![]() | |
QRhiResource::Type | resourceType () const override |
Type | type () const |
void | setType (Type t) |
Sets the buffer's type to t. | |
UsageFlags | usage () const |
void | setUsage (UsageFlags u) |
Sets the buffer's usage flags to u. | |
quint32 | size () const |
void | setSize (quint32 sz) |
Sets the size of the buffer in bytes. | |
virtual bool | create ()=0 |
Creates the corresponding native graphics resources. | |
virtual NativeBuffer | nativeBuffer () |
virtual char * | beginFullDynamicBufferUpdateForCurrentFrame () |
virtual void | endFullDynamicBufferUpdateForCurrentFrame () |
To be called when the entire contents of the buffer data has been updated in the memory block returned from beginFullDynamicBufferUpdateForCurrentFrame(). | |
![]() | |
virtual | ~QRhiResource () |
Destructor. | |
virtual Type | resourceType () const =0 |
virtual void | destroy ()=0 |
Releases (or requests deferred releasing of) the underlying native graphics resources. | |
void | deleteLater () |
When called without a frame being recorded, this function is equivalent to deleting the object. | |
QByteArray | name () const |
void | setName (const QByteArray &name) |
Sets a name for the object. | |
quint64 | globalResourceId () const |
QRhi * | rhi () const |
Public Attributes | |
VkBuffer | buffers [QVK_FRAMES_IN_FLIGHT] |
QVkAlloc | allocations [QVK_FRAMES_IN_FLIGHT] |
QVarLengthArray< DynamicUpdate, 16 > | pendingDynamicUpdates [QVK_FRAMES_IN_FLIGHT] |
VkBuffer | stagingBuffers [QVK_FRAMES_IN_FLIGHT] |
QVkAlloc | stagingAllocations [QVK_FRAMES_IN_FLIGHT] |
UsageState | usageState [QVK_FRAMES_IN_FLIGHT] |
int | lastActiveFrameSlot = -1 |
uint | generation = 0 |
Friends | |
class | QRhiVulkan |
Additional Inherited Members | |
![]() | |
enum | Type { Immutable , Static , Dynamic } |
Specifies storage type of buffer resource. More... | |
enum | UsageFlag { VertexBuffer = 1 << 0 , IndexBuffer = 1 << 1 , UniformBuffer = 1 << 2 , StorageBuffer = 1 << 3 } |
Flag values to specify how the buffer is going to be used. More... | |
![]() | |
enum | Type { Buffer , Texture , Sampler , RenderBuffer , RenderPassDescriptor , SwapChainRenderTarget , TextureRenderTarget , ShaderResourceBindings , GraphicsPipeline , SwapChain , ComputePipeline , CommandBuffer } |
Specifies type of the resource. More... | |
![]() | |
QRhiBuffer (QRhiImplementation *rhi, Type type_, UsageFlags usage_, quint32 size_) | |
\variable QRhiBuffer::NativeBuffer::objects | |
![]() | |
QRhiResource (QRhiImplementation *rhi) | |
![]() | |
Type | m_type |
UsageFlags | m_usage |
quint32 | m_size |
![]() | |
QRhiImplementation * | m_rhi = nullptr |
quint64 | m_id |
QByteArray | m_objectName |
Definition at line 39 of file qrhivulkan_p.h.
QVkBuffer::QVkBuffer | ( | QRhiImplementation * | rhi, |
Type | type, | ||
UsageFlags | usage, | ||
quint32 | size | ||
) |
Definition at line 5796 of file qrhivulkan.cpp.
References allocations, i, QVK_FRAMES_IN_FLIGHT, stagingAllocations, and stagingBuffers.
QVkBuffer::~QVkBuffer | ( | ) |
Definition at line 5805 of file qrhivulkan.cpp.
References destroy().
|
overridevirtual |
This is a shortcut for medium-to-large dynamic uniform buffers that have their entire contents (or at least all regions that are read by the shaders in the current frame) changed {in every frame} and the QRhiResourceUpdateBatch-based update mechanism is seen too heavy due to the amount of data copying involved.
The call to this function must be eventually followed by a call to endFullDynamicUniformBufferUpdateForCurrentFrame(), before recording any render or compute pass that relies on this buffer.
Reimplemented from QRhiBuffer.
Definition at line 5919 of file qrhivulkan.cpp.
References allocations, QRhiBuffer::Dynamic, QRhiBuffer::m_type, Q_ASSERT, QRHI_RES_RHI, qWarning, toVmaAllocation(), and toVmaAllocator().
|
overridevirtual |
Creates the corresponding native graphics resources.
If there are already resources present due to an earlier create() with no corresponding destroy(), then destroy() is called implicitly first.
true
when successful, false
when a graphics operation failed. Regardless of the return value, calling destroy() is always safe. Implements QRhiBuffer.
Definition at line 5842 of file qrhivulkan.cpp.
References QVkBuffer::UsageState::access, allocation, allocations, destroy(), QRhiBuffer::Dynamic, generation, i, lastActiveFrameSlot, QRhiResource::m_objectName, QRhiBuffer::m_size, QRhiBuffer::m_type, QRhiBuffer::m_usage, QRHI_RES_RHI, QVK_FRAMES_IN_FLIGHT, qWarning, QVkBuffer::UsageState::stage, QRhiBuffer::StorageBuffer, toVkBufferUsage(), toVmaAllocator(), and usageState.
|
overridevirtual |
Releases (or requests deferred releasing of) the underlying native graphics resources.
Safe to call multiple times, subsequent invocations will be a no-op then.
Once destroy() is called, the QRhiResource instance can be reused, by calling create()
again. That will then result in creating new native graphics resources underneath.
The QRhiResource destructor also performs the same task, so calling this function is not necessary before deleting a QRhiResource.
Implements QRhiResource.
Definition at line 5810 of file qrhivulkan.cpp.
References allocations, QRhiVulkan::DeferredReleaseEntry::Buffer, e, i, lastActiveFrameSlot, pendingDynamicUpdates, QRHI_RES_RHI, QVK_FRAMES_IN_FLIGHT, stagingAllocations, and stagingBuffers.
Referenced by ~QVkBuffer(), and create().
|
overridevirtual |
To be called when the entire contents of the buffer data has been updated in the memory block returned from beginFullDynamicBufferUpdateForCurrentFrame().
Reimplemented from QRhiBuffer.
Definition at line 5940 of file qrhivulkan.cpp.
References allocations, QRhiBuffer::m_size, QRHI_RES_RHI, toVmaAllocation(), and toVmaAllocator().
|
overridevirtual |
A QRhiBuffer may be backed by multiple native buffer objects, depending on the type() and the QRhi backend in use. When this is the case, all of them are returned in the objects array in the returned struct, with slotCount specifying the number of native buffer objects. While \l{QRhi::beginFrame()}{recording a frame}, QRhi::currentFrameSlot() can be used to determine which of the native buffers QRhi is using for operations that read or write from this QRhiBuffer within the frame being recorded.
In some cases a QRhiBuffer will not be backed by a native buffer object at all. In this case slotCount will be set to 0 and no valid native objects are returned. This is not an error, and is perfectly valid when a given backend does not use native buffers for QRhiBuffers with certain types or usages.
Reimplemented from QRhiBuffer.
Definition at line 5903 of file qrhivulkan.cpp.
References QRhiBuffer::Dynamic, i, QRhiBuffer::m_type, Q_ASSERT, QRHI_RES_RHI, and QVK_FRAMES_IN_FLIGHT.
|
friend |
Definition at line 65 of file qrhivulkan_p.h.
QVkAlloc QVkBuffer::allocations[QVK_FRAMES_IN_FLIGHT] |
Definition at line 50 of file qrhivulkan_p.h.
Referenced by QVkBuffer(), beginFullDynamicBufferUpdateForCurrentFrame(), create(), destroy(), endFullDynamicBufferUpdateForCurrentFrame(), QRhiVulkan::enqueueResourceUpdates(), and QRhiVulkan::executeBufferHostWritesForSlot().
VkBuffer QVkBuffer::buffers[QVK_FRAMES_IN_FLIGHT] |
Definition at line 49 of file qrhivulkan_p.h.
Referenced by QRhiVulkan::dispatch(), QRhiVulkan::enqueueResourceUpdates(), QRhiVulkan::recordTransitionPassResources(), QRhiVulkan::setVertexInput(), QRhiVulkan::trackedBufferBarrier(), and QRhiVulkan::updateShaderResourceBindings().
uint QVkBuffer::generation = 0 |
Definition at line 64 of file qrhivulkan_p.h.
Referenced by create(), QRhiVulkan::setShaderResources(), and QRhiVulkan::updateShaderResourceBindings().
int QVkBuffer::lastActiveFrameSlot = -1 |
Definition at line 63 of file qrhivulkan_p.h.
Referenced by create(), destroy(), QRhiVulkan::enqueueResourceUpdates(), QRhiVulkan::setShaderResources(), and QRhiVulkan::setVertexInput().
QVarLengthArray<DynamicUpdate, 16> QVkBuffer::pendingDynamicUpdates[QVK_FRAMES_IN_FLIGHT] |
Definition at line 55 of file qrhivulkan_p.h.
Referenced by destroy(), QRhiVulkan::enqueueResourceUpdates(), and QRhiVulkan::executeBufferHostWritesForSlot().
QVkAlloc QVkBuffer::stagingAllocations[QVK_FRAMES_IN_FLIGHT] |
Definition at line 57 of file qrhivulkan_p.h.
Referenced by QVkBuffer(), destroy(), and QRhiVulkan::enqueueResourceUpdates().
VkBuffer QVkBuffer::stagingBuffers[QVK_FRAMES_IN_FLIGHT] |
Definition at line 56 of file qrhivulkan_p.h.
Referenced by QVkBuffer(), destroy(), and QRhiVulkan::enqueueResourceUpdates().
UsageState QVkBuffer::usageState[QVK_FRAMES_IN_FLIGHT] |
Definition at line 62 of file qrhivulkan_p.h.
Referenced by create(), QRhiVulkan::trackedBufferBarrier(), and QRhiVulkan::trackedRegisterBuffer().