summaryrefslogtreecommitdiffstats
path: root/Graphics
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
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')
-rw-r--r--Graphics/GraphicsEngine/include/TextureBase.h5
-rw-r--r--Graphics/GraphicsEngineD3D12/src/TextureD3D12Impl.cpp28
2 files changed, 27 insertions, 6 deletions
diff --git a/Graphics/GraphicsEngine/include/TextureBase.h b/Graphics/GraphicsEngine/include/TextureBase.h
index 39f98b5c..81f57da1 100644
--- a/Graphics/GraphicsEngine/include/TextureBase.h
+++ b/Graphics/GraphicsEngine/include/TextureBase.h
@@ -383,6 +383,11 @@ void TextureBase<BaseInterface, TRenderDeviceImpl, TTextureViewImpl, TTexViewObj
UNEXPECTED("Unexpected texture dimension");
}
+ if (GetTextureFormatAttribs(ViewDesc.Format).IsTypeless)
+ {
+ TEX_VIEW_VALIDATION_ERROR( "Texture view format (", GetTextureFormatAttribs(ViewDesc.Format).Name, ") cannot be typeless" );
+ }
+
#undef TEX_VIEW_VALIDATION_ERROR
if( ViewDesc.NumMipLevels == 0 )
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;
}