diff options
Diffstat (limited to 'src/gui/rhi/qrhid3d11_p_p.h')
-rw-r--r-- | src/gui/rhi/qrhid3d11_p_p.h | 799 |
1 files changed, 0 insertions, 799 deletions
diff --git a/src/gui/rhi/qrhid3d11_p_p.h b/src/gui/rhi/qrhid3d11_p_p.h deleted file mode 100644 index 7ae4c28a02..0000000000 --- a/src/gui/rhi/qrhid3d11_p_p.h +++ /dev/null @@ -1,799 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2019 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Gui module -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QRHID3D11_P_H -#define QRHID3D11_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qrhid3d11_p.h" -#include "qrhi_p_p.h" -#include "qshaderdescription_p.h" -#include <QWindow> - -#include <d3d11_1.h> -#include <dxgi1_6.h> - -QT_BEGIN_NAMESPACE - -struct QD3D11Buffer : public QRhiBuffer -{ - QD3D11Buffer(QRhiImplementation *rhi, Type type, UsageFlags usage, int size); - ~QD3D11Buffer(); - void destroy() override; - bool create() override; - QRhiBuffer::NativeBuffer nativeBuffer() override; - char *beginFullDynamicBufferUpdateForCurrentFrame() override; - void endFullDynamicBufferUpdateForCurrentFrame() override; - - ID3D11UnorderedAccessView *unorderedAccessView(); - - ID3D11Buffer *buffer = nullptr; - char *dynBuf = nullptr; - bool hasPendingDynamicUpdates = false; - ID3D11UnorderedAccessView *uav = nullptr; - uint generation = 0; - friend class QRhiD3D11; -}; - -struct QD3D11RenderBuffer : public QRhiRenderBuffer -{ - QD3D11RenderBuffer(QRhiImplementation *rhi, Type type, const QSize &pixelSize, - int sampleCount, QRhiRenderBuffer::Flags flags, - QRhiTexture::Format backingFormatHint); - ~QD3D11RenderBuffer(); - void destroy() override; - bool create() override; - QRhiTexture::Format backingFormat() const override; - - ID3D11Texture2D *tex = nullptr; - ID3D11DepthStencilView *dsv = nullptr; - ID3D11RenderTargetView *rtv = nullptr; - DXGI_FORMAT dxgiFormat; - DXGI_SAMPLE_DESC sampleDesc; - uint generation = 0; - friend class QRhiD3D11; -}; - -struct QD3D11Texture : public QRhiTexture -{ - QD3D11Texture(QRhiImplementation *rhi, Format format, const QSize &pixelSize, int depth, - int arraySize, int sampleCount, Flags flags); - ~QD3D11Texture(); - void destroy() override; - bool create() override; - bool createFrom(NativeTexture src) override; - NativeTexture nativeTexture() override; - - bool prepareCreate(QSize *adjustedSize = nullptr); - bool finishCreate(); - ID3D11UnorderedAccessView *unorderedAccessViewForLevel(int level); - ID3D11Resource *textureResource() const - { - if (tex) - return tex; - return tex3D; - } - - ID3D11Texture2D *tex = nullptr; - ID3D11Texture3D *tex3D = nullptr; - bool owns = true; - ID3D11ShaderResourceView *srv = nullptr; - DXGI_FORMAT dxgiFormat; - uint mipLevelCount = 0; - DXGI_SAMPLE_DESC sampleDesc; - ID3D11UnorderedAccessView *perLevelViews[QRhi::MAX_MIP_LEVELS]; - uint generation = 0; - friend class QRhiD3D11; -}; - -struct QD3D11Sampler : public QRhiSampler -{ - QD3D11Sampler(QRhiImplementation *rhi, Filter magFilter, Filter minFilter, Filter mipmapMode, - AddressMode u, AddressMode v, AddressMode w); - ~QD3D11Sampler(); - void destroy() override; - bool create() override; - - ID3D11SamplerState *samplerState = nullptr; - uint generation = 0; - friend class QRhiD3D11; -}; - -struct QD3D11RenderPassDescriptor : public QRhiRenderPassDescriptor -{ - QD3D11RenderPassDescriptor(QRhiImplementation *rhi); - ~QD3D11RenderPassDescriptor(); - void destroy() override; - bool isCompatible(const QRhiRenderPassDescriptor *other) const override; - QRhiRenderPassDescriptor *newCompatibleRenderPassDescriptor() const override; - QVector<quint32> serializedFormat() const override; -}; - -struct QD3D11RenderTargetData -{ - QD3D11RenderTargetData(QRhiImplementation *) - { - for (int i = 0; i < MAX_COLOR_ATTACHMENTS; ++i) - rtv[i] = nullptr; - } - - QD3D11RenderPassDescriptor *rp = nullptr; - QSize pixelSize; - float dpr = 1; - int sampleCount = 1; - int colorAttCount = 0; - int dsAttCount = 0; - - static const int MAX_COLOR_ATTACHMENTS = 8; - ID3D11RenderTargetView *rtv[MAX_COLOR_ATTACHMENTS]; - ID3D11DepthStencilView *dsv = nullptr; - - QRhiRenderTargetAttachmentTracker::ResIdList currentResIdList; -}; - -struct QD3D11ReferenceRenderTarget : public QRhiRenderTarget -{ - QD3D11ReferenceRenderTarget(QRhiImplementation *rhi); - ~QD3D11ReferenceRenderTarget(); - void destroy() override; - - QSize pixelSize() const override; - float devicePixelRatio() const override; - int sampleCount() const override; - - QD3D11RenderTargetData d; -}; - -struct QD3D11TextureRenderTarget : public QRhiTextureRenderTarget -{ - QD3D11TextureRenderTarget(QRhiImplementation *rhi, const QRhiTextureRenderTargetDescription &desc, Flags flags); - ~QD3D11TextureRenderTarget(); - void destroy() override; - - QSize pixelSize() const override; - float devicePixelRatio() const override; - int sampleCount() const override; - - QRhiRenderPassDescriptor *newCompatibleRenderPassDescriptor() override; - bool create() override; - - QD3D11RenderTargetData d; - bool ownsRtv[QD3D11RenderTargetData::MAX_COLOR_ATTACHMENTS]; - ID3D11RenderTargetView *rtv[QD3D11RenderTargetData::MAX_COLOR_ATTACHMENTS]; - bool ownsDsv = false; - ID3D11DepthStencilView *dsv = nullptr; - friend class QRhiD3D11; -}; - -struct QD3D11ShaderResourceBindings : public QRhiShaderResourceBindings -{ - QD3D11ShaderResourceBindings(QRhiImplementation *rhi); - ~QD3D11ShaderResourceBindings(); - void destroy() override; - bool create() override; - void updateResources(UpdateFlags flags) override; - - bool hasDynamicOffset = false; - QVarLengthArray<QRhiShaderResourceBinding, 8> sortedBindings; - uint generation = 0; - - // Keep track of the generation number of each referenced QRhi* to be able - // to detect that the batched bindings are out of date. - struct BoundUniformBufferData { - quint64 id; - uint generation; - }; - struct BoundSampledTextureData { - int count; - struct { - quint64 texId; - uint texGeneration; - quint64 samplerId; - uint samplerGeneration; - } d[QRhiShaderResourceBinding::Data::MAX_TEX_SAMPLER_ARRAY_SIZE]; - }; - struct BoundStorageImageData { - quint64 id; - uint generation; - }; - struct BoundStorageBufferData { - quint64 id; - uint generation; - }; - struct BoundResourceData { - union { - BoundUniformBufferData ubuf; - BoundSampledTextureData stex; - BoundStorageImageData simage; - BoundStorageBufferData sbuf; - }; - }; - QVarLengthArray<BoundResourceData, 8> boundResourceData; - - bool vsubufsPresent = false; - bool fsubufsPresent = false; - bool csubufsPresent = false; - bool vssamplersPresent = false; - bool fssamplersPresent = false; - bool cssamplersPresent = false; - bool csUAVsPresent = false; - - QRhiBatchedBindings<ID3D11Buffer *> vsubufs; - QRhiBatchedBindings<UINT> vsubuforigbindings; - QRhiBatchedBindings<UINT> vsubufoffsets; - QRhiBatchedBindings<UINT> vsubufsizes; - - QRhiBatchedBindings<ID3D11Buffer *> fsubufs; - QRhiBatchedBindings<UINT> fsubuforigbindings; - QRhiBatchedBindings<UINT> fsubufoffsets; - QRhiBatchedBindings<UINT> fsubufsizes; - - QRhiBatchedBindings<ID3D11Buffer *> csubufs; - QRhiBatchedBindings<UINT> csubuforigbindings; - QRhiBatchedBindings<UINT> csubufoffsets; - QRhiBatchedBindings<UINT> csubufsizes; - - QRhiBatchedBindings<ID3D11SamplerState *> vssamplers; - QRhiBatchedBindings<ID3D11ShaderResourceView *> vsshaderresources; - - QRhiBatchedBindings<ID3D11SamplerState *> fssamplers; - QRhiBatchedBindings<ID3D11ShaderResourceView *> fsshaderresources; - - QRhiBatchedBindings<ID3D11SamplerState *> cssamplers; - QRhiBatchedBindings<ID3D11ShaderResourceView *> csshaderresources; - - QRhiBatchedBindings<ID3D11UnorderedAccessView *> csUAVs; - - friend class QRhiD3D11; -}; - -Q_DECLARE_TYPEINFO(QD3D11ShaderResourceBindings::BoundResourceData, Q_RELOCATABLE_TYPE); - -struct QD3D11GraphicsPipeline : public QRhiGraphicsPipeline -{ - QD3D11GraphicsPipeline(QRhiImplementation *rhi); - ~QD3D11GraphicsPipeline(); - void destroy() override; - bool create() override; - - ID3D11DepthStencilState *dsState = nullptr; - ID3D11BlendState *blendState = nullptr; - struct { - ID3D11VertexShader *shader = nullptr; - QShader::NativeResourceBindingMap nativeResourceBindingMap; - } vs; - struct { - ID3D11PixelShader *shader = nullptr; - QShader::NativeResourceBindingMap nativeResourceBindingMap; - } fs; - ID3D11InputLayout *inputLayout = nullptr; - D3D11_PRIMITIVE_TOPOLOGY d3dTopology = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; - ID3D11RasterizerState *rastState = nullptr; - uint generation = 0; - friend class QRhiD3D11; -}; - -struct QD3D11ComputePipeline : public QRhiComputePipeline -{ - QD3D11ComputePipeline(QRhiImplementation *rhi); - ~QD3D11ComputePipeline(); - void destroy() override; - bool create() override; - - struct { - ID3D11ComputeShader *shader = nullptr; - QShader::NativeResourceBindingMap nativeResourceBindingMap; - } cs; - uint generation = 0; - friend class QRhiD3D11; -}; - -struct QD3D11SwapChain; - -struct QD3D11CommandBuffer : public QRhiCommandBuffer -{ - QD3D11CommandBuffer(QRhiImplementation *rhi); - ~QD3D11CommandBuffer(); - void destroy() override; - - // these must be kept at a reasonably low value otherwise sizeof Command explodes - static const int MAX_DYNAMIC_OFFSET_COUNT = 8; - static const int MAX_VERTEX_BUFFER_BINDING_COUNT = 8; - - struct Command { - enum Cmd { - ResetShaderResources, - SetRenderTarget, - Clear, - Viewport, - Scissor, - BindVertexBuffers, - BindIndexBuffer, - BindGraphicsPipeline, - BindShaderResources, - StencilRef, - BlendConstants, - Draw, - DrawIndexed, - UpdateSubRes, - CopySubRes, - ResolveSubRes, - GenMip, - DebugMarkBegin, - DebugMarkEnd, - DebugMarkMsg, - BindComputePipeline, - Dispatch - }; - enum ClearFlag { Color = 1, Depth = 2, Stencil = 4 }; - Cmd cmd; - - // QRhi*/QD3D11* references should be kept at minimum (so no - // QRhiTexture/Buffer/etc. pointers). - union Args { - struct { - QRhiRenderTarget *rt; - } setRenderTarget; - struct { - QRhiRenderTarget *rt; - int mask; - float c[4]; - float d; - quint32 s; - } clear; - struct { - float x, y, w, h; - float d0, d1; - } viewport; - struct { - int x, y, w, h; - } scissor; - struct { - int startSlot; - int slotCount; - ID3D11Buffer *buffers[MAX_VERTEX_BUFFER_BINDING_COUNT]; - UINT offsets[MAX_VERTEX_BUFFER_BINDING_COUNT]; - UINT strides[MAX_VERTEX_BUFFER_BINDING_COUNT]; - } bindVertexBuffers; - struct { - ID3D11Buffer *buffer; - quint32 offset; - DXGI_FORMAT format; - } bindIndexBuffer; - struct { - QD3D11GraphicsPipeline *ps; - } bindGraphicsPipeline; - struct { - QD3D11ShaderResourceBindings *srb; - bool offsetOnlyChange; - int dynamicOffsetCount; - uint dynamicOffsetPairs[MAX_DYNAMIC_OFFSET_COUNT * 2]; // binding, offsetInConstants - } bindShaderResources; - struct { - QD3D11GraphicsPipeline *ps; - quint32 ref; - } stencilRef; - struct { - QD3D11GraphicsPipeline *ps; - float c[4]; - } blendConstants; - struct { - QD3D11GraphicsPipeline *ps; - quint32 vertexCount; - quint32 instanceCount; - quint32 firstVertex; - quint32 firstInstance; - } draw; - struct { - QD3D11GraphicsPipeline *ps; - quint32 indexCount; - quint32 instanceCount; - quint32 firstIndex; - qint32 vertexOffset; - quint32 firstInstance; - } drawIndexed; - struct { - ID3D11Resource *dst; - UINT dstSubRes; - bool hasDstBox; - D3D11_BOX dstBox; - const void *src; // must come from retain*() - UINT srcRowPitch; - } updateSubRes; - struct { - ID3D11Resource *dst; - UINT dstSubRes; - UINT dstX; - UINT dstY; - UINT dstZ; - ID3D11Resource *src; - UINT srcSubRes; - bool hasSrcBox; - D3D11_BOX srcBox; - } copySubRes; - struct { - ID3D11Resource *dst; - UINT dstSubRes; - ID3D11Resource *src; - UINT srcSubRes; - DXGI_FORMAT format; - } resolveSubRes; - struct { - ID3D11ShaderResourceView *srv; - } genMip; - struct { - char s[64]; - } debugMark; - struct { - QD3D11ComputePipeline *ps; - } bindComputePipeline; - struct { - UINT x; - UINT y; - UINT z; - } dispatch; - } args; - }; - - enum PassType { - NoPass, - RenderPass, - ComputePass - }; - - QRhiBackendCommandList<Command> commands; - PassType recordingPass; - QRhiRenderTarget *currentTarget; - QRhiGraphicsPipeline *currentGraphicsPipeline; - QRhiComputePipeline *currentComputePipeline; - uint currentPipelineGeneration; - QRhiShaderResourceBindings *currentGraphicsSrb; - QRhiShaderResourceBindings *currentComputeSrb; - uint currentSrbGeneration; - ID3D11Buffer *currentIndexBuffer; - quint32 currentIndexOffset; - DXGI_FORMAT currentIndexFormat; - ID3D11Buffer *currentVertexBuffers[D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT]; - quint32 currentVertexOffsets[D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT]; - - QVarLengthArray<QByteArray, 4> dataRetainPool; - QVarLengthArray<QRhiBufferData, 4> bufferDataRetainPool; - QVarLengthArray<QImage, 4> imageRetainPool; - - // relies heavily on implicit sharing (no copies of the actual data will be made) - const uchar *retainData(const QByteArray &data) { - dataRetainPool.append(data); - return reinterpret_cast<const uchar *>(dataRetainPool.last().constData()); - } - const uchar *retainBufferData(const QRhiBufferData &data) { - bufferDataRetainPool.append(data); - return reinterpret_cast<const uchar *>(bufferDataRetainPool.last().constData()); - } - const uchar *retainImage(const QImage &image) { - imageRetainPool.append(image); - return imageRetainPool.last().constBits(); - } - void resetCommands() { - commands.reset(); - dataRetainPool.clear(); - bufferDataRetainPool.clear(); - imageRetainPool.clear(); - } - void resetState() { - recordingPass = NoPass; - currentTarget = nullptr; - resetCommands(); - resetCachedState(); - } - void resetCachedState() { - currentGraphicsPipeline = nullptr; - currentComputePipeline = nullptr; - currentPipelineGeneration = 0; - resetCachedShaderResourceState(); - } - void resetCachedShaderResourceState() { - currentGraphicsSrb = nullptr; - currentComputeSrb = nullptr; - currentSrbGeneration = 0; - currentIndexBuffer = nullptr; - currentIndexOffset = 0; - currentIndexFormat = DXGI_FORMAT_R16_UINT; - memset(currentVertexBuffers, 0, sizeof(currentVertexBuffers)); - memset(currentVertexOffsets, 0, sizeof(currentVertexOffsets)); - } -}; - -struct QD3D11SwapChain : public QRhiSwapChain -{ - QD3D11SwapChain(QRhiImplementation *rhi); - ~QD3D11SwapChain(); - void destroy() override; - - QRhiCommandBuffer *currentFrameCommandBuffer() override; - QRhiRenderTarget *currentFrameRenderTarget() override; - - QSize surfacePixelSize() override; - bool isFormatSupported(Format f) override; - QRhiSwapChainHdrInfo hdrInfo() override; - - QRhiRenderPassDescriptor *newCompatibleRenderPassDescriptor() override; - bool createOrResize() override; - - void releaseBuffers(); - bool newColorBuffer(const QSize &size, DXGI_FORMAT format, DXGI_SAMPLE_DESC sampleDesc, - ID3D11Texture2D **tex, ID3D11RenderTargetView **rtv) const; - - QWindow *window = nullptr; - QSize pixelSize; - QD3D11ReferenceRenderTarget rt; - QD3D11CommandBuffer cb; - DXGI_FORMAT colorFormat; - DXGI_FORMAT srgbAdjustedColorFormat; - IDXGISwapChain *swapChain = nullptr; - UINT swapChainFlags = 0; - static const int BUFFER_COUNT = 2; - ID3D11Texture2D *backBufferTex; - ID3D11RenderTargetView *backBufferRtv; - ID3D11Texture2D *msaaTex[BUFFER_COUNT]; - ID3D11RenderTargetView *msaaRtv[BUFFER_COUNT]; - DXGI_SAMPLE_DESC sampleDesc; - int currentFrameSlot = 0; - int frameCount = 0; - QD3D11RenderBuffer *ds = nullptr; - bool timestampActive[BUFFER_COUNT]; - ID3D11Query *timestampDisjointQuery[BUFFER_COUNT]; - ID3D11Query *timestampQuery[BUFFER_COUNT * 2]; - UINT swapInterval = 1; -}; - -class QRhiD3D11 : public QRhiImplementation -{ -public: - QRhiD3D11(QRhiD3D11InitParams *params, QRhiD3D11NativeHandles *importDevice = nullptr); - - bool create(QRhi::Flags flags) override; - void destroy() override; - - QRhiGraphicsPipeline *createGraphicsPipeline() override; - QRhiComputePipeline *createComputePipeline() override; - QRhiShaderResourceBindings *createShaderResourceBindings() override; - QRhiBuffer *createBuffer(QRhiBuffer::Type type, - QRhiBuffer::UsageFlags usage, - int size) override; - QRhiRenderBuffer *createRenderBuffer(QRhiRenderBuffer::Type type, - const QSize &pixelSize, - int sampleCount, - QRhiRenderBuffer::Flags flags, - QRhiTexture::Format backingFormatHint) override; - QRhiTexture *createTexture(QRhiTexture::Format format, - const QSize &pixelSize, - int depth, - int arraySize, - int sampleCount, - QRhiTexture::Flags flags) override; - QRhiSampler *createSampler(QRhiSampler::Filter magFilter, - QRhiSampler::Filter minFilter, - QRhiSampler::Filter mipmapMode, - QRhiSampler:: AddressMode u, - QRhiSampler::AddressMode v, - QRhiSampler::AddressMode w) override; - - QRhiTextureRenderTarget *createTextureRenderTarget(const QRhiTextureRenderTargetDescription &desc, - QRhiTextureRenderTarget::Flags flags) override; - - QRhiSwapChain *createSwapChain() override; - QRhi::FrameOpResult beginFrame(QRhiSwapChain *swapChain, QRhi::BeginFrameFlags flags) override; - QRhi::FrameOpResult endFrame(QRhiSwapChain *swapChain, QRhi::EndFrameFlags flags) override; - QRhi::FrameOpResult beginOffscreenFrame(QRhiCommandBuffer **cb, QRhi::BeginFrameFlags flags) override; - QRhi::FrameOpResult endOffscreenFrame(QRhi::EndFrameFlags flags) override; - QRhi::FrameOpResult finish() override; - - void resourceUpdate(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override; - - void beginPass(QRhiCommandBuffer *cb, - QRhiRenderTarget *rt, - const QColor &colorClearValue, - const QRhiDepthStencilClearValue &depthStencilClearValue, - QRhiResourceUpdateBatch *resourceUpdates, - QRhiCommandBuffer::BeginPassFlags flags) override; - void endPass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override; - - void setGraphicsPipeline(QRhiCommandBuffer *cb, - QRhiGraphicsPipeline *ps) override; - - void setShaderResources(QRhiCommandBuffer *cb, - QRhiShaderResourceBindings *srb, - int dynamicOffsetCount, - const QRhiCommandBuffer::DynamicOffset *dynamicOffsets) override; - - void setVertexInput(QRhiCommandBuffer *cb, - int startBinding, int bindingCount, const QRhiCommandBuffer::VertexInput *bindings, - QRhiBuffer *indexBuf, quint32 indexOffset, - QRhiCommandBuffer::IndexFormat indexFormat) override; - - void setViewport(QRhiCommandBuffer *cb, const QRhiViewport &viewport) override; - void setScissor(QRhiCommandBuffer *cb, const QRhiScissor &scissor) override; - void setBlendConstants(QRhiCommandBuffer *cb, const QColor &c) override; - void setStencilRef(QRhiCommandBuffer *cb, quint32 refValue) override; - - void draw(QRhiCommandBuffer *cb, quint32 vertexCount, - quint32 instanceCount, quint32 firstVertex, quint32 firstInstance) override; - - void drawIndexed(QRhiCommandBuffer *cb, quint32 indexCount, - quint32 instanceCount, quint32 firstIndex, - qint32 vertexOffset, quint32 firstInstance) override; - - void debugMarkBegin(QRhiCommandBuffer *cb, const QByteArray &name) override; - void debugMarkEnd(QRhiCommandBuffer *cb) override; - void debugMarkMsg(QRhiCommandBuffer *cb, const QByteArray &msg) override; - - void beginComputePass(QRhiCommandBuffer *cb, - QRhiResourceUpdateBatch *resourceUpdates, - QRhiCommandBuffer::BeginPassFlags flags) override; - void endComputePass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override; - void setComputePipeline(QRhiCommandBuffer *cb, QRhiComputePipeline *ps) override; - void dispatch(QRhiCommandBuffer *cb, int x, int y, int z) override; - - const QRhiNativeHandles *nativeHandles(QRhiCommandBuffer *cb) override; - void beginExternal(QRhiCommandBuffer *cb) override; - void endExternal(QRhiCommandBuffer *cb) override; - - QList<int> supportedSampleCounts() const override; - int ubufAlignment() const override; - bool isYUpInFramebuffer() const override; - bool isYUpInNDC() const override; - bool isClipDepthZeroToOne() const override; - QMatrix4x4 clipSpaceCorrMatrix() const override; - bool isTextureFormatSupported(QRhiTexture::Format format, QRhiTexture::Flags flags) const override; - bool isFeatureSupported(QRhi::Feature feature) const override; - int resourceLimit(QRhi::ResourceLimit limit) const override; - const QRhiNativeHandles *nativeHandles() override; - QRhiDriverInfo driverInfo() const override; - QRhiMemAllocStats graphicsMemoryAllocationStatistics() override; - bool makeThreadLocalNativeContextCurrent() override; - void releaseCachedResources() override; - bool isDeviceLost() const override; - - QByteArray pipelineCacheData() override; - void setPipelineCacheData(const QByteArray &data) override; - - void enqueueSubresUpload(QD3D11Texture *texD, QD3D11CommandBuffer *cbD, - int layer, int level, const QRhiTextureSubresourceUploadDescription &subresDesc); - void enqueueResourceUpdates(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates); - void updateShaderResourceBindings(QD3D11ShaderResourceBindings *srbD, - const QShader::NativeResourceBindingMap *nativeResourceBindingMaps[]); - void executeBufferHostWrites(QD3D11Buffer *bufD); - void bindShaderResources(QD3D11ShaderResourceBindings *srbD, - const uint *dynOfsPairs, int dynOfsPairCount, - bool offsetOnlyChange); - void resetShaderResources(); - void executeCommandBuffer(QD3D11CommandBuffer *cbD, QD3D11SwapChain *timestampSwapChain = nullptr); - DXGI_SAMPLE_DESC effectiveSampleCount(int sampleCount) const; - void finishActiveReadbacks(); - void reportLiveObjects(ID3D11Device *device); - void clearShaderCache(); - - bool debugLayer = false; - bool importedDeviceAndContext = false; - ID3D11Device *dev = nullptr; - ID3D11DeviceContext1 *context = nullptr; - D3D_FEATURE_LEVEL featureLevel = D3D_FEATURE_LEVEL(0); - LUID adapterLuid = {}; - ID3DUserDefinedAnnotation *annotations = nullptr; - IDXGIAdapter1 *activeAdapter = nullptr; - IDXGIFactory1 *dxgiFactory = nullptr; - bool supportsFlipDiscardSwapchain = false; - bool supportsAllowTearing = false; - bool deviceLost = false; - QRhiD3D11NativeHandles nativeHandlesStruct; - QRhiDriverInfo driverInfoStruct; - - struct { - int vsHighestActiveVertexBufferBinding = -1; - bool vsHasIndexBufferBound = false; - int vsHighestActiveSrvBinding = -1; - int fsHighestActiveSrvBinding = -1; - int csHighestActiveSrvBinding = -1; - int csHighestActiveUavBinding = -1; - QD3D11SwapChain *currentSwapChain = nullptr; - } contextState; - - struct OffscreenFrame { - OffscreenFrame(QRhiImplementation *rhi) : cbWrapper(rhi) { } - bool active = false; - QD3D11CommandBuffer cbWrapper; - } ofr; - - struct TextureReadback { - QRhiReadbackDescription desc; - QRhiReadbackResult *result; - ID3D11Texture2D *stagingTex; - quint32 byteSize; - quint32 bpl; - QSize pixelSize; - QRhiTexture::Format format; - }; - QVarLengthArray<TextureReadback, 2> activeTextureReadbacks; - struct BufferReadback { - QRhiBufferReadbackResult *result; - quint32 byteSize; - ID3D11Buffer *stagingBuf; - }; - QVarLengthArray<BufferReadback, 2> activeBufferReadbacks; - - struct Shader { - Shader() = default; - Shader(IUnknown *s, const QByteArray &bytecode, const QShader::NativeResourceBindingMap &rbm) - : s(s), bytecode(bytecode), nativeResourceBindingMap(rbm) { } - IUnknown *s; - QByteArray bytecode; - QShader::NativeResourceBindingMap nativeResourceBindingMap; - }; - QHash<QRhiShaderStage, Shader> m_shaderCache; - - struct DeviceCurse { - DeviceCurse(QRhiD3D11 *impl) : q(impl) { } - QRhiD3D11 *q; - int framesToActivate = -1; - bool permanent = false; - int framesLeft = 0; - ID3D11ComputeShader *cs = nullptr; - - void initResources(); - void releaseResources(); - void activate(); - } deviceCurse; -}; - -Q_DECLARE_TYPEINFO(QRhiD3D11::TextureReadback, Q_RELOCATABLE_TYPE); -Q_DECLARE_TYPEINFO(QRhiD3D11::BufferReadback, Q_RELOCATABLE_TYPE); - -QT_END_NAMESPACE - -#endif |