Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
QVkRenderPassDescriptor Struct Reference

#include <qrhivulkan_p.h>

+ Inheritance diagram for QVkRenderPassDescriptor:
+ Collaboration diagram for QVkRenderPassDescriptor:

Public Member Functions

 QVkRenderPassDescriptor (QRhiImplementation *rhi)
 
 ~QVkRenderPassDescriptor ()
 
void destroy () override
 Releases (or requests deferred releasing of) the underlying native graphics resources.
 
bool isCompatible (const QRhiRenderPassDescriptor *other) const override
 
QRhiRenderPassDescriptornewCompatibleRenderPassDescriptor () const override
 
QVector< quint32serializedFormat () const override
 
const QRhiNativeHandlesnativeHandles () override
 
void updateSerializedFormat ()
 
- Public Member Functions inherited from QRhiRenderPassDescriptor
QRhiResource::Type resourceType () const override
 
- Public Member Functions inherited from QRhiResource
virtual ~QRhiResource ()
 Destructor.
 
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
 
QRhirhi () const
 

Public Attributes

VkRenderPass rp = VK_NULL_HANDLE
 
bool ownsRp = false
 
QVarLengthArray< VkAttachmentDescription, 8 > attDescs
 
QVarLengthArray< VkAttachmentReference, 8 > colorRefs
 
QVarLengthArray< VkAttachmentReference, 8 > resolveRefs
 
QVarLengthArray< VkSubpassDependency, 2 > subpassDeps
 
bool hasDepthStencil = false
 
bool hasDepthStencilResolve = false
 
uint32_t multiViewCount = 0
 
VkAttachmentReference dsRef
 
VkAttachmentReference dsResolveRef
 
QVector< quint32serializedFormatData
 
QRhiVulkanRenderPassNativeHandles nativeHandlesStruct
 
int lastActiveFrameSlot = -1
 

Additional Inherited Members

- Public Types inherited from QRhiResource
enum  Type {
  Buffer , Texture , Sampler , RenderBuffer ,
  RenderPassDescriptor , SwapChainRenderTarget , TextureRenderTarget , ShaderResourceBindings ,
  GraphicsPipeline , SwapChain , ComputePipeline , CommandBuffer
}
 Specifies type of the resource. More...
 
- Protected Member Functions inherited from QRhiRenderPassDescriptor
 QRhiRenderPassDescriptor (QRhiImplementation *rhi)
 
- Protected Member Functions inherited from QRhiResource
 QRhiResource (QRhiImplementation *rhi)
 
- Protected Attributes inherited from QRhiResource
QRhiImplementationm_rhi = nullptr
 
quint64 m_id
 
QByteArray m_objectName
 

Detailed Description

Definition at line 148 of file qrhivulkan_p.h.

Constructor & Destructor Documentation

◆ QVkRenderPassDescriptor()

QVkRenderPassDescriptor::QVkRenderPassDescriptor ( QRhiImplementation * rhi)

Definition at line 6819 of file qrhivulkan.cpp.

References serializedFormatData.

Referenced by newCompatibleRenderPassDescriptor().

+ Here is the caller graph for this function:

◆ ~QVkRenderPassDescriptor()

QVkRenderPassDescriptor::~QVkRenderPassDescriptor ( )

Definition at line 6825 of file qrhivulkan.cpp.

References destroy().

+ Here is the call graph for this function:

Member Function Documentation

◆ destroy()

void QVkRenderPassDescriptor::destroy ( )
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.

Note
Resources referenced by commands for the current frame should not be released until the frame is submitted by QRhi::endFrame().

The QRhiResource destructor also performs the same task, so calling this function is not necessary before deleting a QRhiResource.

See also
deleteLater()

Implements QRhiResource.

Definition at line 6830 of file qrhivulkan.cpp.

References lastActiveFrameSlot, QRhiVulkan::DeferredReleaseEntry::lastActiveFrameSlot, ownsRp, QRHI_RES_RHI, QRhiVulkan::DeferredReleaseEntry::RenderPass, QRhiVulkan::DeferredReleaseEntry::renderPass, rp, and QRhiVulkan::DeferredReleaseEntry::type.

Referenced by ~QVkRenderPassDescriptor().

+ Here is the caller graph for this function:

◆ isCompatible()

bool QVkRenderPassDescriptor::isCompatible ( const QRhiRenderPassDescriptor * other) const
overridevirtual
Returns
true if the other QRhiRenderPassDescriptor is compatible with this one, meaning this and other can be used interchangebly in QRhiGraphicsPipeline::setRenderPassDescriptor().

The concept of the compatibility of renderpass descriptors is similar to the \l{QRhiShaderResourceBindings::isLayoutCompatible}{layout compatibility} of QRhiShaderResourceBindings instances. They allow better reuse of QRhiGraphicsPipeline instances: for example, a QRhiGraphicsPipeline instance cache is expected to use these functions to look for a matching pipeline, instead of just comparing pointers, thus allowing a different QRhiRenderPassDescriptor and QRhiShaderResourceBindings to be used in combination with the pipeline, as long as they are compatible.

The exact details of compatibility depend on the underlying graphics API. Two renderpass descriptors \l{QRhiTextureRenderTarget::newCompatibleRenderPassDescriptor()}{created} from the same QRhiTextureRenderTarget are always compatible.

Similarly to QRhiShaderResourceBindings, compatibility can also be tested without having two existing objects available. Extracting the opaque blob by calling serializedFormat() allows testing for compatibility by comparing the returned vector to another QRhiRenderPassDescriptor's serializedFormat(). This has benefits in certain situations, because it allows testing the compatibility of a QRhiRenderPassDescriptor with a QRhiGraphicsPipeline even when the QRhiRenderPassDescriptor the pipeline was originally built was is no longer available (but the data returned from its serializedFormat() still is).

