From 5cbd61774c6ef2209fa0afc79b1dbbb68514346b Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 6 Dec 2021 09:06:16 -0800 Subject: gfx Mutable Root shader object implementation. (#2042) * gfx Mutable Root shader object implementation. * Fix x86 build. Co-authored-by: Yong He --- tools/gfx/d3d12/render-d3d12.cpp | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'tools/gfx/d3d12/render-d3d12.cpp') diff --git a/tools/gfx/d3d12/render-d3d12.cpp b/tools/gfx/d3d12/render-d3d12.cpp index 4d5845b85..5a0478f68 100644 --- a/tools/gfx/d3d12/render-d3d12.cpp +++ b/tools/gfx/d3d12/render-d3d12.cpp @@ -131,6 +131,8 @@ public: override; virtual Result createMutableShaderObject( ShaderObjectLayoutBase* layout, IShaderObject** outObject) override; + virtual SLANG_NO_THROW Result SLANG_MCALL + createMutableRootShaderObject(IShaderProgram* program, IShaderObject** outObject) override; virtual SLANG_NO_THROW Result SLANG_MCALL createProgram(const IShaderProgram::Desc& desc, IShaderProgram** outProgram) override; @@ -2819,6 +2821,21 @@ public: return SLANG_OK; } + virtual SLANG_NO_THROW Result SLANG_MCALL + copyFrom(IShaderObject* object, ITransientResourceHeap* transientHeap) override + { + SLANG_RETURN_ON_FAIL(Super::copyFrom(object, transientHeap)); + if (auto srcObj = dynamic_cast(object)) + { + for (Index i = 0; i < srcObj->m_entryPoints.getCount(); i++) + { + m_entryPoints[i]->copyFrom(srcObj->m_entryPoints[i], transientHeap); + } + return SLANG_OK; + } + return SLANG_FAIL; + } + public: Result bindAsRoot( BindingContext* context, @@ -4935,8 +4952,8 @@ Result D3D12Device::getTextureAllocationInfo( D3D12_RESOURCE_DESC resourceDesc = {}; setupResourceDesc(resourceDesc, srcDesc); auto allocInfo = m_device->GetResourceAllocationInfo(0xFF, 1, &resourceDesc); - *outSize = allocInfo.SizeInBytes; - *outAlignment = allocInfo.Alignment; + *outSize = (size_t)allocInfo.SizeInBytes; + *outAlignment = (size_t)allocInfo.Alignment; return SLANG_OK; } @@ -5843,6 +5860,14 @@ Result D3D12Device::createMutableShaderObject( return SLANG_OK; } +Result D3D12Device::createMutableRootShaderObject(IShaderProgram* program, IShaderObject** outObject) +{ + RefPtr result = + new MutableRootShaderObject(this, static_cast(program)); + returnComPtr(outObject, result); + return SLANG_OK; +} + Result D3D12Device::createGraphicsPipelineState(const GraphicsPipelineStateDesc& inDesc, IPipelineState** outState) { GraphicsPipelineStateDesc desc = inDesc; -- cgit v1.2.3