Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qrhivulkan_p.h
Go to the documentation of this file.
1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QRHIVULKAN_P_H
5#define QRHIVULKAN_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "qrhi_p.h"
19
20#ifdef Q_OS_WIN
21#include "qdxgihdrinfo_p.h"
22#endif
23
25
26class QVulkanFunctions;
27class QVulkanDeviceFunctions;
28
29static const int QVK_FRAMES_IN_FLIGHT = 2;
30
31static const int QVK_DESC_SETS_PER_POOL = 128;
32static const int QVK_UNIFORM_BUFFERS_PER_POOL = 256;
34static const int QVK_STORAGE_BUFFERS_PER_POOL = 128;
35static const int QVK_STORAGE_IMAGES_PER_POOL = 128;
36
37static const int QVK_MAX_ACTIVE_TIMESTAMP_PAIRS = 16;
38
39// no vk_mem_alloc.h available here, void* is good enough
40typedef void * QVkAlloc;
41typedef void * QVkAllocator;
42
71
73
74struct QVkTexture;
75
77{
78 QVkRenderBuffer(QRhiImplementation *rhi, Type type, const QSize &pixelSize,
79 int sampleCount, Flags flags,
80 QRhiTexture::Format backingFormatHint);
82 void destroy() override;
83 bool create() override;
84 QRhiTexture::Format backingFormat() const override;
85
94 friend class QRhiVulkan;
95};
96
97struct QVkTexture : public QRhiTexture
98{
99 QVkTexture(QRhiImplementation *rhi, Format format, const QSize &pixelSize, int depth,
100 int arraySize, int sampleCount, Flags flags);
101 ~QVkTexture();
102 void destroy() override;
103 bool create() override;
104 bool createFrom(NativeTexture src) override;
105 NativeTexture nativeTexture() override;
106 void setNativeLayout(int layout) override;
107
108 bool prepareCreate(QSize *adjustedSize = nullptr);
109 bool finishCreate();
111
118 bool owns = true;
119 struct UsageState {
120 // no tracking of subresource layouts (some operations can keep
121 // subresources in different layouts for some time, but that does not
122 // need to be kept track of)
126 };
135 friend class QRhiVulkan;
136};
137
138struct QVkSampler : public QRhiSampler
139{
140 QVkSampler(QRhiImplementation *rhi, Filter magFilter, Filter minFilter, Filter mipmapMode,
141 AddressMode u, AddressMode v, AddressMode w);
142 ~QVkSampler();
143 void destroy() override;
144 bool create() override;
145
149 friend class QRhiVulkan;
150};
151
153{
154 QVkShadingRateMap(QRhiImplementation *rhi);
156 void destroy() override;
157 bool createFrom(QRhiTexture *src) override;
158
159 QVkTexture *texture = nullptr; // not owned
160 friend class QRhiVulkan;
161};
162
192
209
211{
212 QVkSwapChainRenderTarget(QRhiImplementation *rhi, QRhiSwapChain *swapchain);
214 void destroy() override;
215
216 QSize pixelSize() const override;
217 float devicePixelRatio() const override;
218 int sampleCount() const override;
219
221};
222
245
247{
248 QVkShaderResourceBindings(QRhiImplementation *rhi);
250 void destroy() override;
251 bool create() override;
252 void updateResources(UpdateFlags flags) override;
253
255 bool hasSlottedResource = false;
256 bool hasDynamicOffset = false;
257 int poolIndex = -1;
259 VkDescriptorSet descSets[QVK_FRAMES_IN_FLIGHT]; // multiple sets to support dynamic buffers
262
263 // Keep track of the generation number of each referenced QRhi* to be able
264 // to detect that the underlying descriptor set became out of date and they
265 // need to be written again with the up-to-date VkBuffer etc. objects.
271 int count;
272 struct {
277 } d[QRhiShaderResourceBinding::Data::MAX_TEX_SAMPLER_ARRAY_SIZE];
278 };
296
297 friend class QRhiVulkan;
298};
299
301
315
329
331{
332 QVkCommandBuffer(QRhiImplementation *rhi);
334 void destroy() override;
335
337
340
346
347 void resetState() {
349 passUsesSecondaryCb = false;
350 lastGpuTime = 0;
351 currentTarget = nullptr;
352 activeSecondaryCbStack.clear();
355 }
356
358 currentGraphicsPipeline = nullptr;
359 currentComputePipeline = nullptr;
360 currentPipelineGeneration = 0;
361 currentGraphicsSrb = nullptr;
362 currentComputeSrb = nullptr;
363 currentSrbGeneration = 0;
365 currentIndexBuffer = VK_NULL_HANDLE;
366 currentIndexOffset = 0;
367 currentIndexFormat = VK_INDEX_TYPE_UINT16;
368 memset(currentVertexBuffers, 0, sizeof(currentVertexBuffers));
369 memset(currentVertexOffsets, 0, sizeof(currentVertexOffsets));
370 inExternal = false;
371 hasShadingRateSet = false;
372 }
373
376 double lastGpuTime = 0;
388 static const int VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32;
394
395 struct {
397 void reset() {
398 writtenResources.clear();
399 }
400 } computePassState;
401
402 struct Command {
432
433 union Args {
434 struct {
438 } copyBuffer;
439 struct {
440 VkBuffer src;
443 int count;
445 } copyBufferToImage;
446 struct {
449 VkImage dst;
450 VkImageLayout dstLayout;
452 } copyImage;
453 struct {
454 VkImage src;
455 VkImageLayout srcLayout;
456 VkBuffer dst;
458 } copyImageToBuffer;
459 struct {
462 int count;
463 int index;
464 } imageBarrier;
465 struct {
466 VkPipelineStageFlags srcStageMask;
467 VkPipelineStageFlags dstStageMask;
468 int count;
469 int index;
470 } bufferBarrier;
471 struct {
472 VkImage src;
473 VkImageLayout srcLayout;
474 VkImage dst;
475 VkImageLayout dstLayout;
478 } blitImage;
479 struct {
483 } beginRenderPass;
484 struct {
485 } endRenderPass;
486 struct {
489 } bindPipeline;
490 struct {
491 VkPipelineBindPoint bindPoint;
496 } bindDescriptorSet;
497 struct {
499 int count;
502 } bindVertexBuffer;
503 struct {
507 } bindIndexBuffer;
508 struct {
510 } setViewport;
511 struct {
513 } setScissor;
514 struct {
515 float c[4];
516 } setBlendConstants;
517 struct {
519 } setStencilRef;
520 struct {
525 } draw;
526 struct {
528 uint32_t instanceCount;
531 uint32_t firstInstance;
532 } drawIndexed;
533 struct {
534#ifdef VK_EXT_debug_utils
535 VkDebugUtilsLabelEXT label;
536 int labelNameIndex;
537#endif
538 } debugMarkerBegin;
539 struct {
540 } debugMarkerEnd;
541 struct {
542#ifdef VK_EXT_debug_utils
543 VkDebugUtilsLabelEXT label;
544 int labelNameIndex;
545#endif
546 } debugMarkerInsert;
547 struct {
549 } transitionResources;
550 struct {
551 int x, y, z;
552 } dispatch;
553 struct {
555 } executeSecondary;
556 struct {
559 } setShadingRate;
560 } args;
561 };
562
566
568 commands.reset();
570
571 passResTrackers.clear();
573 }
574
575 void resetPools() {
576 pools.clearValue.clear();
577 pools.bufferImageCopy.clear();
578 pools.dynamicOffset.clear();
579 pools.vertexBuffer.clear();
580 pools.vertexBufferOffset.clear();
581 pools.debugMarkerData.clear();
582 pools.imageBarrier.clear();
583 pools.bufferBarrier.clear();
584 }
585
586 struct {
595 } pools;
596
597 friend class QRhiVulkan;
598};
599
601{
602 QVkSwapChain(QRhiImplementation *rhi);
603 ~QVkSwapChain();
604 void destroy() override;
605
606 QRhiCommandBuffer *currentFrameCommandBuffer() override;
608 QRhiRenderTarget *currentFrameRenderTarget(StereoTargetBuffer targetBuffer) override;
609
610 QSize surfacePixelSize() override;
611 bool isFormatSupported(Format f) override;
613
616
617 bool ensureSurface();
618
620
621 QWindow *window = nullptr;
623 bool supportsReadback = false;
624 bool stereo = false;
626 int bufferCount = 0;
631 QVkRenderBuffer *ds = nullptr;
639
654
665
666 quint32 currentImageIndex = 0; // index in imageRes
667 quint32 currentFrameSlot = 0; // index in frameRes
668 int frameCount = 0;
669
670 friend class QRhiVulkan;
671};
672
674{
675public:
676 QRhiDriverInfo info() const override;
677
680};
681
683{
684public:
685 QRhiVulkan(QRhiVulkanInitParams *params, QRhiVulkanNativeHandles *importParams = nullptr);
686
687 bool create(QRhi::Flags flags) override;
688 void destroy() override;
689 QRhi::AdapterList enumerateAdaptersBeforeCreate(QRhiNativeHandles *nativeHandles) const override;
690
694 QRhiBuffer *createBuffer(QRhiBuffer::Type type,
695 QRhiBuffer::UsageFlags usage,
696 quint32 size) override;
697 QRhiRenderBuffer *createRenderBuffer(QRhiRenderBuffer::Type type,
698 const QSize &pixelSize,
699 int sampleCount,
700 QRhiRenderBuffer::Flags flags,
701 QRhiTexture::Format backingFormatHint) override;
702 QRhiTexture *createTexture(QRhiTexture::Format format,
703 const QSize &pixelSize,
704 int depth,
705 int arraySize,
706 int sampleCount,
707 QRhiTexture::Flags flags) override;
708 QRhiSampler *createSampler(QRhiSampler::Filter magFilter,
709 QRhiSampler::Filter minFilter,
710 QRhiSampler::Filter mipmapMode,
711 QRhiSampler:: AddressMode u,
712 QRhiSampler::AddressMode v,
713 QRhiSampler::AddressMode w) override;
714
715 QRhiTextureRenderTarget *createTextureRenderTarget(const QRhiTextureRenderTargetDescription &desc,
716 QRhiTextureRenderTarget::Flags flags) override;
717
718 QRhiShadingRateMap *createShadingRateMap() override;
719
720 QRhiSwapChain *createSwapChain() override;
721 QRhi::FrameOpResult beginFrame(QRhiSwapChain *swapChain, QRhi::BeginFrameFlags flags) override;
722 QRhi::FrameOpResult endFrame(QRhiSwapChain *swapChain, QRhi::EndFrameFlags flags) override;
723 QRhi::FrameOpResult beginOffscreenFrame(QRhiCommandBuffer **cb, QRhi::BeginFrameFlags flags) override;
724 QRhi::FrameOpResult endOffscreenFrame(QRhi::EndFrameFlags flags) override;
725 QRhi::FrameOpResult finish() override;
726
727 void resourceUpdate(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override;
728
729 void beginPass(QRhiCommandBuffer *cb,
730 QRhiRenderTarget *rt,
731 const QColor &colorClearValue,
732 const QRhiDepthStencilClearValue &depthStencilClearValue,
733 QRhiResourceUpdateBatch *resourceUpdates,
734 QRhiCommandBuffer::BeginPassFlags flags) override;
735 void endPass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override;
736
737 void setGraphicsPipeline(QRhiCommandBuffer *cb,
738 QRhiGraphicsPipeline *ps) override;
739
740 void setShaderResources(QRhiCommandBuffer *cb,
741 QRhiShaderResourceBindings *srb,
742 int dynamicOffsetCount,
743 const QRhiCommandBuffer::DynamicOffset *dynamicOffsets) override;
744
745 void setVertexInput(QRhiCommandBuffer *cb,
746 int startBinding, int bindingCount, const QRhiCommandBuffer::VertexInput *bindings,
747 QRhiBuffer *indexBuf, quint32 indexOffset,
748 QRhiCommandBuffer::IndexFormat indexFormat) override;
749
750 void setViewport(QRhiCommandBuffer *cb, const QRhiViewport &viewport) override;
751 void setScissor(QRhiCommandBuffer *cb, const QRhiScissor &scissor) override;
752 void setBlendConstants(QRhiCommandBuffer *cb, const QColor &c) override;
753 void setStencilRef(QRhiCommandBuffer *cb, quint32 refValue) override;
754 void setShadingRate(QRhiCommandBuffer *cb, const QSize &coarsePixelSize) override;
755
756 void draw(QRhiCommandBuffer *cb, quint32 vertexCount,
757 quint32 instanceCount, quint32 firstVertex, quint32 firstInstance) override;
758
759 void drawIndexed(QRhiCommandBuffer *cb, quint32 indexCount,
760 quint32 instanceCount, quint32 firstIndex,
761 qint32 vertexOffset, quint32 firstInstance) override;
762
763 void debugMarkBegin(QRhiCommandBuffer *cb, const QByteArray &name) override;
764 void debugMarkEnd(QRhiCommandBuffer *cb) override;
765 void debugMarkMsg(QRhiCommandBuffer *cb, const QByteArray &msg) override;
766
767 void beginComputePass(QRhiCommandBuffer *cb,
768 QRhiResourceUpdateBatch *resourceUpdates,
769 QRhiCommandBuffer::BeginPassFlags flags) override;
770 void endComputePass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override;
771 void setComputePipeline(QRhiCommandBuffer *cb, QRhiComputePipeline *ps) override;
772 void dispatch(QRhiCommandBuffer *cb, int x, int y, int z) override;
773
774 const QRhiNativeHandles *nativeHandles(QRhiCommandBuffer *cb) override;
775 void beginExternal(QRhiCommandBuffer *cb) override;
776 void endExternal(QRhiCommandBuffer *cb) override;
777 double lastCompletedGpuTime(QRhiCommandBuffer *cb) override;
778
779 QList<int> supportedSampleCounts() const override;
780 QList<QSize> supportedShadingRates(int sampleCount) const override;
781 int ubufAlignment() const override;
782 bool isYUpInFramebuffer() const override;
783 bool isYUpInNDC() const override;
784 bool isClipDepthZeroToOne() const override;
785 QMatrix4x4 clipSpaceCorrMatrix() const override;
786 bool isTextureFormatSupported(QRhiTexture::Format format, QRhiTexture::Flags flags) const override;
787 bool isFeatureSupported(QRhi::Feature feature) const override;
788 int resourceLimit(QRhi::ResourceLimit limit) const override;
789 const QRhiNativeHandles *nativeHandles() override;
790 QRhiDriverInfo driverInfo() const override;
791 QRhiStats statistics() override;
793 void setQueueSubmitParams(QRhiNativeHandles *params) override;
795 bool isDeviceLost() const override;
796
797 QByteArray pipelineCacheData() override;
798 void setPipelineCacheData(const QByteArray &data) override;
799
800 VkResult createDescriptorPool(VkDescriptorPool *pool);
801 bool allocateDescriptorSet(VkDescriptorSetAllocateInfo *allocInfo, VkDescriptorSet *result, int *resultPoolIndex);
802 uint32_t chooseTransientImageMemType(VkImage img, uint32_t startIndex);
803 bool createTransientImage(VkFormat format, const QSize &pixelSize, VkImageUsageFlags usage,
804 VkImageAspectFlags aspectMask, VkSampleCountFlagBits samples,
805 VkDeviceMemory *mem, VkImage *images, VkImageView *views, int count);
806
807 bool recreateSwapChain(QRhiSwapChain *swapChain);
808 void releaseSwapChainResources(QRhiSwapChain *swapChain);
809
813 bool hasDepthStencil,
814 VkSampleCountFlagBits samples,
815 VkFormat colorFormat,
816 QRhiShadingRateMap *shadingRateMap);
818 const QRhiColorAttachment *colorAttachmentsBegin,
819 const QRhiColorAttachment *colorAttachmentsEnd,
820 bool preserveColor,
821 bool preserveDs,
822 bool storeDs,
823 QRhiRenderBuffer *depthStencilBuffer,
824 QRhiTexture *depthTexture,
825 QRhiTexture *depthResolveTexture,
826 QRhiShadingRateMap *shadingRateMap);
827 bool ensurePipelineCache(const void *initialData = nullptr, size_t initialDataSize = 0);
828 VkShaderModule createShader(const QByteArray &spirv);
829
830 void prepareNewFrame(QRhiCommandBuffer *cb);
832 void endAndEnqueueSecondaryCommandBuffer(VkCommandBuffer cb, QVkCommandBuffer *cbD);
833 QRhi::FrameOpResult startPrimaryCommandBuffer(VkCommandBuffer *cb);
834 QRhi::FrameOpResult endAndSubmitPrimaryCommandBuffer(VkCommandBuffer cb, VkFence cmdFence,
835 VkSemaphore *waitSem, VkSemaphore *signalSem);
836 void waitCommandCompletion(int frameSlot);
837 VkDeviceSize subresUploadByteSize(const QRhiTextureSubresourceUploadDescription &subresDesc) const;
839 void prepareUploadSubres(QVkTexture *texD, int layer, int level,
840 const QRhiTextureSubresourceUploadDescription &subresDesc,
841 size_t *curOfs, void *mp,
842 BufferImageCopyList *copyInfos);
843 void enqueueResourceUpdates(QVkCommandBuffer *cbD, QRhiResourceUpdateBatch *resourceUpdates);
844 void executeBufferHostWritesForSlot(QVkBuffer *bufD, int slot);
848 QVkBuffer *bufD,
849 int slot,
853 QVkTexture *texD,
858 void executeDeferredReleases(bool forced = false);
859 void finishActiveReadbacks(bool forced = false);
860
861 void setObjectName(uint64_t object, VkObjectType type, const QByteArray &name, int slot = -1);
862 void trackedBufferBarrier(QVkCommandBuffer *cbD, QVkBuffer *bufD, int slot,
863 VkAccessFlags access, VkPipelineStageFlags stage);
865 VkImageLayout layout, VkAccessFlags access, VkPipelineStageFlags stage);
867 void subresourceBarrier(QVkCommandBuffer *cbD, VkImage image,
868 VkImageLayout oldLayout, VkImageLayout newLayout,
869 VkAccessFlags srcAccess, VkAccessFlags dstAccess,
870 VkPipelineStageFlags srcStage, VkPipelineStageFlags dstStage,
871 int startLayer, int layerCount,
872 int startLevel, int levelCount);
873 void updateShaderResourceBindings(QRhiShaderResourceBindings *srb, int descSetIdx = -1);
875 double elapsedSecondsFromTimestamp(quint64 timestamp[2], bool *ok);
876 void printExtraErrorInfo(VkResult err);
877
879 QWindow *maybeWindow = nullptr;
881 bool importedDevice = false;
889 bool importedAllocator = false;
891 QVulkanFunctions *f = nullptr;
892 QVulkanDeviceFunctions *df = nullptr;
895#ifdef VK_VERSION_1_1
897#endif
898#ifdef VK_VERSION_1_2
901#endif
902#ifdef VK_VERSION_1_3
904#endif
908 bool deviceLost = false;
910
911#ifdef Q_OS_WIN
912 bool adapterLuidValid = false;
914 QDxgiHdrInfo *dxgiHdrInfo = nullptr;
915#endif
916
917#ifdef VK_EXT_debug_utils
922#endif
923
932
933#ifdef VK_KHR_create_renderpass2
935#endif
936
937 struct {
938 bool compute = false;
939 bool wideLines = false;
940 bool debugUtils = false;
942 bool texture3DSliceAs2D = false;
943 bool tessellation = false;
944 bool geometryShader = false;
945 bool nonFillPolygonMode = false;
946 bool multiView = false;
947 bool renderPass2KHR = false;
949 bool perDrawShadingRate = false;
953 } caps;
954
967
970
973
978
980 OffscreenFrame(QRhiImplementation *rhi)
981 {
982 for (int i = 0; i < QVK_FRAMES_IN_FLIGHT; ++i)
983 cbWrapper[i] = new QVkCommandBuffer(rhi);
984 }
986 {
987 for (int i = 0; i < QVK_FRAMES_IN_FLIGHT; ++i)
988 delete cbWrapper[i];
989 }
990 bool active = false;
994 } ofr;
995
1015
1030 int lastActiveFrameSlot; // -1 if not used otherwise 0..FRAMES_IN_FLIGHT-1
1031 union {
1032 struct {
1035 } pipelineState;
1036 struct {
1039 } shaderResourceBindings;
1040 struct {
1045 } buffer;
1046 struct {
1050 } renderBuffer;
1051 struct {
1052 VkImage image;
1053 VkImageView imageView;
1055 VkBuffer stagingBuffers[QVK_FRAMES_IN_FLIGHT];
1056 QVkAlloc stagingAllocations[QVK_FRAMES_IN_FLIGHT];
1057 VkImageView extraImageViews[QRhi::MAX_MIP_LEVELS];
1058 } texture;
1059 struct {
1061 } sampler;
1062 struct {
1069 } textureRenderTarget;
1070 struct {
1072 } renderPass;
1073 struct {
1076 } stagingBuffer;
1077 struct {
1079 } secondaryCommandBuffer;
1080 };
1081 };
1083
1084#ifdef VK_KHR_fragment_shading_rate
1087#endif
1088
1093};
1094
1099
1100QT_END_NAMESPACE
1101
1102#endif
const char * constData() const
Definition qrhi_p.h:362
bool isEmpty() const
Definition qrhi.cpp:11668
void registerBuffer(QRhiBuffer *buf, int slot, BufferAccess *access, BufferStage *stage, const UsageState &state)
Definition qrhi.cpp:11685
void registerTexture(QRhiTexture *tex, TextureAccess *access, TextureStage *stage, const UsageState &state)
Definition qrhi.cpp:11724
static QRhiResourceUpdateBatchPrivate * get(QRhiResourceUpdateBatch *b)
Definition qrhi_p.h:587
QVarLengthArray< DescriptorPoolData, 8 > descriptorPools
void recordTransitionPassResources(QVkCommandBuffer *cbD, const QRhiPassResourceTracker &tracker)
QVulkanFunctions * f
quint32 gfxQueueFamilyIdx
VkCommandBuffer startSecondaryCommandBuffer(QVkRenderTargetData *rtD=nullptr)
QRhiSwapChain * createSwapChain() override
PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR
void debugMarkMsg(QRhiCommandBuffer *cb, const QByteArray &msg) override
int resourceLimit(QRhi::ResourceLimit limit) const override
bool isDeviceLost() const override
void prepareUploadSubres(QVkTexture *texD, int layer, int level, const QRhiTextureSubresourceUploadDescription &subresDesc, size_t *curOfs, void *mp, BufferImageCopyList *copyInfos)
VkPhysicalDeviceProperties physDevProperties
void executeDeferredReleases(bool forced=false)
uint32_t chooseTransientImageMemType(VkImage img, uint32_t startIndex)
QRhi::FrameOpResult finish() override
quint32 timestampValidBits
QRhiTextureRenderTarget * createTextureRenderTarget(const QRhiTextureRenderTargetDescription &desc, QRhiTextureRenderTarget::Flags flags) override
bool createTransientImage(VkFormat format, const QSize &pixelSize, VkImageUsageFlags usage, VkImageAspectFlags aspectMask, VkSampleCountFlagBits samples, VkDeviceMemory *mem, VkImage *images, VkImageView *views, int count)
void setScissor(QRhiCommandBuffer *cb, const QRhiScissor &scissor) override
void releaseCachedResources() override
QVkSwapChain * currentSwapChain
bool geometryShader
bool importedDevice
QByteArrayList requestedDeviceExtensions
QRhiVulkan(QRhiVulkanInitParams *params, QRhiVulkanNativeHandles *importParams=nullptr)
void draw(QRhiCommandBuffer *cb, quint32 vertexCount, quint32 instanceCount, quint32 firstVertex, quint32 firstInstance) override
void setStencilRef(QRhiCommandBuffer *cb, quint32 refValue) override
void endComputePass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override
QList< int > supportedSampleCounts() const override
void destroy() override
QRhiRenderBuffer * createRenderBuffer(QRhiRenderBuffer::Type type, const QSize &pixelSize, int sampleCount, QRhiRenderBuffer::Flags flags, QRhiTexture::Format backingFormatHint) override
QRhi::FrameOpResult endOffscreenFrame(QRhi::EndFrameFlags flags) override
QBitArray timestampQueryPoolMap
double elapsedSecondsFromTimestamp(quint64 timestamp[2], bool *ok)
VkFormat optimalDsFormat
QRhi::FrameOpResult beginOffscreenFrame(QRhiCommandBuffer **cb, QRhi::BeginFrameFlags flags) override
bool imageBasedShadingRate
bool createOffscreenRenderPass(QVkRenderPassDescriptor *rpD, const QRhiColorAttachment *colorAttachmentsBegin, const QRhiColorAttachment *colorAttachmentsEnd, bool preserveColor, bool preserveDs, bool storeDs, QRhiRenderBuffer *depthStencilBuffer, QRhiTexture *depthTexture, QRhiTexture *depthResolveTexture, QRhiShadingRateMap *shadingRateMap)
QVarLengthArray< VkSemaphore, 4 > waitSemaphoresForPresent
void trackedBufferBarrier(QVkCommandBuffer *cbD, QVkBuffer *bufD, int slot, VkAccessFlags access, VkPipelineStageFlags stage)
void endExternal(QRhiCommandBuffer *cb) override
QWindow * maybeWindow
void dispatch(QRhiCommandBuffer *cb, int x, int y, int z) override
VkPhysicalDeviceFeatures physDevFeatures
bool perDrawShadingRate
QRhiVulkanNativeHandles nativeHandlesStruct
bool allocateDescriptorSet(VkDescriptorSetAllocateInfo *allocInfo, VkDescriptorSet *result, int *resultPoolIndex)
void updateShaderResourceBindings(QRhiShaderResourceBindings *srb, int descSetIdx=-1)
bool isTextureFormatSupported(QRhiTexture::Format format, QRhiTexture::Flags flags) const override
VkDevice dev
QVersionNumber apiVersion
VkResult createDescriptorPool(VkDescriptorPool *pool)
void prepareNewFrame(QRhiCommandBuffer *cb)
void subresourceBarrier(QVkCommandBuffer *cbD, VkImage image, VkImageLayout oldLayout, VkImageLayout newLayout, VkAccessFlags srcAccess, VkAccessFlags dstAccess, VkPipelineStageFlags srcStage, VkPipelineStageFlags dstStage, int startLayer, int layerCount, int startLevel, int levelCount)
QList< QSize > supportedShadingRates(int sampleCount) const override
void printExtraErrorInfo(VkResult err)
void setComputePipeline(QRhiCommandBuffer *cb, QRhiComputePipeline *ps) override
QRhi::FrameOpResult beginFrame(QRhiSwapChain *swapChain, QRhi::BeginFrameFlags flags) override
QRhi::FrameOpResult startPrimaryCommandBuffer(VkCommandBuffer *cb)
bool renderPass2KHR
double lastCompletedGpuTime(QRhiCommandBuffer *cb) override
bool depthStencilResolveKHR
void trackedRegisterTexture(QRhiPassResourceTracker *passResTracker, QVkTexture *texD, QRhiPassResourceTracker::TextureAccess access, QRhiPassResourceTracker::TextureStage stage)
bool releaseCachedResourcesCalledBeforeFrameStart
QRhi::Flags rhiFlags
PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR
QRhiGraphicsPipeline * createGraphicsPipeline() override
QRhiComputePipeline * createComputePipeline() override
bool nonFillPolygonMode
QRhiTexture * createTexture(QRhiTexture::Format format, const QSize &pixelSize, int depth, int arraySize, int sampleCount, QRhiTexture::Flags flags) override
void waitCommandCompletion(int frameSlot)
void debugMarkBegin(QRhiCommandBuffer *cb, const QByteArray &name) override
const QRhiNativeHandles * nativeHandles(QRhiCommandBuffer *cb) override
PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR
bool recreateSwapChain(QRhiSwapChain *swapChain)
PFN_vkQueuePresentKHR vkQueuePresentKHR
bool ensurePipelineCache(const void *initialData=nullptr, size_t initialDataSize=0)
QRhiDriverInfo driverInfoStruct
void resourceUpdate(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override
QVarLengthArray< TextureReadback, 2 > activeTextureReadbacks
bool texture3DSliceAs2D
void depthStencilExplicitBarrier(QVkCommandBuffer *cbD, QVkRenderBuffer *rbD)
void trackedImageBarrier(QVkCommandBuffer *cbD, QVkTexture *texD, VkImageLayout layout, VkAccessFlags access, VkPipelineStageFlags stage)
VkCommandPool cmdPool[QVK_FRAMES_IN_FLIGHT]
VkShaderModule createShader(const QByteArray &spirv)
void enqueueTransitionPassResources(QVkCommandBuffer *cbD)
void beginComputePass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates, QRhiCommandBuffer::BeginPassFlags flags) override
bool create(QRhi::Flags flags) override
QVulkanDeviceFunctions * df
void setObjectName(uint64_t object, VkObjectType type, const QByteArray &name, int slot=-1)
bool isFeatureSupported(QRhi::Feature feature) const override
PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR
QVarLengthArray< BufferReadback, 2 > activeBufferReadbacks
void recordPrimaryCommandBuffer(QVkCommandBuffer *cbD)
bool isYUpInFramebuffer() const override
int imageBasedShadingRateTileSize
void setShadingRate(QRhiCommandBuffer *cb, const QSize &coarsePixelSize) override
void debugMarkEnd(QRhiCommandBuffer *cb) override
QVulkanInstance * inst
QRhiSampler * createSampler(QRhiSampler::Filter magFilter, QRhiSampler::Filter minFilter, QRhiSampler::Filter mipmapMode, QRhiSampler::AddressMode u, QRhiSampler::AddressMode v, QRhiSampler::AddressMode w) override
PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR
void releaseSwapChainResources(QRhiSwapChain *swapChain)
QVarLengthArray< VkSemaphore, 4 > signalSemaphoresForQueueSubmit
void drawIndexed(QRhiCommandBuffer *cb, quint32 indexCount, quint32 instanceCount, quint32 firstIndex, qint32 vertexOffset, quint32 firstInstance) override
VkDeviceSize subresUploadByteSize(const QRhiTextureSubresourceUploadDescription &subresDesc) const
void endPass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override
VkQueryPool timestampQueryPool
void trackedRegisterBuffer(QRhiPassResourceTracker *passResTracker, QVkBuffer *bufD, int slot, QRhiPassResourceTracker::BufferAccess access, QRhiPassResourceTracker::BufferStage stage)
VkFormat optimalDepthStencilFormat()
QRhiStats statistics() override
void setGraphicsPipeline(QRhiCommandBuffer *cb, QRhiGraphicsPipeline *ps) override
void activateTextureRenderTarget(QVkCommandBuffer *cbD, QVkTextureRenderTarget *rtD)
PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR
QRhi::AdapterList enumerateAdaptersBeforeCreate(QRhiNativeHandles *nativeHandles) const override
bool vertexAttribDivisor
QMatrix4x4 clipCorrectMatrix
void executeBufferHostWritesForSlot(QVkBuffer *bufD, int slot)
void setQueueSubmitParams(QRhiNativeHandles *params) override
bool isYUpInNDC() const override
const QRhiNativeHandles * nativeHandles() override
QVarLengthArray< VkPipelineStageFlags, 4 > semaphoresWaitMasksForQueueSubmit
QRhiShadingRateMap * createShadingRateMap() override
void setPipelineCacheData(const QByteArray &data) override
void setVertexInput(QRhiCommandBuffer *cb, int startBinding, int bindingCount, const QRhiCommandBuffer::VertexInput *bindings, QRhiBuffer *indexBuf, quint32 indexOffset, QRhiCommandBuffer::IndexFormat indexFormat) override
QRhiShaderResourceBindings * createShaderResourceBindings() override
VkPipelineCache pipelineCache
VkDeviceSize ubufAlign
void finishActiveReadbacks(bool forced=false)
void ensureCommandPoolForNewFrame()
QByteArray pipelineCacheData() override
quint32 gfxQueueIdx
VkDeviceSize texbufAlign
QList< DeferredReleaseEntry > releaseQueue
void endAndEnqueueSecondaryCommandBuffer(VkCommandBuffer cb, QVkCommandBuffer *cbD)
QVarLengthArray< VkSemaphore, 4 > waitSemaphoresForQueueSubmit
void beginPass(QRhiCommandBuffer *cb, QRhiRenderTarget *rt, const QColor &colorClearValue, const QRhiDepthStencilClearValue &depthStencilClearValue, QRhiResourceUpdateBatch *resourceUpdates, QRhiCommandBuffer::BeginPassFlags flags) override
void setBlendConstants(QRhiCommandBuffer *cb, const QColor &c) override
QRhiBuffer * createBuffer(QRhiBuffer::Type type, QRhiBuffer::UsageFlags usage, quint32 size) override
bool isClipDepthZeroToOne() const override
void enqueueResourceUpdates(QVkCommandBuffer *cbD, QRhiResourceUpdateBatch *resourceUpdates)
QVarLengthArray< VkCommandBuffer, 4 > freeSecondaryCbs[QVK_FRAMES_IN_FLIGHT]
void setShaderResources(QRhiCommandBuffer *cb, QRhiShaderResourceBindings *srb, int dynamicOffsetCount, const QRhiCommandBuffer::DynamicOffset *dynamicOffsets) override
QVkAllocator allocator
bool importedAllocator
VkQueue gfxQueue
PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR
QMatrix4x4 clipSpaceCorrMatrix() const override
bool tessellation
QSet< QVkSwapChain * > swapchains
int ubufAlignment() const override
QRhiDriverInfo driverInfo() const override
void beginExternal(QRhiCommandBuffer *cb) override
void setViewport(QRhiCommandBuffer *cb, const QRhiViewport &viewport) override
bool createDefaultRenderPass(QVkRenderPassDescriptor *rpD, bool hasDepthStencil, VkSampleCountFlagBits samples, VkFormat colorFormat, QRhiShadingRateMap *shadingRateMap)
QRhi::FrameOpResult endAndSubmitPrimaryCommandBuffer(VkCommandBuffer cb, VkFence cmdFence, VkSemaphore *waitSem, VkSemaphore *signalSem)
QRhi::FrameOpResult endFrame(QRhiSwapChain *swapChain, QRhi::EndFrameFlags flags) override
VkSampleCountFlagBits effectiveSampleCountBits(int sampleCount)
VkPhysicalDevice physDev
bool makeThreadLocalNativeContextCurrent() override
QRhiDriverInfo adapterInfo
QRhiDriverInfo info() const override
VkPhysicalDevice physDev
Combined button and popup list for selecting options.
@ UnBounded
Definition qrhi_p.h:275
@ Bounded
Definition qrhi_p.h:276
#define QRHI_RES_RHI(t)
Definition qrhi_p.h:29
#define QRHI_RES(t, x)
Definition qrhi_p.h:28
static VkPolygonMode toVkPolygonMode(QRhiGraphicsPipeline::PolygonMode mode)
static VkCullModeFlags toVkCullMode(QRhiGraphicsPipeline::CullMode c)
static bool accessIsWrite(VkAccessFlags access)
static VkCompareOp toVkTextureCompareOp(QRhiSampler::CompareOp op)
static QVulkanInstance * globalVulkanInstance
static VkBufferUsageFlagBits toVkBufferUsage(QRhiBuffer::UsageFlags usage)
static QRhiTexture::Format swapchainReadbackTextureFormat(VkFormat format, QRhiTexture::Flags *flags)
static VkStencilOp toVkStencilOp(QRhiGraphicsPipeline::StencilOp op)
static bool qvk_debug_filter(QVulkanInstance::DebugMessageSeverityFlags severity, QVulkanInstance::DebugMessageTypeFlags type, const void *callbackData)
static QVkBuffer::UsageState toVkBufferUsageState(QRhiPassResourceTracker::UsageState usage)
static bool attachmentDescriptionEquals(const VkAttachmentDescription &a, const VkAttachmentDescription &b)
static bool isSrgbFormat(VkFormat format)
static VkPipelineStageFlags toVkPipelineStage(QRhiPassResourceTracker::TextureStage stage)
static VkAccessFlags toVkAccess(QRhiPassResourceTracker::BufferAccess access)
static VkImageLayout toVkLayout(QRhiPassResourceTracker::TextureAccess access)
static VkFormat toVkAttributeFormat(QRhiVertexInputAttribute::Format format)
static QVkTexture::UsageState toVkTextureUsageState(QRhiPassResourceTracker::UsageState usage)
static VkPipelineStageFlags toVkPipelineStage(QRhiPassResourceTracker::BufferStage stage)
static QRhiDriverInfo::DeviceType toRhiDeviceType(VkPhysicalDeviceType type)
static QRhiPassResourceTracker::UsageState toPassTrackerUsageState(const QVkBuffer::UsageState &bufUsage)
static VkColorComponentFlags toVkColorComponents(QRhiGraphicsPipeline::ColorMask c)
static VkFilter toVkFilter(QRhiSampler::Filter f)
static VkPrimitiveTopology toVkTopology(QRhiGraphicsPipeline::Topology t)
static void qrhivk_releaseTexture(const QRhiVulkan::DeferredReleaseEntry &e, VkDevice dev, QVulkanDeviceFunctions *df, void *allocator)
static void qrhivk_releaseBuffer(const QRhiVulkan::DeferredReleaseEntry &e, void *allocator)
static VkAccessFlags toVkAccess(QRhiPassResourceTracker::TextureAccess access)
static VmaAllocator toVmaAllocator(QVkAllocator a)
static VkSamplerAddressMode toVkAddressMode(QRhiSampler::AddressMode m)
static constexpr bool isDepthTextureFormat(QRhiTexture::Format format)
static void fillVkStencilOpState(VkStencilOpState *dst, const QRhiGraphicsPipeline::StencilOpState &src)
VkSampleCountFlagBits mask
static VkShaderStageFlags toVkShaderStageFlags(QRhiShaderResourceBinding::StageFlags stage)
static constexpr VkImageAspectFlags aspectMaskForTextureFormat(QRhiTexture::Format format)
static VkDescriptorType toVkDescriptorType(const QRhiShaderResourceBinding::Data *b)
static VkBlendFactor toVkBlendFactor(QRhiGraphicsPipeline::BlendFactor f)
static void fillDriverInfo(QRhiDriverInfo *info, const VkPhysicalDeviceProperties &physDevProperties)
static VkBlendOp toVkBlendOp(QRhiGraphicsPipeline::BlendOp op)
static void qrhivk_releaseRenderBuffer(const QRhiVulkan::DeferredReleaseEntry &e, VkDevice dev, QVulkanDeviceFunctions *df)
static VkFrontFace toVkFrontFace(QRhiGraphicsPipeline::FrontFace f)
void qrhivk_accumulateComputeResource(T *writtenResources, QRhiResource *resource, QRhiShaderResourceBinding::Type bindingType, int loadTypeVal, int storeTypeVal, int loadStoreTypeVal)
static VkFormat toVkTextureFormat(QRhiTexture::Format format, QRhiTexture::Flags flags)
static VkCompareOp toVkCompareOp(QRhiGraphicsPipeline::CompareOp op)
static void fillRenderPassCreateInfo(VkRenderPassCreateInfo *rpInfo, VkSubpassDescription *subpassDesc, QVkRenderPassDescriptor *rpD)
static VkSamplerMipmapMode toVkMipmapMode(QRhiSampler::Filter f)
static bool hdrFormatMatchesVkSurfaceFormat(QRhiSwapChain::Format f, const VkSurfaceFormatKHR &s)
static void qrhivk_releaseSampler(const QRhiVulkan::DeferredReleaseEntry &e, VkDevice dev, QVulkanDeviceFunctions *df)
int count
static constexpr bool isStencilTextureFormat(QRhiTexture::Format format)
static QVkRenderTargetData * maybeRenderTargetData(QVkCommandBuffer *cbD)
static QRhiPassResourceTracker::UsageState toPassTrackerUsageState(const QVkTexture::UsageState &texUsage)
static VmaAllocation toVmaAllocation(QVkAlloc a)
static void addToChain(T *head, void *entry)
static VkShaderStageFlagBits toVkShaderStage(QRhiShaderStage::Type type)
static const int QVK_UNIFORM_BUFFERS_PER_POOL
static const int QVK_COMBINED_IMAGE_SAMPLERS_PER_POOL
Q_DECLARE_TYPEINFO(QVkShaderResourceBindings::BoundResourceData, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(QRhiVulkan::TextureReadback, Q_RELOCATABLE_TYPE)
static const int QVK_STORAGE_BUFFERS_PER_POOL
static const int QVK_STORAGE_IMAGES_PER_POOL
void * QVkAllocator
Q_DECLARE_TYPEINFO(QRhiVulkan::DescriptorPoolData, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(QVkBuffer::DynamicUpdate, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(QRhiVulkan::DeferredReleaseEntry, Q_RELOCATABLE_TYPE)
static const int QVK_MAX_ACTIVE_TIMESTAMP_PAIRS
Q_DECLARE_TYPEINFO(QRhiVulkan::BufferReadback, Q_RELOCATABLE_TYPE)
static const int QVK_DESC_SETS_PER_POOL
void * QVkAlloc
static const int QVK_FRAMES_IN_FLIGHT
bool prepare(VkRenderPassCreateInfo *rpInfo, int multiViewCount, bool multiViewCap)
\inmodule QtGuiPrivate \inheaderfile rhi/qrhi.h
Definition qrhi.h:1826
\inmodule QtGuiPrivate \inheaderfile rhi/qrhi.h
Definition qrhi.h:1547
QRhiReadbackResult * result
VkBuffer stagingBuffers[QVK_FRAMES_IN_FLIGHT]
VkImageView rtv[QVkRenderTargetData::MAX_COLOR_ATTACHMENTS]
QVkAlloc allocations[QVK_FRAMES_IN_FLIGHT]
VkImageView extraImageViews[QRhi::MAX_MIP_LEVELS]
QVkAlloc stagingAllocations[QVK_FRAMES_IN_FLIGHT]
VkImageView resrtv[QVkRenderTargetData::MAX_COLOR_ATTACHMENTS]
VkBuffer buffers[QVK_FRAMES_IN_FLIGHT]
DescriptorPoolData(VkDescriptorPool pool_)
QVkCommandBuffer * cbWrapper[QVK_FRAMES_IN_FLIGHT]
OffscreenFrame(QRhiImplementation *rhi)
QRhiTexture::Format format
QRhiReadbackDescription desc
QRhiReadbackResult * result
VkPipelineStageFlags stage
VkAccessFlags access
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
VkBuffer buffers[QVK_FRAMES_IN_FLIGHT]
QVkBuffer(QRhiImplementation *rhi, Type type, UsageFlags usage, quint32 size)
UsageState usageState[QVK_FRAMES_IN_FLIGHT]
uint generation
VkBuffer stagingBuffers[QVK_FRAMES_IN_FLIGHT]
QVkAlloc allocations[QVK_FRAMES_IN_FLIGHT]
QVkAlloc stagingAllocations[QVK_FRAMES_IN_FLIGHT]
void endFullDynamicBufferUpdateForCurrentFrame() override
To be called when the entire contents of the buffer data has been updated in the memory block returne...
QRhiBuffer::NativeBuffer nativeBuffer() override
bool create() override
Creates the corresponding native graphics resources.
QVarLengthArray< DynamicUpdate, 16 > pendingDynamicUpdates[QVK_FRAMES_IN_FLIGHT]
char * beginFullDynamicBufferUpdateForCurrentFrame() override
int lastActiveFrameSlot
VkBuffer currentVertexBuffers[VERTEX_INPUT_RESOURCE_SLOT_COUNT]
QVkCommandBuffer(QRhiImplementation *rhi)
QVarLengthArray< VkCommandBuffer, 4 > activeSecondaryCbStack
QRhiBackendCommandList< Command > commands
QRhiRenderTarget * currentTarget
QVarLengthArray< VkBufferImageCopy, 16 > bufferImageCopy
QRhiVulkanCommandBufferNativeHandles nativeHandlesStruct
QVarLengthArray< VkImageMemoryBarrier, 8 > imageBarrier
QVarLengthArray< VkBufferMemoryBarrier, 8 > bufferBarrier
quint32 currentVertexOffsets[VERTEX_INPUT_RESOURCE_SLOT_COUNT]
QRhiComputePipeline * currentComputePipeline
static const int VERTEX_INPUT_RESOURCE_SLOT_COUNT
const QRhiNativeHandles * nativeHandles()
QRhiShaderResourceBindings * currentComputeSrb
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QRhiShaderResourceBindings * currentGraphicsSrb
PassType recordingPass
QVarLengthArray< VkDeviceSize, 4 > vertexBufferOffset
VkBuffer currentIndexBuffer
VkCommandBuffer cb
QVarLengthArray< VkBuffer, 4 > vertexBuffer
QRhiGraphicsPipeline * currentGraphicsPipeline
QVarLengthArray< VkClearValue, 4 > clearValue
uint currentPipelineGeneration
quint32 currentIndexOffset
QVarLengthArray< uint32_t, 4 > dynamicOffset
QVarLengthArray< QByteArray, 4 > debugMarkerData
QVarLengthArray< QRhiPassResourceTracker, 8 > passResTrackers
QHash< QRhiResource *, std::pair< VkAccessFlags, bool > > writtenResources
VkIndexType currentIndexFormat
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QVkComputePipeline(QRhiImplementation *rhi)
bool create() override
VkPipelineLayout layout
QVkGraphicsPipeline(QRhiImplementation *rhi)
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
VkPipelineLayout layout
bool create() override
Creates the corresponding native graphics resources.
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QVkRenderBuffer(QRhiImplementation *rhi, Type type, const QSize &pixelSize, int sampleCount, Flags flags, QRhiTexture::Format backingFormatHint)
VkFormat vkformat
VkSampleCountFlagBits samples
QRhiTexture::Format backingFormat() const override
bool create() override
Creates the corresponding native graphics resources.
VkDeviceMemory memory
QVkTexture * backingTexture
VkImageView imageView
QVarLengthArray< VkSubpassDependency, 2 > subpassDeps
const QRhiNativeHandles * nativeHandles() override
QVector< quint32 > serializedFormatData
QVarLengthArray< VkAttachmentReference, 8 > colorRefs
QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() const override
VkAttachmentReference dsRef
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QVarLengthArray< VkAttachmentReference, 8 > resolveRefs
QVarLengthArray< VkAttachmentDescription, 8 > attDescs
VkAttachmentReference shadingRateRef
QRhiVulkanRenderPassNativeHandles nativeHandlesStruct
VkAttachmentReference dsResolveRef
QVector< quint32 > serializedFormat() const override
QVkRenderPassDescriptor(QRhiImplementation *rhi)
bool isCompatible(const QRhiRenderPassDescriptor *other) const override
QVkRenderPassDescriptor * rp
QRhiRenderTargetAttachmentTracker::ResIdList currentResIdList
static const int MAX_COLOR_ATTACHMENTS
int lastActiveFrameSlot
bool create() override
VkSampler sampler
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QVkSampler(QRhiImplementation *rhi, Filter magFilter, Filter minFilter, Filter mipmapMode, AddressMode u, AddressMode v, AddressMode w)
VkDescriptorSetLayout layout
void updateResources(UpdateFlags flags) override
QVkShaderResourceBindings(QRhiImplementation *rhi)
QVarLengthArray< QRhiShaderResourceBinding, 8 > sortedBindings
QVarLengthArray< BoundResourceData, 8 > boundResourceData[QVK_FRAMES_IN_FLIGHT]
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
VkDescriptorSet descSets[QVK_FRAMES_IN_FLIGHT]
bool createFrom(QRhiTexture *src) override
Sets up the shading rate map to use the texture src as the image containing the per-tile shading rate...
QVkShadingRateMap(QRhiImplementation *rhi)
QVkTexture * texture
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QSize pixelSize() const override
int sampleCount() const override
float devicePixelRatio() const override
QVkRenderTargetData d
QVkSwapChainRenderTarget(QRhiImplementation *rhi, QRhiSwapChain *swapchain)
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
VkColorSpaceKHR colorSpace
VkSurfaceKHR lastConnectedSurface
bool createOrResize() override
Creates the swapchain if not already done and resizes the swapchain buffers to match the current size...
VkSwapchainKHR sc
QRhiRenderTarget * currentFrameRenderTarget(StereoTargetBuffer targetBuffer) override
VkFormat colorFormat
bool isFormatSupported(Format f) override
QVkCommandBuffer cbWrapper
static const quint32 EXPECTED_MAX_BUFFER_COUNT
QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() override
VkSampleCountFlagBits samples
bool supportsReadback
QVkSwapChain(QRhiImplementation *rhi)
QVkRenderBuffer * ds
quint32 currentFrameSlot
QSize surfacePixelSize() override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
VkDeviceMemory msaaImageMem
QRhiRenderTarget * currentFrameRenderTarget() override
quint32 currentImageIndex
QVarLengthArray< ImageResources, EXPECTED_MAX_BUFFER_COUNT > imageRes
VkSurfaceKHR surface
QVarLengthArray< VkPresentModeKHR, 8 > supportedPresentationModes
QWindow * window
QVkSwapChainRenderTarget rtWrapperRight
VkImageView shadingRateMapView
bool ensureSurface()
QVkSwapChainRenderTarget rtWrapper
QRhiSwapChainHdrInfo hdrInfo() override
\variable QRhiSwapChainHdrInfo::limitsType
QRhiCommandBuffer * currentFrameCommandBuffer() override
VkImageView shadingRateMapView
QVkTextureRenderTarget(QRhiImplementation *rhi, const QRhiTextureRenderTargetDescription &desc, Flags flags)
float devicePixelRatio() const override
VkImageView rtv[QVkRenderTargetData::MAX_COLOR_ATTACHMENTS]
bool create() override
Creates the corresponding native graphics resources.
int sampleCount() const override
QSize pixelSize() const override
QVkRenderTargetData d
VkImageView resrtv[QVkRenderTargetData::MAX_COLOR_ATTACHMENTS]
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() override
VkPipelineStageFlags stage
bool create() override
Creates the corresponding native graphics resources.
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
VkBuffer stagingBuffers[QVK_FRAMES_IN_FLIGHT]
VkFormat vkformat
bool finishCreate()
VkImageView perLevelImageViewForLoadStore(int level)
VkSampleCountFlagBits samples
int lastActiveFrameSlot
QVkAlloc stagingAllocations[QVK_FRAMES_IN_FLIGHT]
bool createFrom(NativeTexture src) override
Similar to create(), except that no new native textures are created.
VkFormat viewFormat
QVkAlloc imageAlloc
VkImage image
void setNativeLayout(int layout) override
With some graphics APIs, such as Vulkan, integrating custom rendering code that uses the graphics API...
VkFormat viewFormatForSampling
QVkTexture(QRhiImplementation *rhi, Format format, const QSize &pixelSize, int depth, int arraySize, int sampleCount, Flags flags)
VkImageView perLevelImageViews[QRhi::MAX_MIP_LEVELS]
NativeTexture nativeTexture() override
UsageState usageState
bool prepareCreate(QSize *adjustedSize=nullptr)
uint mipLevelCount
VkImageView imageView
VkPipelineStageFlags srcStageMask
VkPipelineStageFlags dstStageMask
VkRenderPassBeginInfo desc
VkPipelineBindPoint bindPoint