summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineD3D12
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-10-10 04:22:07 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-10-10 04:22:07 +0000
commit2493c846cfb4e4d60d3a26ca9cd1e9a9b0ed92d6 (patch)
tree40f8bab9964524f3e6b77be3042c236a47c4d6fc /Graphics/GraphicsEngineD3D12
parentImproved D3D12DynamicHeap memory usage reporting (diff)
downloadDiligentCore-2493c846cfb4e4d60d3a26ca9cd1e9a9b0ed92d6.tar.gz
DiligentCore-2493c846cfb4e4d60d3a26ca9cd1e9a9b0ed92d6.zip
Fixed creation of typeless textures in D3D12 backend
Diffstat (limited to 'Graphics/GraphicsEngineD3D12')
-rw-r--r--Graphics/GraphicsEngineD3D12/src/TextureD3D12Impl.cpp28
1 files changed, 22 insertions, 6 deletions
diff --git a/Graphics/GraphicsEngineD3D12/src/TextureD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/TextureD3D12Impl.cpp
index 8a0ddb56..5af28000 100644
--- a/Graphics/GraphicsEngineD3D12/src/TextureD3D12Impl.cpp
+++ b/Graphics/GraphicsEngineD3D12/src/TextureD3D12Impl.cpp
@@ -43,15 +43,30 @@ DXGI_FORMAT GetClearFormat(DXGI_FORMAT Fmt, D3D12_RESOURCE_FLAGS Flags)
{
switch (Fmt)
{
- case DXGI_FORMAT_R32_TYPELESS: return DXGI_FORMAT_D32_FLOAT;
- case DXGI_FORMAT_R16_TYPELESS: return DXGI_FORMAT_D16_UNORM;
- case DXGI_FORMAT_R24G8_TYPELESS: return DXGI_FORMAT_D24_UNORM_S8_UINT;
+ case DXGI_FORMAT_R32_TYPELESS: return DXGI_FORMAT_D32_FLOAT;
+ case DXGI_FORMAT_R16_TYPELESS: return DXGI_FORMAT_D16_UNORM;
+ case DXGI_FORMAT_R24G8_TYPELESS: return DXGI_FORMAT_D24_UNORM_S8_UINT;
case DXGI_FORMAT_R32G8X24_TYPELESS: return DXGI_FORMAT_D32_FLOAT_S8X24_UINT;
}
}
else if (Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)
{
-
+ switch (Fmt)
+ {
+ case DXGI_FORMAT_R32G32B32A32_TYPELESS: return DXGI_FORMAT_R32G32B32A32_FLOAT;
+ case DXGI_FORMAT_R32G32B32_TYPELESS: return DXGI_FORMAT_R32G32B32_FLOAT;
+ case DXGI_FORMAT_R16G16B16A16_TYPELESS: return DXGI_FORMAT_R16G16B16A16_FLOAT;
+ case DXGI_FORMAT_R32G32_TYPELESS: return DXGI_FORMAT_R32G32_FLOAT;
+ case DXGI_FORMAT_R10G10B10A2_TYPELESS: return DXGI_FORMAT_R10G10B10A2_UNORM;
+ case DXGI_FORMAT_R8G8B8A8_TYPELESS: return DXGI_FORMAT_R8G8B8A8_UNORM;
+ case DXGI_FORMAT_R16G16_TYPELESS: return DXGI_FORMAT_R16G16_FLOAT;
+ case DXGI_FORMAT_R32_TYPELESS: return DXGI_FORMAT_R32_FLOAT;
+ case DXGI_FORMAT_R8G8_TYPELESS: return DXGI_FORMAT_R8G8_UNORM;
+ case DXGI_FORMAT_R16_TYPELESS: return DXGI_FORMAT_R16_FLOAT;
+ case DXGI_FORMAT_R8_TYPELESS: return DXGI_FORMAT_R8_UNORM;
+ case DXGI_FORMAT_B8G8R8A8_TYPELESS: return DXGI_FORMAT_B8G8R8A8_UNORM;
+ case DXGI_FORMAT_B8G8R8X8_TYPELESS: return DXGI_FORMAT_B8G8R8X8_UNORM;
+ }
}
return Fmt;
}
@@ -303,8 +318,9 @@ static TextureDesc InitTexDescFromD3D12Resource(ID3D12Resource* pTexture, const
if ((ResourceDesc.Flags & D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE) == 0)
{
auto FormatAttribs = GetTextureFormatAttribs(TexDesc.Format);
- if (FormatAttribs.ComponentType != COMPONENT_TYPE_DEPTH &&
- FormatAttribs.ComponentType != COMPONENT_TYPE_DEPTH_STENCIL)
+ if (FormatAttribs.IsTypeless ||
+ (FormatAttribs.ComponentType != COMPONENT_TYPE_DEPTH &&
+ FormatAttribs.ComponentType != COMPONENT_TYPE_DEPTH_STENCIL) )
{
TexDesc.BindFlags |= BIND_SHADER_RESOURCE;
}