From 966d71e096e1a455dc2dbf218b63266d32080b10 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 25 Nov 2019 15:50:48 +0000 Subject: [PATCH] Explicitly reject BGRA order versions of formats we don't support on D3D --- renderdoc/driver/dxgi/dxgi_common.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/dxgi/dxgi_common.cpp b/renderdoc/driver/dxgi/dxgi_common.cpp index 6d9ddf664..ba1cd1acd 100644 --- a/renderdoc/driver/dxgi/dxgi_common.cpp +++ b/renderdoc/driver/dxgi/dxgi_common.cpp @@ -1997,6 +1997,9 @@ DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt) case ResourceFormatType::BC6: ret = DXGI_FORMAT_BC6H_UF16; break; case ResourceFormatType::BC7: ret = DXGI_FORMAT_BC7_UNORM; break; case ResourceFormatType::R10G10B10A2: + // only support rgba order + if(fmt.BGRAOrder()) + return DXGI_FORMAT_UNKNOWN; if(fmt.compType == CompType::UNorm) ret = DXGI_FORMAT_R10G10B10A2_UNORM; else if(fmt.compType == CompType::Float) @@ -2153,8 +2156,16 @@ DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt) else return DXGI_FORMAT_UNKNOWN; + // only support 8-bit UNORM for BGRA order if(fmt.BGRAOrder()) - ret = DXGI_FORMAT_B8G8R8A8_UNORM; + { + if(fmt.compByteWidth == 1 && fmt.compType == CompType::UNorm) + return DXGI_FORMAT_B8G8R8A8_UNORM; + else if(fmt.compByteWidth == 1 && fmt.compType == CompType::UNormSRGB) + return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; + else + return DXGI_FORMAT_UNKNOWN; + } } else if(fmt.compCount == 3) { @@ -2162,6 +2173,10 @@ DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt) ret = DXGI_FORMAT_R32G32B32_TYPELESS; else return DXGI_FORMAT_UNKNOWN; + + // only support RGBA order + if(fmt.BGRAOrder()) + return DXGI_FORMAT_UNKNOWN; } else if(fmt.compCount == 2) { @@ -2173,6 +2188,10 @@ DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt) ret = DXGI_FORMAT_R8G8_TYPELESS; else return DXGI_FORMAT_UNKNOWN; + + // only support RGBA order + if(fmt.BGRAOrder()) + return DXGI_FORMAT_UNKNOWN; } else if(fmt.compCount == 1) { @@ -2184,6 +2203,10 @@ DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt) ret = DXGI_FORMAT_R8_TYPELESS; else return DXGI_FORMAT_UNKNOWN; + + // only support RGBA order + if(fmt.BGRAOrder()) + return DXGI_FORMAT_UNKNOWN; } else {