Diligent Engine  v.2.4.g
RenderDeviceD3D11Impl.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2019-2021 Diligent Graphics LLC
3  * Copyright 2015-2019 Egor Yusov
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * In no event and under no legal theory, whether in tort (including negligence),
18  * contract, or otherwise, unless required by applicable law (such as deliberate
19  * and grossly negligent acts) or agreed to in writing, shall any Contributor be
20  * liable for any damages, including any direct, indirect, special, incidental,
21  * or consequential damages of any character arising as a result of this License or
22  * out of the use or inability to use the software (including but not limited to damages
23  * for loss of goodwill, work stoppage, computer failure or malfunction, or any and
24  * all other commercial damages or losses), even if such Contributor has been advised
25  * of the possibility of such damages.
26  */
27 
28 #pragma once
29 
32 
34 #include "RenderDeviceD3DBase.hpp"
35 
36 namespace Diligent
37 {
38 
40 class RenderDeviceD3D11Impl final : public RenderDeviceD3DBase<EngineD3D11ImplTraits>
41 {
42 public:
44 
46  IMemoryAllocator& RawMemAllocator,
47  IEngineFactory* pEngineFactory,
48  const EngineD3D11CreateInfo& EngineAttribs,
49  ID3D11Device* pd3d11Device,
50  Uint32 NumDeferredContexts) noexcept(false);
51  virtual void DILIGENT_CALL_TYPE QueryInterface(const INTERFACE_ID& IID, IObject** ppInterface) override final;
52 
54  virtual void DILIGENT_CALL_TYPE CreateBuffer(const BufferDesc& BuffDesc,
55  const BufferData* pBuffData,
56  IBuffer** ppBuffer) override final;
57 
59  virtual void DILIGENT_CALL_TYPE CreateShader(const ShaderCreateInfo& ShaderCI,
60  IShader** ppShader) override final;
61 
63  virtual void DILIGENT_CALL_TYPE CreateTexture(const TextureDesc& TexDesc,
64  const TextureData* pData,
65  ITexture** ppTexture) override final;
66 
69  ISampler** ppSampler) override final;
70 
73  IPipelineState** ppPipelineState) override final;
74 
77  IPipelineState** ppPipelineState) override final;
78 
81  IPipelineState** ppPipelineState) override final;
82 
84  virtual void DILIGENT_CALL_TYPE CreateFence(const FenceDesc& Desc,
85  IFence** ppFence) override final;
86 
88  virtual void DILIGENT_CALL_TYPE CreateQuery(const QueryDesc& Desc,
89  IQuery** ppQuery) override final;
90 
92  virtual void DILIGENT_CALL_TYPE CreateRenderPass(const RenderPassDesc& Desc,
93  IRenderPass** ppRenderPass) override final;
94 
96  virtual void DILIGENT_CALL_TYPE CreateFramebuffer(const FramebufferDesc& Desc,
97  IFramebuffer** ppFramebuffer) override final;
98 
100  virtual void DILIGENT_CALL_TYPE CreateBLAS(const BottomLevelASDesc& Desc,
101  IBottomLevelAS** ppBLAS) override final;
102 
104  virtual void DILIGENT_CALL_TYPE CreateTLAS(const TopLevelASDesc& Desc,
105  ITopLevelAS** ppTLAS) override final;
106 
108  virtual void DILIGENT_CALL_TYPE CreateSBT(const ShaderBindingTableDesc& Desc,
109  IShaderBindingTable** ppSBT) override final;
110 
113  IPipelineResourceSignature** ppSignature) override final;
114 
116  IPipelineResourceSignature** ppSignature,
117  bool IsDeviceInternal);
118 
120  ID3D11Device* DILIGENT_CALL_TYPE GetD3D11Device() override final { return m_pd3d11Device; }
121 
123  virtual void DILIGENT_CALL_TYPE CreateBufferFromD3DResource(ID3D11Buffer* pd3d11Buffer, const BufferDesc& BuffDesc, RESOURCE_STATE InitialState, IBuffer** ppBuffer) override final;
124 
126  virtual void DILIGENT_CALL_TYPE CreateTexture1DFromD3DResource(ID3D11Texture1D* pd3d11Texture,
127  RESOURCE_STATE InitialState,
128  ITexture** ppTexture) override final;
129 
131  virtual void DILIGENT_CALL_TYPE CreateTexture2DFromD3DResource(ID3D11Texture2D* pd3d11Texture,
132  RESOURCE_STATE InitialState,
133  ITexture** ppTexture) override final;
134 
136  virtual void DILIGENT_CALL_TYPE CreateTexture3DFromD3DResource(ID3D11Texture3D* pd3d11Texture,
137  RESOURCE_STATE InitialState,
138  ITexture** ppTexture) override final;
139 
141  virtual void DILIGENT_CALL_TYPE ReleaseStaleResources(bool ForceRelease = false) override final {}
142 
144  virtual void DILIGENT_CALL_TYPE IdleGPU() override final;
145 
146  size_t GetCommandQueueCount() const { return 1; }
147  Uint64 GetCommandQueueMask() const { return Uint64{1}; }
148 
149 private:
150  virtual void TestTextureFormat(TEXTURE_FORMAT TexFormat) override final;
151 
152  EngineD3D11CreateInfo m_EngineAttribs;
153 
155  CComPtr<ID3D11Device> m_pd3d11Device;
156 };
157 
158 } // namespace Diligent
Diligent::IReferenceCounters
Base interface for a reference counter object that stores the number of strong and weak references an...
Definition: ReferenceCounters.h:44
Diligent::RenderDeviceD3D11Impl::ReleaseStaleResources
virtual void ReleaseStaleResources(bool ForceRelease=false) override final
Implementation of IRenderDevice::ReleaseStaleResources() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.hpp:141
Diligent::GraphicsPipelineStateCreateInfo
Graphics pipeline state creation attributes.
Definition: PipelineState.h:397
Diligent::SamplerDesc
Sampler description.
Definition: Sampler.h:58
Diligent::ISampler
Texture sampler interface.
Definition: Sampler.h:192
Diligent::RayTracingPipelineStateCreateInfo
Ray tracing pipeline state description.
Definition: PipelineState.h:443
Diligent::IPipelineResourceSignature
Pipeline resource signature interface.
Definition: PipelineResourceSignature.h:226
Diligent::PipelineResourceSignatureDesc
Pipeline resource signature description.
Definition: PipelineResourceSignature.h:166
Diligent::IShaderBindingTable
Shader binding table interface.
Definition: ShaderBindingTable.h:93
Diligent::RenderDeviceD3DBase
Base implementation of a D3D render device.
Definition: RenderDeviceD3DBase.hpp:43
Diligent::TopLevelASDesc
Top-level AS description.
Definition: TopLevelAS.h:49
Diligent::IPipelineState
Pipeline state interface.
Definition: PipelineState.h:505
Diligent::QueryDesc
Query description.
Definition: Query.h:150
Diligent::IShader
Shader interface.
Definition: Shader.h:428
Diligent::IObject
Base interface for all dynamic objects in the engine.
Definition: Object.h:41
Diligent::Uint64
uint64_t Uint64
64-bit unsigned integer
Definition: BasicTypes.h:50
Diligent::RenderDeviceD3D11Impl::GetCommandQueueMask
Uint64 GetCommandQueueMask() const
Definition: RenderDeviceD3D11Impl.hpp:147
Diligent::RenderDeviceD3D11Impl::CreateBLAS
virtual void CreateBLAS(const BottomLevelASDesc &Desc, IBottomLevelAS **ppBLAS) override final
Implementation of IRenderDevice::CreateBLAS() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:391
Diligent::ITopLevelAS
Top-level AS interface.
Definition: TopLevelAS.h:151
Diligent::RenderDeviceD3D11Impl::CreateBuffer
virtual void CreateBuffer(const BufferDesc &BuffDesc, const BufferData *pBuffData, IBuffer **ppBuffer) override final
Implementation of IRenderDevice::CreateBuffer() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:260
Diligent::RenderDeviceD3D11Impl::CreateFence
virtual void CreateFence(const FenceDesc &Desc, IFence **ppFence) override final
Implementation of IRenderDevice::CreateFence() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:371
Diligent::IFramebuffer
Framebuffer interface.
Definition: Framebuffer.h:73
Diligent::RenderDeviceD3D11Impl::CreateSampler
virtual void CreateSampler(const SamplerDesc &SamplerDesc, ISampler **ppSampler) override final
Implementation of IRenderDevice::CreateSampler() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:350
Diligent::RenderPassDesc
Render pass description.
Definition: RenderPass.h:341
Diligent::EngineD3D11CreateInfo
Attributes specific to D3D11 engine.
Definition: GraphicsTypes.h:2082
Diligent::RenderDeviceD3D11Impl::CreateRayTracingPipelineState
virtual void CreateRayTracingPipelineState(const RayTracingPipelineStateCreateInfo &PSOCreateInfo, IPipelineState **ppPipelineState) override final
Implementation of IRenderDevice::CreateRayTracingPipelineState() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:365
Diligent::ShaderCreateInfo
Shader creation attributes.
Definition: Shader.h:241
Diligent::INTERFACE_ID
Unique interface identifier.
Definition: InterfaceID.h:37
Diligent::IBuffer
Buffer interface.
Definition: Buffer.h:187
Diligent::RenderDeviceD3D11Impl::CreateTexture2DFromD3DResource
virtual void CreateTexture2DFromD3DResource(ID3D11Texture2D *pd3d11Texture, RESOURCE_STATE InitialState, ITexture **ppTexture) override final
Implementation of IRenderDeviceD3D11::CreateTextureFromD3DResource() for 2D textures in Direct3D11 ba...
Definition: RenderDeviceD3D11Impl.cpp:286
Diligent::RenderDeviceD3D11Impl::CreateBufferFromD3DResource
virtual void CreateBufferFromD3DResource(ID3D11Buffer *pd3d11Buffer, const BufferDesc &BuffDesc, RESOURCE_STATE InitialState, IBuffer **ppBuffer) override final
Implementation of IRenderDeviceD3D11::CreateBufferFromD3DResource() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:255
Diligent::RenderDeviceD3D11Impl::CreatePipelineResourceSignature
virtual void CreatePipelineResourceSignature(const PipelineResourceSignatureDesc &Desc, IPipelineResourceSignature **ppSignature) override final
Implementation of IRenderDevice::CreatePipelineResourceSignature() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:412
Diligent::ShaderBindingTableDesc
Shader binding table description.
Definition: ShaderBindingTable.h:50
Diligent::RenderDeviceD3D11Impl::CreateQuery
virtual void CreateQuery(const QueryDesc &Desc, IQuery **ppQuery) override final
Implementation of IRenderDevice::CreateQuery() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:376
Diligent::TextureDesc
Texture description.
Definition: Texture.h:47
Diligent::RenderDeviceD3D11Impl::CreateFramebuffer
virtual void CreateFramebuffer(const FramebufferDesc &Desc, IFramebuffer **ppFramebuffer) override final
Implementation of IRenderDevice::CreateFramebuffer() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:386
RenderDeviceD3DBase.hpp
Diligent::RenderDeviceD3D11Impl::CreateShader
virtual void CreateShader(const ShaderCreateInfo &ShaderCI, IShader **ppShader) override final
Implementation of IRenderDevice::CreateShader() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:265
Diligent::RenderDeviceD3D11Impl::CreateTexture1DFromD3DResource
virtual void CreateTexture1DFromD3DResource(ID3D11Texture1D *pd3d11Texture, RESOURCE_STATE InitialState, ITexture **ppTexture) override final
Implementation of IRenderDeviceD3D11::CreateTextureFromD3DResource() for 1D textures in Direct3D11 ba...
Definition: RenderDeviceD3D11Impl.cpp:270
DILIGENT_CALL_TYPE
#define DILIGENT_CALL_TYPE
Definition: CommonDefinitions.h:45
Diligent::TextureData
Describes the initial data to store in the texture.
Definition: Texture.h:221
Diligent::ComputePipelineStateCreateInfo
Compute pipeline state description.
Definition: PipelineState.h:427
Diligent::Uint32
uint32_t Uint32
32-bit unsigned integer
Definition: BasicTypes.h:51
Diligent::RenderDeviceD3D11Impl::CreateTexture3DFromD3DResource
virtual void CreateTexture3DFromD3DResource(ID3D11Texture3D *pd3d11Texture, RESOURCE_STATE InitialState, ITexture **ppTexture) override final
Implementation of IRenderDeviceD3D11::CreateTextureFromD3DResource() for 3D textures in Direct3D11 ba...
Definition: RenderDeviceD3D11Impl.cpp:302
Diligent::RenderDeviceD3D11Impl::GetCommandQueueCount
size_t GetCommandQueueCount() const
Definition: RenderDeviceD3D11Impl.hpp:146
Diligent::RenderDeviceD3D11Impl::TestTextureFormat
virtual void TestTextureFormat(TEXTURE_FORMAT TexFormat) override final
Definition: RenderDeviceD3D11Impl.cpp:205
Diligent::RenderDeviceD3D11Impl::IdleGPU
virtual void IdleGPU() override final
Implementation of IRenderDevice::IdleGPU() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:425
Diligent::TEXTURE_FORMAT
TEXTURE_FORMAT
Texture formats.
Definition: GraphicsTypes.h:328
Diligent::BufferDesc
Buffer description.
Definition: Buffer.h:74
Diligent::RenderDeviceD3D11Impl::QueryInterface
virtual void QueryInterface(const INTERFACE_ID &IID, IObject **ppInterface) override final
Diligent::IMemoryAllocator
Base interface for a raw memory allocator.
Definition: MemoryAllocator.h:41
Diligent::RenderDeviceD3D11Impl::CreateComputePipelineState
virtual void CreateComputePipelineState(const ComputePipelineStateCreateInfo &PSOCreateInfo, IPipelineState **ppPipelineState) override final
Implementation of IRenderDevice::CreateComputePipelineState() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:360
Diligent::IFence
Fence interface.
Definition: Fence.h:62
EngineD3D11ImplTraits.hpp
Diligent::IQuery
Query interface.
Definition: Query.h:177
Diligent::RenderDeviceD3D11Impl::CreateTLAS
virtual void CreateTLAS(const TopLevelASDesc &Desc, ITopLevelAS **ppTLAS) override final
Implementation of IRenderDevice::CreateTLAS() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:398
Diligent::RenderDeviceD3D11Impl::GetD3D11Device
ID3D11Device * GetD3D11Device() override final
Implementation of IRenderDeviceD3D11::GetD3D11Device() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.hpp:120
Diligent::RenderDeviceD3D11Impl::CreateTexture
virtual void CreateTexture(const TextureDesc &TexDesc, const TextureData *pData, ITexture **ppTexture) override final
Implementation of IRenderDevice::CreateTexture() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:319
Diligent::FramebufferDesc
Framebuffer description.
Definition: Framebuffer.h:46
Diligent::IBottomLevelAS
Bottom-level AS interface.
Definition: BottomLevelAS.h:207
Diligent::RenderDeviceD3D11Impl
Render device implementation in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.hpp:40
Diligent::RenderDeviceD3D11Impl::CreateGraphicsPipelineState
virtual void CreateGraphicsPipelineState(const GraphicsPipelineStateCreateInfo &PSOCreateInfo, IPipelineState **ppPipelineState) override final
Implementation of IRenderDevice::CreateGraphicsPipelineState() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:355
Diligent::RESOURCE_STATE
RESOURCE_STATE
Resource usage state.
Definition: GraphicsTypes.h:2814
Diligent::RenderDeviceD3D11Impl::RenderDeviceD3D11Impl
RenderDeviceD3D11Impl(IReferenceCounters *pRefCounters, IMemoryAllocator &RawMemAllocator, IEngineFactory *pEngineFactory, const EngineD3D11CreateInfo &EngineAttribs, ID3D11Device *pd3d11Device, Uint32 NumDeferredContexts) noexcept(false)
Definition: RenderDeviceD3D11Impl.cpp:89
Diligent::RenderDeviceD3D11Impl::CreateSBT
virtual void CreateSBT(const ShaderBindingTableDesc &Desc, IShaderBindingTable **ppSBT) override final
Implementation of IRenderDevice::CreateSBT() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:405
Diligent::BufferData
Describes the buffer initial data.
Definition: Buffer.h:155
Diligent::BottomLevelASDesc
Bottom-level AS description.
Definition: BottomLevelAS.h:145
Diligent::RenderDeviceD3D11Impl::CreateRenderPass
virtual void CreateRenderPass(const RenderPassDesc &Desc, IRenderPass **ppRenderPass) override final
Implementation of IRenderDevice::CreateRenderPass() in Direct3D11 backend.
Definition: RenderDeviceD3D11Impl.cpp:381
Diligent::IEngineFactory
Engine factory base interface.
Definition: EngineFactory.h:60
Diligent::FenceDesc
Fence description.
Definition: Fence.h:43
Diligent::ITexture
Texture inteface.
Definition: Texture.h:273
Diligent::IRenderPass
Render pass interface.
Definition: RenderPass.h:369
Diligent
The library uses Direct3D-style math:
Definition: AdvancedMath.hpp:37