diff options
| author | Yong He <yonghe@outlook.com> | 2021-11-17 13:20:13 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-17 13:20:13 -0800 |
| commit | efebfada38cd5252da62f7618c7f95e3ab180fbd (patch) | |
| tree | ca36ae2cb1e1046666103c678ab9a8e766b53efb /tools/gfx/d3d12/render-d3d12.cpp | |
| parent | 763d0b5acb584a4d2eca5e02922afed7d499141e (diff) | |
gfx ShaderObject interface update, getTextureAllocationInfo() (#2019)
* gfx ShaderObject interface update, getTextureAllocationInfo()
* Fix render-vk compiler warnings and errors.
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tools/gfx/d3d12/render-d3d12.cpp')
| -rw-r--r-- | tools/gfx/d3d12/render-d3d12.cpp | 64 |
1 files changed, 51 insertions, 13 deletions
diff --git a/tools/gfx/d3d12/render-d3d12.cpp b/tools/gfx/d3d12/render-d3d12.cpp index 029aee4c6..0d9c94710 100644 --- a/tools/gfx/d3d12/render-d3d12.cpp +++ b/tools/gfx/d3d12/render-d3d12.cpp @@ -80,6 +80,8 @@ public: WindowHandle window, ISwapchain** outSwapchain) override; + virtual SLANG_NO_THROW Result SLANG_MCALL getTextureAllocationInfo( + const ITextureResource::Desc& desc, size_t* outSize, size_t* outAlignment) override; virtual SLANG_NO_THROW Result SLANG_MCALL createTextureResource( const ITextureResource::Desc& desc, const ITextureResource::SubresourceData* initData, @@ -2079,6 +2081,16 @@ public: return SLANG_OK; } + virtual SLANG_NO_THROW const void* SLANG_MCALL getRawData() override + { + return m_data.getBuffer(); + } + + virtual SLANG_NO_THROW size_t SLANG_MCALL getSize() override + { + return (size_t)m_data.getCount(); + } + SLANG_NO_THROW Result SLANG_MCALL setData(ShaderOffset const& inOffset, void const* data, size_t inSize) SLANG_OVERRIDE { @@ -4789,13 +4801,8 @@ static D3D12_RESOURCE_DIMENSION _calcResourceDimension(IResource::Type type) } } -Result D3D12Device::createTextureResource(const ITextureResource::Desc& descIn, const ITextureResource::SubresourceData* initData, ITextureResource** outResource) +Result setupResourceDesc(D3D12_RESOURCE_DESC& resourceDesc, const ITextureResource::Desc& srcDesc) { - // Description of uploading on Dx12 - // https://msdn.microsoft.com/en-us/library/windows/desktop/dn899215%28v=vs.85%29.aspx - - TextureResource::Desc srcDesc = fixupTextureDesc(descIn); - const DXGI_FORMAT pixelFormat = D3DUtil::getMapFormat(srcDesc.format); if (pixelFormat == DXGI_FORMAT_UNKNOWN) { @@ -4811,10 +4818,6 @@ Result D3D12Device::createTextureResource(const ITextureResource::Desc& descIn, } const int numMipMaps = srcDesc.numMipLevels; - - // Setup desc - D3D12_RESOURCE_DESC resourceDesc; - resourceDesc.Dimension = dimension; resourceDesc.Format = pixelFormat; resourceDesc.Width = srcDesc.size.width; @@ -4832,6 +4835,33 @@ Result D3D12Device::createTextureResource(const ITextureResource::Desc& descIn, resourceDesc.Alignment = 0; + return SLANG_OK; +} + +Result D3D12Device::getTextureAllocationInfo( + const ITextureResource::Desc& desc, size_t* outSize, size_t* outAlignment) +{ + TextureResource::Desc srcDesc = fixupTextureDesc(desc); + D3D12_RESOURCE_DESC resourceDesc = {}; + setupResourceDesc(resourceDesc, srcDesc); + auto allocInfo = m_device->GetResourceAllocationInfo(0xFF, 1, &resourceDesc); + *outSize = allocInfo.SizeInBytes; + *outAlignment = allocInfo.Alignment; + return SLANG_OK; +} + +Result D3D12Device::createTextureResource(const ITextureResource::Desc& descIn, const ITextureResource::SubresourceData* initData, ITextureResource** outResource) +{ + // Description of uploading on Dx12 + // https://msdn.microsoft.com/en-us/library/windows/desktop/dn899215%28v=vs.85%29.aspx + + TextureResource::Desc srcDesc = fixupTextureDesc(descIn); + + D3D12_RESOURCE_DESC resourceDesc = {}; + setupResourceDesc(resourceDesc, srcDesc); + const int arraySize = calcEffectiveArraySize(srcDesc); + const int numMipMaps = srcDesc.numMipLevels; + RefPtr<TextureResourceImpl> texture(new TextureResourceImpl(srcDesc)); // Create the target resource @@ -4851,7 +4881,7 @@ Result D3D12Device::createTextureResource(const ITextureResource::Desc& descIn, { clearValuePtr = nullptr; } - clearValue.Format = pixelFormat; + clearValue.Format = resourceDesc.Format; memcpy(clearValue.Color, &descIn.optimalClearValue.color, sizeof(clearValue.Color)); clearValue.DepthStencil.Depth = descIn.optimalClearValue.depthStencil.depth; clearValue.DepthStencil.Stencil = descIn.optimalClearValue.depthStencil.stencil; @@ -4870,13 +4900,21 @@ Result D3D12Device::createTextureResource(const ITextureResource::Desc& descIn, List<D3D12_PLACED_SUBRESOURCE_FOOTPRINT> layouts; layouts.setCount(numMipMaps); List<UInt64> mipRowSizeInBytes; - mipRowSizeInBytes.setCount(numMipMaps); + mipRowSizeInBytes.setCount(srcDesc.numMipLevels); List<UInt32> mipNumRows; mipNumRows.setCount(numMipMaps); // NOTE! This is just the size for one array upload -> not for the whole texture UInt64 requiredSize = 0; - m_device->GetCopyableFootprints(&resourceDesc, 0, numMipMaps, 0, layouts.begin(), mipNumRows.begin(), mipRowSizeInBytes.begin(), &requiredSize); + m_device->GetCopyableFootprints( + &resourceDesc, + 0, + srcDesc.numMipLevels, + 0, + layouts.begin(), + mipNumRows.begin(), + mipRowSizeInBytes.begin(), + &requiredSize); // Sub resource indexing // https://msdn.microsoft.com/en-us/library/windows/desktop/dn705766(v=vs.85).aspx#subresource_indexing |
