diff options
| author | Yong He <yonghe@outlook.com> | 2021-01-11 09:11:52 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-11 09:11:52 -0800 |
| commit | 5554777188225266e2295db3588f6cb17cae0c4d (patch) | |
| tree | 9d15992cd24d752cde1047745cf75a25e841f494 /tools/gfx/d3d11/render-d3d11.cpp | |
| parent | e24c5a6cb9c3347477b83abe084a09ae8f9fde0a (diff) | |
Make `gfx::Renderer` a COM interface. (#1653)
* Make `gfx::Renderer` a COM interface.
This is a first step towards making the `gfx` library expose a COM compatible DLL interface. Remaining classes will come as separate PRs.
* Fixup project files
* Fix calling conventions
* Make gfx::create*Renderer() functions increase ref count by 1
* Make renderer createFunc return via out parameter
Diffstat (limited to 'tools/gfx/d3d11/render-d3d11.cpp')
| -rw-r--r-- | tools/gfx/d3d11/render-d3d11.cpp | 137 |
1 files changed, 91 insertions, 46 deletions
diff --git a/tools/gfx/d3d11/render-d3d11.cpp b/tools/gfx/d3d11/render-d3d11.cpp index 5c04eccf1..97d294e5d 100644 --- a/tools/gfx/d3d11/render-d3d11.cpp +++ b/tools/gfx/d3d11/render-d3d11.cpp @@ -63,50 +63,93 @@ public: // Renderer implementation - virtual SlangResult initialize(const Desc& desc, void* inWindowHandle) override; - virtual const List<String>& getFeatures() override { return m_features; } - virtual void setClearColor(const float color[4]) override; - virtual void clearFrame() override; - virtual void presentFrame() override; - TextureResource::Desc getSwapChainTextureDesc() override; - - Result createTextureResource(Resource::Usage initialUsage, const TextureResource::Desc& desc, const TextureResource::Data* initData, TextureResource** outResource) override; - Result createBufferResource(Resource::Usage initialUsage, const BufferResource::Desc& desc, const void* initData, BufferResource** outResource) override; - Result createSamplerState(SamplerState::Desc const& desc, SamplerState** outSampler) override; - - Result createTextureView(TextureResource* texture, ResourceView::Desc const& desc, ResourceView** outView) override; - Result createBufferView(BufferResource* buffer, ResourceView::Desc const& desc, ResourceView** outView) override; - - Result createInputLayout(const InputElementDesc* inputElements, UInt inputElementCount, InputLayout** outLayout) override; - - Result createDescriptorSetLayout(const DescriptorSetLayout::Desc& desc, DescriptorSetLayout** outLayout) override; - Result createPipelineLayout(const PipelineLayout::Desc& desc, PipelineLayout** outLayout) override; - Result createDescriptorSet(DescriptorSetLayout* layout, DescriptorSet** outDescriptorSet) override; - - Result createProgram(const ShaderProgram::Desc& desc, ShaderProgram** outProgram) override; - Result createGraphicsPipelineState(const GraphicsPipelineStateDesc& desc, PipelineState** outState) override; - Result createComputePipelineState(const ComputePipelineStateDesc& desc, PipelineState** outState) override; - - virtual SlangResult captureScreenSurface(Surface& surfaceOut) override; - - virtual void* map(BufferResource* buffer, MapFlavor flavor) override; - virtual void unmap(BufferResource* buffer) override; - virtual void setPrimitiveTopology(PrimitiveTopology topology) override; - - virtual void setDescriptorSet(PipelineType pipelineType, PipelineLayout* layout, UInt index, DescriptorSet* descriptorSet) override; - - virtual void setVertexBuffers(UInt startSlot, UInt slotCount, BufferResource*const* buffers, const UInt* strides, const UInt* offsets) override; - virtual void setIndexBuffer(BufferResource* buffer, Format indexFormat, UInt offset) override; - virtual void setDepthStencilTarget(ResourceView* depthStencilView) override; - void setViewports(UInt count, Viewport const* viewports) override; - void setScissorRects(UInt count, ScissorRect const* rects) override; - virtual void setPipelineState(PipelineType pipelineType, PipelineState* state) override; - virtual void draw(UInt vertexCount, UInt startVertex) override; - virtual void drawIndexed(UInt indexCount, UInt startIndex, UInt baseVertex) override; - virtual void dispatchCompute(int x, int y, int z) override; - virtual void submitGpuWork() override {} - virtual void waitForGpu() override {} - virtual RendererType getRendererType() const override { return RendererType::DirectX11; } + virtual SLANG_NO_THROW SlangResult SLANG_MCALL initialize(const Desc& desc, void* inWindowHandle) override; + virtual SLANG_NO_THROW const List<String>& SLANG_MCALL getFeatures() override + { + return m_features; + } + virtual SLANG_NO_THROW void SLANG_MCALL setClearColor(const float color[4]) override; + virtual SLANG_NO_THROW void SLANG_MCALL clearFrame() override; + virtual SLANG_NO_THROW void SLANG_MCALL presentFrame() override; + virtual SLANG_NO_THROW TextureResource::Desc SLANG_MCALL getSwapChainTextureDesc() override; + + virtual SLANG_NO_THROW Result SLANG_MCALL createTextureResource( + Resource::Usage initialUsage, + const TextureResource::Desc& desc, + const TextureResource::Data* initData, + TextureResource** outResource) override; + virtual SLANG_NO_THROW Result SLANG_MCALL createBufferResource( + Resource::Usage initialUsage, + const BufferResource::Desc& desc, + const void* initData, + BufferResource** outResource) override; + virtual SLANG_NO_THROW Result SLANG_MCALL + createSamplerState(SamplerState::Desc const& desc, SamplerState** outSampler) override; + + virtual SLANG_NO_THROW Result SLANG_MCALL createTextureView( + TextureResource* texture, ResourceView::Desc const& desc, ResourceView** outView) override; + virtual SLANG_NO_THROW Result SLANG_MCALL createBufferView( + BufferResource* buffer, ResourceView::Desc const& desc, ResourceView** outView) override; + + virtual SLANG_NO_THROW Result SLANG_MCALL createInputLayout( + const InputElementDesc* inputElements, + UInt inputElementCount, + InputLayout** outLayout) override; + + virtual SLANG_NO_THROW Result SLANG_MCALL createDescriptorSetLayout( + const DescriptorSetLayout::Desc& desc, DescriptorSetLayout** outLayout) override; + virtual SLANG_NO_THROW Result SLANG_MCALL + createPipelineLayout(const PipelineLayout::Desc& desc, PipelineLayout** outLayout) override; + virtual SLANG_NO_THROW Result SLANG_MCALL + createDescriptorSet(DescriptorSetLayout* layout, DescriptorSet** outDescriptorSet) override; + + virtual SLANG_NO_THROW Result SLANG_MCALL + createProgram(const ShaderProgram::Desc& desc, ShaderProgram** outProgram) override; + virtual SLANG_NO_THROW Result SLANG_MCALL createGraphicsPipelineState( + const GraphicsPipelineStateDesc& desc, PipelineState** outState) override; + virtual SLANG_NO_THROW Result SLANG_MCALL createComputePipelineState( + const ComputePipelineStateDesc& desc, PipelineState** outState) override; + + virtual SLANG_NO_THROW SlangResult SLANG_MCALL + captureScreenSurface(Surface& surfaceOut) override; + + virtual SLANG_NO_THROW void* SLANG_MCALL map(BufferResource* buffer, MapFlavor flavor) override; + virtual SLANG_NO_THROW void SLANG_MCALL unmap(BufferResource* buffer) override; + virtual SLANG_NO_THROW void SLANG_MCALL + setPrimitiveTopology(PrimitiveTopology topology) override; + + virtual SLANG_NO_THROW void SLANG_MCALL setDescriptorSet( + PipelineType pipelineType, + PipelineLayout* layout, + UInt index, + DescriptorSet* descriptorSet) override; + + virtual SLANG_NO_THROW void SLANG_MCALL setVertexBuffers( + UInt startSlot, + UInt slotCount, + BufferResource* const* buffers, + const UInt* strides, + const UInt* offsets) override; + virtual SLANG_NO_THROW void SLANG_MCALL + setIndexBuffer(BufferResource* buffer, Format indexFormat, UInt offset) override; + virtual SLANG_NO_THROW void SLANG_MCALL + setDepthStencilTarget(ResourceView* depthStencilView) override; + virtual SLANG_NO_THROW void SLANG_MCALL + setViewports(UInt count, Viewport const* viewports) override; + virtual SLANG_NO_THROW void SLANG_MCALL + setScissorRects(UInt count, ScissorRect const* rects) override; + virtual SLANG_NO_THROW void SLANG_MCALL + setPipelineState(PipelineType pipelineType, PipelineState* state) override; + virtual SLANG_NO_THROW void SLANG_MCALL draw(UInt vertexCount, UInt startVertex) override; + virtual SLANG_NO_THROW void SLANG_MCALL + drawIndexed(UInt indexCount, UInt startIndex, UInt baseVertex) override; + virtual SLANG_NO_THROW void SLANG_MCALL dispatchCompute(int x, int y, int z) override; + virtual SLANG_NO_THROW void SLANG_MCALL submitGpuWork() override {} + virtual SLANG_NO_THROW void SLANG_MCALL waitForGpu() override {} + virtual SLANG_NO_THROW RendererType SLANG_MCALL getRendererType() const override + { + return RendererType::DirectX11; + } ~D3D11Renderer() {} @@ -417,9 +460,11 @@ public: bool m_nvapi = false; }; -Renderer* createD3D11Renderer() +SlangResult createD3D11Renderer(IRenderer** outRenderer) { - return new D3D11Renderer(); + *outRenderer = new D3D11Renderer(); + (*outRenderer)->addRef(); + return SLANG_OK; } // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ScopeNVAPI !!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
