Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qrhid3d11_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 QRHID3D11_P_H
5#define QRHID3D11_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"
20#include <QWindow>
21
22#include <d3d11_1.h>
23#include <dxgi1_6.h>
24#include <dcomp.h>
25
27
28class QRhiD3D11;
29
30struct QD3D11Buffer : public QRhiBuffer
31{
34 void destroy() override;
35 bool create() override;
39
40 ID3D11UnorderedAccessView *unorderedAccessView(quint32 offset);
41
42 ID3D11Buffer *buffer = nullptr;
43 char *dynBuf = nullptr;
47 friend class QRhiD3D11;
48};
49
51{
53 int sampleCount, QRhiRenderBuffer::Flags flags,
54 QRhiTexture::Format backingFormatHint);
56 void destroy() override;
57 bool create() override;
58 QRhiTexture::Format backingFormat() const override;
59
60 ID3D11Texture2D *tex = nullptr;
61 ID3D11DepthStencilView *dsv = nullptr;
62 ID3D11RenderTargetView *rtv = nullptr;
63 DXGI_FORMAT dxgiFormat;
64 DXGI_SAMPLE_DESC sampleDesc;
66 friend class QRhiD3D11;
67};
68
70{
74 void destroy() override;
75 bool create() override;
76 bool createFrom(NativeTexture src) override;
78
79 bool prepareCreate(QSize *adjustedSize = nullptr);
80 bool finishCreate();
81 ID3D11UnorderedAccessView *unorderedAccessViewForLevel(int level);
82 ID3D11Resource *textureResource() const
83 {
84 if (tex)
85 return tex;
86 else if (tex1D)
87 return tex1D;
88 return tex3D;
89 }
90
91 ID3D11Texture2D *tex = nullptr;
92 ID3D11Texture3D *tex3D = nullptr;
93 ID3D11Texture1D *tex1D = nullptr;
94 bool owns = true;
95 ID3D11ShaderResourceView *srv = nullptr;
96 DXGI_FORMAT dxgiFormat;
98 DXGI_SAMPLE_DESC sampleDesc;
99 ID3D11UnorderedAccessView *perLevelViews[QRhi::MAX_MIP_LEVELS];
101 friend class QRhiD3D11;
102};
103
105{
109 void destroy() override;
110 bool create() override;
111
112 ID3D11SamplerState *samplerState = nullptr;
114 friend class QRhiD3D11;
115};
116
118{
121 void destroy() override;
122 bool isCompatible(const QRhiRenderPassDescriptor *other) const override;
124 QVector<quint32> serializedFormat() const override;
125};
126
128{
130 {
131 for (int i = 0; i < MAX_COLOR_ATTACHMENTS; ++i)
132 rtv[i] = nullptr;
133 }
134
137 float dpr = 1;
138 int sampleCount = 1;
140 int dsAttCount = 0;
141
142 static const int MAX_COLOR_ATTACHMENTS = 8;
143 ID3D11RenderTargetView *rtv[MAX_COLOR_ATTACHMENTS];
144 ID3D11DepthStencilView *dsv = nullptr;
145
147};
148
150{
153 void destroy() override;
154
155 QSize pixelSize() const override;
156 float devicePixelRatio() const override;
157 int sampleCount() const override;
158
160};
161
163{
166 void destroy() override;
167
168 QSize pixelSize() const override;
169 float devicePixelRatio() const override;
170 int sampleCount() const override;
171
173 bool create() override;
174
178 bool ownsDsv = false;
179 ID3D11DepthStencilView *dsv = nullptr;
180 friend class QRhiD3D11;
181};
182
184{
187 void destroy() override;
188 bool create() override;
189 void updateResources(UpdateFlags flags) override;
190
191 bool hasDynamicOffset = false;
194
195 // Keep track of the generation number of each referenced QRhi* to be able
196 // to detect that the batched bindings are out of date.
200 };
202 int count;
203 struct {
209 };
213 };
217 };
219 union {
224 };
225 };
227
229 bool present = false;
234 void finish() {
235 present = ubufs.finish();
239 }
240 void clear() {
241 ubufs.clear();
245 }
246 };
247
249 bool present = false;
252 void finish() {
253 present = samplers.finish();
255 }
256 void clear() {
257 samplers.clear();
259 }
260 };
261
263 bool present = false;
265 void finish() {
266 present = uavs.finish();
267 }
268 void clear() {
269 uavs.clear();
270 }
271 };
272
279
286
288
289 friend class QRhiD3D11;
290};
291
293
295{
298 void destroy() override;
299 bool create() override;
300
301 ID3D11DepthStencilState *dsState = nullptr;
302 ID3D11BlendState *blendState = nullptr;
303 struct {
304 ID3D11VertexShader *shader = nullptr;
306 } vs;
307 struct {
308 ID3D11HullShader *shader = nullptr;
310 } hs;
311 struct {
312 ID3D11DomainShader *shader = nullptr;
314 } ds;
315 struct {
316 ID3D11GeometryShader *shader = nullptr;
318 } gs;
319 struct {
320 ID3D11PixelShader *shader = nullptr;
322 } fs;
323 ID3D11InputLayout *inputLayout = nullptr;
324 D3D11_PRIMITIVE_TOPOLOGY d3dTopology = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
325 ID3D11RasterizerState *rastState = nullptr;
327 friend class QRhiD3D11;
328};
329
331{
334 void destroy() override;
335 bool create() override;
336
337 struct {
338 ID3D11ComputeShader *shader = nullptr;
340 } cs;
342 friend class QRhiD3D11;
343};
344
345struct QD3D11SwapChain;
346
348{
351 void destroy() override;
352
353 // these must be kept at a reasonably low value otherwise sizeof Command explodes
354 static const int MAX_DYNAMIC_OFFSET_COUNT = 8;
356
357 struct Command {
358 enum Cmd {
381 };
382 enum ClearFlag { Color = 1, Depth = 2, Stencil = 4 };
384
385 // QRhi*/QD3D11* references should be kept at minimum (so no
386 // QRhiTexture/Buffer/etc. pointers).
387 union Args {
388 struct {
391 struct {
393 int mask;
394 float c[4];
395 float d;
398 struct {
399 float x, y, w, h;
400 float d0, d1;
402 struct {
403 int x, y, w, h;
405 struct {
412 struct {
413 ID3D11Buffer *buffer;
415 DXGI_FORMAT format;
417 struct {
420 struct {
424 uint dynamicOffsetPairs[MAX_DYNAMIC_OFFSET_COUNT * 2]; // binding, offsetInConstants
426 struct {
430 struct {
432 float c[4];
434 struct {
441 struct {
449 struct {
450 ID3D11Resource *dst;
453 D3D11_BOX dstBox;
454 const void *src; // must come from retain*()
457 struct {
458 ID3D11Resource *dst;
459 UINT dstSubRes;
460 UINT dstX;
461 UINT dstY;
462 UINT dstZ;
463 ID3D11Resource *src;
466 D3D11_BOX srcBox;
468 struct {
469 ID3D11Resource *dst;
470 UINT dstSubRes;
471 ID3D11Resource *src;
472 UINT srcSubRes;
473 DXGI_FORMAT format;
475 struct {
476 ID3D11ShaderResourceView *srv;
478 struct {
479 char s[64];
481 struct {
484 struct {
485 UINT x;
486 UINT y;
487 UINT z;
490 };
491
492 enum PassType {
496 };
497
500 double lastGpuTime = 0;
508 ID3D11Buffer *currentIndexBuffer;
511 ID3D11Buffer *currentVertexBuffers[D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT];
512 quint32 currentVertexOffsets[D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT];
513
517
518 // relies heavily on implicit sharing (no copies of the actual data will be made)
521 return reinterpret_cast<const uchar *>(dataRetainPool.last().constData());
522 }
525 return reinterpret_cast<const uchar *>(bufferDataRetainPool.last().constData());
526 }
527 const uchar *retainImage(const QImage &image) {
529 return imageRetainPool.last().constBits();
530 }
532 commands.reset();
536 }
537 void resetState() {
539 // do not zero lastGpuTime
540 currentTarget = nullptr;
543 }
545 currentGraphicsPipeline = nullptr;
546 currentComputePipeline = nullptr;
548 currentGraphicsSrb = nullptr;
549 currentComputeSrb = nullptr;
551 currentIndexBuffer = nullptr;
553 currentIndexFormat = DXGI_FORMAT_R16_UINT;
554 memset(currentVertexBuffers, 0, sizeof(currentVertexBuffers));
555 memset(currentVertexOffsets, 0, sizeof(currentVertexOffsets));
556 }
557};
558
559static const int QD3D11_SWAPCHAIN_BUFFER_COUNT = 2;
560
562{
566 ID3D11Query *query[MAX_TIMESTAMP_PAIRS * 2] = {};
567 int pairCount = 0;
568
569 bool prepare(int pairCount, QRhiD3D11 *rhiD);
570 void destroy();
571 bool tryQueryTimestamps(int idx, ID3D11DeviceContext *context, double *elapsedSec);
572};
573
575{
578 void destroy() override;
579
582
583 QSize surfacePixelSize() override;
584 bool isFormatSupported(Format f) override;
585 QRhiSwapChainHdrInfo hdrInfo() override;
586
588 bool createOrResize() override;
589
590 void releaseBuffers();
591 bool newColorBuffer(const QSize &size, DXGI_FORMAT format, DXGI_SAMPLE_DESC sampleDesc,
592 ID3D11Texture2D **tex, ID3D11RenderTargetView **rtv) const;
593
594 QWindow *window = nullptr;
598 DXGI_FORMAT colorFormat;
600 IDXGISwapChain *swapChain = nullptr;
602 ID3D11Texture2D *backBufferTex;
603 ID3D11RenderTargetView *backBufferRtv;
605 ID3D11Texture2D *msaaTex[BUFFER_COUNT];
606 ID3D11RenderTargetView *msaaRtv[BUFFER_COUNT];
607 DXGI_SAMPLE_DESC sampleDesc;
609 int frameCount = 0;
611 UINT swapInterval = 1;
612 IDCompositionTarget *dcompTarget = nullptr;
613 IDCompositionVisual *dcompVisual = nullptr;
615};
616
618{
619public:
621
622 bool create(QRhi::Flags flags) override;
623 void destroy() override;
624
629 QRhiBuffer::UsageFlags usage,
630 quint32 size) override;
632 const QSize &pixelSize,
633 int sampleCount,
634 QRhiRenderBuffer::Flags flags,
635 QRhiTexture::Format backingFormatHint) override;
637 const QSize &pixelSize,
638 int depth,
639 int arraySize,
640 int sampleCount,
641 QRhiTexture::Flags flags) override;
643 QRhiSampler::Filter minFilter,
644 QRhiSampler::Filter mipmapMode,
647 QRhiSampler::AddressMode w) override;
648
650 QRhiTextureRenderTarget::Flags flags) override;
651
652 QRhiSwapChain *createSwapChain() override;
653 QRhi::FrameOpResult beginFrame(QRhiSwapChain *swapChain, QRhi::BeginFrameFlags flags) override;
654 QRhi::FrameOpResult endFrame(QRhiSwapChain *swapChain, QRhi::EndFrameFlags flags) override;
655 QRhi::FrameOpResult beginOffscreenFrame(QRhiCommandBuffer **cb, QRhi::BeginFrameFlags flags) override;
656 QRhi::FrameOpResult endOffscreenFrame(QRhi::EndFrameFlags flags) override;
657 QRhi::FrameOpResult finish() override;
658
659 void resourceUpdate(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override;
660
663 const QColor &colorClearValue,
664 const QRhiDepthStencilClearValue &depthStencilClearValue,
665 QRhiResourceUpdateBatch *resourceUpdates,
666 QRhiCommandBuffer::BeginPassFlags flags) override;
667 void endPass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override;
668
670 QRhiGraphicsPipeline *ps) override;
671
674 int dynamicOffsetCount,
675 const QRhiCommandBuffer::DynamicOffset *dynamicOffsets) override;
676
678 int startBinding, int bindingCount, const QRhiCommandBuffer::VertexInput *bindings,
679 QRhiBuffer *indexBuf, quint32 indexOffset,
680 QRhiCommandBuffer::IndexFormat indexFormat) override;
681
682 void setViewport(QRhiCommandBuffer *cb, const QRhiViewport &viewport) override;
683 void setScissor(QRhiCommandBuffer *cb, const QRhiScissor &scissor) override;
684 void setBlendConstants(QRhiCommandBuffer *cb, const QColor &c) override;
685 void setStencilRef(QRhiCommandBuffer *cb, quint32 refValue) override;
686
687 void draw(QRhiCommandBuffer *cb, quint32 vertexCount,
688 quint32 instanceCount, quint32 firstVertex, quint32 firstInstance) override;
689
690 void drawIndexed(QRhiCommandBuffer *cb, quint32 indexCount,
691 quint32 instanceCount, quint32 firstIndex,
692 qint32 vertexOffset, quint32 firstInstance) override;
693
694 void debugMarkBegin(QRhiCommandBuffer *cb, const QByteArray &name) override;
695 void debugMarkEnd(QRhiCommandBuffer *cb) override;
696 void debugMarkMsg(QRhiCommandBuffer *cb, const QByteArray &msg) override;
697
699 QRhiResourceUpdateBatch *resourceUpdates,
700 QRhiCommandBuffer::BeginPassFlags flags) override;
701 void endComputePass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override;
703 void dispatch(QRhiCommandBuffer *cb, int x, int y, int z) override;
704
706 void beginExternal(QRhiCommandBuffer *cb) override;
707 void endExternal(QRhiCommandBuffer *cb) override;
708 double lastCompletedGpuTime(QRhiCommandBuffer *cb) override;
709
710 QList<int> supportedSampleCounts() const override;
711 int ubufAlignment() const override;
712 bool isYUpInFramebuffer() const override;
713 bool isYUpInNDC() const override;
714 bool isClipDepthZeroToOne() const override;
715 QMatrix4x4 clipSpaceCorrMatrix() const override;
716 bool isTextureFormatSupported(QRhiTexture::Format format, QRhiTexture::Flags flags) const override;
717 bool isFeatureSupported(QRhi::Feature feature) const override;
718 int resourceLimit(QRhi::ResourceLimit limit) const override;
719 const QRhiNativeHandles *nativeHandles() override;
720 QRhiDriverInfo driverInfo() const override;
721 QRhiStats statistics() override;
723 void releaseCachedResources() override;
724 bool isDeviceLost() const override;
725
726 QByteArray pipelineCacheData() override;
727 void setPipelineCacheData(const QByteArray &data) override;
728
730 int layer, int level, const QRhiTextureSubresourceUploadDescription &subresDesc);
733 const QShader::NativeResourceBindingMap *nativeResourceBindingMaps[]);
736 const uint *dynOfsPairs, int dynOfsPairCount,
737 bool offsetOnlyChange);
739 void executeCommandBuffer(QD3D11CommandBuffer *cbD, QD3D11SwapChain *timestampSwapChain = nullptr);
740 DXGI_SAMPLE_DESC effectiveSampleCount(int sampleCount) const;
742 void reportLiveObjects(ID3D11Device *device);
743 void clearShaderCache();
745 QString *error, QShaderKey *usedShaderKey);
747
748 QRhi::Flags rhiFlags;
749 bool debugLayer = false;
751 ID3D11Device *dev = nullptr;
752 ID3D11DeviceContext1 *context = nullptr;
753 D3D_FEATURE_LEVEL featureLevel = D3D_FEATURE_LEVEL(0);
754 LUID adapterLuid = {};
755 ID3DUserDefinedAnnotation *annotations = nullptr;
756 IDXGIAdapter1 *activeAdapter = nullptr;
757 IDXGIFactory1 *dxgiFactory = nullptr;
758 IDCompositionDevice *dcompDevice = nullptr;
760 bool deviceLost = false;
763
764 struct {
776
779 bool active = false;
784
788 ID3D11Texture2D *stagingTex;
793 };
798 ID3D11Buffer *stagingBuf;
799 };
801
802 struct Shader {
803 Shader() = default;
806 IUnknown *s;
809 };
811
812 // This is what gets exposed as the "pipeline cache", not that that concept
813 // applies anyway. Here we are just storing the DX bytecode for a shader so
814 // we can skip the HLSL->DXBC compilation when the QShader has HLSL source
815 // code and the same shader source has already been compiled before.
816 // m_shaderCache seemingly does the same, but this here does not care about
817 // the ID3D11*Shader, this is just about the bytecode and about allowing
818 // the data to be serialized to persistent storage and then reloaded in
819 // future runs of the app, or when creating another QRhi, etc.
825 };
827};
828
831
833{
834 return a.sourceHash == b.sourceHash
835 && a.target == b.target
836 && a.entryPoint == b.entryPoint
837 && a.compileFlags == b.compileFlags;
838}
839
841{
842 return !(a == b);
843}
844
845inline size_t qHash(const QRhiD3D11::BytecodeCacheKey &k, size_t seed = 0) noexcept
846{
847 return qHash(k.sourceHash, seed) ^ qHash(k.target) ^ qHash(k.entryPoint) ^ k.compileFlags;
848}
849
851
852#endif
IOBluetoothDevice * device
\inmodule QtCore
Definition qbytearray.h:57
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
Definition qbytearray.h:122
The QColor class provides colors based on RGB, HSV or CMYK values.
Definition qcolor.h:31
\inmodule QtCore
Definition qhash.h:818
\inmodule QtGui
Definition qimage.h:37
const uchar * constBits() const
Returns a pointer to the first pixel data.
Definition qimage.cpp:1713
Definition qlist.h:74
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
Definition qmatrix4x4.h:25
const char * constData() const
Definition qrhi_p.h:340
\inmodule QtGui
Definition qrhi.h:834
Type
Specifies storage type of buffer resource.
Definition qrhi.h:836
\inmodule QtGui
Definition qrhi.h:1614
QPair< QRhiBuffer *, quint32 > VertexInput
Synonym for QPair<QRhiBuffer *, quint32>.
Definition qrhi.h:1643
QPair< int, quint32 > DynamicOffset
Synonym for QPair<int, quint32>.
Definition qrhi.h:1639
IndexFormat
Specifies the index data type.
Definition qrhi.h:1616
\inmodule QtGui
Definition qrhi.h:1585
\inmodule QtGui
\variable QRhiD3D11InitParams::enableDebugLayer
int gsHighestActiveSrvBinding
void setScissor(QRhiCommandBuffer *cb, const QRhiScissor &scissor) override
bool deviceLost
void debugMarkMsg(QRhiCommandBuffer *cb, const QByteArray &msg) override
int dsHighestActiveSrvBinding
QRhiD3D11NativeHandles nativeHandlesStruct
bool isYUpInNDC() const override
ID3D11Device * dev
QRhiSwapChain * createSwapChain() override
void enqueueResourceUpdates(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates)
bool isFeatureSupported(QRhi::Feature feature) const override
QRhi::FrameOpResult endOffscreenFrame(QRhi::EndFrameFlags flags) override
bool isDeviceLost() const override
bool vsHasIndexBufferBound
void executeBufferHostWrites(QD3D11Buffer *bufD)
void resetShaderResources()
void updateShaderResourceBindings(QD3D11ShaderResourceBindings *srbD, const QShader::NativeResourceBindingMap *nativeResourceBindingMaps[])
QRhiStats statistics() override
QHash< BytecodeCacheKey, QByteArray > m_bytecodeCache
QRhiComputePipeline * createComputePipeline() override
void debugMarkBegin(QRhiCommandBuffer *cb, const QByteArray &name) override
bool debugLayer
QRhi::FrameOpResult finish() override
void setVertexInput(QRhiCommandBuffer *cb, int startBinding, int bindingCount, const QRhiCommandBuffer::VertexInput *bindings, QRhiBuffer *indexBuf, quint32 indexOffset, QRhiCommandBuffer::IndexFormat indexFormat) override
IDXGIAdapter1 * activeAdapter
QRhiGraphicsPipeline * createGraphicsPipeline() override
QRhiShaderResourceBindings * createShaderResourceBindings() override
QVarLengthArray< BufferReadback, 2 > activeBufferReadbacks
QRhi::FrameOpResult beginFrame(QRhiSwapChain *swapChain, QRhi::BeginFrameFlags flags) override
ID3D11DeviceContext1 * context
QList< int > supportedSampleCounts() const override
QRhiTextureRenderTarget * createTextureRenderTarget(const QRhiTextureRenderTargetDescription &desc, QRhiTextureRenderTarget::Flags flags) override
QRhi::Flags rhiFlags
QByteArray compileHlslShaderSource(const QShader &shader, QShader::Variant shaderVariant, uint flags, QString *error, QShaderKey *usedShaderKey)
void setBlendConstants(QRhiCommandBuffer *cb, const QColor &c) override
int csHighestActiveSrvBinding
bool isClipDepthZeroToOne() const override
IDCompositionDevice * dcompDevice
QRhiDriverInfo driverInfoStruct
QHash< QRhiShaderStage, Shader > m_shaderCache
bool ensureDirectCompositionDevice()
void beginComputePass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates, QRhiCommandBuffer::BeginPassFlags flags) override
void draw(QRhiCommandBuffer *cb, quint32 vertexCount, quint32 instanceCount, quint32 firstVertex, quint32 firstInstance) override
void enqueueSubresUpload(QD3D11Texture *texD, QD3D11CommandBuffer *cbD, int layer, int level, const QRhiTextureSubresourceUploadDescription &subresDesc)
QD3D11SwapChain * currentSwapChain
void reportLiveObjects(ID3D11Device *device)
void resourceUpdate(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override
void destroy() override
QMatrix4x4 clipSpaceCorrMatrix() const override
void executeCommandBuffer(QD3D11CommandBuffer *cbD, QD3D11SwapChain *timestampSwapChain=nullptr)
struct QRhiD3D11::OffscreenFrame ofr
bool isYUpInFramebuffer() const override
int resourceLimit(QRhi::ResourceLimit limit) const override
void beginExternal(QRhiCommandBuffer *cb) override
QRhiTexture * createTexture(QRhiTexture::Format format, const QSize &pixelSize, int depth, int arraySize, int sampleCount, QRhiTexture::Flags flags) override
void setPipelineCacheData(const QByteArray &data) override
void bindShaderResources(QD3D11ShaderResourceBindings *srbD, const uint *dynOfsPairs, int dynOfsPairCount, bool offsetOnlyChange)
LUID adapterLuid
void debugMarkEnd(QRhiCommandBuffer *cb) override
DXGI_SAMPLE_DESC effectiveSampleCount(int sampleCount) const
void releaseCachedResources() override
double lastCompletedGpuTime(QRhiCommandBuffer *cb) override
ID3DUserDefinedAnnotation * annotations
bool importedDeviceAndContext
QRhi::FrameOpResult beginOffscreenFrame(QRhiCommandBuffer **cb, QRhi::BeginFrameFlags flags) override
QRhiBuffer * createBuffer(QRhiBuffer::Type type, QRhiBuffer::UsageFlags usage, quint32 size) override
bool supportsAllowTearing
void dispatch(QRhiCommandBuffer *cb, int x, int y, int z) override
void endExternal(QRhiCommandBuffer *cb) override
void setViewport(QRhiCommandBuffer *cb, const QRhiViewport &viewport) override
QVarLengthArray< TextureReadback, 2 > activeTextureReadbacks
void setComputePipeline(QRhiCommandBuffer *cb, QRhiComputePipeline *ps) override
QRhi::FrameOpResult endFrame(QRhiSwapChain *swapChain, QRhi::EndFrameFlags flags) override
bool isTextureFormatSupported(QRhiTexture::Format format, QRhiTexture::Flags flags) const override
void setShaderResources(QRhiCommandBuffer *cb, QRhiShaderResourceBindings *srb, int dynamicOffsetCount, const QRhiCommandBuffer::DynamicOffset *dynamicOffsets) override
void clearShaderCache()
D3D_FEATURE_LEVEL featureLevel
void endComputePass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override
bool makeThreadLocalNativeContextCurrent() override
int csHighestActiveUavBinding
void finishActiveReadbacks()
IDXGIFactory1 * dxgiFactory
int fsHighestActiveSrvBinding
QByteArray pipelineCacheData() override
const QRhiNativeHandles * nativeHandles() override
QRhiDriverInfo driverInfo() const override
void endPass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override
int ubufAlignment() const override
void beginPass(QRhiCommandBuffer *cb, QRhiRenderTarget *rt, const QColor &colorClearValue, const QRhiDepthStencilClearValue &depthStencilClearValue, QRhiResourceUpdateBatch *resourceUpdates, QRhiCommandBuffer::BeginPassFlags flags) override
void drawIndexed(QRhiCommandBuffer *cb, quint32 indexCount, quint32 instanceCount, quint32 firstIndex, qint32 vertexOffset, quint32 firstInstance) override
QRhiSampler * createSampler(QRhiSampler::Filter magFilter, QRhiSampler::Filter minFilter, QRhiSampler::Filter mipmapMode, QRhiSampler::AddressMode u, QRhiSampler::AddressMode v, QRhiSampler::AddressMode w) override
int vsHighestActiveSrvBinding
QRhiRenderBuffer * createRenderBuffer(QRhiRenderBuffer::Type type, const QSize &pixelSize, int sampleCount, QRhiRenderBuffer::Flags flags, QRhiTexture::Format backingFormatHint) override
int hsHighestActiveSrvBinding
void setGraphicsPipeline(QRhiCommandBuffer *cb, QRhiGraphicsPipeline *ps) override
void setStencilRef(QRhiCommandBuffer *cb, quint32 refValue) override
int vsHighestActiveVertexBufferBinding
struct QRhiD3D11::@352 contextState
\inmodule QtGui
Definition qrhi.h:44
\inmodule QtGui
Definition qrhi.h:1241
\inmodule QtGui
Definition qrhi.h:765
\inmodule QtGui
Definition qrhi.h:1071
QSize pixelSize() const
Definition qrhi.h:1092
int sampleCount() const
Definition qrhi.h:1095
Type
Specifies the type of the renderbuffer.
Definition qrhi.h:1073
\inmodule QtGui
Definition qrhi.h:1119
\inmodule QtGui
Definition qrhi.h:1135
\inmodule QtGui
Definition qrhi.h:1694
QRhi * rhi() const
Definition qrhi.cpp:3477
\inmodule QtGui
Definition qrhi.h:1007
Filter
Specifies the minification, magnification, or mipmap filtering.
Definition qrhi.h:1009
Filter magFilter() const
Definition qrhi.h:1034
AddressMode
Specifies the addressing mode.
Definition qrhi.h:1015
Filter minFilter() const
Definition qrhi.h:1037
Filter mipmapMode() const
Definition qrhi.h:1040
\inmodule QtGui
Definition qrhi.h:138
\inmodule QtGui
Definition qrhi.h:1190
\inmodule QtGui
Definition qrhi.h:1150
\inmodule QtGui
Definition qrhi.h:1513
Format
Describes the swapchain format.
Definition qrhi.h:1525
\inmodule QtGui
Definition qrhi.h:1161
\inmodule QtGui
Definition qrhi.h:883
int arraySize() const
Definition qrhi.h:969
int sampleCount() const
Definition qrhi.h:983
Format
Specifies the texture format.
Definition qrhi.h:902
QSize pixelSize() const
Definition qrhi.h:963
\inmodule QtGui
Definition qrhi.h:85
ResourceLimit
Describes the resource limit to query.
Definition qrhi.h:1846
Feature
Flag values to indicate what features are supported by the backend currently in use.
Definition qrhi.h:1793
static const int MAX_MIP_LEVELS
Definition qrhi.h:1955
FrameOpResult
Describes the result of operations that can have a soft failure.
Definition qrhi.h:1786
\inmodule QtGui
Definition qshader.h:174
\inmodule QtGui
Definition qshader.h:81
Variant
Describes what kind of shader code an entry contains.
Definition qshader.h:103
\inmodule QtCore
Definition qsize.h:25
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
void append(const T &t)
\inmodule QtGui
Definition qwindow.h:63
Combined button and popup list for selecting options.
Definition image.cpp:4
static void * context
DBusConnection const char DBusError * error
static int instanceCount
EGLOutputLayerEXT layer
Flags
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat z
GLint GLint GLint GLint GLint x
[0]
GLuint const GLuint * buffers
GLint GLenum GLsizei GLsizei GLsizei depth
GLenum GLuint GLint level
GLfloat GLfloat GLfloat w
[0]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLsizei const GLubyte * commands
GLfloat GLfloat f
GLenum src
GLenum GLuint buffer
GLenum type
GLbitfield flags
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLuint GLintptr offset
GLuint name
GLint GLsizei GLsizei GLenum format
GLint y
void ** params
GLenum query
const GLubyte * c
GLuint GLsizei const GLuint const GLintptr * offsets
GLuint shader
Definition qopenglext.h:665
GLint limit
GLuint * samplers
GLdouble s
[6]
Definition qopenglext.h:235
GLsizei const GLuint const GLintptr const GLsizei * strides
GLsizeiptr const void GLenum usage
Definition qopenglext.h:543
static Q_CONSTINIT QBasicAtomicInteger< unsigned > seed
Definition qrandom.cpp:196
size_t qHash(const QRhiD3D11::BytecodeCacheKey &k, size_t seed=0) noexcept
bool operator!=(const QRhiD3D11::BytecodeCacheKey &a, const QRhiD3D11::BytecodeCacheKey &b) noexcept
static const int QD3D11_SWAPCHAIN_BUFFER_COUNT
bool operator==(const QRhiD3D11::BytecodeCacheKey &a, const QRhiD3D11::BytecodeCacheKey &b) noexcept
SSL_CTX int(* cb)(SSL *ssl, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg)
@ desc
@ Q_RELOCATABLE_TYPE
Definition qtypeinfo.h:145
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
Definition qtypeinfo.h:163
unsigned int quint32
Definition qtypes.h:45
unsigned char uchar
Definition qtypes.h:27
int qint32
Definition qtypes.h:44
unsigned long long quint64
Definition qtypes.h:56
unsigned int uint
Definition qtypes.h:29
QSharedPointer< T > other(t)
[5]
view viewport() -> scroll(dx, dy, deviceRect)
view create()
bool hasPendingDynamicUpdates
Definition qrhid3d11_p.h:44
void endFullDynamicBufferUpdateForCurrentFrame() override
To be called when the entire contents of the buffer data has been updated in the memory block returne...
char * dynBuf
Definition qrhid3d11_p.h:43
char * beginFullDynamicBufferUpdateForCurrentFrame() override
bool create() override
Creates the corresponding native graphics resources.
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QHash< quint32, ID3D11UnorderedAccessView * > uavs
Definition qrhid3d11_p.h:45
QRhiBuffer::NativeBuffer nativeBuffer() override
ID3D11UnorderedAccessView * unorderedAccessView(quint32 offset)
union QD3D11CommandBuffer::Command::Args args
QRhiRenderTarget * currentTarget
static const int MAX_DYNAMIC_OFFSET_COUNT
QVarLengthArray< QRhiBufferData, 4 > bufferDataRetainPool
const uchar * retainBufferData(const QRhiBufferData &data)
ID3D11Buffer * currentVertexBuffers[D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT]
QVarLengthArray< QImage, 4 > imageRetainPool
static const int MAX_VERTEX_BUFFER_BINDING_COUNT
QRhiShaderResourceBindings * currentGraphicsSrb
const uchar * retainImage(const QImage &image)
const uchar * retainData(const QByteArray &data)
QRhiShaderResourceBindings * currentComputeSrb
QRhiBackendCommandList< Command > commands
QVarLengthArray< QByteArray, 4 > dataRetainPool
QRhiComputePipeline * currentComputePipeline
ID3D11Buffer * currentIndexBuffer
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
DXGI_FORMAT currentIndexFormat
quint32 currentVertexOffsets[D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT]
QRhiGraphicsPipeline * currentGraphicsPipeline
bool create() override
QShader::NativeResourceBindingMap nativeResourceBindingMap
struct QD3D11ComputePipeline::@253 cs
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
ID3D11InputLayout * inputLayout
struct QD3D11GraphicsPipeline::@246 vs
ID3D11BlendState * blendState
ID3D11RasterizerState * rastState
D3D11_PRIMITIVE_TOPOLOGY d3dTopology
struct QD3D11GraphicsPipeline::@249 ds
struct QD3D11GraphicsPipeline::@251 fs
bool create() override
Creates the corresponding native graphics resources.
struct QD3D11GraphicsPipeline::@250 gs
ID3D11DepthStencilState * dsState
struct QD3D11GraphicsPipeline::@248 hs
QShader::NativeResourceBindingMap nativeResourceBindingMap
ID3D11RenderTargetView * rtv
Definition qrhid3d11_p.h:62
DXGI_FORMAT dxgiFormat
Definition qrhid3d11_p.h:63
ID3D11DepthStencilView * dsv
Definition qrhid3d11_p.h:61
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
DXGI_SAMPLE_DESC sampleDesc
Definition qrhid3d11_p.h:64
bool create() override
Creates the corresponding native graphics resources.
QRhiTexture::Format backingFormat() const override
ID3D11Texture2D * tex
Definition qrhid3d11_p.h:60
QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() const override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
bool isCompatible(const QRhiRenderPassDescriptor *other) const override
QVector< quint32 > serializedFormat() const override
static const int MAX_COLOR_ATTACHMENTS
ID3D11RenderTargetView * rtv[MAX_COLOR_ATTACHMENTS]
QD3D11RenderTargetData(QRhiImplementation *)
ID3D11DepthStencilView * dsv
QD3D11RenderPassDescriptor * rp
QRhiRenderTargetAttachmentTracker::ResIdList currentResIdList
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
ID3D11SamplerState * samplerState
bool create() override
struct QD3D11ShaderResourceBindings::BoundSampledTextureData::@242 d[QRhiShaderResourceBinding::Data::MAX_TEX_SAMPLER_ARRAY_SIZE]
QRhiBatchedBindings< ID3D11SamplerState * > samplers
QRhiBatchedBindings< ID3D11ShaderResourceView * > shaderresources
QRhiBatchedBindings< ID3D11UnorderedAccessView * > uavs
QRhiBatchedBindings< ID3D11Buffer * > ubufs
QVarLengthArray< BoundResourceData, 8 > boundResourceData
StageSamplerBatches hsSamplerBatches
QVarLengthArray< QRhiShaderResourceBinding, 8 > sortedBindings
StageSamplerBatches gsSamplerBatches
StageUniformBufferBatches dsUniformBufferBatches
StageUniformBufferBatches gsUniformBufferBatches
void updateResources(UpdateFlags flags) override
StageSamplerBatches vsSamplerBatches
StageSamplerBatches fsSamplerBatches
StageUniformBufferBatches fsUniformBufferBatches
StageSamplerBatches dsSamplerBatches
StageSamplerBatches csSamplerBatches
StageUniformBufferBatches csUniformBufferBatches
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
StageUniformBufferBatches hsUniformBufferBatches
StageUniformBufferBatches vsUniformBufferBatches
int sampleCount() const override
float devicePixelRatio() const override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QD3D11RenderTargetData d
QSize pixelSize() const override
QRhiSwapChainHdrInfo hdrInfo() override
\variable QRhiSwapChainHdrInfo::isHardCodedDefaults
QD3D11Timestamps timestamps
QD3D11CommandBuffer cb
ID3D11RenderTargetView * backBufferRtv
QWindow * window
QD3D11RenderBuffer * ds
QRhiRenderTarget * currentFrameRenderTarget() override
ID3D11Texture2D * msaaTex[BUFFER_COUNT]
DXGI_FORMAT colorFormat
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
IDCompositionTarget * dcompTarget
ID3D11RenderTargetView * msaaRtv[BUFFER_COUNT]
bool createOrResize() override
Creates the swapchain if not already done and resizes the swapchain buffers to match the current size...
QSize surfacePixelSize() override
bool newColorBuffer(const QSize &size, DXGI_FORMAT format, DXGI_SAMPLE_DESC sampleDesc, ID3D11Texture2D **tex, ID3D11RenderTargetView **rtv) const
static const int BUFFER_COUNT
QD3D11SwapChainRenderTarget rt
bool isFormatSupported(Format f) override
DXGI_SAMPLE_DESC sampleDesc
IDCompositionVisual * dcompVisual
QRhiCommandBuffer * currentFrameCommandBuffer() override
QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() override
IDXGISwapChain * swapChain
DXGI_FORMAT srgbAdjustedColorFormat
ID3D11Texture2D * backBufferTex
QSize pixelSize() const override
ID3D11DepthStencilView * dsv
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
float devicePixelRatio() const override
QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() override
int sampleCount() const override
bool ownsRtv[QD3D11RenderTargetData::MAX_COLOR_ATTACHMENTS]
ID3D11RenderTargetView * rtv[QD3D11RenderTargetData::MAX_COLOR_ATTACHMENTS]
bool create() override
Creates the corresponding native graphics resources.
QD3D11RenderTargetData d
ID3D11Texture1D * tex1D
Definition qrhid3d11_p.h:93
bool create() override
Creates the corresponding native graphics resources.
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
bool createFrom(NativeTexture src) override
Similar to create(), except that no new native textures are created.
NativeTexture nativeTexture() override
ID3D11UnorderedAccessView * perLevelViews[QRhi::MAX_MIP_LEVELS]
Definition qrhid3d11_p.h:99
ID3D11Texture2D * tex
Definition qrhid3d11_p.h:91
bool prepareCreate(QSize *adjustedSize=nullptr)
DXGI_FORMAT dxgiFormat
Definition qrhid3d11_p.h:96
ID3D11UnorderedAccessView * unorderedAccessViewForLevel(int level)
DXGI_SAMPLE_DESC sampleDesc
Definition qrhid3d11_p.h:98
bool finishCreate()
ID3D11ShaderResourceView * srv
Definition qrhid3d11_p.h:95
ID3D11Texture3D * tex3D
Definition qrhid3d11_p.h:92
ID3D11Resource * textureResource() const
Definition qrhid3d11_p.h:82
ID3D11Query * disjointQuery[MAX_TIMESTAMP_PAIRS]
bool active[MAX_TIMESTAMP_PAIRS]
bool tryQueryTimestamps(int idx, ID3D11DeviceContext *context, double *elapsedSec)
bool prepare(int pairCount, QRhiD3D11 *rhiD)
static const int MAX_TIMESTAMP_PAIRS
\inmodule QtGui
Definition qrhi.h:850
ID3D11Buffer * stagingBuf
QRhiReadbackResult * result
OffscreenFrame(QRhiImplementation *rhi)
QD3D11CommandBuffer cbWrapper
QD3D11Timestamps timestamps
Shader(IUnknown *s, const QByteArray &bytecode, const QShader::NativeResourceBindingMap &rbm)
QShader::NativeResourceBindingMap nativeResourceBindingMap
QByteArray bytecode
QRhiReadbackResult * result
QRhiTexture::Format format
QRhiReadbackDescription desc
ID3D11Texture2D * stagingTex
\inmodule QtGui
Definition qrhi.h:1722
\variable QRhiReadbackResult::completed
Definition qrhi.h:788
\inmodule QtGui
Definition qrhi.h:1686
static const int MAX_TEX_SAMPLER_ARRAY_SIZE
Definition qrhi.h:498
\inmodule QtGui
Definition qrhi.h:1745
\inmodule QtGui
Definition qrhi.h:1482
\inmodule QtGui
Definition qrhi.h:953
Definition moc.h:24
struct QD3D11CommandBuffer::Command::Args::@327 copySubRes
struct QD3D11CommandBuffer::Command::Args::@320 bindGraphicsPipeline
QD3D11ShaderResourceBindings * srb
struct QD3D11CommandBuffer::Command::Args::@321 bindShaderResources
struct QD3D11CommandBuffer::Command::Args::@334 bindComputePipeline
struct QD3D11CommandBuffer::Command::Args::@322 stencilRef
struct QD3D11CommandBuffer::Command::Args::@314 clear
ID3D11ShaderResourceView * srv
struct QD3D11CommandBuffer::Command::Args::@333 debugMark
struct QD3D11CommandBuffer::Command::Args::@323 blendConstants
struct QD3D11CommandBuffer::Command::Args::@329 resolveSubRes
struct QD3D11CommandBuffer::Command::Args::@326 updateSubRes
struct QD3D11CommandBuffer::Command::Args::@325 drawIndexed
uint dynamicOffsetPairs[MAX_DYNAMIC_OFFSET_COUNT *2]
struct QD3D11CommandBuffer::Command::Args::@315 viewport
QD3D11ComputePipeline * ps
QD3D11GraphicsPipeline * ps
struct QD3D11CommandBuffer::Command::Args::@332 genMip
struct QD3D11CommandBuffer::Command::Args::@319 bindIndexBuffer
struct QD3D11CommandBuffer::Command::Args::@318 bindVertexBuffers
struct QD3D11CommandBuffer::Command::Args::@324 draw
struct QD3D11CommandBuffer::Command::Args::@312 setRenderTarget
struct QD3D11CommandBuffer::Command::Args::@317 scissor
struct QD3D11CommandBuffer::Command::Args::@335 dispatch