in renderdoc/driver/metal/metal_common.cpp [777:1160]
ResourceFormat MakeResourceFormat(MTL::PixelFormat mtlFormat)
{
ResourceFormat ret;
if(mtlFormat == MTL::PixelFormatInvalid)
{
ret.type = ResourceFormatType::Undefined;
ret.compByteWidth = 0;
ret.compCount = 0;
ret.compType = CompType::Typeless;
return ret;
}
struct ResourceFormatInfo
{
ResourceFormatType type;
CompType compType;
uint8_t compCount;
uint8_t compByteWidth;
bool bgra;
};
ResourceFormatInfo info;
switch(mtlFormat)
{
case MTL::PixelFormatA8Unorm:
info = {ResourceFormatType::A8, CompType::UNorm, 1, 1, false};
break;
case MTL::PixelFormatR8Unorm:
info = {ResourceFormatType::Regular, CompType::UNorm, 1, 1, false};
break;
case MTL::PixelFormatR8Unorm_sRGB:
info = {ResourceFormatType::Regular, CompType::UNormSRGB, 1, 1, false};
break;
case MTL::PixelFormatR8Snorm:
info = {ResourceFormatType::Regular, CompType::SNorm, 1, 1, false};
break;
case MTL::PixelFormatR8Uint:
info = {ResourceFormatType::Regular, CompType::UInt, 1, 1, false};
break;
case MTL::PixelFormatR8Sint:
info = {ResourceFormatType::Regular, CompType::SInt, 1, 1, false};
break;
case MTL::PixelFormatR16Unorm:
info = {ResourceFormatType::Regular, CompType::UNorm, 1, 2, false};
break;
case MTL::PixelFormatR16Snorm:
info = {ResourceFormatType::Regular, CompType::SNorm, 1, 2, false};
break;
case MTL::PixelFormatR16Uint:
info = {ResourceFormatType::Regular, CompType::UInt, 1, 2, false};
break;
case MTL::PixelFormatR16Sint:
info = {ResourceFormatType::Regular, CompType::SInt, 1, 2, false};
break;
case MTL::PixelFormatR16Float:
info = {ResourceFormatType::Regular, CompType::Float, 1, 2, false};
break;
case MTL::PixelFormatRG8Unorm:
info = {ResourceFormatType::Regular, CompType::UNorm, 2, 1, false};
break;
case MTL::PixelFormatRG8Unorm_sRGB:
info = {ResourceFormatType::Regular, CompType::UNormSRGB, 2, 1, false};
break;
case MTL::PixelFormatRG8Snorm:
info = {ResourceFormatType::Regular, CompType::SNorm, 2, 1, false};
break;
case MTL::PixelFormatRG8Uint:
info = {ResourceFormatType::Regular, CompType::UInt, 2, 1, false};
break;
case MTL::PixelFormatRG8Sint:
info = {ResourceFormatType::Regular, CompType::SInt, 2, 1, false};
break;
case MTL::PixelFormatB5G6R5Unorm:
info = {ResourceFormatType::R5G6B5, CompType::UNorm, 3, 1, true};
break;
case MTL::PixelFormatA1BGR5Unorm:
info = {ResourceFormatType::R5G5B5A1, CompType::UNorm, 4, 1, true};
break;
case MTL::PixelFormatABGR4Unorm:
info = {ResourceFormatType::R4G4B4A4, CompType::UNorm, 4, 1, true};
break;
case MTL::PixelFormatBGR5A1Unorm:
info = {ResourceFormatType::R5G5B5A1, CompType::UNorm, 4, 1, true};
break;
case MTL::PixelFormatR32Uint:
info = {ResourceFormatType::Regular, CompType::UInt, 1, 4, false};
break;
case MTL::PixelFormatR32Sint:
info = {ResourceFormatType::Regular, CompType::SInt, 1, 4, false};
break;
case MTL::PixelFormatR32Float:
info = {ResourceFormatType::Regular, CompType::Float, 1, 4, false};
break;
case MTL::PixelFormatRG16Unorm:
info = {ResourceFormatType::Regular, CompType::UNorm, 2, 2, false};
break;
case MTL::PixelFormatRG16Snorm:
info = {ResourceFormatType::Regular, CompType::SNorm, 2, 2, false};
break;
case MTL::PixelFormatRG16Uint:
info = {ResourceFormatType::Regular, CompType::UInt, 2, 2, false};
break;
case MTL::PixelFormatRG16Sint:
info = {ResourceFormatType::Regular, CompType::SInt, 2, 2, false};
break;
case MTL::PixelFormatRG16Float:
info = {ResourceFormatType::Regular, CompType::Float, 2, 2, false};
break;
case MTL::PixelFormatRGBA8Unorm:
info = {ResourceFormatType::Regular, CompType::UNorm, 4, 1, false};
break;
case MTL::PixelFormatRGBA8Unorm_sRGB:
info = {ResourceFormatType::Regular, CompType::UNormSRGB, 4, 1, false};
break;
case MTL::PixelFormatRGBA8Snorm:
info = {ResourceFormatType::Regular, CompType::SNorm, 4, 1, false};
break;
case MTL::PixelFormatRGBA8Uint:
info = {ResourceFormatType::Regular, CompType::UInt, 4, 1, false};
break;
case MTL::PixelFormatRGBA8Sint:
info = {ResourceFormatType::Regular, CompType::SInt, 4, 1, false};
break;
case MTL::PixelFormatBGRA8Unorm:
info = {ResourceFormatType::Regular, CompType::UNorm, 4, 1, true};
break;
case MTL::PixelFormatBGRA8Unorm_sRGB:
info = {ResourceFormatType::Regular, CompType::UNormSRGB, 4, 1, true};
break;
case MTL::PixelFormatRGB10A2Unorm:
info = {ResourceFormatType::R10G10B10A2, CompType::UNorm, 4, 1, false};
break;
case MTL::PixelFormatRGB10A2Uint:
info = {ResourceFormatType::R10G10B10A2, CompType::UInt, 4, 1, false};
break;
case MTL::PixelFormatRG11B10Float:
info = {ResourceFormatType::R11G11B10, CompType::Float, 3, 1, false};
break;
case MTL::PixelFormatRGB9E5Float:
info = {ResourceFormatType::R9G9B9E5, CompType::Float, 3, 1, false};
break;
case MTL::PixelFormatBGR10A2Unorm:
info = {ResourceFormatType::R10G10B10A2, CompType::UNorm, 4, 1, true};
break;
case MTL::PixelFormatRG32Uint:
info = {ResourceFormatType::Regular, CompType::UInt, 2, 4, false};
break;
case MTL::PixelFormatRG32Sint:
info = {ResourceFormatType::Regular, CompType::SInt, 2, 4, false};
break;
case MTL::PixelFormatRG32Float:
info = {ResourceFormatType::Regular, CompType::Float, 2, 4, false};
break;
case MTL::PixelFormatRGBA16Unorm:
info = {ResourceFormatType::Regular, CompType::UNorm, 4, 2, false};
break;
case MTL::PixelFormatRGBA16Snorm:
info = {ResourceFormatType::Regular, CompType::SNorm, 4, 2, false};
break;
case MTL::PixelFormatRGBA16Uint:
info = {ResourceFormatType::Regular, CompType::UInt, 4, 2, false};
break;
case MTL::PixelFormatRGBA16Sint:
info = {ResourceFormatType::Regular, CompType::SInt, 4, 2, false};
break;
case MTL::PixelFormatRGBA16Float:
info = {ResourceFormatType::Regular, CompType::Float, 4, 2, false};
break;
case MTL::PixelFormatRGBA32Uint:
info = {ResourceFormatType::Regular, CompType::UInt, 4, 4, false};
break;
case MTL::PixelFormatRGBA32Sint:
info = {ResourceFormatType::Regular, CompType::SInt, 4, 4, false};
break;
case MTL::PixelFormatRGBA32Float:
info = {ResourceFormatType::Regular, CompType::Float, 4, 4, false};
break;
case MTL::PixelFormatBC1_RGBA:
info = {ResourceFormatType::BC1, CompType::UNorm, 4, 1, false};
break;
case MTL::PixelFormatBC1_RGBA_sRGB:
info = {ResourceFormatType::BC1, CompType::UNormSRGB, 4, 1, false};
break;
case MTL::PixelFormatBC2_RGBA:
info = {ResourceFormatType::BC2, CompType::UNorm, 4, 1, false};
break;
case MTL::PixelFormatBC2_RGBA_sRGB:
info = {ResourceFormatType::BC2, CompType::UNormSRGB, 4, 1, false};
break;
case MTL::PixelFormatBC3_RGBA:
info = {ResourceFormatType::BC3, CompType::UNorm, 4, 1, false};
break;
case MTL::PixelFormatBC3_RGBA_sRGB:
info = {ResourceFormatType::BC3, CompType::UNormSRGB, 4, 1, false};
break;
case MTL::PixelFormatBC4_RUnorm:
info = {ResourceFormatType::BC4, CompType::UNorm, 1, 1, false};
break;
case MTL::PixelFormatBC4_RSnorm:
info = {ResourceFormatType::BC4, CompType::SNorm, 1, 1, false};
break;
case MTL::PixelFormatBC5_RGUnorm:
info = {ResourceFormatType::BC5, CompType::UNorm, 2, 1, false};
break;
case MTL::PixelFormatBC5_RGSnorm:
info = {ResourceFormatType::BC5, CompType::SNorm, 2, 1, false};
break;
case MTL::PixelFormatBC6H_RGBFloat:
info = {ResourceFormatType::BC6, CompType::Float, 3, 1, false};
break;
case MTL::PixelFormatBC6H_RGBUfloat:
info = {ResourceFormatType::BC6, CompType::UNorm, 3, 1, false};
break;
case MTL::PixelFormatBC7_RGBAUnorm:
info = {ResourceFormatType::BC7, CompType::UNorm, 4, 1, false};
break;
case MTL::PixelFormatBC7_RGBAUnorm_sRGB:
info = {ResourceFormatType::BC7, CompType::UNormSRGB, 4, 1, false};
break;
case MTL::PixelFormatPVRTC_RGB_2BPP:
info = {ResourceFormatType::PVRTC, CompType::UNorm, 3, 1, false};
break;
case MTL::PixelFormatPVRTC_RGB_2BPP_sRGB:
info = {ResourceFormatType::PVRTC, CompType::UNormSRGB, 3, 1, false};
break;
case MTL::PixelFormatPVRTC_RGB_4BPP:
info = {ResourceFormatType::PVRTC, CompType::UNorm, 3, 1, false};
break;
case MTL::PixelFormatPVRTC_RGB_4BPP_sRGB:
info = {ResourceFormatType::PVRTC, CompType::UNormSRGB, 3, 1, false};
break;
case MTL::PixelFormatPVRTC_RGBA_2BPP:
info = {ResourceFormatType::PVRTC, CompType::UNorm, 4, 1, false};
break;
case MTL::PixelFormatPVRTC_RGBA_2BPP_sRGB:
info = {ResourceFormatType::PVRTC, CompType::UNormSRGB, 4, 1, false};
break;
case MTL::PixelFormatPVRTC_RGBA_4BPP:
info = {ResourceFormatType::PVRTC, CompType::UNorm, 4, 1, false};
break;
case MTL::PixelFormatPVRTC_RGBA_4BPP_sRGB:
info = {ResourceFormatType::PVRTC, CompType::UNormSRGB, 4, 1, false};
break;
case MTL::PixelFormatEAC_R11Unorm:
info = {ResourceFormatType::EAC, CompType::UNorm, 1, 1, false};
break;
case MTL::PixelFormatEAC_R11Snorm:
info = {ResourceFormatType::EAC, CompType::SNorm, 1, 1, false};
break;
case MTL::PixelFormatEAC_RG11Unorm:
info = {ResourceFormatType::EAC, CompType::UNorm, 2, 1, false};
break;
case MTL::PixelFormatEAC_RG11Snorm:
info = {ResourceFormatType::EAC, CompType::SNorm, 2, 1, false};
break;
case MTL::PixelFormatEAC_RGBA8:
info = {ResourceFormatType::EAC, CompType::UNorm, 4, 1, false};
break;
case MTL::PixelFormatEAC_RGBA8_sRGB:
info = {ResourceFormatType::EAC, CompType::UNormSRGB, 4, 1, false};
break;
case MTL::PixelFormatETC2_RGB8:
info = {ResourceFormatType::ETC2, CompType::UNorm, 3, 1, false};
break;
case MTL::PixelFormatETC2_RGB8_sRGB:
info = {ResourceFormatType::ETC2, CompType::UNormSRGB, 3, 1, false};
break;
case MTL::PixelFormatETC2_RGB8A1:
info = {ResourceFormatType::ETC2, CompType::UNorm, 4, 1, false};
break;
case MTL::PixelFormatETC2_RGB8A1_sRGB:
info = {ResourceFormatType::ETC2, CompType::UNormSRGB, 4, 1, false};
break;
case MTL::PixelFormatASTC_4x4_sRGB:
case MTL::PixelFormatASTC_5x4_sRGB:
case MTL::PixelFormatASTC_5x5_sRGB:
case MTL::PixelFormatASTC_6x5_sRGB:
case MTL::PixelFormatASTC_6x6_sRGB:
case MTL::PixelFormatASTC_8x5_sRGB:
case MTL::PixelFormatASTC_8x6_sRGB:
case MTL::PixelFormatASTC_8x8_sRGB:
case MTL::PixelFormatASTC_10x5_sRGB:
case MTL::PixelFormatASTC_10x6_sRGB:
case MTL::PixelFormatASTC_10x8_sRGB:
case MTL::PixelFormatASTC_10x10_sRGB:
case MTL::PixelFormatASTC_12x10_sRGB:
case MTL::PixelFormatASTC_12x12_sRGB:
info = {ResourceFormatType::ASTC, CompType::UNormSRGB, 4, 1, false};
break;
case MTL::PixelFormatASTC_4x4_LDR:
case MTL::PixelFormatASTC_5x4_LDR:
case MTL::PixelFormatASTC_5x5_LDR:
case MTL::PixelFormatASTC_6x5_LDR:
case MTL::PixelFormatASTC_6x6_LDR:
case MTL::PixelFormatASTC_8x5_LDR:
case MTL::PixelFormatASTC_8x6_LDR:
case MTL::PixelFormatASTC_8x8_LDR:
case MTL::PixelFormatASTC_10x5_LDR:
case MTL::PixelFormatASTC_10x6_LDR:
case MTL::PixelFormatASTC_10x8_LDR:
case MTL::PixelFormatASTC_10x10_LDR:
case MTL::PixelFormatASTC_12x10_LDR:
case MTL::PixelFormatASTC_12x12_LDR:
info = {ResourceFormatType::ASTC, CompType::UNorm, 4, 1, false};
break;
case MTL::PixelFormatASTC_4x4_HDR:
case MTL::PixelFormatASTC_5x4_HDR:
case MTL::PixelFormatASTC_5x5_HDR:
case MTL::PixelFormatASTC_6x5_HDR:
case MTL::PixelFormatASTC_6x6_HDR:
case MTL::PixelFormatASTC_8x5_HDR:
case MTL::PixelFormatASTC_8x6_HDR:
case MTL::PixelFormatASTC_8x8_HDR:
case MTL::PixelFormatASTC_10x5_HDR:
case MTL::PixelFormatASTC_10x6_HDR:
case MTL::PixelFormatASTC_10x8_HDR:
case MTL::PixelFormatASTC_10x10_HDR:
case MTL::PixelFormatASTC_12x10_HDR:
case MTL::PixelFormatASTC_12x12_HDR:
info = {ResourceFormatType::ASTC, CompType::Float, 4, 1, false};
break;
case MTL::PixelFormatGBGR422:
info = {ResourceFormatType::YUV8, CompType::UNorm, 3, 1, false};
break;
case MTL::PixelFormatBGRG422:
info = {ResourceFormatType::YUV8, CompType::UNorm, 3, 1, true};
break;
case MTL::PixelFormatDepth16Unorm:
info = {ResourceFormatType::Regular, CompType::Depth, 1, 2, false};
break;
case MTL::PixelFormatDepth32Float:
info = {ResourceFormatType::Regular, CompType::Depth, 1, 4, false};
break;
case MTL::PixelFormatStencil8:
info = {ResourceFormatType::S8, CompType::Depth, 1, 1, false};
break;
case MTL::PixelFormatDepth24Unorm_Stencil8:
info = {ResourceFormatType::D24S8, CompType::Depth, 2, 1, false};
break;
case MTL::PixelFormatDepth32Float_Stencil8:
info = {ResourceFormatType::D32S8, CompType::Depth, 2, 1, false};
break;
case MTL::PixelFormatX32_Stencil8:
info = {ResourceFormatType::S8, CompType::Depth, 1, 1, false};
break;
case MTL::PixelFormatX24_Stencil8:
info = {ResourceFormatType::S8, CompType::Depth, 1, 1, false};
break;
case MTL::PixelFormatBGRA10_XR:
info = {ResourceFormatType::R10G10B10A2, CompType::UNorm, 4, 1, true};
break;
case MTL::PixelFormatBGRA10_XR_sRGB:
info = {ResourceFormatType::R10G10B10A2, CompType::UNormSRGB, 4, 1, true};
break;
case MTL::PixelFormatBGR10_XR:
info = {ResourceFormatType::R10G10B10A2, CompType::UNorm, 3, 1, true};
break;
case MTL::PixelFormatBGR10_XR_sRGB:
info = {ResourceFormatType::R10G10B10A2, CompType::UNormSRGB, 3, 1, true};
break;
case MTL::PixelFormatInvalid: RDCERR("Unexpected MTL::PixelFormatInvalid"); break;
};
ret.type = info.type;
ret.compType = info.compType;
ret.compCount = info.compCount;
ret.compByteWidth = info.compByteWidth;
ret.SetBGRAOrder(info.bgra);
if(IsYUVFormat(mtlFormat))
{
ret.SetYUVPlaneCount(1);
switch(mtlFormat)
{
case MTL::PixelFormatGBGR422:
case MTL::PixelFormatBGRG422: ret.SetYUVSubsampling(422); break;
default: RDCERR("Unexpected YUV Format MTL::PixelFormat: %d", mtlFormat);
}
}
return ret;
}