From a6a2a7f20c23eb7f8339ea954471c76cbade42c8 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 13 Dec 2018 16:03:44 +0000 Subject: [PATCH] Add helpers to get view cast formats for YUV textures --- renderdoc/driver/dxgi/dxgi_common.cpp | 56 +++++++++++++++++++++++++++ renderdoc/driver/dxgi/dxgi_common.h | 3 ++ 2 files changed, 59 insertions(+) diff --git a/renderdoc/driver/dxgi/dxgi_common.cpp b/renderdoc/driver/dxgi/dxgi_common.cpp index 0ec5e8e4a..5c0545753 100644 --- a/renderdoc/driver/dxgi/dxgi_common.cpp +++ b/renderdoc/driver/dxgi/dxgi_common.cpp @@ -1406,6 +1406,62 @@ DXGI_FORMAT GetTypelessFormat(DXGI_FORMAT f) } } +DXGI_FORMAT GetYUVViewPlane0Format(DXGI_FORMAT f) +{ + switch(f) + { + case DXGI_FORMAT_AYUV: return DXGI_FORMAT_R8G8B8A8_UNORM; + case DXGI_FORMAT_Y410: return DXGI_FORMAT_R10G10B10A2_UNORM; + case DXGI_FORMAT_Y416: return DXGI_FORMAT_R16G16B16A16_UNORM; + case DXGI_FORMAT_NV11: + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_P208: return DXGI_FORMAT_R8_UNORM; + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: return DXGI_FORMAT_R16_UNORM; + case DXGI_FORMAT_YUY2: return DXGI_FORMAT_R8G8B8A8_UNORM; + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: return DXGI_FORMAT_R16G16B16A16_UNORM; + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: return DXGI_FORMAT_R8G8_UNORM; + case DXGI_FORMAT_P8: return DXGI_FORMAT_R8_UNORM; + case DXGI_FORMAT_A8P8: return DXGI_FORMAT_R8G8_UNORM; + case DXGI_FORMAT_V208: + case DXGI_FORMAT_V408: return DXGI_FORMAT_R8G8B8A8_UNORM; + case DXGI_FORMAT_420_OPAQUE: return DXGI_FORMAT_UNKNOWN; + default: break; + } + + return f; +} + +DXGI_FORMAT GetYUVViewPlane1Format(DXGI_FORMAT f) +{ + switch(f) + { + case DXGI_FORMAT_NV11: + case DXGI_FORMAT_NV12: + case DXGI_FORMAT_P208: return DXGI_FORMAT_R8G8_UNORM; + case DXGI_FORMAT_P010: + case DXGI_FORMAT_P016: return DXGI_FORMAT_R16G16_UNORM; + case DXGI_FORMAT_AYUV: + case DXGI_FORMAT_Y410: + case DXGI_FORMAT_Y416: + case DXGI_FORMAT_YUY2: + case DXGI_FORMAT_Y210: + case DXGI_FORMAT_Y216: + case DXGI_FORMAT_420_OPAQUE: + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + case DXGI_FORMAT_V208: + case DXGI_FORMAT_V408: return DXGI_FORMAT_UNKNOWN; + default: break; + } + + return f; +} + D3D_PRIMITIVE_TOPOLOGY MakeD3DPrimitiveTopology(Topology Topo) { switch(Topo) diff --git a/renderdoc/driver/dxgi/dxgi_common.h b/renderdoc/driver/dxgi/dxgi_common.h index 533c3764a..594bd8551 100644 --- a/renderdoc/driver/dxgi/dxgi_common.h +++ b/renderdoc/driver/dxgi/dxgi_common.h @@ -49,6 +49,9 @@ bool IsBlockFormat(DXGI_FORMAT f); bool IsDepthFormat(DXGI_FORMAT f); bool IsDepthAndStencilFormat(DXGI_FORMAT f); +DXGI_FORMAT GetYUVViewPlane0Format(DXGI_FORMAT f); +DXGI_FORMAT GetYUVViewPlane1Format(DXGI_FORMAT f); + bool IsUIntFormat(DXGI_FORMAT f); bool IsTypelessFormat(DXGI_FORMAT f); bool IsIntFormat(DXGI_FORMAT f);