Last active
June 15, 2021 15:29
-
-
Save equalent/320843ddb656e66f34513f7e839f1a64 to your computer and use it in GitHub Desktop.
DXGI format utils
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
constexpr size_t DxgiFormatRowSize(DXGI_FORMAT format, uint width) | |
{ | |
switch (format) | |
{ | |
case DXGI_FORMAT_R32G32B32A32_TYPELESS: | |
case DXGI_FORMAT_R32G32B32A32_FLOAT: | |
case DXGI_FORMAT_R32G32B32A32_UINT: | |
case DXGI_FORMAT_R32G32B32A32_SINT: | |
return width * 16u; | |
case DXGI_FORMAT_R32G32B32_TYPELESS: | |
case DXGI_FORMAT_R32G32B32_FLOAT: | |
case DXGI_FORMAT_R32G32B32_UINT: | |
case DXGI_FORMAT_R32G32B32_SINT: | |
return width * 12u; | |
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: | |
return width * 8u; | |
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: | |
return width * 4u; | |
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: | |
return width * 2u; | |
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: | |
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 width; | |
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 max(width / 2u, 1); | |
default: | |
return 0; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment