diff options
| author | lucy96chen <47800040+lucy96chen@users.noreply.github.com> | 2022-01-25 10:26:29 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-25 10:26:29 -0800 |
| commit | 6528b1c7f32d8e2c8de8f4e1dd386533cd14b8f1 (patch) | |
| tree | c38fede39e51ae21d840aabe24212d711f522f1e /tools/gfx/d3d12/render-d3d12.cpp | |
| parent | 7cff340b10b27f82781335093759bbdc19cd2865 (diff) | |
Add implementations for resolveResource() to D3D12 and Vulkan backends (#2094)
* Added implementations for resolveResource to both D3D and Vulkan backends
* Simple test for resolving a multisampled resource written and confirmed to run successfully for D3D12
* Fixed a bug preventing MSAA from working in Vulkan
* Changed test format to RGBA32 Float (because swiftshader)
Diffstat (limited to 'tools/gfx/d3d12/render-d3d12.cpp')
| -rw-r--r-- | tools/gfx/d3d12/render-d3d12.cpp | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/tools/gfx/d3d12/render-d3d12.cpp b/tools/gfx/d3d12/render-d3d12.cpp index e0c324d34..1b146bc4e 100644 --- a/tools/gfx/d3d12/render-d3d12.cpp +++ b/tools/gfx/d3d12/render-d3d12.cpp @@ -4314,15 +4314,44 @@ public: virtual SLANG_NO_THROW void SLANG_MCALL resolveResource( ITextureResource* source, + ResourceState sourceState, SubresourceRange sourceRange, ITextureResource* dest, + ResourceState destState, SubresourceRange destRange) override { - SLANG_UNUSED(source); - SLANG_UNUSED(sourceRange); - SLANG_UNUSED(dest); - SLANG_UNUSED(destRange); - SLANG_UNIMPLEMENTED_X("resolveResource"); + auto srcTexture = static_cast<TextureResourceImpl*>(source); + auto srcDesc = srcTexture->getDesc(); + auto dstTexture = static_cast<TextureResourceImpl*>(dest); + auto dstDesc = dstTexture->getDesc(); + + for (uint32_t layer = 0; layer < sourceRange.layerCount; ++layer) + { + for (uint32_t mip = 0; mip < sourceRange.mipLevelCount; ++mip) + { + auto srcSubresourceIndex = D3DUtil::getSubresourceIndex( + mip + sourceRange.mipLevel, + layer + sourceRange.baseArrayLayer, + 0, + srcDesc->numMipLevels, + srcDesc->arraySize); + auto dstSubresourceIndex = D3DUtil::getSubresourceIndex( + mip + destRange.mipLevel, + layer + destRange.baseArrayLayer, + 0, + dstDesc->numMipLevels, + dstDesc->arraySize); + + DXGI_FORMAT format = D3DUtil::getMapFormat(srcDesc->format); + + m_commandBuffer->m_cmdList->ResolveSubresource( + dstTexture->m_resource.getResource(), + dstSubresourceIndex, + srcTexture->m_resource.getResource(), + srcSubresourceIndex, + format); + } + } } virtual SLANG_NO_THROW void SLANG_MCALL copyTextureToBuffer( |
