Skip to content

Commit 4b19925

Browse files
GraphicsAccessories: add FormatToTypeless()
1 parent ca1e96f commit 4b19925

File tree

2 files changed

+178
-0
lines changed

2 files changed

+178
-0
lines changed

Graphics/GraphicsAccessories/interface/GraphicsAccessories.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -861,6 +861,10 @@ TEXTURE_FORMAT TypelessFormatToUnorm(TEXTURE_FORMAT Fmt);
861861
/// If the format is not typeless, or cannot be converted to SRGB, it is returned as is.
862862
TEXTURE_FORMAT TypelessFormatToSRGB(TEXTURE_FORMAT Fmt);
863863

864+
/// Converts format to a corresponding typeless format.
865+
/// If the format cannot be converted to typeless, it is returned as is.
866+
TEXTURE_FORMAT FormatToTypeless(TEXTURE_FORMAT Fmt);
867+
864868
/// Checks if the format is an SRGB format
865869
bool IsSRGBFormat(TEXTURE_FORMAT Fmt);
866870

Graphics/GraphicsAccessories/src/GraphicsAccessories.cpp

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2815,6 +2815,180 @@ TEXTURE_FORMAT TypelessFormatToSRGB(TEXTURE_FORMAT Fmt)
28152815
}
28162816
}
28172817