See also
newCompatibleRenderPassDescriptor(), serializedFormat()

Implements QRhiRenderPassDescriptor.

Definition at line 6867 of file qrhivulkan.cpp.

References attachmentDescriptionEquals(), attDescs, colorRefs, dsRef, dsResolveRef, hasDepthStencil, hasDepthStencilResolve, i, multiViewCount, o, other(), QRHI_RES, resolveRefs, and QVLABaseBase::size().

+ Here is the call graph for this function:

◆ nativeHandles()

const QRhiNativeHandles * QVkRenderPassDescriptor::nativeHandles ( )
overridevirtual
Returns
a pointer to a backend-specific QRhiNativeHandles subclass, such as QRhiVulkanRenderPassNativeHandles. The returned value is \nullptr when exposing the underlying native resources is not supported by the backend.
See also
QRhiVulkanRenderPassNativeHandles

Reimplemented from QRhiRenderPassDescriptor.

Definition at line 7020 of file qrhivulkan.cpp.

References nativeHandlesStruct, and rp.

◆ newCompatibleRenderPassDescriptor()

QRhiRenderPassDescriptor * QVkRenderPassDescriptor::newCompatibleRenderPassDescriptor ( ) const
overridevirtual
Returns
a new QRhiRenderPassDescriptor that is \l{isCompatible()}{compatible} with this one.

This function allows cloning a QRhiRenderPassDescriptor. The returned object is ready to be used, and the ownership is transferred to the caller. Cloning a QRhiRenderPassDescriptor object can become useful in situations where the object is stored in data structures related to graphics pipelines (in order to allow creating new pipelines which in turn requires a renderpass descriptor object), and the lifetime of the renderpass descriptor created from a render target may be shorter than the pipelines. (for example, because the engine manages and destroys renderpasses together with the textures and render targets it was created from) In such a situation, it can be beneficial to store a cloned version in the data structures, and thus transferring ownership as well.

See also
isCompatible()

Implements QRhiRenderPassDescriptor.

Definition at line 6977 of file qrhivulkan.cpp.

References QVkRenderPassDescriptor(), attDescs, colorRefs, dsRef, dsResolveRef, fillRenderPassCreateInfo(), hasDepthStencil, hasDepthStencilResolve, QRhiResource::m_rhi, multiViewCount, QRHI_RES_RHI, qWarning, resolveRefs, and subpassDeps.

+ Here is the call graph for this function:

◆ serializedFormat()

QVector< quint32 > QVkRenderPassDescriptor::serializedFormat ( ) const
overridevirtual
Returns
a vector of integers containing an opaque blob describing the data relevant for \l{isCompatible()}{compatibility}.

Given two QRhiRenderPassDescriptor objects rp1 and rp2, if the data returned from this function is identical, then {rp1->isCompatible(rp2)}, and vice versa hold true as well.

Note
The returned data is meant to be used for storing in memory and comparisons during the lifetime of the QRhi the object belongs to. It is not meant for storing on disk, reusing between processes, or using with multiple QRhi instances with potentially different backends.
See also
isCompatible()

Implements QRhiRenderPassDescriptor.

Definition at line 7015 of file qrhivulkan.cpp.

References serializedFormatData.

◆ updateSerializedFormat()

void QVkRenderPassDescriptor::updateSerializedFormat ( )

Definition at line 6927 of file qrhivulkan.cpp.

References attDescs, colorRefs, dsRef, dsResolveRef, hasDepthStencil, hasDepthStencilResolve, i, multiViewCount, resolveRefs, serializedFormatData, and QVLABaseBase::size().

Referenced by QVkTextureRenderTarget::newCompatibleRenderPassDescriptor(), and QVkSwapChain::newCompatibleRenderPassDescriptor().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ attDescs

QVarLengthArray<VkAttachmentDescription, 8> QVkRenderPassDescriptor::attDescs

◆ colorRefs

QVarLengthArray<VkAttachmentReference, 8> QVkRenderPassDescriptor::colorRefs

◆ dsRef

VkAttachmentReference QVkRenderPassDescriptor::dsRef

◆ dsResolveRef

VkAttachmentReference QVkRenderPassDescriptor::dsResolveRef

◆ hasDepthStencil

bool QVkRenderPassDescriptor::hasDepthStencil = false

◆ hasDepthStencilResolve

bool QVkRenderPassDescriptor::hasDepthStencilResolve = false

◆ lastActiveFrameSlot

int QVkRenderPassDescriptor::lastActiveFrameSlot = -1

Definition at line 173 of file qrhivulkan_p.h.

Referenced by destroy().

◆ multiViewCount

uint32_t QVkRenderPassDescriptor::multiViewCount = 0

◆ nativeHandlesStruct

QRhiVulkanRenderPassNativeHandles QVkRenderPassDescriptor::nativeHandlesStruct

Definition at line 172 of file qrhivulkan_p.h.

Referenced by nativeHandles().

◆ ownsRp

bool QVkRenderPassDescriptor::ownsRp = false

◆ resolveRefs

QVarLengthArray<VkAttachmentReference, 8> QVkRenderPassDescriptor::resolveRefs

◆ rp

VkRenderPass QVkRenderPassDescriptor::rp = VK_NULL_HANDLE

◆ serializedFormatData

QVector<quint32> QVkRenderPassDescriptor::serializedFormatData

◆ subpassDeps

QVarLengthArray<VkSubpassDependency, 2> QVkRenderPassDescriptor::subpassDeps

Definition at line 165 of file qrhivulkan_p.h.

Referenced by newCompatibleRenderPassDescriptor().


The documentation for this struct was generated from the following files: