@ -20,116 +20,122 @@ struct FormatTuple {
GLenum format = GL_NONE ;
GLenum type = GL_NONE ;
} ;
# define SURFACE_FORMAT_LIST \
SURFACE_FORMAT_ELEM ( GL_RGBA8 , GL_RGBA , GL_UNSIGNED_INT_8_8_8_8_REV , A8B8G8R8_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_RGBA8_SNORM , GL_RGBA , GL_BYTE , A8B8G8R8_SNORM ) \
SURFACE_FORMAT_ELEM ( GL_RGBA8I , GL_RGBA_INTEGER , GL_BYTE , A8B8G8R8_SINT ) \
SURFACE_FORMAT_ELEM ( GL_RGBA8UI , GL_RGBA_INTEGER , GL_UNSIGNED_BYTE , A8B8G8R8_UINT ) \
SURFACE_FORMAT_ELEM ( GL_RGB565 , GL_RGB , GL_UNSIGNED_SHORT_5_6_5 , R5G6B5_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_RGB565 , GL_RGB , GL_UNSIGNED_SHORT_5_6_5_REV , B5G6R5_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_RGB5_A1 , GL_BGRA , GL_UNSIGNED_SHORT_1_5_5_5_REV , A1R5G5B5_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_RGB10_A2 , GL_RGBA , GL_UNSIGNED_INT_2_10_10_10_REV , A2B10G10R10_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_RGB10_A2UI , GL_RGBA_INTEGER , GL_UNSIGNED_INT_2_10_10_10_REV , A2B10G10R10_UINT ) \
SURFACE_FORMAT_ELEM ( GL_RGB10_A2 , GL_BGRA , GL_UNSIGNED_INT_2_10_10_10_REV , A2R10G10B10_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_RGB5_A1 , GL_RGBA , GL_UNSIGNED_SHORT_1_5_5_5_REV , A1B5G5R5_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_RGB5_A1 , GL_RGBA , GL_UNSIGNED_SHORT_5_5_5_1 , A5B5G5R1_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_R8 , GL_RED , GL_UNSIGNED_BYTE , R8_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_R8_SNORM , GL_RED , GL_BYTE , R8_SNORM ) \
SURFACE_FORMAT_ELEM ( GL_R8I , GL_RED_INTEGER , GL_BYTE , R8_SINT ) \
SURFACE_FORMAT_ELEM ( GL_R8UI , GL_RED_INTEGER , GL_UNSIGNED_BYTE , R8_UINT ) \
SURFACE_FORMAT_ELEM ( GL_RGBA16F , GL_RGBA , GL_HALF_FLOAT , R16G16B16A16_FLOAT ) \
SURFACE_FORMAT_ELEM ( GL_RGBA16 , GL_RGBA , GL_UNSIGNED_SHORT , R16G16B16A16_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_RGBA16_SNORM , GL_RGBA , GL_SHORT , R16G16B16A16_SNORM ) \
SURFACE_FORMAT_ELEM ( GL_RGBA16I , GL_RGBA_INTEGER , GL_SHORT , R16G16B16A16_SINT ) \
SURFACE_FORMAT_ELEM ( GL_RGBA16UI , GL_RGBA_INTEGER , GL_UNSIGNED_SHORT , R16G16B16A16_UINT ) \
SURFACE_FORMAT_ELEM ( GL_R11F_G11F_B10F , GL_RGB , GL_UNSIGNED_INT_10F_11F_11F_REV , B10G11R11_FLOAT ) \
SURFACE_FORMAT_ELEM ( GL_RGBA32UI , GL_RGBA_INTEGER , GL_UNSIGNED_INT , R32G32B32A32_UINT ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_S3TC_DXT1_EXT , GL_NONE , GL_NONE , BC1_RGBA_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_S3TC_DXT3_EXT , GL_NONE , GL_NONE , BC2_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_S3TC_DXT5_EXT , GL_NONE , GL_NONE , BC3_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RED_RGTC1 , GL_NONE , GL_NONE , BC4_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SIGNED_RED_RGTC1 , GL_NONE , GL_NONE , BC4_SNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RG_RGTC2 , GL_NONE , GL_NONE , BC5_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SIGNED_RG_RGTC2 , GL_NONE , GL_NONE , BC5_SNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_BPTC_UNORM , GL_NONE , GL_NONE , BC7_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT , GL_NONE , GL_NONE , BC6H_UFLOAT ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT , GL_NONE , GL_NONE , BC6H_SFLOAT ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_4x4_KHR , GL_NONE , GL_NONE , ASTC_2D_4X4_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_RGBA8 , GL_BGRA , GL_UNSIGNED_INT_8_8_8_8_REV , B8G8R8A8_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_RGBA32F , GL_RGBA , GL_FLOAT , R32G32B32A32_FLOAT ) \
SURFACE_FORMAT_ELEM ( GL_RGBA32I , GL_RGBA_INTEGER , GL_INT , R32G32B32A32_SINT ) \
SURFACE_FORMAT_ELEM ( GL_RG32F , GL_RG , GL_FLOAT , R32G32_FLOAT ) \
SURFACE_FORMAT_ELEM ( GL_RG32I , GL_RG_INTEGER , GL_INT , R32G32_SINT ) \
SURFACE_FORMAT_ELEM ( GL_R32F , GL_RED , GL_FLOAT , R32_FLOAT ) \
SURFACE_FORMAT_ELEM ( GL_R16F , GL_RED , GL_HALF_FLOAT , R16_FLOAT ) \
SURFACE_FORMAT_ELEM ( GL_R16 , GL_RED , GL_UNSIGNED_SHORT , R16_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_R16_SNORM , GL_RED , GL_SHORT , R16_SNORM ) \
SURFACE_FORMAT_ELEM ( GL_R16UI , GL_RED_INTEGER , GL_UNSIGNED_SHORT , R16_UINT ) \
SURFACE_FORMAT_ELEM ( GL_R16I , GL_RED_INTEGER , GL_SHORT , R16_SINT ) \
SURFACE_FORMAT_ELEM ( GL_RG16 , GL_RG , GL_UNSIGNED_SHORT , R16G16_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_RG16F , GL_RG , GL_HALF_FLOAT , R16G16_FLOAT ) \
SURFACE_FORMAT_ELEM ( GL_RG16UI , GL_RG_INTEGER , GL_UNSIGNED_SHORT , R16G16_UINT ) \
SURFACE_FORMAT_ELEM ( GL_RG16I , GL_RG_INTEGER , GL_SHORT , R16G16_SINT ) \
SURFACE_FORMAT_ELEM ( GL_RG16_SNORM , GL_RG , GL_SHORT , R16G16_SNORM ) \
SURFACE_FORMAT_ELEM ( GL_RGB32F , GL_RGB , GL_FLOAT , R32G32B32_FLOAT ) \
SURFACE_FORMAT_ELEM ( GL_SRGB8_ALPHA8 , GL_RGBA , GL_UNSIGNED_INT_8_8_8_8_REV , A8B8G8R8_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_RG8 , GL_RG , GL_UNSIGNED_BYTE , R8G8_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_RG8_SNORM , GL_RG , GL_BYTE , R8G8_SNORM ) \
SURFACE_FORMAT_ELEM ( GL_RG8I , GL_RG_INTEGER , GL_BYTE , R8G8_SINT ) \
SURFACE_FORMAT_ELEM ( GL_RG8UI , GL_RG_INTEGER , GL_UNSIGNED_BYTE , R8G8_UINT ) \
SURFACE_FORMAT_ELEM ( GL_RG32UI , GL_RG_INTEGER , GL_UNSIGNED_INT , R32G32_UINT ) \
SURFACE_FORMAT_ELEM ( GL_RGB16F , GL_RGBA , GL_HALF_FLOAT , R16G16B16X16_FLOAT ) \
SURFACE_FORMAT_ELEM ( GL_R32UI , GL_RED_INTEGER , GL_UNSIGNED_INT , R32_UINT ) \
SURFACE_FORMAT_ELEM ( GL_R32I , GL_RED_INTEGER , GL_INT , R32_SINT ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_8x8_KHR , GL_NONE , GL_NONE , ASTC_2D_8X8_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_8x5_KHR , GL_NONE , GL_NONE , ASTC_2D_8X5_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_5x4_KHR , GL_NONE , GL_NONE , ASTC_2D_5X4_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_SRGB8_ALPHA8 , GL_BGRA , GL_UNSIGNED_INT_8_8_8_8_REV , B8G8R8A8_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT , GL_NONE , GL_NONE , BC1_RGBA_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT , GL_NONE , GL_NONE , BC2_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT , GL_NONE , GL_NONE , BC3_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM , GL_NONE , GL_NONE , BC7_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_RGBA4 , GL_RGBA , GL_UNSIGNED_SHORT_4_4_4_4_REV , A4B4G4R4_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_R8 , GL_RED , GL_UNSIGNED_BYTE , G4R4_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR , GL_NONE , GL_NONE , ASTC_2D_4X4_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR , GL_NONE , GL_NONE , ASTC_2D_8X8_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR , GL_NONE , GL_NONE , ASTC_2D_8X5_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR , GL_NONE , GL_NONE , ASTC_2D_5X4_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_5x5_KHR , GL_NONE , GL_NONE , ASTC_2D_5X5_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR , GL_NONE , GL_NONE , ASTC_2D_5X5_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_10x8_KHR , GL_NONE , GL_NONE , ASTC_2D_10X8_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR , GL_NONE , GL_NONE , ASTC_2D_10X8_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_6x6_KHR , GL_NONE , GL_NONE , ASTC_2D_6X6_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR , GL_NONE , GL_NONE , ASTC_2D_6X6_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_10x6_KHR , GL_NONE , GL_NONE , ASTC_2D_10X6_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR , GL_NONE , GL_NONE , ASTC_2D_10X6_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_10x5_KHR , GL_NONE , GL_NONE , ASTC_2D_10X5_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR , GL_NONE , GL_NONE , ASTC_2D_10X5_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_10x10_KHR , GL_NONE , GL_NONE , ASTC_2D_10X10_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR , GL_NONE , GL_NONE , ASTC_2D_10X10_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_12x10_KHR , GL_NONE , GL_NONE , ASTC_2D_12X10_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR , GL_NONE , GL_NONE , ASTC_2D_12X10_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_12x12_KHR , GL_NONE , GL_NONE , ASTC_2D_12X12_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR , GL_NONE , GL_NONE , ASTC_2D_12X12_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_8x6_KHR , GL_NONE , GL_NONE , ASTC_2D_8X6_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR , GL_NONE , GL_NONE , ASTC_2D_8X6_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_RGBA_ASTC_6x5_KHR , GL_NONE , GL_NONE , ASTC_2D_6X5_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR , GL_NONE , GL_NONE , ASTC_2D_6X5_SRGB ) \
SURFACE_FORMAT_ELEM ( GL_RGB9_E5 , GL_RGB , GL_UNSIGNED_INT_5_9_9_9_REV , E5B9G9R9_FLOAT ) \
SURFACE_FORMAT_ELEM ( GL_DEPTH_COMPONENT32F , GL_DEPTH_COMPONENT , GL_FLOAT , D32_FLOAT ) \
SURFACE_FORMAT_ELEM ( GL_DEPTH_COMPONENT16 , GL_DEPTH_COMPONENT , GL_UNSIGNED_SHORT , D16_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_DEPTH_COMPONENT24 , GL_DEPTH_COMPONENT , GL_UNSIGNED_INT_24_8 , X8_D24_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_STENCIL_INDEX8 , GL_STENCIL , GL_UNSIGNED_BYTE , S8_UINT ) \
SURFACE_FORMAT_ELEM ( GL_DEPTH24_STENCIL8 , GL_DEPTH_STENCIL , GL_UNSIGNED_INT_24_8 , D24_UNORM_S8_UINT ) \
SURFACE_FORMAT_ELEM ( GL_DEPTH24_STENCIL8 , GL_DEPTH_STENCIL , GL_UNSIGNED_INT_24_8 , S8_UINT_D24_UNORM ) \
SURFACE_FORMAT_ELEM ( GL_DEPTH32F_STENCIL8 , GL_DEPTH_STENCIL , GL_FLOAT_32_UNSIGNED_INT_24_8_REV , D32_FLOAT_S8_UINT )
constexpr std : : array < FormatTuple , VideoCore : : Surface : : MaxPixelFormat > FORMAT_TABLE = { {
{ GL_RGBA8 , GL_RGBA , GL_UNSIGNED_INT_8_8_8_8_REV } , / / A8B8G8R8_UNORM
{ GL_RGBA8_SNORM , GL_RGBA , GL_BYTE } , / / A8B8G8R8_SNORM
{ GL_RGBA8I , GL_RGBA_INTEGER , GL_BYTE } , / / A8B8G8R8_SINT
{ GL_RGBA8UI , GL_RGBA_INTEGER , GL_UNSIGNED_BYTE } , / / A8B8G8R8_UINT
{ GL_RGB565 , GL_RGB , GL_UNSIGNED_SHORT_5_6_5 } , / / R5G6B5_UNORM
{ GL_RGB565 , GL_RGB , GL_UNSIGNED_SHORT_5_6_5_REV } , / / B5G6R5_UNORM
{ GL_RGB5_A1 , GL_BGRA , GL_UNSIGNED_SHORT_1_5_5_5_REV } , / / A1R5G5B5_UNORM
{ GL_RGB10_A2 , GL_RGBA , GL_UNSIGNED_INT_2_10_10_10_REV } , / / A2B10G10R10_UNORM
{ GL_RGB10_A2UI , GL_RGBA_INTEGER , GL_UNSIGNED_INT_2_10_10_10_REV } , / / A2B10G10R10_UINT
{ GL_RGB10_A2 , GL_BGRA , GL_UNSIGNED_INT_2_10_10_10_REV } , / / A2R10G10B10_UNORM
{ GL_RGB5_A1 , GL_RGBA , GL_UNSIGNED_SHORT_1_5_5_5_REV } , / / A1B5G5R5_UNORM
{ GL_RGB5_A1 , GL_RGBA , GL_UNSIGNED_SHORT_5_5_5_1 } , / / A5B5G5R1_UNORM
{ GL_R8 , GL_RED , GL_UNSIGNED_BYTE } , / / R8_UNORM
{ GL_R8_SNORM , GL_RED , GL_BYTE } , / / R8_SNORM
{ GL_R8I , GL_RED_INTEGER , GL_BYTE } , / / R8_SINT
{ GL_R8UI , GL_RED_INTEGER , GL_UNSIGNED_BYTE } , / / R8_UINT
{ GL_RGBA16F , GL_RGBA , GL_HALF_FLOAT } , / / R16G16B16A16_FLOAT
{ GL_RGBA16 , GL_RGBA , GL_UNSIGNED_SHORT } , / / R16G16B16A16_UNORM
{ GL_RGBA16_SNORM , GL_RGBA , GL_SHORT } , / / R16G16B16A16_SNORM
{ GL_RGBA16I , GL_RGBA_INTEGER , GL_SHORT } , / / R16G16B16A16_SINT
{ GL_RGBA16UI , GL_RGBA_INTEGER , GL_UNSIGNED_SHORT } , / / R16G16B16A16_UINT
{ GL_R11F_G11F_B10F , GL_RGB , GL_UNSIGNED_INT_10F_11F_11F_REV } , / / B10G11R11_FLOAT
{ GL_RGBA32UI , GL_RGBA_INTEGER , GL_UNSIGNED_INT } , / / R32G32B32A32_UINT
{ GL_COMPRESSED_RGBA_S3TC_DXT1_EXT } , / / BC1_RGBA_UNORM
{ GL_COMPRESSED_RGBA_S3TC_DXT3_EXT } , / / BC2_UNORM
{ GL_COMPRESSED_RGBA_S3TC_DXT5_EXT } , / / BC3_UNORM
{ GL_COMPRESSED_RED_RGTC1 } , / / BC4_UNORM
{ GL_COMPRESSED_SIGNED_RED_RGTC1 } , / / BC4_SNORM
{ GL_COMPRESSED_RG_RGTC2 } , / / BC5_UNORM
{ GL_COMPRESSED_SIGNED_RG_RGTC2 } , / / BC5_SNORM
{ GL_COMPRESSED_RGBA_BPTC_UNORM } , / / BC7_UNORM
{ GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT } , / / BC6H_UFLOAT
{ GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT } , / / BC6H_SFLOAT
{ GL_COMPRESSED_RGBA_ASTC_4x4_KHR } , / / ASTC_2D_4X4_UNORM
{ GL_RGBA8 , GL_BGRA , GL_UNSIGNED_INT_8_8_8_8_REV } , / / B8G8R8A8_UNORM
{ GL_RGBA32F , GL_RGBA , GL_FLOAT } , / / R32G32B32A32_FLOAT
{ GL_RGBA32I , GL_RGBA_INTEGER , GL_INT } , / / R32G32B32A32_SINT
{ GL_RG32F , GL_RG , GL_FLOAT } , / / R32G32_FLOAT
{ GL_RG32I , GL_RG_INTEGER , GL_INT } , / / R32G32_SINT
{ GL_R32F , GL_RED , GL_FLOAT } , / / R32_FLOAT
{ GL_R16F , GL_RED , GL_HALF_FLOAT } , / / R16_FLOAT
{ GL_R16 , GL_RED , GL_UNSIGNED_SHORT } , / / R16_UNORM
{ GL_R16_SNORM , GL_RED , GL_SHORT } , / / R16_SNORM
{ GL_R16UI , GL_RED_INTEGER , GL_UNSIGNED_SHORT } , / / R16_UINT
{ GL_R16I , GL_RED_INTEGER , GL_SHORT } , / / R16_SINT
{ GL_RG16 , GL_RG , GL_UNSIGNED_SHORT } , / / R16G16_UNORM
{ GL_RG16F , GL_RG , GL_HALF_FLOAT } , / / R16G16_FLOAT
{ GL_RG16UI , GL_RG_INTEGER , GL_UNSIGNED_SHORT } , / / R16G16_UINT
{ GL_RG16I , GL_RG_INTEGER , GL_SHORT } , / / R16G16_SINT
{ GL_RG16_SNORM , GL_RG , GL_SHORT } , / / R16G16_SNORM
{ GL_RGB32F , GL_RGB , GL_FLOAT } , / / R32G32B32_FLOAT
{ GL_SRGB8_ALPHA8 , GL_RGBA , GL_UNSIGNED_INT_8_8_8_8_REV } , / / A8B8G8R8_SRGB
{ GL_RG8 , GL_RG , GL_UNSIGNED_BYTE } , / / R8G8_UNORM
{ GL_RG8_SNORM , GL_RG , GL_BYTE } , / / R8G8_SNORM
{ GL_RG8I , GL_RG_INTEGER , GL_BYTE } , / / R8G8_SINT
{ GL_RG8UI , GL_RG_INTEGER , GL_UNSIGNED_BYTE } , / / R8G8_UINT
{ GL_RG32UI , GL_RG_INTEGER , GL_UNSIGNED_INT } , / / R32G32_UINT
{ GL_RGB16F , GL_RGBA , GL_HALF_FLOAT } , / / R16G16B16X16_FLOAT
{ GL_R32UI , GL_RED_INTEGER , GL_UNSIGNED_INT } , / / R32_UINT
{ GL_R32I , GL_RED_INTEGER , GL_INT } , / / R32_SINT
{ GL_COMPRESSED_RGBA_ASTC_8x8_KHR } , / / ASTC_2D_8X8_UNORM
{ GL_COMPRESSED_RGBA_ASTC_8x5_KHR } , / / ASTC_2D_8X5_UNORM
{ GL_COMPRESSED_RGBA_ASTC_5x4_KHR } , / / ASTC_2D_5X4_UNORM
{ GL_SRGB8_ALPHA8 , GL_BGRA , GL_UNSIGNED_INT_8_8_8_8_REV } , / / B8G8R8A8_SRGB
{ GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT } , / / BC1_RGBA_SRGB
{ GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT } , / / BC2_SRGB
{ GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT } , / / BC3_SRGB
{ GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM } , / / BC7_SRGB
{ GL_RGBA4 , GL_RGBA , GL_UNSIGNED_SHORT_4_4_4_4_REV } , / / A4B4G4R4_UNORM
{ GL_R8 , GL_RED , GL_UNSIGNED_BYTE } , / / G4R4_UNORM
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR } , / / ASTC_2D_4X4_SRGB
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR } , / / ASTC_2D_8X8_SRGB
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR } , / / ASTC_2D_8X5_SRGB
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR } , / / ASTC_2D_5X4_SRGB
{ GL_COMPRESSED_RGBA_ASTC_5x5_KHR } , / / ASTC_2D_5X5_UNORM
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR } , / / ASTC_2D_5X5_SRGB
{ GL_COMPRESSED_RGBA_ASTC_10x8_KHR } , / / ASTC_2D_10X8_UNORM
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR } , / / ASTC_2D_10X8_SRGB
{ GL_COMPRESSED_RGBA_ASTC_6x6_KHR } , / / ASTC_2D_6X6_UNORM
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR } , / / ASTC_2D_6X6_SRGB
{ GL_COMPRESSED_RGBA_ASTC_10x6_KHR } , / / ASTC_2D_10X6_UNORM
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR } , / / ASTC_2D_10X6_SRGB
{ GL_COMPRESSED_RGBA_ASTC_10x5_KHR } , / / ASTC_2D_10X5_UNORM
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR } , / / ASTC_2D_10X5_SRGB
{ GL_COMPRESSED_RGBA_ASTC_10x10_KHR } , / / ASTC_2D_10X10_UNORM
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR } , / / ASTC_2D_10X10_SRGB
{ GL_COMPRESSED_RGBA_ASTC_12x10_KHR } , / / ASTC_2D_12X10_UNORM
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR } , / / ASTC_2D_12X10_SRGB
{ GL_COMPRESSED_RGBA_ASTC_12x12_KHR } , / / ASTC_2D_12X12_UNORM
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR } , / / ASTC_2D_12X12_SRGB
{ GL_COMPRESSED_RGBA_ASTC_8x6_KHR } , / / ASTC_2D_8X6_UNORM
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR } , / / ASTC_2D_8X6_SRGB
{ GL_COMPRESSED_RGBA_ASTC_6x5_KHR } , / / ASTC_2D_6X5_UNORM
{ GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR } , / / ASTC_2D_6X5_SRGB
{ GL_RGB9_E5 , GL_RGB , GL_UNSIGNED_INT_5_9_9_9_REV } , / / E5B9G9R9_FLOAT
{ GL_DEPTH_COMPONENT32F , GL_DEPTH_COMPONENT , GL_FLOAT } , / / D32_FLOAT
{ GL_DEPTH_COMPONENT16 , GL_DEPTH_COMPONENT , GL_UNSIGNED_SHORT } , / / D16_UNORM
{ GL_DEPTH_COMPONENT24 , GL_DEPTH_COMPONENT , GL_UNSIGNED_INT_24_8 } , / / X8_D24_UNORM
{ GL_STENCIL_INDEX8 , GL_STENCIL , GL_UNSIGNED_BYTE } , / / S8_UINT
{ GL_DEPTH24_STENCIL8 , GL_DEPTH_STENCIL , GL_UNSIGNED_INT_24_8 } , / / D24_UNORM_S8_UINT
{ GL_DEPTH24_STENCIL8 , GL_DEPTH_STENCIL , GL_UNSIGNED_INT_24_8 } , / / S8_UINT_D24_UNORM
{ GL_DEPTH32F_STENCIL8 , GL_DEPTH_STENCIL ,
GL_FLOAT_32_UNSIGNED_INT_24_8_REV } , / / D32_FLOAT_S8_UINT
# define SURFACE_FORMAT_ELEM(a1, a2, a3, name) {a1, a2, a3},
SURFACE_FORMAT_LIST
# undef SURFACE_FORMAT_ELEM
} } ;
inline const FormatTuple & GetFormatTuple ( VideoCore : : Surface : : PixelFormat pixel_format ) {
ASSERT ( static_cast < size_t > ( pixel_format ) < FORMAT_TABLE . size ( ) ) ;
return FORMAT_TABLE [ static_cast < size_t > ( pixel_format ) ] ;
constexpr FormatTuple GetFormatTuple ( VideoCore : : Surface : : PixelFormat pixel_format ) noexcept {
switch ( pixel_format ) {
# define SURFACE_FORMAT_ELEM(a1, a2, a3, name) case VideoCore::Surface::PixelFormat::name: return {a1, a2, a3};
SURFACE_FORMAT_LIST
# undef SURFACE_FORMAT_ELEM
# undef SURFACE_FORMAT_LIST
default : UNREACHABLE ( ) ;
}
}
inline GLenum VertexFormat ( Maxwell : : VertexAttribute attrib ) {