/****************************************************************************** * The MIT License (MIT) * * Copyright (c) 2016 Baldur Karlsson * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. ******************************************************************************/ #include "dxgi_common.h" #include "common/common.h" #include "serialise/serialiser.h" UINT GetFormatBPP(DXGI_FORMAT f) { UINT ret = 8; switch(f) { case DXGI_FORMAT_R32G32B32A32_TYPELESS: case DXGI_FORMAT_R32G32B32A32_FLOAT: case DXGI_FORMAT_R32G32B32A32_UINT: case DXGI_FORMAT_R32G32B32A32_SINT: ret *= 16; break; case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R32G32B32_FLOAT: case DXGI_FORMAT_R32G32B32_UINT: case DXGI_FORMAT_R32G32B32_SINT: ret *= 12; break; case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R16G16B16A16_UNORM: case DXGI_FORMAT_R16G16B16A16_UINT: case DXGI_FORMAT_R16G16B16A16_SNORM: case DXGI_FORMAT_R16G16B16A16_SINT: case DXGI_FORMAT_R32G32_TYPELESS: case DXGI_FORMAT_R32G32_FLOAT: case DXGI_FORMAT_R32G32_UINT: case DXGI_FORMAT_R32G32_SINT: case DXGI_FORMAT_R32G8X24_TYPELESS: case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: ret *= 8; break; case DXGI_FORMAT_R10G10B10A2_TYPELESS: case DXGI_FORMAT_R10G10B10A2_UNORM: case DXGI_FORMAT_R10G10B10A2_UINT: case DXGI_FORMAT_R11G11B10_FLOAT: case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R8G8B8A8_SNORM: case DXGI_FORMAT_R8G8B8A8_SINT: case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R16G16_UNORM: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R16G16_SNORM: case DXGI_FORMAT_R16G16_SINT: case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_D32_FLOAT: case DXGI_FORMAT_R32_FLOAT: case DXGI_FORMAT_R32_UINT: case DXGI_FORMAT_R32_SINT: case DXGI_FORMAT_R24G8_TYPELESS: case DXGI_FORMAT_D24_UNORM_S8_UINT: case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: case DXGI_FORMAT_X24_TYPELESS_G8_UINT: case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: case DXGI_FORMAT_R8G8_B8G8_UNORM: case DXGI_FORMAT_G8R8_G8B8_UNORM: case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_B8G8R8X8_UNORM: case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: case DXGI_FORMAT_B8G8R8A8_TYPELESS: case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: case DXGI_FORMAT_B8G8R8X8_TYPELESS: case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: ret *= 4; break; case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R8G8_SNORM: case DXGI_FORMAT_R8G8_SINT: case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_D16_UNORM: case DXGI_FORMAT_R16_UNORM: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R16_SNORM: case DXGI_FORMAT_R16_SINT: case DXGI_FORMAT_B5G6R5_UNORM: case DXGI_FORMAT_B5G5R5A1_UNORM: ret *= 2; break; case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_R8_UINT: case DXGI_FORMAT_R8_SNORM: case DXGI_FORMAT_R8_SINT: case DXGI_FORMAT_A8_UNORM: ret *= 1; break; case DXGI_FORMAT_R1_UNORM: ret /= 8; break; case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC1_UNORM: case DXGI_FORMAT_BC1_UNORM_SRGB: case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC4_UNORM: case DXGI_FORMAT_BC4_SNORM: // return block size (in bits) ret *= 8; break; case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC2_UNORM: case DXGI_FORMAT_BC2_UNORM_SRGB: case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC3_UNORM: case DXGI_FORMAT_BC3_UNORM_SRGB: case DXGI_FORMAT_BC5_TYPELESS: case DXGI_FORMAT_BC5_UNORM: case DXGI_FORMAT_BC5_SNORM: case DXGI_FORMAT_BC6H_TYPELESS: case DXGI_FORMAT_BC6H_UF16: case DXGI_FORMAT_BC6H_SF16: case DXGI_FORMAT_BC7_TYPELESS: case DXGI_FORMAT_BC7_UNORM: case DXGI_FORMAT_BC7_UNORM_SRGB: // return block size (in bits) ret *= 16; break; case DXGI_FORMAT_AYUV: case DXGI_FORMAT_Y410: case DXGI_FORMAT_YUY2: case DXGI_FORMAT_Y416: case DXGI_FORMAT_NV12: case DXGI_FORMAT_P010: case DXGI_FORMAT_P016: case DXGI_FORMAT_420_OPAQUE: case DXGI_FORMAT_Y210: case DXGI_FORMAT_Y216: case DXGI_FORMAT_NV11: case DXGI_FORMAT_AI44: case DXGI_FORMAT_IA44: case DXGI_FORMAT_P8: case DXGI_FORMAT_A8P8: case DXGI_FORMAT_P208: case DXGI_FORMAT_V208: case DXGI_FORMAT_V408: RDCERR("Video formats not supported"); break; case DXGI_FORMAT_B4G4R4A4_UNORM: ret *= 2; // 4 channels, half a byte each break; case DXGI_FORMAT_UNKNOWN: ret = 0; RDCWARN("Getting BPP of DXGI_FORMAT_UNKNOWN"); break; default: RDCERR("Unrecognised DXGI Format: %d", f); break; } return ret; } UINT GetByteSize(int Width, int Height, int Depth, DXGI_FORMAT Format, int mip) { UINT ret = RDCMAX(Width >> mip, 1) * RDCMAX(Height >> mip, 1) * RDCMAX(Depth >> mip, 1); switch(Format) { case DXGI_FORMAT_R32G32B32A32_TYPELESS: case DXGI_FORMAT_R32G32B32A32_FLOAT: case DXGI_FORMAT_R32G32B32A32_UINT: case DXGI_FORMAT_R32G32B32A32_SINT: ret *= 16; break; case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R32G32B32_FLOAT: case DXGI_FORMAT_R32G32B32_UINT: case DXGI_FORMAT_R32G32B32_SINT: ret *= 12; break; case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R16G16B16A16_UNORM: case DXGI_FORMAT_R16G16B16A16_UINT: case DXGI_FORMAT_R16G16B16A16_SNORM: case DXGI_FORMAT_R16G16B16A16_SINT: case DXGI_FORMAT_R32G32_TYPELESS: case DXGI_FORMAT_R32G32_FLOAT: case DXGI_FORMAT_R32G32_UINT: case DXGI_FORMAT_R32G32_SINT: case DXGI_FORMAT_R32G8X24_TYPELESS: case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: ret *= 8; break; case DXGI_FORMAT_R10G10B10A2_TYPELESS: case DXGI_FORMAT_R10G10B10A2_UNORM: case DXGI_FORMAT_R10G10B10A2_UINT: case DXGI_FORMAT_R11G11B10_FLOAT: case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R8G8B8A8_SNORM: case DXGI_FORMAT_R8G8B8A8_SINT: case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R16G16_UNORM: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R16G16_SNORM: case DXGI_FORMAT_R16G16_SINT: case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_D32_FLOAT: case DXGI_FORMAT_R32_FLOAT: case DXGI_FORMAT_R32_UINT: case DXGI_FORMAT_R32_SINT: case DXGI_FORMAT_R24G8_TYPELESS: case DXGI_FORMAT_D24_UNORM_S8_UINT: case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: case DXGI_FORMAT_X24_TYPELESS_G8_UINT: case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: case DXGI_FORMAT_R8G8_B8G8_UNORM: case DXGI_FORMAT_G8R8_G8B8_UNORM: case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_B8G8R8X8_UNORM: case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: case DXGI_FORMAT_B8G8R8A8_TYPELESS: case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: case DXGI_FORMAT_B8G8R8X8_TYPELESS: case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: ret *= 4; break; case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R8G8_SNORM: case DXGI_FORMAT_R8G8_SINT: case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_D16_UNORM: case DXGI_FORMAT_R16_UNORM: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R16_SNORM: case DXGI_FORMAT_R16_SINT: case DXGI_FORMAT_B5G6R5_UNORM: case DXGI_FORMAT_B5G5R5A1_UNORM: ret *= 2; break; case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_R8_UINT: case DXGI_FORMAT_R8_SNORM: case DXGI_FORMAT_R8_SINT: case DXGI_FORMAT_A8_UNORM: ret *= 1; break; case DXGI_FORMAT_R1_UNORM: ret = RDCMAX(ret / 8, 1U); break; case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC1_UNORM: case DXGI_FORMAT_BC1_UNORM_SRGB: case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC4_UNORM: case DXGI_FORMAT_BC4_SNORM: ret = AlignUp4(RDCMAX(Width >> mip, 1)) * AlignUp4(RDCMAX(Height >> mip, 1)) * RDCMAX(Depth >> mip, 1); ret /= 2; break; case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC2_UNORM: case DXGI_FORMAT_BC2_UNORM_SRGB: case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC3_UNORM: case DXGI_FORMAT_BC3_UNORM_SRGB: case DXGI_FORMAT_BC5_TYPELESS: case DXGI_FORMAT_BC5_UNORM: case DXGI_FORMAT_BC5_SNORM: case DXGI_FORMAT_BC6H_TYPELESS: case DXGI_FORMAT_BC6H_UF16: case DXGI_FORMAT_BC6H_SF16: case DXGI_FORMAT_BC7_TYPELESS: case DXGI_FORMAT_BC7_UNORM: case DXGI_FORMAT_BC7_UNORM_SRGB: ret = AlignUp4(RDCMAX(Width >> mip, 1)) * AlignUp4(RDCMAX(Height >> mip, 1)) * RDCMAX(Depth >> mip, 1); ret *= 1; break; case DXGI_FORMAT_AYUV: case DXGI_FORMAT_Y410: case DXGI_FORMAT_YUY2: case DXGI_FORMAT_Y416: case DXGI_FORMAT_NV12: case DXGI_FORMAT_P010: case DXGI_FORMAT_P016: case DXGI_FORMAT_420_OPAQUE: case DXGI_FORMAT_Y210: case DXGI_FORMAT_Y216: case DXGI_FORMAT_NV11: case DXGI_FORMAT_AI44: case DXGI_FORMAT_IA44: case DXGI_FORMAT_P8: case DXGI_FORMAT_A8P8: case DXGI_FORMAT_P208: case DXGI_FORMAT_V208: case DXGI_FORMAT_V408: RDCERR("Video formats not supported"); break; case DXGI_FORMAT_B4G4R4A4_UNORM: ret *= 2; // 4 channels, half a byte each break; case DXGI_FORMAT_UNKNOWN: RDCERR("Getting byte size of unknown DXGI format"); ret = 0; break; default: RDCERR("Unrecognised DXGI Format: %d", Format); break; } return ret; } bool IsBlockFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC1_UNORM: case DXGI_FORMAT_BC1_UNORM_SRGB: case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC4_UNORM: case DXGI_FORMAT_BC4_SNORM: case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC2_UNORM: case DXGI_FORMAT_BC2_UNORM_SRGB: case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC3_UNORM: case DXGI_FORMAT_BC3_UNORM_SRGB: case DXGI_FORMAT_BC5_TYPELESS: case DXGI_FORMAT_BC5_UNORM: case DXGI_FORMAT_BC5_SNORM: case DXGI_FORMAT_BC6H_TYPELESS: case DXGI_FORMAT_BC6H_UF16: case DXGI_FORMAT_BC6H_SF16: case DXGI_FORMAT_BC7_TYPELESS: case DXGI_FORMAT_BC7_UNORM: case DXGI_FORMAT_BC7_UNORM_SRGB: return true; default: break; } return false; } bool IsDepthFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R32G8X24_TYPELESS: case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: case DXGI_FORMAT_D24_UNORM_S8_UINT: case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: case DXGI_FORMAT_X24_TYPELESS_G8_UINT: case DXGI_FORMAT_R24G8_TYPELESS: case DXGI_FORMAT_D32_FLOAT: case DXGI_FORMAT_D16_UNORM: return true; } return false; } bool IsTypelessFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R32G32B32A32_TYPELESS: case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R32G32_TYPELESS: case DXGI_FORMAT_R32G8X24_TYPELESS: case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: case DXGI_FORMAT_R10G10B10A2_TYPELESS: case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_R24G8_TYPELESS: case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: case DXGI_FORMAT_X24_TYPELESS_G8_UINT: case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC5_TYPELESS: case DXGI_FORMAT_B8G8R8A8_TYPELESS: case DXGI_FORMAT_B8G8R8X8_TYPELESS: case DXGI_FORMAT_BC6H_TYPELESS: case DXGI_FORMAT_BC7_TYPELESS: return true; } return false; } bool IsUIntFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R32G32B32A32_UINT: case DXGI_FORMAT_R32G32B32_UINT: case DXGI_FORMAT_R16G16B16A16_UINT: case DXGI_FORMAT_R32G32_UINT: case DXGI_FORMAT_R10G10B10A2_UINT: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R32_UINT: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R8_UINT: return true; } return false; } bool IsIntFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R32G32B32A32_SINT: case DXGI_FORMAT_R32G32B32_SINT: case DXGI_FORMAT_R16G16B16A16_SINT: case DXGI_FORMAT_R32G32_SINT: case DXGI_FORMAT_R8G8B8A8_SINT: case DXGI_FORMAT_R16G16_SINT: case DXGI_FORMAT_R32_SINT: case DXGI_FORMAT_R8G8_SINT: case DXGI_FORMAT_R16_SINT: case DXGI_FORMAT_R8_SINT: return true; } return false; } bool IsSRGBFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_BC1_UNORM_SRGB: case DXGI_FORMAT_BC2_UNORM_SRGB: case DXGI_FORMAT_BC3_UNORM_SRGB: case DXGI_FORMAT_BC7_UNORM_SRGB: case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: return true; default: break; } return false; } DXGI_FORMAT GetDepthTypedFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R32_FLOAT: case DXGI_FORMAT_R32_TYPELESS: return DXGI_FORMAT_D32_FLOAT; case DXGI_FORMAT_R32G8X24_TYPELESS: case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: return DXGI_FORMAT_D32_FLOAT_S8X24_UINT; case DXGI_FORMAT_R24G8_TYPELESS: case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: case DXGI_FORMAT_X24_TYPELESS_G8_UINT: return DXGI_FORMAT_D24_UNORM_S8_UINT; case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_R16_TYPELESS: return DXGI_FORMAT_D16_UNORM; default: break; } return f; } DXGI_FORMAT GetNonSRGBFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: return DXGI_FORMAT_R8G8B8A8_UNORM; case DXGI_FORMAT_BC1_UNORM_SRGB: return DXGI_FORMAT_BC1_UNORM; case DXGI_FORMAT_BC2_UNORM_SRGB: return DXGI_FORMAT_BC2_UNORM; case DXGI_FORMAT_BC3_UNORM_SRGB: return DXGI_FORMAT_BC3_UNORM; case DXGI_FORMAT_BC7_UNORM_SRGB: return DXGI_FORMAT_BC7_UNORM; case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: return DXGI_FORMAT_B8G8R8A8_UNORM; case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: return DXGI_FORMAT_B8G8R8X8_UNORM; default: break; } return f; } DXGI_FORMAT GetSRGBFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8B8A8_UNORM: return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB; case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC1_UNORM: return DXGI_FORMAT_BC1_UNORM_SRGB; case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC2_UNORM: return DXGI_FORMAT_BC2_UNORM_SRGB; case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC3_UNORM: return DXGI_FORMAT_BC3_UNORM_SRGB; case DXGI_FORMAT_BC7_TYPELESS: case DXGI_FORMAT_BC7_UNORM: return DXGI_FORMAT_BC7_UNORM_SRGB; case DXGI_FORMAT_B8G8R8A8_TYPELESS: case DXGI_FORMAT_B8G8R8A8_UNORM: return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; case DXGI_FORMAT_B8G8R8X8_TYPELESS: case DXGI_FORMAT_B8G8R8X8_UNORM: return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB; default: break; } return f; } DXGI_FORMAT GetUnormTypedFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R16G16B16A16_UINT: case DXGI_FORMAT_R16G16B16A16_SNORM: case DXGI_FORMAT_R16G16B16A16_SINT: return DXGI_FORMAT_R16G16B16A16_UNORM; case DXGI_FORMAT_R10G10B10A2_TYPELESS: case DXGI_FORMAT_R10G10B10A2_UINT: return DXGI_FORMAT_R10G10B10A2_UNORM; case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R8G8B8A8_SNORM: case DXGI_FORMAT_R8G8B8A8_SINT: return DXGI_FORMAT_R8G8B8A8_UNORM; case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R16G16_SNORM: case DXGI_FORMAT_R16G16_SINT: return DXGI_FORMAT_R16G16_UNORM; case DXGI_FORMAT_R24G8_TYPELESS: case DXGI_FORMAT_D24_UNORM_S8_UINT: case DXGI_FORMAT_X24_TYPELESS_G8_UINT: return DXGI_FORMAT_R24_UNORM_X8_TYPELESS; case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R8G8_SNORM: case DXGI_FORMAT_R8G8_SINT: return DXGI_FORMAT_R8G8_UNORM; case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_D16_UNORM: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R16_SNORM: case DXGI_FORMAT_R16_SINT: return DXGI_FORMAT_R16_UNORM; case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_R8_UINT: case DXGI_FORMAT_R8_SNORM: case DXGI_FORMAT_R8_SINT: return DXGI_FORMAT_R8_UNORM; case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC1_UNORM_SRGB: return DXGI_FORMAT_BC1_UNORM; case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC2_UNORM_SRGB: return DXGI_FORMAT_BC2_UNORM; case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC3_UNORM_SRGB: return DXGI_FORMAT_BC3_UNORM; case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC4_SNORM: return DXGI_FORMAT_BC4_UNORM; case DXGI_FORMAT_BC5_TYPELESS: case DXGI_FORMAT_BC5_SNORM: return DXGI_FORMAT_BC5_UNORM; case DXGI_FORMAT_B8G8R8A8_TYPELESS: return DXGI_FORMAT_B8G8R8A8_UNORM; case DXGI_FORMAT_B8G8R8X8_TYPELESS: return DXGI_FORMAT_B8G8R8X8_UNORM; case DXGI_FORMAT_BC6H_TYPELESS: case DXGI_FORMAT_BC6H_SF16: return DXGI_FORMAT_BC6H_UF16; case DXGI_FORMAT_BC7_TYPELESS: case DXGI_FORMAT_BC7_UNORM_SRGB: return DXGI_FORMAT_BC7_UNORM; default: break; } return f; } DXGI_FORMAT GetSnormTypedFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R16G16B16A16_UNORM: case DXGI_FORMAT_R16G16B16A16_UINT: case DXGI_FORMAT_R16G16B16A16_SINT: return DXGI_FORMAT_R16G16B16A16_SNORM; case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R8G8B8A8_SINT: return DXGI_FORMAT_R8G8B8A8_SNORM; case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R16G16_UNORM: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R16G16_SINT: return DXGI_FORMAT_R16G16_SNORM; case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R8G8_SINT: return DXGI_FORMAT_R8G8_SNORM; case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_D16_UNORM: case DXGI_FORMAT_R16_UNORM: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R16_SINT: return DXGI_FORMAT_R16_SNORM; case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_R8_UINT: case DXGI_FORMAT_R8_SINT: case DXGI_FORMAT_A8_UNORM: return DXGI_FORMAT_R8_SNORM; case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC4_UNORM: return DXGI_FORMAT_BC4_SNORM; case DXGI_FORMAT_BC5_TYPELESS: case DXGI_FORMAT_BC5_UNORM: return DXGI_FORMAT_BC5_SNORM; case DXGI_FORMAT_BC6H_TYPELESS: case DXGI_FORMAT_BC6H_UF16: return DXGI_FORMAT_BC6H_SF16; default: break; } return f; } DXGI_FORMAT GetUIntTypedFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R32G32B32A32_TYPELESS: case DXGI_FORMAT_R32G32B32A32_FLOAT: case DXGI_FORMAT_R32G32B32A32_SINT: return DXGI_FORMAT_R32G32B32A32_UINT; case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R32G32B32_FLOAT: case DXGI_FORMAT_R32G32B32_SINT: return DXGI_FORMAT_R32G32B32_UINT; case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R16G16B16A16_UNORM: case DXGI_FORMAT_R16G16B16A16_SNORM: case DXGI_FORMAT_R16G16B16A16_SINT: return DXGI_FORMAT_R16G16B16A16_UINT; case DXGI_FORMAT_R32G32_TYPELESS: case DXGI_FORMAT_R32G32_FLOAT: case DXGI_FORMAT_R32G32_SINT: return DXGI_FORMAT_R32G32_UINT; case DXGI_FORMAT_R32G8X24_TYPELESS: case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT; case DXGI_FORMAT_R10G10B10A2_TYPELESS: case DXGI_FORMAT_R10G10B10A2_UNORM: return DXGI_FORMAT_R10G10B10A2_UINT; case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8B8A8_SNORM: case DXGI_FORMAT_R8G8B8A8_SINT: return DXGI_FORMAT_R8G8B8A8_UINT; case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R16G16_UNORM: case DXGI_FORMAT_R16G16_SNORM: case DXGI_FORMAT_R16G16_SINT: return DXGI_FORMAT_R16G16_UINT; case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_D32_FLOAT: case DXGI_FORMAT_R32_FLOAT: case DXGI_FORMAT_R32_SINT: return DXGI_FORMAT_R32_UINT; case DXGI_FORMAT_R24G8_TYPELESS: case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: return DXGI_FORMAT_X24_TYPELESS_G8_UINT; case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R8G8_SNORM: case DXGI_FORMAT_R8G8_SINT: return DXGI_FORMAT_R8G8_UINT; case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_D16_UNORM: case DXGI_FORMAT_R16_UNORM: case DXGI_FORMAT_R16_SNORM: case DXGI_FORMAT_R16_SINT: return DXGI_FORMAT_R16_UINT; case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_R8_SNORM: case DXGI_FORMAT_R8_SINT: case DXGI_FORMAT_A8_UNORM: return DXGI_FORMAT_R8_UINT; default: break; } return f; } DXGI_FORMAT GetSIntTypedFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R32G32B32A32_TYPELESS: case DXGI_FORMAT_R32G32B32A32_FLOAT: case DXGI_FORMAT_R32G32B32A32_UINT: return DXGI_FORMAT_R32G32B32A32_SINT; case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R32G32B32_FLOAT: case DXGI_FORMAT_R32G32B32_UINT: return DXGI_FORMAT_R32G32B32_SINT; case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R16G16B16A16_UNORM: case DXGI_FORMAT_R16G16B16A16_UINT: case DXGI_FORMAT_R16G16B16A16_SNORM: return DXGI_FORMAT_R16G16B16A16_SINT; case DXGI_FORMAT_R32G32_TYPELESS: case DXGI_FORMAT_R32G32_FLOAT: case DXGI_FORMAT_R32G32_UINT: return DXGI_FORMAT_R32G32_SINT; case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R8G8B8A8_SNORM: return DXGI_FORMAT_R8G8B8A8_SINT; case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R16G16_UNORM: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R16G16_SNORM: return DXGI_FORMAT_R16G16_SINT; case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_D32_FLOAT: case DXGI_FORMAT_R32_FLOAT: case DXGI_FORMAT_R32_UINT: return DXGI_FORMAT_R32_SINT; case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R8G8_SNORM: return DXGI_FORMAT_R8G8_SINT; case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_D16_UNORM: case DXGI_FORMAT_R16_UNORM: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R16_SNORM: return DXGI_FORMAT_R16_SINT; case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_R8_UINT: case DXGI_FORMAT_R8_SNORM: return DXGI_FORMAT_R8_SINT; default: break; } return f; } DXGI_FORMAT GetFloatTypedFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R32G32B32A32_TYPELESS: case DXGI_FORMAT_R32G32B32A32_SINT: case DXGI_FORMAT_R32G32B32A32_UINT: return DXGI_FORMAT_R32G32B32A32_FLOAT; case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R32G32B32_SINT: case DXGI_FORMAT_R32G32B32_UINT: return DXGI_FORMAT_R32G32B32_FLOAT; case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R16G16B16A16_SINT: case DXGI_FORMAT_R16G16B16A16_UINT: return DXGI_FORMAT_R16G16B16A16_FLOAT; case DXGI_FORMAT_R32G32_TYPELESS: case DXGI_FORMAT_R32G32_SINT: case DXGI_FORMAT_R32G32_UINT: return DXGI_FORMAT_R32G32_FLOAT; case DXGI_FORMAT_R10G10B10A2_TYPELESS: case DXGI_FORMAT_R10G10B10A2_UINT: return DXGI_FORMAT_R10G10B10A2_UNORM; case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R8G8B8A8_SNORM: return DXGI_FORMAT_R8G8B8A8_UNORM; case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R16G16_UNORM: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R16G16_SNORM: return DXGI_FORMAT_R16G16_FLOAT; case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_D32_FLOAT: case DXGI_FORMAT_R32_FLOAT: case DXGI_FORMAT_R32_UINT: return DXGI_FORMAT_R32_FLOAT; case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R8G8_SNORM: return DXGI_FORMAT_R8G8_UNORM; case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_D16_UNORM: case DXGI_FORMAT_R16_UNORM: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R16_SNORM: return DXGI_FORMAT_R16_FLOAT; case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_R8_UINT: case DXGI_FORMAT_R8_SNORM: return DXGI_FORMAT_R8_UNORM; } return GetTypedFormat(f); } DXGI_FORMAT GetTypedFormat(DXGI_FORMAT f) { switch(f) { 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_R32G8X24_TYPELESS: return DXGI_FORMAT_R32G8X24_TYPELESS; 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; // maybe not valid casts? case DXGI_FORMAT_R24G8_TYPELESS: return DXGI_FORMAT_R24_UNORM_X8_TYPELESS; case DXGI_FORMAT_B8G8R8A8_TYPELESS: return DXGI_FORMAT_B8G8R8A8_UNORM; case DXGI_FORMAT_B8G8R8X8_TYPELESS: return DXGI_FORMAT_B8G8R8X8_UNORM; case DXGI_FORMAT_R8G8_TYPELESS: return DXGI_FORMAT_R8G8_UNORM; case DXGI_FORMAT_R16_TYPELESS: return DXGI_FORMAT_R16_UNORM; case DXGI_FORMAT_R8_TYPELESS: return DXGI_FORMAT_R8_UNORM; case DXGI_FORMAT_BC1_TYPELESS: return DXGI_FORMAT_BC1_UNORM; case DXGI_FORMAT_BC4_TYPELESS: return DXGI_FORMAT_BC4_UNORM; case DXGI_FORMAT_BC2_TYPELESS: return DXGI_FORMAT_BC2_UNORM; case DXGI_FORMAT_BC3_TYPELESS: return DXGI_FORMAT_BC3_UNORM; case DXGI_FORMAT_BC5_TYPELESS: return DXGI_FORMAT_BC5_UNORM; case DXGI_FORMAT_BC6H_TYPELESS: return DXGI_FORMAT_BC6H_UF16; case DXGI_FORMAT_BC7_TYPELESS: return DXGI_FORMAT_BC7_UNORM; default: break; } return f; } DXGI_FORMAT GetTypedFormat(DXGI_FORMAT f, FormatComponentType typeHint) { switch(f) { // these formats have multiple typed formats - use the hint to decide which to use case DXGI_FORMAT_R8_TYPELESS: { if(typeHint == eCompType_UInt) return DXGI_FORMAT_R8_UINT; if(typeHint == eCompType_SInt) return DXGI_FORMAT_R8_SINT; if(typeHint == eCompType_SNorm) return DXGI_FORMAT_R8_SNORM; return DXGI_FORMAT_R8_UNORM; } case DXGI_FORMAT_R8G8_TYPELESS: { if(typeHint == eCompType_UInt) return DXGI_FORMAT_R8G8_UINT; if(typeHint == eCompType_SInt) return DXGI_FORMAT_R8G8_SINT; if(typeHint == eCompType_SNorm) return DXGI_FORMAT_R8G8_SNORM; return DXGI_FORMAT_R8G8_UNORM; } case DXGI_FORMAT_R8G8B8A8_TYPELESS: { if(typeHint == eCompType_UInt) return DXGI_FORMAT_R8G8B8A8_UINT; if(typeHint == eCompType_SInt) return DXGI_FORMAT_R8G8B8A8_SINT; if(typeHint == eCompType_SNorm) return DXGI_FORMAT_R8G8B8A8_SNORM; return DXGI_FORMAT_R8G8B8A8_UNORM; } case DXGI_FORMAT_R16_TYPELESS: { if(typeHint == eCompType_UInt) return DXGI_FORMAT_R16_UINT; if(typeHint == eCompType_SInt) return DXGI_FORMAT_R16_SINT; if(typeHint == eCompType_SNorm) return DXGI_FORMAT_R16_SNORM; if(typeHint == eCompType_Float) return DXGI_FORMAT_R16_FLOAT; if(typeHint == eCompType_Depth) return DXGI_FORMAT_D16_UNORM; return DXGI_FORMAT_R16_UNORM; } case DXGI_FORMAT_R16G16_TYPELESS: { if(typeHint == eCompType_UInt) return DXGI_FORMAT_R16G16_UINT; if(typeHint == eCompType_SInt) return DXGI_FORMAT_R16G16_SINT; if(typeHint == eCompType_SNorm) return DXGI_FORMAT_R16G16_SNORM; if(typeHint == eCompType_Float) return DXGI_FORMAT_R16G16_FLOAT; return DXGI_FORMAT_R16G16_UNORM; } case DXGI_FORMAT_R16G16B16A16_TYPELESS: { if(typeHint == eCompType_UInt) return DXGI_FORMAT_R16G16B16A16_UINT; if(typeHint == eCompType_SInt) return DXGI_FORMAT_R16G16B16A16_SINT; if(typeHint == eCompType_SNorm) return DXGI_FORMAT_R16G16B16A16_SNORM; if(typeHint == eCompType_Float) return DXGI_FORMAT_R16G16B16A16_FLOAT; return DXGI_FORMAT_R16G16B16A16_UNORM; } case DXGI_FORMAT_R32_TYPELESS: { if(typeHint == eCompType_UInt) return DXGI_FORMAT_R32_UINT; if(typeHint == eCompType_SInt) return DXGI_FORMAT_R32_SINT; if(typeHint == eCompType_Depth) return DXGI_FORMAT_D32_FLOAT; return DXGI_FORMAT_R32_FLOAT; } case DXGI_FORMAT_R32G32_TYPELESS: { if(typeHint == eCompType_UInt) return DXGI_FORMAT_R32G32_UINT; if(typeHint == eCompType_SInt) return DXGI_FORMAT_R32G32_SINT; return DXGI_FORMAT_R32G32_FLOAT; } case DXGI_FORMAT_R32G32B32_TYPELESS: { if(typeHint == eCompType_UInt) return DXGI_FORMAT_R32G32B32_UINT; if(typeHint == eCompType_SInt) return DXGI_FORMAT_R32G32B32_SINT; return DXGI_FORMAT_R32G32B32_FLOAT; } case DXGI_FORMAT_R32G32B32A32_TYPELESS: { if(typeHint == eCompType_UInt) return DXGI_FORMAT_R32G32B32A32_UINT; if(typeHint == eCompType_SInt) return DXGI_FORMAT_R32G32B32A32_SINT; return DXGI_FORMAT_R32G32B32A32_FLOAT; } case DXGI_FORMAT_R32G8X24_TYPELESS: { if(typeHint == eCompType_UInt) return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT; if(typeHint == eCompType_Depth) return DXGI_FORMAT_D32_FLOAT_S8X24_UINT; return DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; } case DXGI_FORMAT_R24G8_TYPELESS: { if(typeHint == eCompType_UInt) return DXGI_FORMAT_X24_TYPELESS_G8_UINT; if(typeHint == eCompType_Depth) return DXGI_FORMAT_D24_UNORM_S8_UINT; return DXGI_FORMAT_R24_UNORM_X8_TYPELESS; } case DXGI_FORMAT_R10G10B10A2_TYPELESS: return typeHint == eCompType_UInt ? DXGI_FORMAT_R10G10B10A2_UINT : DXGI_FORMAT_R10G10B10A2_UNORM; case DXGI_FORMAT_BC4_TYPELESS: return typeHint == eCompType_SNorm ? DXGI_FORMAT_BC4_SNORM : DXGI_FORMAT_BC4_UNORM; case DXGI_FORMAT_BC5_TYPELESS: return typeHint == eCompType_SNorm ? DXGI_FORMAT_BC5_SNORM : DXGI_FORMAT_BC5_UNORM; case DXGI_FORMAT_BC6H_TYPELESS: return typeHint == eCompType_SNorm ? DXGI_FORMAT_BC6H_SF16 : DXGI_FORMAT_BC6H_UF16; // these formats have only one valid non-typeless format (ignoring SRGB) case DXGI_FORMAT_B8G8R8A8_TYPELESS: return DXGI_FORMAT_B8G8R8A8_UNORM; case DXGI_FORMAT_B8G8R8X8_TYPELESS: return DXGI_FORMAT_B8G8R8X8_UNORM; case DXGI_FORMAT_BC1_TYPELESS: return DXGI_FORMAT_BC1_UNORM; case DXGI_FORMAT_BC2_TYPELESS: return DXGI_FORMAT_BC2_UNORM; case DXGI_FORMAT_BC3_TYPELESS: return DXGI_FORMAT_BC3_UNORM; case DXGI_FORMAT_BC7_TYPELESS: return DXGI_FORMAT_BC7_UNORM; default: break; } return f; } DXGI_FORMAT GetTypelessFormat(DXGI_FORMAT f) { switch(f) { case DXGI_FORMAT_R32G32B32A32_TYPELESS: case DXGI_FORMAT_R32G32B32A32_FLOAT: case DXGI_FORMAT_R32G32B32A32_UINT: case DXGI_FORMAT_R32G32B32A32_SINT: return DXGI_FORMAT_R32G32B32A32_TYPELESS; case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R32G32B32_FLOAT: case DXGI_FORMAT_R32G32B32_UINT: case DXGI_FORMAT_R32G32B32_SINT: return DXGI_FORMAT_R32G32B32_TYPELESS; case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R16G16B16A16_UNORM: case DXGI_FORMAT_R16G16B16A16_UINT: case DXGI_FORMAT_R16G16B16A16_SNORM: case DXGI_FORMAT_R16G16B16A16_SINT: return DXGI_FORMAT_R16G16B16A16_TYPELESS; case DXGI_FORMAT_R32G32_TYPELESS: case DXGI_FORMAT_R32G32_FLOAT: case DXGI_FORMAT_R32G32_UINT: case DXGI_FORMAT_R32G32_SINT: return DXGI_FORMAT_R32G32_TYPELESS; case DXGI_FORMAT_R32G8X24_TYPELESS: case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: return DXGI_FORMAT_R32G8X24_TYPELESS; case DXGI_FORMAT_R10G10B10A2_TYPELESS: case DXGI_FORMAT_R10G10B10A2_UNORM: case DXGI_FORMAT_R10G10B10A2_UINT: case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: // maybe not valid cast? return DXGI_FORMAT_R10G10B10A2_TYPELESS; case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R8G8B8A8_SNORM: case DXGI_FORMAT_R8G8B8A8_SINT: return DXGI_FORMAT_R8G8B8A8_TYPELESS; case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R16G16_UNORM: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R16G16_SNORM: case DXGI_FORMAT_R16G16_SINT: return DXGI_FORMAT_R16G16_TYPELESS; case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_D32_FLOAT: // maybe not valid cast? case DXGI_FORMAT_R32_FLOAT: case DXGI_FORMAT_R32_UINT: case DXGI_FORMAT_R32_SINT: return DXGI_FORMAT_R32_TYPELESS; // maybe not valid casts? case DXGI_FORMAT_R24G8_TYPELESS: case DXGI_FORMAT_D24_UNORM_S8_UINT: case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: case DXGI_FORMAT_X24_TYPELESS_G8_UINT: return DXGI_FORMAT_R24G8_TYPELESS; case DXGI_FORMAT_B8G8R8A8_TYPELESS: case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8_B8G8_UNORM: // maybe not valid cast? case DXGI_FORMAT_G8R8_G8B8_UNORM: // maybe not valid cast? return DXGI_FORMAT_B8G8R8A8_TYPELESS; case DXGI_FORMAT_B8G8R8X8_UNORM: case DXGI_FORMAT_B8G8R8X8_TYPELESS: case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: return DXGI_FORMAT_B8G8R8X8_TYPELESS; case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R8G8_SNORM: case DXGI_FORMAT_R8G8_SINT: return DXGI_FORMAT_R8G8_TYPELESS; case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_D16_UNORM: case DXGI_FORMAT_R16_UNORM: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R16_SNORM: case DXGI_FORMAT_R16_SINT: return DXGI_FORMAT_R16_TYPELESS; case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_R8_UINT: case DXGI_FORMAT_R8_SNORM: case DXGI_FORMAT_R8_SINT: case DXGI_FORMAT_A8_UNORM: return DXGI_FORMAT_R8_TYPELESS; case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC1_UNORM: case DXGI_FORMAT_BC1_UNORM_SRGB: return DXGI_FORMAT_BC1_TYPELESS; case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC4_UNORM: case DXGI_FORMAT_BC4_SNORM: return DXGI_FORMAT_BC4_TYPELESS; case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC2_UNORM: case DXGI_FORMAT_BC2_UNORM_SRGB: return DXGI_FORMAT_BC2_TYPELESS; case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC3_UNORM: case DXGI_FORMAT_BC3_UNORM_SRGB: return DXGI_FORMAT_BC3_TYPELESS; case DXGI_FORMAT_BC5_TYPELESS: case DXGI_FORMAT_BC5_UNORM: case DXGI_FORMAT_BC5_SNORM: return DXGI_FORMAT_BC5_TYPELESS; case DXGI_FORMAT_BC6H_TYPELESS: case DXGI_FORMAT_BC6H_UF16: case DXGI_FORMAT_BC6H_SF16: return DXGI_FORMAT_BC6H_TYPELESS; case DXGI_FORMAT_BC7_TYPELESS: case DXGI_FORMAT_BC7_UNORM: case DXGI_FORMAT_BC7_UNORM_SRGB: return DXGI_FORMAT_BC7_TYPELESS; case DXGI_FORMAT_R1_UNORM: case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: case DXGI_FORMAT_B5G6R5_UNORM: case DXGI_FORMAT_B5G5R5A1_UNORM: case DXGI_FORMAT_R11G11B10_FLOAT: case DXGI_FORMAT_AYUV: case DXGI_FORMAT_Y410: case DXGI_FORMAT_YUY2: case DXGI_FORMAT_Y416: case DXGI_FORMAT_NV12: case DXGI_FORMAT_P010: case DXGI_FORMAT_P016: case DXGI_FORMAT_420_OPAQUE: case DXGI_FORMAT_Y210: case DXGI_FORMAT_Y216: case DXGI_FORMAT_NV11: case DXGI_FORMAT_AI44: case DXGI_FORMAT_IA44: case DXGI_FORMAT_P8: case DXGI_FORMAT_A8P8: case DXGI_FORMAT_P208: case DXGI_FORMAT_V208: case DXGI_FORMAT_V408: case DXGI_FORMAT_B4G4R4A4_UNORM: RDCERR("No Typeless DXGI Format for %d", f); return DXGI_FORMAT_UNKNOWN; case DXGI_FORMAT_UNKNOWN: RDCWARN("Getting Typeless format of DXGI_FORMAT_UNKNOWN"); return DXGI_FORMAT_UNKNOWN; default: RDCERR("Unrecognised DXGI Format: %d", f); return DXGI_FORMAT_UNKNOWN; } } D3D_PRIMITIVE_TOPOLOGY MakeD3DPrimitiveTopology(PrimitiveTopology Topo) { switch(Topo) { case eTopology_LineLoop: case eTopology_TriangleFan: RDCWARN("Unsupported primitive topology on D3D: %x", Topo); break; default: case eTopology_Unknown: return D3D_PRIMITIVE_TOPOLOGY_UNDEFINED; case eTopology_PointList: return D3D_PRIMITIVE_TOPOLOGY_POINTLIST; case eTopology_LineList: return D3D_PRIMITIVE_TOPOLOGY_LINELIST; case eTopology_LineStrip: return D3D_PRIMITIVE_TOPOLOGY_LINESTRIP; case eTopology_TriangleList: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; case eTopology_TriangleStrip: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP; case eTopology_LineList_Adj: return D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ; case eTopology_LineStrip_Adj: return D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ; case eTopology_TriangleList_Adj: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ; case eTopology_TriangleStrip_Adj: return D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ; case eTopology_PatchList_1CPs: case eTopology_PatchList_2CPs: case eTopology_PatchList_3CPs: case eTopology_PatchList_4CPs: case eTopology_PatchList_5CPs: case eTopology_PatchList_6CPs: case eTopology_PatchList_7CPs: case eTopology_PatchList_8CPs: case eTopology_PatchList_9CPs: case eTopology_PatchList_10CPs: case eTopology_PatchList_11CPs: case eTopology_PatchList_12CPs: case eTopology_PatchList_13CPs: case eTopology_PatchList_14CPs: case eTopology_PatchList_15CPs: case eTopology_PatchList_16CPs: case eTopology_PatchList_17CPs: case eTopology_PatchList_18CPs: case eTopology_PatchList_19CPs: case eTopology_PatchList_20CPs: case eTopology_PatchList_21CPs: case eTopology_PatchList_22CPs: case eTopology_PatchList_23CPs: case eTopology_PatchList_24CPs: case eTopology_PatchList_25CPs: case eTopology_PatchList_26CPs: case eTopology_PatchList_27CPs: case eTopology_PatchList_28CPs: case eTopology_PatchList_29CPs: case eTopology_PatchList_30CPs: case eTopology_PatchList_31CPs: case eTopology_PatchList_32CPs: return D3D_PRIMITIVE_TOPOLOGY(D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST + (Topo - eTopology_PatchList_1CPs)); } return D3D_PRIMITIVE_TOPOLOGY_UNDEFINED; } PrimitiveTopology MakePrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY Topo) { switch(Topo) { default: case D3D_PRIMITIVE_TOPOLOGY_UNDEFINED: break; case D3D_PRIMITIVE_TOPOLOGY_POINTLIST: return eTopology_PointList; break; case D3D_PRIMITIVE_TOPOLOGY_LINELIST: return eTopology_LineList; break; case D3D_PRIMITIVE_TOPOLOGY_LINESTRIP: return eTopology_LineStrip; break; case D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST: return eTopology_TriangleList; break; case D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP: return eTopology_TriangleStrip; break; case D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ: return eTopology_LineList_Adj; break; case D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ: return eTopology_LineStrip_Adj; break; case D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ: return eTopology_TriangleList_Adj; break; case D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ: return eTopology_TriangleStrip_Adj; break; case D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST: case D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST: return PrimitiveTopology(eTopology_PatchList_1CPs + (Topo - D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST)); break; } return eTopology_Unknown; } DXGI_FORMAT MakeDXGIFormat(ResourceFormat fmt) { DXGI_FORMAT ret = DXGI_FORMAT_UNKNOWN; if(fmt.special) { switch(fmt.specialFormat) { case eSpecial_BC1: ret = DXGI_FORMAT_BC1_UNORM; break; case eSpecial_BC2: ret = DXGI_FORMAT_BC2_UNORM; break; case eSpecial_BC3: ret = DXGI_FORMAT_BC3_UNORM; break; case eSpecial_BC4: ret = DXGI_FORMAT_BC4_UNORM; break; case eSpecial_BC5: ret = DXGI_FORMAT_BC5_UNORM; break; case eSpecial_BC6: ret = DXGI_FORMAT_BC6H_UF16; break; case eSpecial_BC7: ret = DXGI_FORMAT_BC7_UNORM; break; case eSpecial_R10G10B10A2: if(fmt.compType == eCompType_UNorm) ret = DXGI_FORMAT_R10G10B10A2_UNORM; else ret = DXGI_FORMAT_R10G10B10A2_UINT; break; case eSpecial_R11G11B10: ret = DXGI_FORMAT_R11G11B10_FLOAT; break; case eSpecial_R5G6B5: RDCASSERT(fmt.bgraOrder); ret = DXGI_FORMAT_B5G6R5_UNORM; break; case eSpecial_R5G5B5A1: RDCASSERT(fmt.bgraOrder); ret = DXGI_FORMAT_B5G5R5A1_UNORM; break; case eSpecial_R9G9B9E5: ret = DXGI_FORMAT_R9G9B9E5_SHAREDEXP; break; case eSpecial_R4G4B4A4: RDCASSERT(fmt.bgraOrder); ret = DXGI_FORMAT_B4G4R4A4_UNORM; break; case eSpecial_D24S8: ret = DXGI_FORMAT_R24G8_TYPELESS; break; case eSpecial_D32S8: ret = DXGI_FORMAT_R32G8X24_TYPELESS; break; case eSpecial_YUV: RDCERR("Video format not unambiguously encoded"); ret = DXGI_FORMAT_AYUV; break; case eSpecial_S8: RDCERR("D3D has no stencil-only format"); break; case eSpecial_D16S8: RDCERR("D3D has no D16S8 format"); break; default: RDCERR("Unrecognised/unsupported special format %u", fmt.specialFormat); break; } } else if(fmt.compCount == 4) { if(fmt.compByteWidth == 4) ret = DXGI_FORMAT_R32G32B32A32_TYPELESS; else if(fmt.compByteWidth == 2) ret = DXGI_FORMAT_R16G16B16A16_TYPELESS; else if(fmt.compByteWidth == 1) ret = DXGI_FORMAT_R8G8B8A8_TYPELESS; else RDCERR("Unrecognised 4-component byte width: %d", fmt.compByteWidth); if(fmt.bgraOrder) ret = DXGI_FORMAT_B8G8R8A8_UNORM; } else if(fmt.compCount == 3) { if(fmt.compByteWidth == 4) ret = DXGI_FORMAT_R32G32B32_TYPELESS; // else if(fmt.compByteWidth == 2) ret = DXGI_FORMAT_R16G16B16_TYPELESS; // format doesn't exist // else if(fmt.compByteWidth == 1) ret = DXGI_FORMAT_R8G8B8_TYPELESS; // format doesn't exist else RDCERR("Unrecognised 3-component byte width: %d", fmt.compByteWidth); } else if(fmt.compCount == 2) { if(fmt.compByteWidth == 4) ret = DXGI_FORMAT_R32G32_TYPELESS; else if(fmt.compByteWidth == 2) ret = DXGI_FORMAT_R16G16_TYPELESS; else if(fmt.compByteWidth == 1) ret = DXGI_FORMAT_R8G8_TYPELESS; else RDCERR("Unrecognised 2-component byte width: %d", fmt.compByteWidth); } else if(fmt.compCount == 1) { if(fmt.compByteWidth == 4) ret = DXGI_FORMAT_R32_TYPELESS; else if(fmt.compByteWidth == 2) ret = DXGI_FORMAT_R16_TYPELESS; else if(fmt.compByteWidth == 1) ret = DXGI_FORMAT_R8_TYPELESS; else RDCERR("Unrecognised 1-component byte width: %d", fmt.compByteWidth); } else { RDCERR("Unrecognised component count: %d", fmt.compCount); } if(fmt.compType == eCompType_None) ret = GetTypelessFormat(ret); else if(fmt.compType == eCompType_Float) ret = GetFloatTypedFormat(ret); else if(fmt.compType == eCompType_Depth) ret = GetDepthTypedFormat(ret); else if(fmt.compType == eCompType_UNorm) ret = GetUnormTypedFormat(ret); else if(fmt.compType == eCompType_SNorm) ret = GetSnormTypedFormat(ret); else if(fmt.compType == eCompType_UInt) ret = GetUIntTypedFormat(ret); else if(fmt.compType == eCompType_SInt) ret = GetSIntTypedFormat(ret); else RDCERR("Unrecognised component type"); if(fmt.srgbCorrected) ret = GetSRGBFormat(ret); if(ret == DXGI_FORMAT_UNKNOWN) RDCERR("No known DXGI_FORMAT corresponding to resource format!"); return ret; } ResourceFormat MakeResourceFormat(DXGI_FORMAT fmt) { ResourceFormat ret; ret.rawType = fmt; ret.special = false; ret.strname = ToStr::Get(fmt).substr(12); // 12 == strlen("DXGI_FORMAT_") ret.compCount = ret.compByteWidth = 0; ret.compType = eCompType_Float; ret.srgbCorrected = IsSRGBFormat(fmt); switch(fmt) { case DXGI_FORMAT_R32G32B32A32_TYPELESS: case DXGI_FORMAT_R32G32B32A32_FLOAT: case DXGI_FORMAT_R32G32B32A32_UINT: case DXGI_FORMAT_R32G32B32A32_SINT: case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R16G16B16A16_UNORM: case DXGI_FORMAT_R16G16B16A16_UINT: case DXGI_FORMAT_R16G16B16A16_SNORM: case DXGI_FORMAT_R16G16B16A16_SINT: case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R8G8B8A8_SNORM: case DXGI_FORMAT_R8G8B8A8_SINT: ret.compCount = 4; break; case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R32G32B32_FLOAT: case DXGI_FORMAT_R32G32B32_UINT: case DXGI_FORMAT_R32G32B32_SINT: ret.compCount = 3; break; case DXGI_FORMAT_R32G32_TYPELESS: case DXGI_FORMAT_R32G32_FLOAT: case DXGI_FORMAT_R32G32_UINT: case DXGI_FORMAT_R32G32_SINT: case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R16G16_UNORM: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R16G16_SNORM: case DXGI_FORMAT_R16G16_SINT: case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R8G8_SNORM: case DXGI_FORMAT_R8G8_SINT: ret.compCount = 2; break; case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_D32_FLOAT: case DXGI_FORMAT_R32_FLOAT: case DXGI_FORMAT_R32_UINT: case DXGI_FORMAT_R32_SINT: case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_D16_UNORM: case DXGI_FORMAT_R16_UNORM: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R16_SNORM: case DXGI_FORMAT_R16_SINT: case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_R8_UINT: case DXGI_FORMAT_R8_SNORM: case DXGI_FORMAT_R8_SINT: case DXGI_FORMAT_A8_UNORM: ret.compCount = 1; break; case DXGI_FORMAT_R32G8X24_TYPELESS: case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: case DXGI_FORMAT_R24G8_TYPELESS: case DXGI_FORMAT_D24_UNORM_S8_UINT: case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: case DXGI_FORMAT_X24_TYPELESS_G8_UINT: case DXGI_FORMAT_BC5_TYPELESS: case DXGI_FORMAT_BC5_UNORM: case DXGI_FORMAT_BC5_SNORM: ret.compCount = 2; break; case DXGI_FORMAT_R11G11B10_FLOAT: case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: case DXGI_FORMAT_R8G8_B8G8_UNORM: case DXGI_FORMAT_G8R8_G8B8_UNORM: case DXGI_FORMAT_B5G6R5_UNORM: case DXGI_FORMAT_BC6H_TYPELESS: case DXGI_FORMAT_BC6H_UF16: case DXGI_FORMAT_BC6H_SF16: ret.compCount = 3; break; case DXGI_FORMAT_R10G10B10A2_TYPELESS: case DXGI_FORMAT_R10G10B10A2_UNORM: case DXGI_FORMAT_R10G10B10A2_UINT: case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_B8G8R8A8_TYPELESS: case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: case DXGI_FORMAT_B8G8R8X8_UNORM: case DXGI_FORMAT_B8G8R8X8_TYPELESS: case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: case DXGI_FORMAT_B5G5R5A1_UNORM: case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC1_UNORM: case DXGI_FORMAT_BC1_UNORM_SRGB: case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC2_UNORM: case DXGI_FORMAT_BC2_UNORM_SRGB: case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC3_UNORM: case DXGI_FORMAT_BC3_UNORM_SRGB: case DXGI_FORMAT_BC7_TYPELESS: case DXGI_FORMAT_BC7_UNORM: case DXGI_FORMAT_BC7_UNORM_SRGB: ret.compCount = 4; break; case DXGI_FORMAT_R1_UNORM: case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC4_UNORM: case DXGI_FORMAT_BC4_SNORM: ret.compCount = 1; break; case DXGI_FORMAT_UNKNOWN: ret.compCount = 0; break; default: ret.special = true; } switch(fmt) { case DXGI_FORMAT_R32G32B32A32_TYPELESS: case DXGI_FORMAT_R32G32B32A32_FLOAT: case DXGI_FORMAT_R32G32B32A32_UINT: case DXGI_FORMAT_R32G32B32A32_SINT: case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R32G32B32_FLOAT: case DXGI_FORMAT_R32G32B32_UINT: case DXGI_FORMAT_R32G32B32_SINT: case DXGI_FORMAT_R32G32_TYPELESS: case DXGI_FORMAT_R32G32_FLOAT: case DXGI_FORMAT_R32G32_UINT: case DXGI_FORMAT_R32G32_SINT: case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_D32_FLOAT: case DXGI_FORMAT_R32_FLOAT: case DXGI_FORMAT_R32_UINT: case DXGI_FORMAT_R32_SINT: ret.compByteWidth = 4; break; case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R16G16B16A16_UNORM: case DXGI_FORMAT_R16G16B16A16_UINT: case DXGI_FORMAT_R16G16B16A16_SNORM: case DXGI_FORMAT_R16G16B16A16_SINT: case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R16G16_UNORM: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R16G16_SNORM: case DXGI_FORMAT_R16G16_SINT: case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R16_FLOAT: case DXGI_FORMAT_D16_UNORM: case DXGI_FORMAT_R16_UNORM: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R16_SNORM: case DXGI_FORMAT_R16_SINT: ret.compByteWidth = 2; break; case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R8G8B8A8_SNORM: case DXGI_FORMAT_R8G8B8A8_SINT: case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R8G8_SNORM: case DXGI_FORMAT_R8G8_SINT: case DXGI_FORMAT_R8_TYPELESS: case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_R8_UINT: case DXGI_FORMAT_R8_SNORM: case DXGI_FORMAT_R8_SINT: case DXGI_FORMAT_A8_UNORM: ret.compByteWidth = 1; break; case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_B8G8R8A8_TYPELESS: case DXGI_FORMAT_B8G8R8X8_TYPELESS: case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: ret.compByteWidth = 1; break; case DXGI_FORMAT_UNKNOWN: ret.compByteWidth = 0; break; default: ret.special = true; } switch(fmt) { case DXGI_FORMAT_R32G32B32A32_TYPELESS: case DXGI_FORMAT_R32G32B32_TYPELESS: case DXGI_FORMAT_R32G32_TYPELESS: case DXGI_FORMAT_R32_TYPELESS: case DXGI_FORMAT_R16G16B16A16_TYPELESS: case DXGI_FORMAT_R16G16_TYPELESS: case DXGI_FORMAT_R16_TYPELESS: case DXGI_FORMAT_R8G8B8A8_TYPELESS: case DXGI_FORMAT_R8G8_TYPELESS: case DXGI_FORMAT_R8_TYPELESS: ret.compType = eCompType_None; break; case DXGI_FORMAT_R32G32B32A32_FLOAT: case DXGI_FORMAT_R32G32B32_FLOAT: case DXGI_FORMAT_R16G16B16A16_FLOAT: case DXGI_FORMAT_R32G32_FLOAT: case DXGI_FORMAT_R16G16_FLOAT: case DXGI_FORMAT_R32_FLOAT: case DXGI_FORMAT_R16_FLOAT: ret.compType = eCompType_Float; break; case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_R16G16B16A16_UNORM: case DXGI_FORMAT_R16G16_UNORM: case DXGI_FORMAT_R8G8_UNORM: case DXGI_FORMAT_R16_UNORM: case DXGI_FORMAT_R8_UNORM: case DXGI_FORMAT_A8_UNORM: ret.compType = eCompType_UNorm; break; case DXGI_FORMAT_R8G8B8A8_SNORM: case DXGI_FORMAT_R16G16B16A16_SNORM: case DXGI_FORMAT_R16G16_SNORM: case DXGI_FORMAT_R8G8_SNORM: case DXGI_FORMAT_R16_SNORM: case DXGI_FORMAT_R8_SNORM: ret.compType = eCompType_SNorm; break; case DXGI_FORMAT_R32G32B32A32_UINT: case DXGI_FORMAT_R32G32B32_UINT: case DXGI_FORMAT_R16G16B16A16_UINT: case DXGI_FORMAT_R32G32_UINT: case DXGI_FORMAT_R8G8B8A8_UINT: case DXGI_FORMAT_R16G16_UINT: case DXGI_FORMAT_R32_UINT: case DXGI_FORMAT_R8G8_UINT: case DXGI_FORMAT_R16_UINT: case DXGI_FORMAT_R8_UINT: ret.compType = eCompType_UInt; break; case DXGI_FORMAT_R32G32B32A32_SINT: case DXGI_FORMAT_R32G32B32_SINT: case DXGI_FORMAT_R16G16B16A16_SINT: case DXGI_FORMAT_R32G32_SINT: case DXGI_FORMAT_R8G8B8A8_SINT: case DXGI_FORMAT_R16G16_SINT: case DXGI_FORMAT_R32_SINT: case DXGI_FORMAT_R8G8_SINT: case DXGI_FORMAT_R16_SINT: case DXGI_FORMAT_R8_SINT: ret.compType = eCompType_SInt; break; case DXGI_FORMAT_R10G10B10A2_UINT: case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: ret.compType = eCompType_UInt; break; case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: case DXGI_FORMAT_R11G11B10_FLOAT: ret.compType = eCompType_Float; break; case DXGI_FORMAT_BC4_SNORM: case DXGI_FORMAT_BC5_SNORM: case DXGI_FORMAT_BC6H_SF16: ret.compType = eCompType_SNorm; break; case DXGI_FORMAT_R24G8_TYPELESS: case DXGI_FORMAT_R32G8X24_TYPELESS: ret.compType = eCompType_None; break; case DXGI_FORMAT_X24_TYPELESS_G8_UINT: case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: case DXGI_FORMAT_D32_FLOAT: case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: case DXGI_FORMAT_D24_UNORM_S8_UINT: case DXGI_FORMAT_D16_UNORM: ret.compType = eCompType_Depth; break; case DXGI_FORMAT_R10G10B10A2_TYPELESS: case DXGI_FORMAT_B8G8R8A8_TYPELESS: case DXGI_FORMAT_B8G8R8X8_TYPELESS: case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC5_TYPELESS: case DXGI_FORMAT_BC6H_TYPELESS: case DXGI_FORMAT_BC7_TYPELESS: ret.compType = eCompType_None; break; case DXGI_FORMAT_R8G8_B8G8_UNORM: case DXGI_FORMAT_G8R8_G8B8_UNORM: case DXGI_FORMAT_R10G10B10A2_UNORM: case DXGI_FORMAT_B5G6R5_UNORM: case DXGI_FORMAT_B5G5R5A1_UNORM: case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_B8G8R8X8_UNORM: case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: case DXGI_FORMAT_R1_UNORM: case DXGI_FORMAT_BC1_UNORM: case DXGI_FORMAT_BC2_UNORM: case DXGI_FORMAT_BC3_UNORM: case DXGI_FORMAT_BC4_UNORM: case DXGI_FORMAT_BC5_UNORM: case DXGI_FORMAT_BC6H_UF16: case DXGI_FORMAT_BC7_UNORM: case DXGI_FORMAT_BC1_UNORM_SRGB: case DXGI_FORMAT_BC2_UNORM_SRGB: case DXGI_FORMAT_BC3_UNORM_SRGB: case DXGI_FORMAT_BC7_UNORM_SRGB: ret.compType = eCompType_UNorm; break; case DXGI_FORMAT_UNKNOWN: ret.compType = eCompType_None; break; default: ret.special = true; } switch(fmt) { case DXGI_FORMAT_B8G8R8A8_UNORM: case DXGI_FORMAT_B8G8R8X8_UNORM: case DXGI_FORMAT_B8G8R8A8_TYPELESS: case DXGI_FORMAT_B8G8R8X8_TYPELESS: case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: ret.bgraOrder = true; break; } ret.specialFormat = eSpecial_Unknown; switch(fmt) { case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: case DXGI_FORMAT_X24_TYPELESS_G8_UINT: case DXGI_FORMAT_D24_UNORM_S8_UINT: case DXGI_FORMAT_R24G8_TYPELESS: ret.specialFormat = eSpecial_D24S8; break; case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: case DXGI_FORMAT_R32G8X24_TYPELESS: ret.specialFormat = eSpecial_D32S8; break; case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC1_UNORM_SRGB: case DXGI_FORMAT_BC1_UNORM: ret.specialFormat = eSpecial_BC1; break; case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC2_UNORM_SRGB: case DXGI_FORMAT_BC2_UNORM: ret.specialFormat = eSpecial_BC2; break; case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC3_UNORM_SRGB: case DXGI_FORMAT_BC3_UNORM: ret.specialFormat = eSpecial_BC3; break; case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC4_UNORM: case DXGI_FORMAT_BC4_SNORM: ret.specialFormat = eSpecial_BC4; break; case DXGI_FORMAT_BC5_TYPELESS: case DXGI_FORMAT_BC5_UNORM: case DXGI_FORMAT_BC5_SNORM: ret.specialFormat = eSpecial_BC5; break; case DXGI_FORMAT_BC6H_UF16: case DXGI_FORMAT_BC6H_SF16: case DXGI_FORMAT_BC6H_TYPELESS: ret.specialFormat = eSpecial_BC6; break; case DXGI_FORMAT_BC7_TYPELESS: case DXGI_FORMAT_BC7_UNORM_SRGB: case DXGI_FORMAT_BC7_UNORM: ret.specialFormat = eSpecial_BC7; break; case DXGI_FORMAT_R10G10B10A2_TYPELESS: case DXGI_FORMAT_R10G10B10A2_UINT: case DXGI_FORMAT_R10G10B10A2_UNORM: case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: ret.specialFormat = eSpecial_R10G10B10A2; break; case DXGI_FORMAT_R11G11B10_FLOAT: ret.specialFormat = eSpecial_R11G11B10; break; case DXGI_FORMAT_B5G6R5_UNORM: ret.specialFormat = eSpecial_R5G6B5; ret.bgraOrder = true; break; case DXGI_FORMAT_B5G5R5A1_UNORM: ret.specialFormat = eSpecial_R5G5B5A1; ret.bgraOrder = true; break; case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: ret.specialFormat = eSpecial_R9G9B9E5; break; case DXGI_FORMAT_AYUV: case DXGI_FORMAT_Y410: case DXGI_FORMAT_Y416: case DXGI_FORMAT_NV12: case DXGI_FORMAT_P010: case DXGI_FORMAT_P016: case DXGI_FORMAT_420_OPAQUE: case DXGI_FORMAT_YUY2: case DXGI_FORMAT_Y210: case DXGI_FORMAT_Y216: case DXGI_FORMAT_NV11: case DXGI_FORMAT_AI44: case DXGI_FORMAT_IA44: case DXGI_FORMAT_P8: case DXGI_FORMAT_A8P8: case DXGI_FORMAT_P208: case DXGI_FORMAT_V208: case DXGI_FORMAT_V408: ret.specialFormat = eSpecial_YUV; break; case DXGI_FORMAT_B4G4R4A4_UNORM: ret.specialFormat = eSpecial_R4G4B4A4; ret.bgraOrder = true; break; case DXGI_FORMAT_UNKNOWN: ret.specialFormat = eSpecial_Unknown; break; default: break; } if(ret.specialFormat != eSpecial_Unknown) { ret.special = true; } return ret; } string ToStrHelper::Get(const DXGI_SAMPLE_DESC &el) { char tostrBuf[256] = {0}; StringFormat::snprintf(tostrBuf, 255, "DXGI_SAMPLE_DESC<%d,%d>", el.Count, el.Quality); return tostrBuf; } string ToStrHelper::Get(const DXGI_FORMAT &el) { switch(el) { TOSTR_CASE_STRINGIZE(DXGI_FORMAT_UNKNOWN) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32A32_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32A32_FLOAT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32A32_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32A32_SINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32_FLOAT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32B32_SINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16B16A16_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16B16A16_FLOAT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16B16A16_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16B16A16_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16B16A16_SNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16B16A16_SINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32_FLOAT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G32_SINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32G8X24_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_D32_FLOAT_S8X24_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_X32_TYPELESS_G8X24_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R10G10B10A2_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R10G10B10A2_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R10G10B10A2_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R11G11B10_FLOAT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8B8A8_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8B8A8_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8B8A8_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8B8A8_SNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8B8A8_SINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16_FLOAT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16_SNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16G16_SINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_D32_FLOAT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32_FLOAT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R32_SINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R24G8_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_D24_UNORM_S8_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R24_UNORM_X8_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_X24_TYPELESS_G8_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8_SNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8_SINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16_FLOAT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_D16_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16_SNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R16_SINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8_UINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8_SNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8_SINT) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_A8_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R1_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R9G9B9E5_SHAREDEXP) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R8G8_B8G8_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_G8R8_G8B8_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC1_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC1_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC1_UNORM_SRGB) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC2_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC2_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC2_UNORM_SRGB) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC3_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC3_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC3_UNORM_SRGB) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC4_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC4_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC4_SNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC5_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC5_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC5_SNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B5G6R5_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B5G5R5A1_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B8G8R8A8_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B8G8R8X8_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B8G8R8A8_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B8G8R8A8_UNORM_SRGB) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B8G8R8X8_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B8G8R8X8_UNORM_SRGB) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC6H_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC6H_UF16) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC6H_SF16) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC7_TYPELESS) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC7_UNORM) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_BC7_UNORM_SRGB) // D3D11.1 formats TOSTR_CASE_STRINGIZE(DXGI_FORMAT_AYUV) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_Y410) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_Y416) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_NV12) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_P010) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_P016) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_420_OPAQUE) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_YUY2) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_Y210) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_Y216) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_NV11) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_AI44) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_IA44) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_P8) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_A8P8) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_B4G4R4A4_UNORM) // D3D11.2 formats TOSTR_CASE_STRINGIZE(DXGI_FORMAT_P208) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_V208) TOSTR_CASE_STRINGIZE(DXGI_FORMAT_V408) default: break; } char tostrBuf[256] = {0}; StringFormat::snprintf(tostrBuf, 255, "DXGI_FORMAT<%d>", el); return tostrBuf; } // not technically DXGI, but makes more sense to have it here common between D3D versions string ToStrHelper::Get(const D3D_FEATURE_LEVEL &el) { switch(el) { TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_9_1) TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_9_2) TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_9_3) TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_10_0) TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_10_1) TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_11_0) TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_11_1) TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_12_0) TOSTR_CASE_STRINGIZE(D3D_FEATURE_LEVEL_12_1) default: break; } char tostrBuf[256] = {0}; StringFormat::snprintf(tostrBuf, 255, "D3D_FEATURE_LEVEL<%d>", el); return tostrBuf; } string ToStrHelper::Get(const D3D_DRIVER_TYPE &el) { switch(el) { TOSTR_CASE_STRINGIZE(D3D_DRIVER_TYPE_HARDWARE) TOSTR_CASE_STRINGIZE(D3D_DRIVER_TYPE_REFERENCE) TOSTR_CASE_STRINGIZE(D3D_DRIVER_TYPE_NULL) TOSTR_CASE_STRINGIZE(D3D_DRIVER_TYPE_SOFTWARE) TOSTR_CASE_STRINGIZE(D3D_DRIVER_TYPE_WARP) default: break; } char tostrBuf[256] = {0}; StringFormat::snprintf(tostrBuf, 255, "D3D_DRIVER_TYPE<%d>", el); return tostrBuf; }