2818+
TEXTURE_FORMAT FormatToTypeless(TEXTURE_FORMAT Fmt)
2819+
{
2820+
switch (Fmt)
2821+
{
2822+
case TEX_FORMAT_RGBA32_TYPELESS:
2823+
case TEX_FORMAT_RGBA32_FLOAT:
2824+
case TEX_FORMAT_RGBA32_UINT:
2825+
case TEX_FORMAT_RGBA32_SINT:
2826+
return TEX_FORMAT_RGBA32_TYPELESS;
2827+
2828+
case TEX_FORMAT_RGB32_TYPELESS:
2829+
case TEX_FORMAT_RGB32_FLOAT:
2830+
case TEX_FORMAT_RGB32_UINT:
2831+
case TEX_FORMAT_RGB32_SINT:
2832+
return TEX_FORMAT_RGB32_TYPELESS;
2833+
2834+
case TEX_FORMAT_RGBA16_TYPELESS:
2835+
case TEX_FORMAT_RGBA16_FLOAT:
2836+
case TEX_FORMAT_RGBA16_UNORM:
2837+
case TEX_FORMAT_RGBA16_UINT:
2838+
case TEX_FORMAT_RGBA16_SNORM:
2839+
case TEX_FORMAT_RGBA16_SINT:
2840+
return TEX_FORMAT_RGBA16_TYPELESS;
2841+
2842+
case TEX_FORMAT_RG32_TYPELESS:
2843+
case TEX_FORMAT_RG32_FLOAT:
2844+
case TEX_FORMAT_RG32_UINT:
2845+
case TEX_FORMAT_RG32_SINT:
2846+
return TEX_FORMAT_RG32_TYPELESS;
2847+
2848+
case TEX_FORMAT_R32G8X24_TYPELESS:
2849+
case TEX_FORMAT_D32_FLOAT_S8X24_UINT:
2850+
case TEX_FORMAT_R32_FLOAT_X8X24_TYPELESS:
2851+
case TEX_FORMAT_X32_TYPELESS_G8X24_UINT:
2852+
return TEX_FORMAT_R32G8X24_TYPELESS;
2853+
2854+
case TEX_FORMAT_RGB10A2_TYPELESS:
2855+
case TEX_FORMAT_RGB10A2_UNORM:
2856+
case TEX_FORMAT_RGB10A2_UINT:
2857+
return TEX_FORMAT_RGB10A2_TYPELESS;
2858+
2859+
case TEX_FORMAT_R11G11B10_FLOAT:
2860+
return Fmt;
2861+
2862+
case TEX_FORMAT_RGBA8_TYPELESS:
2863+
case TEX_FORMAT_RGBA8_UNORM:
2864+
case TEX_FORMAT_RGBA8_UNORM_SRGB:
2865+
case TEX_FORMAT_RGBA8_UINT:
2866+
case TEX_FORMAT_RGBA8_SNORM:
2867+
case TEX_FORMAT_RGBA8_SINT:
2868+
return TEX_FORMAT_RGBA8_TYPELESS;
2869+
2870+
case TEX_FORMAT_RG16_TYPELESS:
2871+
case TEX_FORMAT_RG16_FLOAT:
2872+
case TEX_FORMAT_RG16_UNORM:
2873+
case TEX_FORMAT_RG16_UINT:
2874+
case TEX_FORMAT_RG16_SNORM:
2875+
case TEX_FORMAT_RG16_SINT:
2876+
return TEX_FORMAT_RG16_TYPELESS;
2877+
2878+
case TEX_FORMAT_R32_TYPELESS:
2879+
case TEX_FORMAT_D32_FLOAT:
2880+
case TEX_FORMAT_R32_FLOAT:
2881+
case TEX_FORMAT_R32_UINT:
2882+
case TEX_FORMAT_R32_SINT:
2883+
return TEX_FORMAT_R32_TYPELESS;
2884+
2885+
case TEX_FORMAT_R24G8_TYPELESS:
2886+
case TEX_FORMAT_D24_UNORM_S8_UINT:
2887+
case TEX_FORMAT_R24_UNORM_X8_TYPELESS:
2888+
case TEX_FORMAT_X24_TYPELESS_G8_UINT:
2889+
return TEX_FORMAT_R24G8_TYPELESS;
2890+
2891+
case TEX_FORMAT_RG8_TYPELESS:
2892+
case TEX_FORMAT_RG8_UNORM:
2893+
case TEX_FORMAT_RG8_UINT:
2894+
case TEX_FORMAT_RG8_SNORM:
2895+
case TEX_FORMAT_RG8_SINT:
2896+
return TEX_FORMAT_RG8_TYPELESS;
2897+
2898+
case TEX_FORMAT_R16_TYPELESS:
2899+
case TEX_FORMAT_R16_FLOAT:
2900+
case TEX_FORMAT_D16_UNORM:
2901+
case TEX_FORMAT_R16_UNORM:
2902+
case TEX_FORMAT_R16_UINT:
2903+
case TEX_FORMAT_R16_SNORM:
2904+
case TEX_FORMAT_R16_SINT:
2905+
return TEX_FORMAT_R16_TYPELESS;
2906+
2907+
case TEX_FORMAT_R8_TYPELESS:
2908+
case TEX_FORMAT_R8_UNORM:
2909+
case TEX_FORMAT_R8_UINT:
2910+
case TEX_FORMAT_R8_SNORM:
2911+
case TEX_FORMAT_R8_SINT:
2912+
return TEX_FORMAT_R8_TYPELESS;
2913+
2914+
case TEX_FORMAT_A8_UNORM:
2915+
return Fmt;
2916+
2917+
case TEX_FORMAT_R1_UNORM:
2918+
return Fmt;
2919+
2920+
case TEX_FORMAT_RGB9E5_SHAREDEXP:
2921+
case TEX_FORMAT_RG8_B8G8_UNORM:
2922+
case TEX_FORMAT_G8R8_G8B8_UNORM:
2923+
return Fmt;
2924+
2925+
case TEX_FORMAT_BC1_TYPELESS:
2926+
case TEX_FORMAT_BC1_UNORM:
2927+
case TEX_FORMAT_BC1_UNORM_SRGB:
2928+
return TEX_FORMAT_BC1_TYPELESS;
2929+
2930+
case TEX_FORMAT_BC2_TYPELESS:
2931+
case TEX_FORMAT_BC2_UNORM:
2932+
case TEX_FORMAT_BC2_UNORM_SRGB:
2933+
return TEX_FORMAT_BC2_TYPELESS;
2934+
2935+
case TEX_FORMAT_BC3_TYPELESS:
2936+
case TEX_FORMAT_BC3_UNORM:
2937+
case TEX_FORMAT_BC3_UNORM_SRGB:
2938+
return TEX_FORMAT_BC3_TYPELESS;
2939+
2940+
case TEX_FORMAT_BC4_TYPELESS:
2941+
case TEX_FORMAT_BC4_UNORM:
2942+
case TEX_FORMAT_BC4_SNORM:
2943+
return TEX_FORMAT_BC4_TYPELESS;
2944+
2945+
case TEX_FORMAT_BC5_TYPELESS:
2946+
case TEX_FORMAT_BC5_UNORM:
2947+
case TEX_FORMAT_BC5_SNORM:
2948+
return TEX_FORMAT_BC5_TYPELESS;
2949+
2950+
case TEX_FORMAT_B5G6R5_UNORM:
2951+
case TEX_FORMAT_B5G5R5A1_UNORM:
2952+
return Fmt;
2953+
2954+
case TEX_FORMAT_BGRA8_TYPELESS:
2955+
case TEX_FORMAT_BGRA8_UNORM:
2956+
case TEX_FORMAT_BGRA8_UNORM_SRGB:
2957+
return TEX_FORMAT_BGRA8_TYPELESS;
2958+
2959+
case TEX_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
2960+
return Fmt;
2961+
2962+
case TEX_FORMAT_BGRX8_TYPELESS:
2963+
case TEX_FORMAT_BGRX8_UNORM:
2964+
case TEX_FORMAT_BGRX8_UNORM_SRGB:
2965+
return TEX_FORMAT_BGRX8_TYPELESS;
2966+
2967+
case TEX_FORMAT_BC6H_TYPELESS:
2968+
case TEX_FORMAT_BC6H_UF16:
2969+
case TEX_FORMAT_BC6H_SF16:
2970+
return TEX_FORMAT_BC6H_TYPELESS;
2971+
2972+
case TEX_FORMAT_BC7_TYPELESS:
2973+
case TEX_FORMAT_BC7_UNORM:
2974+
case TEX_FORMAT_BC7_UNORM_SRGB:
2975+
return TEX_FORMAT_BC7_TYPELESS;
2976+
2977+
case TEX_FORMAT_ETC2_RGB8_UNORM:
2978+
case TEX_FORMAT_ETC2_RGB8_UNORM_SRGB:
2979+
case TEX_FORMAT_ETC2_RGB8A1_UNORM:
2980+
case TEX_FORMAT_ETC2_RGB8A1_UNORM_SRGB:
2981+
case TEX_FORMAT_ETC2_RGBA8_UNORM:
2982+
case TEX_FORMAT_ETC2_RGBA8_UNORM_SRGB:
2983+
return Fmt;
2984+
2985+
default:
2986+
UNEXPECTED("Unexpected texture format");
2987+
return TEX_FORMAT_UNKNOWN;
2988+
}
2989+
static_assert(TEX_FORMAT_NUM_FORMATS == 106, "Please update the switch above to handle the new texture format, if needed");
2990+
}
2991+
28182992
bool IsSRGBFormat(TEXTURE_FORMAT Fmt)
28192993
{
28202994
return (Fmt == TEX_FORMAT_RGBA8_UNORM_SRGB ||

0 commit comments

Comments
 (0)