summaryrefslogtreecommitdiffstats
path: root/tools/gfx/d3d11/render-d3d11.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-01-11 09:11:52 -0800
committerGitHub <noreply@github.com>2021-01-11 09:11:52 -0800
commit5554777188225266e2295db3588f6cb17cae0c4d (patch)
tree9d15992cd24d752cde1047745cf75a25e841f494 /tools/gfx/d3d11/render-d3d11.cpp
parente24c5a6cb9c3347477b83abe084a09ae8f9fde0a (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.cpp137
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 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!