diff options
| author | Yong He <yonghe@outlook.com> | 2021-01-14 15:48:54 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-14 15:48:54 -0800 |
| commit | f834f25794cfb746079e92d58c7410b767c57208 (patch) | |
| tree | 583a86d4cb2e446c2c06f9d786996d10647baf84 /tools/gfx/d3d11/render-d3d11.cpp | |
| parent | ac76997690a39605b2b8fbd63de9cbbbc2af2a73 (diff) | |
COM-ify all slang-gfx interfaces. (#1656)
* COM-ify all slang-gfx interfaces.
Diffstat (limited to 'tools/gfx/d3d11/render-d3d11.cpp')
| -rw-r--r-- | tools/gfx/d3d11/render-d3d11.cpp | 307 |
1 files changed, 185 insertions, 122 deletions
diff --git a/tools/gfx/d3d11/render-d3d11.cpp b/tools/gfx/d3d11/render-d3d11.cpp index 97d294e5d..8bf11c39d 100644 --- a/tools/gfx/d3d11/render-d3d11.cpp +++ b/tools/gfx/d3d11/render-d3d11.cpp @@ -3,9 +3,10 @@ #define _CRT_SECURE_NO_WARNINGS #include "render-d3d11.h" +#include "core/slang-basic.h" //WORKING: #include "options.h" -#include "../render.h" +#include "../renderer-shared.h" #include "../render-graphics-common.h" #include "../d3d/d3d-util.h" #include "../nvapi/nvapi-util.h" @@ -60,86 +61,81 @@ public: kMaxUAVs = 64, kMaxRTVs = 8, }; - // Renderer implementation 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; + IResource::Usage initialUsage, + const ITextureResource::Desc& desc, + const ITextureResource::Data* initData, + ITextureResource** outResource) override; virtual SLANG_NO_THROW Result SLANG_MCALL createBufferResource( - Resource::Usage initialUsage, - const BufferResource::Desc& desc, + IResource::Usage initialUsage, + const IBufferResource::Desc& desc, const void* initData, - BufferResource** outResource) override; + IBufferResource** outResource) override; virtual SLANG_NO_THROW Result SLANG_MCALL - createSamplerState(SamplerState::Desc const& desc, SamplerState** outSampler) override; + createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) override; virtual SLANG_NO_THROW Result SLANG_MCALL createTextureView( - TextureResource* texture, ResourceView::Desc const& desc, ResourceView** outView) override; + ITextureResource* texture, IResourceView::Desc const& desc, IResourceView** outView) override; virtual SLANG_NO_THROW Result SLANG_MCALL createBufferView( - BufferResource* buffer, ResourceView::Desc const& desc, ResourceView** outView) override; + IBufferResource* buffer, IResourceView::Desc const& desc, IResourceView** outView) override; virtual SLANG_NO_THROW Result SLANG_MCALL createInputLayout( const InputElementDesc* inputElements, UInt inputElementCount, - InputLayout** outLayout) override; + IInputLayout** outLayout) override; virtual SLANG_NO_THROW Result SLANG_MCALL createDescriptorSetLayout( - const DescriptorSetLayout::Desc& desc, DescriptorSetLayout** outLayout) override; + const IDescriptorSetLayout::Desc& desc, IDescriptorSetLayout** outLayout) override; virtual SLANG_NO_THROW Result SLANG_MCALL - createPipelineLayout(const PipelineLayout::Desc& desc, PipelineLayout** outLayout) override; + createPipelineLayout(const IPipelineLayout::Desc& desc, IPipelineLayout** outLayout) override; virtual SLANG_NO_THROW Result SLANG_MCALL - createDescriptorSet(DescriptorSetLayout* layout, DescriptorSet** outDescriptorSet) override; + createDescriptorSet(IDescriptorSetLayout* layout, IDescriptorSet** outDescriptorSet) override; virtual SLANG_NO_THROW Result SLANG_MCALL - createProgram(const ShaderProgram::Desc& desc, ShaderProgram** outProgram) override; + createProgram(const IShaderProgram::Desc& desc, IShaderProgram** outProgram) override; virtual SLANG_NO_THROW Result SLANG_MCALL createGraphicsPipelineState( - const GraphicsPipelineStateDesc& desc, PipelineState** outState) override; + const GraphicsPipelineStateDesc& desc, IPipelineState** outState) override; virtual SLANG_NO_THROW Result SLANG_MCALL createComputePipelineState( - const ComputePipelineStateDesc& desc, PipelineState** outState) override; + const ComputePipelineStateDesc& desc, IPipelineState** 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 map(IBufferResource* buffer, MapFlavor flavor) override; + virtual SLANG_NO_THROW void SLANG_MCALL unmap(IBufferResource* 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, + IPipelineLayout* layout, UInt index, - DescriptorSet* descriptorSet) override; + IDescriptorSet* descriptorSet) override; virtual SLANG_NO_THROW void SLANG_MCALL setVertexBuffers( UInt startSlot, UInt slotCount, - BufferResource* const* buffers, + IBufferResource* const* buffers, const UInt* strides, const UInt* offsets) override; virtual SLANG_NO_THROW void SLANG_MCALL - setIndexBuffer(BufferResource* buffer, Format indexFormat, UInt offset) override; + setIndexBuffer(IBufferResource* buffer, Format indexFormat, UInt offset) override; virtual SLANG_NO_THROW void SLANG_MCALL - setDepthStencilTarget(ResourceView* depthStencilView) override; + setDepthStencilTarget(IResourceView* 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; + setPipelineState(PipelineType pipelineType, IPipelineState* 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; @@ -201,9 +197,17 @@ public: CountOf, }; - class DescriptorSetLayoutImpl : public DescriptorSetLayout + class DescriptorSetLayoutImpl : public IDescriptorSetLayout, public RefObject { public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + IDescriptorSetLayout* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IDescriptorSetLayout) + return static_cast<IDescriptorSetLayout*>(this); + return nullptr; + } + public: // Each descriptor set for the D3D11 renderer stores distinct // arrays for each kind of shader-visible entity D3D11 understands: // shader resource views (SRVs), unordered access views (UAVs), @@ -267,9 +271,19 @@ public: UInt m_counts[int(D3D11DescriptorSlotType::CountOf)]; }; - class PipelineLayoutImpl : public PipelineLayout + class PipelineLayoutImpl : public IPipelineLayout, public RefObject { public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + IPipelineLayout* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IPipelineLayout) + { + return static_cast<IPipelineLayout*>(this); + } + return nullptr; + } + public: struct DescriptorSetInfo { RefPtr<DescriptorSetLayoutImpl> layout; @@ -280,18 +294,30 @@ public: UINT m_uavCount; }; - class DescriptorSetImpl : public DescriptorSet + class DescriptorSetImpl : public IDescriptorSet, public RefObject { public: - virtual void setConstantBuffer(UInt range, UInt index, BufferResource* buffer) override; - virtual void setResource(UInt range, UInt index, ResourceView* view) override; - virtual void setSampler(UInt range, UInt index, SamplerState* sampler) override; - virtual void setCombinedTextureSampler( + SLANG_REF_OBJECT_IUNKNOWN_ALL + IDescriptorSet* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IDescriptorSet) + return static_cast<IDescriptorSet*>(this); + return nullptr; + } + public: + virtual SLANG_NO_THROW void SLANG_MCALL + setConstantBuffer(UInt range, UInt index, IBufferResource* buffer) override; + virtual SLANG_NO_THROW void SLANG_MCALL + setResource(UInt range, UInt index, IResourceView* view) override; + virtual SLANG_NO_THROW void SLANG_MCALL + setSampler(UInt range, UInt index, ISamplerState* sampler) override; + virtual SLANG_NO_THROW void SLANG_MCALL setCombinedTextureSampler( UInt range, UInt index, - ResourceView* textureView, - SamplerState* sampler) override; - virtual void setRootConstants( + IResourceView* textureView, + ISamplerState* sampler) override; + virtual SLANG_NO_THROW void SLANG_MCALL + setRootConstants( UInt range, UInt offset, UInt size, @@ -307,9 +333,17 @@ public: List<ComPtr<ID3D11SamplerState>> m_samplers; }; - class ShaderProgramImpl: public ShaderProgram + class ShaderProgramImpl : public IShaderProgram, public RefObject { public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + IShaderProgram* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IShaderProgram) + return static_cast<IShaderProgram*>(this); + return nullptr; + } + public: ComPtr<ID3D11VertexShader> m_vertexShader; ComPtr<ID3D11PixelShader> m_pixelShader; ComPtr<ID3D11ComputeShader> m_computeShader; @@ -317,10 +351,10 @@ public: class BufferResourceImpl: public BufferResource { - public: + public: typedef BufferResource Parent; - BufferResourceImpl(const Desc& desc, Usage initialUsage): + BufferResourceImpl(const IBufferResource::Desc& desc, IResource::Usage initialUsage): Parent(desc), m_initialUsage(initialUsage) { @@ -346,16 +380,32 @@ public: }; - class SamplerStateImpl : public SamplerState + class SamplerStateImpl : public ISamplerState, public RefObject { public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + ISamplerState* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_ISamplerState) + return static_cast<ISamplerState*>(this); + return nullptr; + } + public: ComPtr<ID3D11SamplerState> m_sampler; }; - class ResourceViewImpl : public ResourceView + class ResourceViewImpl : public IResourceView, public RefObject { public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + IResourceView* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IResourceView) + return static_cast<IResourceView*>(this); + return nullptr; + } + public: enum class Type { SRV, @@ -390,15 +440,31 @@ public: ComPtr<ID3D11RenderTargetView> m_rtv; }; - class InputLayoutImpl: public InputLayout + class InputLayoutImpl: public IInputLayout, public RefObject { - public: + public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + IInputLayout* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IInputLayout) + return static_cast<IInputLayout*>(this); + return nullptr; + } + public: ComPtr<ID3D11InputLayout> m_layout; }; - class PipelineStateImpl : public PipelineState + class PipelineStateImpl : public IPipelineState, public RefObject { public: + SLANG_REF_OBJECT_IUNKNOWN_ALL + IPipelineState* getInterface(const Guid& guid) + { + if (guid == GfxGUID::IID_ISlangUnknown || guid == GfxGUID::IID_IPipelineState) + return static_cast<IPipelineState*>(this); + return nullptr; + } + public: RefPtr<ShaderProgramImpl> m_program; RefPtr<PipelineLayoutImpl> m_pipelineLayout; }; @@ -436,15 +502,15 @@ public: ComPtr<ID3D11Texture2D> m_backBufferTexture; RefPtr<TextureResourceImpl> m_primaryRenderTargetTexture; - RefPtr<RenderTargetViewImpl> m_primaryRenderTargetView; + RefPtr<RenderTargetViewImpl> m_primaryRenderTargetView; // List<ComPtr<ID3D11RenderTargetView> > m_renderTargetViews; // List<ComPtr<ID3D11Texture2D> > m_renderTargetTextures; bool m_renderTargetBindingsDirty = false; - RefPtr<GraphicsPipelineStateImpl> m_currentGraphicsState; - RefPtr<ComputePipelineStateImpl> m_currentComputeState; + ComPtr<GraphicsPipelineStateImpl> m_currentGraphicsState; + ComPtr<ComputePipelineStateImpl> m_currentComputeState; ComPtr<ID3D11RenderTargetView> m_rtvBindings[kMaxRTVs]; ComPtr<ID3D11DepthStencilView> m_dsvBinding; @@ -455,12 +521,10 @@ public: float m_clearColor[4] = { 0, 0, 0, 0 }; - List<String> m_features; - bool m_nvapi = false; }; -SlangResult createD3D11Renderer(IRenderer** outRenderer) +SlangResult SLANG_MCALL createD3D11Renderer(IRenderer** outRenderer) { *outRenderer = new D3D11Renderer(); (*outRenderer)->addRef(); @@ -654,10 +718,10 @@ SlangResult D3D11Renderer::initialize(const Desc& desc, void* inWindowHandle) // If we have an adapter set on the desc, look it up. We only need to do so for hardware ComPtr<IDXGIAdapter> adapter; - if (desc.adapter.getLength() && (deviceCheckFlags & DeviceCheckFlag::UseHardwareDevice)) + if (desc.adapter && (deviceCheckFlags & DeviceCheckFlag::UseHardwareDevice)) { List<ComPtr<IDXGIAdapter>> dxgiAdapters; - D3DUtil::findAdapters(deviceCheckFlags, desc.adapter.getUnownedSlice(), dxgiAdapters); + D3DUtil::findAdapters(deviceCheckFlags, Slang::UnownedStringSlice(desc.adapter), dxgiAdapters); if (dxgiAdapters.getCount() == 0) { continue; @@ -762,19 +826,19 @@ SlangResult D3D11Renderer::initialize(const Desc& desc, void* inWindowHandle) SLANG_RETURN_ON_FAIL(m_device->CreateRenderTargetView(texture, &rtvDesc, rtv.writeRef())); TextureResource::Desc resourceDesc; - resourceDesc.init2D(Resource::Type::Texture2D, Format::RGBA_Unorm_UInt8, textureDesc.Width, textureDesc.Height, 1); + resourceDesc.init2D(IResource::Type::Texture2D, Format::RGBA_Unorm_UInt8, textureDesc.Width, textureDesc.Height, 1); - RefPtr<TextureResource> primaryRenderTargetTexture; - SLANG_RETURN_ON_FAIL(createTextureResource(Resource::Usage::RenderTarget, resourceDesc, nullptr, primaryRenderTargetTexture.writeRef())); + ComPtr<ITextureResource> primaryRenderTargetTexture; + SLANG_RETURN_ON_FAIL(createTextureResource(IResource::Usage::RenderTarget, resourceDesc, nullptr, primaryRenderTargetTexture.writeRef())); - ResourceView::Desc viewDesc; + IResourceView::Desc viewDesc; viewDesc.format = resourceDesc.format; - viewDesc.type = ResourceView::Type::RenderTarget; - RefPtr<ResourceView> primaryRenderTargetView; + viewDesc.type = IResourceView::Type::RenderTarget; + ComPtr<IResourceView> primaryRenderTargetView; SLANG_RETURN_ON_FAIL(createTextureView(primaryRenderTargetTexture, viewDesc, primaryRenderTargetView.writeRef())); - m_primaryRenderTargetTexture = (TextureResourceImpl*) primaryRenderTargetTexture.Ptr(); - m_primaryRenderTargetView = (RenderTargetViewImpl*) primaryRenderTargetView.Ptr(); + m_primaryRenderTargetTexture = dynamic_cast<TextureResourceImpl*>(primaryRenderTargetTexture.get()); + m_primaryRenderTargetView = dynamic_cast<RenderTargetViewImpl*>(primaryRenderTargetView.get()); } // m_immediateContext->OMSetRenderTargets(1, m_primaryRenderTargetView->m_rtv.readRef(), nullptr); @@ -822,7 +886,7 @@ TextureResource::Desc D3D11Renderer::getSwapChainTextureDesc() ((ID3D11Texture2D*)m_primaryRenderTargetTexture->m_resource.get())->GetDesc(&dxDesc); TextureResource::Desc desc; - desc.init2D(Resource::Type::Texture2D, Format::Unknown, dxDesc.Width, dxDesc.Height, 1); + desc.init2D(IResource::Type::Texture2D, Format::Unknown, dxDesc.Width, dxDesc.Height, 1); return desc; } @@ -832,9 +896,9 @@ SlangResult D3D11Renderer::captureScreenSurface(Surface& surfaceOut) return captureTextureToSurface(m_device, m_immediateContext, (ID3D11Texture2D*) m_primaryRenderTargetTexture->m_resource.get(), surfaceOut); } -static D3D11_BIND_FLAG _calcResourceFlag(Resource::BindFlag::Enum bindFlag) +static D3D11_BIND_FLAG _calcResourceFlag(IResource::BindFlag::Enum bindFlag) { - typedef Resource::BindFlag BindFlag; + typedef IResource::BindFlag BindFlag; switch (bindFlag) { case BindFlag::VertexBuffer: return D3D11_BIND_VERTEX_BUFFER; @@ -857,7 +921,7 @@ static int _calcResourceBindFlags(int bindFlags) { int lsb = bindFlags & -bindFlags; - dstFlags |= _calcResourceFlag(Resource::BindFlag::Enum(lsb)); + dstFlags |= _calcResourceFlag(IResource::BindFlag::Enum(lsb)); bindFlags &= ~lsb; } return dstFlags; @@ -868,15 +932,15 @@ static int _calcResourceAccessFlags(int accessFlags) switch (accessFlags) { case 0: return 0; - case Resource::AccessFlag::Read: return D3D11_CPU_ACCESS_READ; - case Resource::AccessFlag::Write: return D3D11_CPU_ACCESS_WRITE; - case Resource::AccessFlag::Read | - Resource::AccessFlag::Write: return D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE; + case IResource::AccessFlag::Read: return D3D11_CPU_ACCESS_READ; + case IResource::AccessFlag::Write: return D3D11_CPU_ACCESS_WRITE; + case IResource::AccessFlag::Read | + IResource::AccessFlag::Write: return D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE; default: assert(!"Invalid flags"); return 0; } } -Result D3D11Renderer::createTextureResource(Resource::Usage initialUsage, const TextureResource::Desc& descIn, const TextureResource::Data* initData, TextureResource** outResource) +Result D3D11Renderer::createTextureResource(IResource::Usage initialUsage, const ITextureResource::Desc& descIn, const ITextureResource::Data* initData, ITextureResource** outResource) { TextureResource::Desc srcDesc(descIn); srcDesc.setDefaults(initialUsage); @@ -908,7 +972,7 @@ Result D3D11Renderer::createTextureResource(Resource::Usage initialUsage, const { for (int j = 0; j < srcDesc.numMipLevels; j++) { - const int mipHeight = TextureResource::calcMipSize(srcDesc.size.height, j); + const int mipHeight = ITextureResource::Size::calcMipSize(srcDesc.size.height, j); D3D11_SUBRESOURCE_DATA& data = subRes[subResourceIndex]; @@ -927,10 +991,10 @@ Result D3D11Renderer::createTextureResource(Resource::Usage initialUsage, const const int accessFlags = _calcResourceAccessFlags(srcDesc.cpuAccessFlags); RefPtr<TextureResourceImpl> texture(new TextureResourceImpl(srcDesc, initialUsage)); - + switch (srcDesc.type) { - case Resource::Type::Texture1D: + case IResource::Type::Texture1D: { D3D11_TEXTURE1D_DESC desc = { 0 }; desc.BindFlags = bindFlags; @@ -948,8 +1012,8 @@ Result D3D11Renderer::createTextureResource(Resource::Usage initialUsage, const texture->m_resource = texture1D; break; } - case Resource::Type::TextureCube: - case Resource::Type::Texture2D: + case IResource::Type::TextureCube: + case IResource::Type::Texture2D: { D3D11_TEXTURE2D_DESC desc = { 0 }; desc.BindFlags = bindFlags; @@ -965,7 +1029,7 @@ Result D3D11Renderer::createTextureResource(Resource::Usage initialUsage, const desc.SampleDesc.Count = srcDesc.sampleDesc.numSamples; desc.SampleDesc.Quality = srcDesc.sampleDesc.quality; - if (srcDesc.type == Resource::Type::TextureCube) + if (srcDesc.type == IResource::Type::TextureCube) { desc.MiscFlags |= D3D11_RESOURCE_MISC_TEXTURECUBE; } @@ -976,7 +1040,7 @@ Result D3D11Renderer::createTextureResource(Resource::Usage initialUsage, const texture->m_resource = texture2D; break; } - case Resource::Type::Texture3D: + case IResource::Type::Texture3D: { D3D11_TEXTURE3D_DESC desc = { 0 }; desc.BindFlags = bindFlags; @@ -1003,9 +1067,9 @@ Result D3D11Renderer::createTextureResource(Resource::Usage initialUsage, const return SLANG_OK; } -Result D3D11Renderer::createBufferResource(Resource::Usage initialUsage, const BufferResource::Desc& descIn, const void* initData, BufferResource** outResource) +Result D3D11Renderer::createBufferResource(IResource::Usage initialUsage, const IBufferResource::Desc& descIn, const void* initData, IBufferResource** outResource) { - BufferResource::Desc srcDesc(descIn); + IBufferResource::Desc srcDesc(descIn); srcDesc.setDefaults(initialUsage); auto d3dBindFlags = _calcResourceBindFlags(srcDesc.bindFlags); @@ -1031,18 +1095,19 @@ Result D3D11Renderer::createBufferResource(Resource::Usage initialUsage, const B bufferDesc.ByteWidth = UINT(alignedSizeInBytes); bufferDesc.BindFlags = d3dBindFlags; // For read we'll need to do some staging - bufferDesc.CPUAccessFlags = _calcResourceAccessFlags(descIn.cpuAccessFlags & Resource::AccessFlag::Write); + bufferDesc.CPUAccessFlags = + _calcResourceAccessFlags(descIn.cpuAccessFlags & IResource::AccessFlag::Write); bufferDesc.Usage = D3D11_USAGE_DEFAULT; // If written by CPU, make it dynamic - if (descIn.cpuAccessFlags & Resource::AccessFlag::Write) + if (descIn.cpuAccessFlags & IResource::AccessFlag::Write) { bufferDesc.Usage = D3D11_USAGE_DYNAMIC; } switch (initialUsage) { - case Resource::Usage::ConstantBuffer: + case IResource::Usage::ConstantBuffer: { // We'll just assume ConstantBuffers are dynamic for now bufferDesc.Usage = D3D11_USAGE_DYNAMIC; @@ -1077,7 +1142,7 @@ Result D3D11Renderer::createBufferResource(Resource::Usage initialUsage, const B SLANG_RETURN_ON_FAIL(m_device->CreateBuffer(&bufferDesc, initData ? &subResourceData : nullptr, buffer->m_buffer.writeRef())); - if (srcDesc.cpuAccessFlags & Resource::AccessFlag::Read) + if (srcDesc.cpuAccessFlags & IResource::AccessFlag::Read) { D3D11_BUFFER_DESC bufDesc = {}; bufDesc.BindFlags = 0; @@ -1171,7 +1236,7 @@ static D3D11_COMPARISON_FUNC translateComparisonFunc(ComparisonFunc func) } } -Result D3D11Renderer::createSamplerState(SamplerState::Desc const& desc, SamplerState** outSampler) +Result D3D11Renderer::createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) { D3D11_FILTER_REDUCTION_TYPE dxReduction = translateFilterReduction(desc.reductionOp); D3D11_FILTER dxFilter; @@ -1212,7 +1277,7 @@ Result D3D11Renderer::createSamplerState(SamplerState::Desc const& desc, Sampler return SLANG_OK; } -Result D3D11Renderer::createTextureView(TextureResource* texture, ResourceView::Desc const& desc, ResourceView** outView) +Result D3D11Renderer::createTextureView(ITextureResource* texture, IResourceView::Desc const& desc, IResourceView** outView) { auto resourceImpl = (TextureResourceImpl*) texture; @@ -1221,7 +1286,7 @@ Result D3D11Renderer::createTextureView(TextureResource* texture, ResourceView:: default: return SLANG_FAIL; - case ResourceView::Type::RenderTarget: + case IResourceView::Type::RenderTarget: { ComPtr<ID3D11RenderTargetView> rtv; SLANG_RETURN_ON_FAIL(m_device->CreateRenderTargetView(resourceImpl->m_resource, nullptr, rtv.writeRef())); @@ -1234,7 +1299,7 @@ Result D3D11Renderer::createTextureView(TextureResource* texture, ResourceView:: } break; - case ResourceView::Type::DepthStencil: + case IResourceView::Type::DepthStencil: { ComPtr<ID3D11DepthStencilView> dsv; SLANG_RETURN_ON_FAIL(m_device->CreateDepthStencilView(resourceImpl->m_resource, nullptr, dsv.writeRef())); @@ -1247,7 +1312,7 @@ Result D3D11Renderer::createTextureView(TextureResource* texture, ResourceView:: } break; - case ResourceView::Type::UnorderedAccess: + case IResourceView::Type::UnorderedAccess: { ComPtr<ID3D11UnorderedAccessView> uav; SLANG_RETURN_ON_FAIL(m_device->CreateUnorderedAccessView(resourceImpl->m_resource, nullptr, uav.writeRef())); @@ -1260,7 +1325,7 @@ Result D3D11Renderer::createTextureView(TextureResource* texture, ResourceView:: } break; - case ResourceView::Type::ShaderResource: + case IResourceView::Type::ShaderResource: { ComPtr<ID3D11ShaderResourceView> srv; SLANG_RETURN_ON_FAIL(m_device->CreateShaderResourceView(resourceImpl->m_resource, nullptr, srv.writeRef())); @@ -1275,17 +1340,17 @@ Result D3D11Renderer::createTextureView(TextureResource* texture, ResourceView:: } } -Result D3D11Renderer::createBufferView(BufferResource* buffer, ResourceView::Desc const& desc, ResourceView** outView) +Result D3D11Renderer::createBufferView(IBufferResource* buffer, IResourceView::Desc const& desc, IResourceView** outView) { auto resourceImpl = (BufferResourceImpl*) buffer; - auto resourceDesc = resourceImpl->getDesc(); + auto resourceDesc = *resourceImpl->getDesc(); switch (desc.type) { default: return SLANG_FAIL; - case ResourceView::Type::UnorderedAccess: + case IResourceView::Type::UnorderedAccess: { D3D11_UNORDERED_ACCESS_VIEW_DESC uavDesc = {}; uavDesc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER; @@ -1304,7 +1369,7 @@ Result D3D11Renderer::createBufferView(BufferResource* buffer, ResourceView::Des } else { - uavDesc.Buffer.NumElements = UINT(resourceDesc.sizeInBytes / RendererUtil::getFormatSize(desc.format)); + uavDesc.Buffer.NumElements = UINT(resourceDesc.sizeInBytes / gfxGetFormatSize(desc.format)); } ComPtr<ID3D11UnorderedAccessView> uav; @@ -1318,7 +1383,7 @@ Result D3D11Renderer::createBufferView(BufferResource* buffer, ResourceView::Des } break; - case ResourceView::Type::ShaderResource: + case IResourceView::Type::ShaderResource: { D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc = {}; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER; @@ -1349,7 +1414,7 @@ Result D3D11Renderer::createBufferView(BufferResource* buffer, ResourceView::Des } else { - srvDesc.Buffer.NumElements = UINT(resourceDesc.sizeInBytes / RendererUtil::getFormatSize(desc.format)); + srvDesc.Buffer.NumElements = UINT(resourceDesc.sizeInBytes / gfxGetFormatSize(desc.format)); } ComPtr<ID3D11ShaderResourceView> srv; @@ -1365,7 +1430,7 @@ Result D3D11Renderer::createBufferView(BufferResource* buffer, ResourceView::Des } } -Result D3D11Renderer::createInputLayout(const InputElementDesc* inputElementsIn, UInt inputElementCount, InputLayout** outLayout) +Result D3D11Renderer::createInputLayout(const InputElementDesc* inputElementsIn, UInt inputElementCount, IInputLayout** outLayout) { D3D11_INPUT_ELEMENT_DESC inputElements[16] = {}; @@ -1432,7 +1497,7 @@ Result D3D11Renderer::createInputLayout(const InputElementDesc* inputElementsIn, return SLANG_OK; } -void* D3D11Renderer::map(BufferResource* bufferIn, MapFlavor flavor) +void* D3D11Renderer::map(IBufferResource* bufferIn, MapFlavor flavor) { BufferResourceImpl* bufferResource = static_cast<BufferResourceImpl*>(bufferIn); @@ -1475,7 +1540,7 @@ void* D3D11Renderer::map(BufferResource* bufferIn, MapFlavor flavor) return mappedSub.pData; } -void D3D11Renderer::unmap(BufferResource* bufferIn) +void D3D11Renderer::unmap(IBufferResource* bufferIn) { BufferResourceImpl* bufferResource = static_cast<BufferResourceImpl*>(bufferIn); ID3D11Buffer* buffer = (bufferResource->m_mapFlavor == MapFlavor::HostRead) ? bufferResource->m_staging : bufferResource->m_buffer; @@ -1495,7 +1560,7 @@ void D3D11Renderer::setPrimitiveTopology(PrimitiveTopology topology) m_immediateContext->IASetPrimitiveTopology(D3DUtil::getPrimitiveTopology(topology)); } -void D3D11Renderer::setVertexBuffers(UInt startSlot, UInt slotCount, BufferResource*const* buffersIn, const UInt* stridesIn, const UInt* offsetsIn) +void D3D11Renderer::setVertexBuffers(UInt startSlot, UInt slotCount, IBufferResource*const* buffersIn, const UInt* stridesIn, const UInt* offsetsIn) { static const int kMaxVertexBuffers = 16; assert(slotCount <= kMaxVertexBuffers); @@ -1516,13 +1581,13 @@ void D3D11Renderer::setVertexBuffers(UInt startSlot, UInt slotCount, BufferResou m_immediateContext->IASetVertexBuffers((UINT)startSlot, (UINT)slotCount, dxBuffers, &vertexStrides[0], &vertexOffsets[0]); } -void D3D11Renderer::setIndexBuffer(BufferResource* buffer, Format indexFormat, UInt offset) +void D3D11Renderer::setIndexBuffer(IBufferResource* buffer, Format indexFormat, UInt offset) { DXGI_FORMAT dxFormat = D3DUtil::getMapFormat(indexFormat); m_immediateContext->IASetIndexBuffer(((BufferResourceImpl*)buffer)->m_buffer, dxFormat, UINT(offset)); } -void D3D11Renderer::setDepthStencilTarget(ResourceView* depthStencilView) +void D3D11Renderer::setDepthStencilTarget(IResourceView* depthStencilView) { m_dsvBinding = ((DepthStencilViewImpl*) depthStencilView)->m_dsv; m_targetBindingsDirty[int(PipelineType::Graphics)] = true; @@ -1571,7 +1636,7 @@ void D3D11Renderer::setScissorRects(UInt count, ScissorRect const* rects) } -void D3D11Renderer::setPipelineState(PipelineType pipelineType, PipelineState* state) +void D3D11Renderer::setPipelineState(PipelineType pipelineType, IPipelineState* state) { switch(pipelineType) { @@ -1650,7 +1715,7 @@ void D3D11Renderer::drawIndexed(UInt indexCount, UInt startIndex, UInt baseVerte m_immediateContext->DrawIndexed((UINT)indexCount, (UINT)startIndex, (INT)baseVertex); } -Result D3D11Renderer::createProgram(const ShaderProgram::Desc& desc, ShaderProgram** outProgram) +Result D3D11Renderer::createProgram(const IShaderProgram::Desc& desc, IShaderProgram** outProgram) { if (desc.pipelineType == PipelineType::Compute) { @@ -1822,7 +1887,7 @@ D3D11_COLOR_WRITE_ENABLE translateRenderTargetWriteMask(RenderTargetWriteMaskT m return D3D11_COLOR_WRITE_ENABLE(result); } -Result D3D11Renderer::createGraphicsPipelineState(const GraphicsPipelineStateDesc& inDesc, PipelineState** outState) +Result D3D11Renderer::createGraphicsPipelineState(const GraphicsPipelineStateDesc& inDesc, IPipelineState** outState) { GraphicsPipelineStateDesc desc = inDesc; preparePipelineDesc(desc); @@ -1954,7 +2019,7 @@ Result D3D11Renderer::createGraphicsPipelineState(const GraphicsPipelineStateDes return SLANG_OK; } -Result D3D11Renderer::createComputePipelineState(const ComputePipelineStateDesc& inDesc, PipelineState** outState) +Result D3D11Renderer::createComputePipelineState(const ComputePipelineStateDesc& inDesc, IPipelineState** outState) { ComputePipelineStateDesc desc = inDesc; preparePipelineDesc(desc); @@ -1976,7 +2041,7 @@ void D3D11Renderer::dispatchCompute(int x, int y, int z) m_immediateContext->Dispatch(x, y, z); } -Result D3D11Renderer::createDescriptorSetLayout(const DescriptorSetLayout::Desc& desc, DescriptorSetLayout** outLayout) +Result D3D11Renderer::createDescriptorSetLayout(const IDescriptorSetLayout::Desc& desc, IDescriptorSetLayout** outLayout) { RefPtr<DescriptorSetLayoutImpl> descriptorSetLayoutImpl = new DescriptorSetLayoutImpl(); @@ -2072,7 +2137,7 @@ Result D3D11Renderer::createDescriptorSetLayout(const DescriptorSetLayout::Desc& return SLANG_OK; } -Result D3D11Renderer::createPipelineLayout(const PipelineLayout::Desc& desc, PipelineLayout** outLayout) +Result D3D11Renderer::createPipelineLayout(const IPipelineLayout::Desc& desc, IPipelineLayout** outLayout) { RefPtr<PipelineLayoutImpl> pipelineLayoutImpl = new PipelineLayoutImpl(); @@ -2101,7 +2166,7 @@ Result D3D11Renderer::createPipelineLayout(const PipelineLayout::Desc& desc, Pip return SLANG_OK; } -Result D3D11Renderer::createDescriptorSet(DescriptorSetLayout* layout, DescriptorSet** outDescriptorSet) +Result D3D11Renderer::createDescriptorSet(IDescriptorSetLayout* layout, IDescriptorSet** outDescriptorSet) { auto layoutImpl = (DescriptorSetLayoutImpl*)layout; @@ -2168,7 +2233,7 @@ void D3D11Renderer::_flushGraphicsState() { m_targetBindingsDirty[pipelineType] = false; - auto pipelineState = m_currentGraphicsState.Ptr(); + auto pipelineState = m_currentGraphicsState.get(); auto rtvCount = pipelineState->m_rtvCount; auto uavCount = pipelineState->m_pipelineLayout->m_uavCount; @@ -2191,7 +2256,7 @@ void D3D11Renderer::_flushComputeState() { m_targetBindingsDirty[pipelineType] = false; - auto pipelineState = m_currentComputeState.Ptr(); + auto pipelineState = m_currentComputeState.get(); auto uavCount = pipelineState->m_pipelineLayout->m_uavCount; @@ -2203,7 +2268,7 @@ void D3D11Renderer::_flushComputeState() } } -void D3D11Renderer::DescriptorSetImpl::setConstantBuffer(UInt range, UInt index, BufferResource* buffer) +void D3D11Renderer::DescriptorSetImpl::setConstantBuffer(UInt range, UInt index, IBufferResource* buffer) { auto bufferImpl = (BufferResourceImpl*) buffer; auto& rangeInfo = m_layout->m_ranges[range]; @@ -2213,7 +2278,7 @@ void D3D11Renderer::DescriptorSetImpl::setConstantBuffer(UInt range, UInt index, m_cbs[rangeInfo.arrayIndex + index] = bufferImpl->m_buffer; } -void D3D11Renderer::DescriptorSetImpl::setResource(UInt range, UInt index, ResourceView* view) +void D3D11Renderer::DescriptorSetImpl::setResource(UInt range, UInt index, IResourceView* view) { auto viewImpl = (ResourceViewImpl*)view; auto& rangeInfo = m_layout->m_ranges[range]; @@ -2257,7 +2322,7 @@ void D3D11Renderer::DescriptorSetImpl::setResource(UInt range, UInt index, Resou } } -void D3D11Renderer::DescriptorSetImpl::setSampler(UInt range, UInt index, SamplerState* sampler) +void D3D11Renderer::DescriptorSetImpl::setSampler(UInt range, UInt index, ISamplerState* sampler) { auto samplerImpl = (SamplerStateImpl*) sampler; auto& rangeInfo = m_layout->m_ranges[range]; @@ -2270,8 +2335,8 @@ void D3D11Renderer::DescriptorSetImpl::setSampler(UInt range, UInt index, Sample void D3D11Renderer::DescriptorSetImpl::setCombinedTextureSampler( UInt range, UInt index, - ResourceView* textureView, - SamplerState* sampler) + IResourceView* textureView, + ISamplerState* sampler) { auto viewImpl = (ResourceViewImpl*) textureView; auto samplerImpl = (SamplerStateImpl*)sampler; @@ -2327,7 +2392,7 @@ void D3D11Renderer::DescriptorSetImpl::setRootConstants( dxContext->Unmap(dxBuffer, 0); } -void D3D11Renderer::setDescriptorSet(PipelineType pipelineType, PipelineLayout* layout, UInt index, DescriptorSet* descriptorSet) +void D3D11Renderer::setDescriptorSet(PipelineType pipelineType, IPipelineLayout* layout, UInt index, IDescriptorSet* descriptorSet) { auto pipelineLayoutImpl = (PipelineLayoutImpl*)layout; auto descriptorSetImpl = (DescriptorSetImpl*) descriptorSet; @@ -2414,8 +2479,6 @@ void D3D11Renderer::setDescriptorSet(PipelineType pipelineType, PipelineLayout* m_targetBindingsDirty[int(pipelineType)] = true; } } - - } } // renderer_test |
