yuzu-emu
/
yuzu-mainline
Archived
1
0
Fork 0

video_core: Rearrange pixel format names

Normalizes pixel format names to match Vulkan names. Previous to this
commit pixel formats had no convention, leading to confusion and
potential bugs.
This commit is contained in:
ReinUsesLisp 2020-07-01 02:28:53 -03:00
parent eda37ff26b
commit fbc232426d
19 changed files with 1077 additions and 1179 deletions

View File

@ -17,101 +17,94 @@ namespace {
// https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_texture_view.txt // https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_texture_view.txt
constexpr std::array VIEW_CLASS_128_BITS = { constexpr std::array VIEW_CLASS_128_BITS = {
PixelFormat::RGBA32F, PixelFormat::R32G32B32A32_FLOAT,
PixelFormat::RGBA32UI, PixelFormat::R32G32B32A32_UINT,
PixelFormat::R32G32B32A32_SINT,
}; };
// Missing formats:
// PixelFormat::RGBA32I
constexpr std::array VIEW_CLASS_96_BITS = { constexpr std::array VIEW_CLASS_96_BITS = {
PixelFormat::RGB32F, PixelFormat::R32G32B32_FLOAT,
}; };
// Missing formats: // Missing formats:
// PixelFormat::RGB32UI, // PixelFormat::RGB32UI,
// PixelFormat::RGB32I, // PixelFormat::RGB32I,
constexpr std::array VIEW_CLASS_64_BITS = { constexpr std::array VIEW_CLASS_64_BITS = {
PixelFormat::RGBA16F, PixelFormat::RG32F, PixelFormat::RGBA16UI, PixelFormat::RG32UI, PixelFormat::R32G32_FLOAT, PixelFormat::R32G32_UINT,
PixelFormat::RGBA16U, PixelFormat::RGBA16F, PixelFormat::RGBA16S, PixelFormat::R32G32_SINT, PixelFormat::R16G16B16A16_FLOAT,
PixelFormat::R16G16B16A16_UNORM, PixelFormat::R16G16B16A16_SNORM,
PixelFormat::R16G16B16A16_UINT, PixelFormat::R16G16B16A16_SINT,
}; };
// Missing formats:
// PixelFormat::RGBA16I
// PixelFormat::RG32I
// TODO: How should we handle 48 bits? // TODO: How should we handle 48 bits?
constexpr std::array VIEW_CLASS_32_BITS = { constexpr std::array VIEW_CLASS_32_BITS = {
PixelFormat::RG16F, PixelFormat::R11FG11FB10F, PixelFormat::R32F, PixelFormat::R16G16_FLOAT, PixelFormat::B10G11R11_FLOAT, PixelFormat::R32_FLOAT,
PixelFormat::A2B10G10R10U, PixelFormat::RG16UI, PixelFormat::R32UI, PixelFormat::A2B10G10R10_UNORM, PixelFormat::R16G16_UINT, PixelFormat::R32_UINT,
PixelFormat::RG16I, PixelFormat::R32I, PixelFormat::ABGR8U, PixelFormat::R16G16_SINT, PixelFormat::R32_SINT, PixelFormat::A8B8G8R8_UNORM,
PixelFormat::RG16, PixelFormat::ABGR8S, PixelFormat::RG16S, PixelFormat::R16G16_UNORM, PixelFormat::A8B8G8R8_SNORM, PixelFormat::R16G16_SNORM,
PixelFormat::RGBA8_SRGB, PixelFormat::E5B9G9R9F, PixelFormat::BGRA8, PixelFormat::A8B8G8R8_SRGB, PixelFormat::E5B9G9R9_FLOAT, PixelFormat::B8G8R8A8_UNORM,
PixelFormat::BGRA8_SRGB, PixelFormat::B8G8R8A8_SRGB, PixelFormat::A8B8G8R8_UINT, PixelFormat::A8B8G8R8_SINT,
PixelFormat::A2B10G10R10_UINT,
}; };
// Missing formats:
// PixelFormat::RGBA8UI
// PixelFormat::RGBA8I
// PixelFormat::RGB10_A2_UI
// TODO: How should we handle 24 bits? // TODO: How should we handle 24 bits?
constexpr std::array VIEW_CLASS_16_BITS = { constexpr std::array VIEW_CLASS_16_BITS = {
PixelFormat::R16F, PixelFormat::RG8UI, PixelFormat::R16UI, PixelFormat::R16I, PixelFormat::R16_FLOAT, PixelFormat::R8G8_UINT, PixelFormat::R16_UINT,
PixelFormat::RG8U, PixelFormat::R16U, PixelFormat::RG8S, PixelFormat::R16S, PixelFormat::R16_SINT, PixelFormat::R8G8_UNORM, PixelFormat::R16_UNORM,
PixelFormat::R8G8_SNORM, PixelFormat::R16_SNORM, PixelFormat::R8G8_SINT,
}; };
// Missing formats:
// PixelFormat::RG8I
constexpr std::array VIEW_CLASS_8_BITS = { constexpr std::array VIEW_CLASS_8_BITS = {
PixelFormat::R8UI, PixelFormat::R8_UINT,
PixelFormat::R8U, PixelFormat::R8_UNORM,
PixelFormat::R8_SINT,
PixelFormat::R8_SNORM,
}; };
// Missing formats:
// PixelFormat::R8I
// PixelFormat::R8S
constexpr std::array VIEW_CLASS_RGTC1_RED = { constexpr std::array VIEW_CLASS_RGTC1_RED = {
PixelFormat::DXN1, PixelFormat::BC4_UNORM,
PixelFormat::BC4_SNORM,
}; };
// Missing formats:
// COMPRESSED_SIGNED_RED_RGTC1
constexpr std::array VIEW_CLASS_RGTC2_RG = { constexpr std::array VIEW_CLASS_RGTC2_RG = {
PixelFormat::DXN2UNORM, PixelFormat::BC5_UNORM,
PixelFormat::DXN2SNORM, PixelFormat::BC5_SNORM,
}; };
constexpr std::array VIEW_CLASS_BPTC_UNORM = { constexpr std::array VIEW_CLASS_BPTC_UNORM = {
PixelFormat::BC7U, PixelFormat::BC7_UNORM,
PixelFormat::BC7U_SRGB, PixelFormat::BC7_SRGB,
}; };
constexpr std::array VIEW_CLASS_BPTC_FLOAT = { constexpr std::array VIEW_CLASS_BPTC_FLOAT = {
PixelFormat::BC6H_SF16, PixelFormat::BC6H_SFLOAT,
PixelFormat::BC6H_UF16, PixelFormat::BC6H_UFLOAT,
}; };
// Compatibility table taken from Table 4.X.1 in: // Compatibility table taken from Table 4.X.1 in:
// https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_copy_image.txt // https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_copy_image.txt
constexpr std::array COPY_CLASS_128_BITS = { constexpr std::array COPY_CLASS_128_BITS = {
PixelFormat::RGBA32UI, PixelFormat::RGBA32F, PixelFormat::DXT23, PixelFormat::R32G32B32A32_UINT, PixelFormat::R32G32B32A32_FLOAT, PixelFormat::R32G32B32A32_SINT,
PixelFormat::DXT23_SRGB, PixelFormat::DXT45, PixelFormat::DXT45_SRGB, PixelFormat::BC2_UNORM, PixelFormat::BC2_SRGB, PixelFormat::BC3_UNORM,
PixelFormat::DXN2SNORM, PixelFormat::BC7U, PixelFormat::BC7U_SRGB, PixelFormat::BC3_SRGB, PixelFormat::BC5_UNORM, PixelFormat::BC5_SNORM,
PixelFormat::BC6H_SF16, PixelFormat::BC6H_UF16, PixelFormat::BC7_UNORM, PixelFormat::BC7_SRGB, PixelFormat::BC6H_SFLOAT,
PixelFormat::BC6H_UFLOAT,
}; };
// Missing formats: // Missing formats:
// PixelFormat::RGBA32I // PixelFormat::RGBA32I
// COMPRESSED_RG_RGTC2 // COMPRESSED_RG_RGTC2
constexpr std::array COPY_CLASS_64_BITS = { constexpr std::array COPY_CLASS_64_BITS = {
PixelFormat::RGBA16F, PixelFormat::RG32F, PixelFormat::RGBA16UI, PixelFormat::RG32UI, PixelFormat::R16G16B16A16_FLOAT, PixelFormat::R16G16B16A16_UINT,
PixelFormat::RGBA16U, PixelFormat::RGBA16S, PixelFormat::DXT1_SRGB, PixelFormat::DXT1, PixelFormat::R16G16B16A16_UNORM, PixelFormat::R16G16B16A16_SNORM,
PixelFormat::R16G16B16A16_SINT, PixelFormat::R32G32_UINT,
PixelFormat::R32G32_FLOAT, PixelFormat::R32G32_SINT,
PixelFormat::BC1_RGBA_UNORM, PixelFormat::BC1_RGBA_SRGB,
}; };
// Missing formats: // Missing formats:
// PixelFormat::RGBA16I
// PixelFormat::RG32I,
// COMPRESSED_RGB_S3TC_DXT1_EXT // COMPRESSED_RGB_S3TC_DXT1_EXT
// COMPRESSED_SRGB_S3TC_DXT1_EXT // COMPRESSED_SRGB_S3TC_DXT1_EXT
// COMPRESSED_RGBA_S3TC_DXT1_EXT // COMPRESSED_RGBA_S3TC_DXT1_EXT

View File

@ -39,42 +39,42 @@ namespace Tegra {
enum class RenderTargetFormat : u32 { enum class RenderTargetFormat : u32 {
NONE = 0x0, NONE = 0x0,
RGBA32_FLOAT = 0xC0, R32B32G32A32_FLOAT = 0xC0,
RGBA32_SINT = 0xC1, R32G32B32A32_SINT = 0xC1,
RGBA32_UINT = 0xC2, R32G32B32A32_UINT = 0xC2,
RGBA16_UNORM = 0xC6, R16G16B16A16_UNORM = 0xC6,
RGBA16_SNORM = 0xC7, R16G16B16A16_SNORM = 0xC7,
RGBA16_SINT = 0xC8, R16G16B16A16_SINT = 0xC8,
RGBA16_UINT = 0xC9, R16G16B16A16_UINT = 0xC9,
RGBA16_FLOAT = 0xCA, R16G16B16A16_FLOAT = 0xCA,
RG32_FLOAT = 0xCB, R32G32_FLOAT = 0xCB,
RG32_SINT = 0xCC, R32G32_SINT = 0xCC,
RG32_UINT = 0xCD, R32G32_UINT = 0xCD,
RGBX16_FLOAT = 0xCE, R16G16B16X16_FLOAT = 0xCE,
BGRA8_UNORM = 0xCF, B8G8R8A8_UNORM = 0xCF,
BGRA8_SRGB = 0xD0, B8G8R8A8_SRGB = 0xD0,
RGB10_A2_UNORM = 0xD1, A2B10G10R10_UNORM = 0xD1,
RGB10_A2_UINT = 0xD2, A2B10G10R10_UINT = 0xD2,
RGBA8_UNORM = 0xD5, A8B8G8R8_UNORM = 0xD5,
RGBA8_SRGB = 0xD6, A8B8G8R8_SRGB = 0xD6,
RGBA8_SNORM = 0xD7, A8B8G8R8_SNORM = 0xD7,
RGBA8_SINT = 0xD8, A8B8G8R8_SINT = 0xD8,
RGBA8_UINT = 0xD9, A8B8G8R8_UINT = 0xD9,
RG16_UNORM = 0xDA, R16G16_UNORM = 0xDA,
RG16_SNORM = 0xDB, R16G16_SNORM = 0xDB,
RG16_SINT = 0xDC, R16G16_SINT = 0xDC,
RG16_UINT = 0xDD, R16G16_UINT = 0xDD,
RG16_FLOAT = 0xDE, R16G16_FLOAT = 0xDE,
R11G11B10_FLOAT = 0xE0, B10G11R11_FLOAT = 0xE0,
R32_SINT = 0xE3, R32_SINT = 0xE3,
R32_UINT = 0xE4, R32_UINT = 0xE4,
R32_FLOAT = 0xE5, R32_FLOAT = 0xE5,
B5G6R5_UNORM = 0xE8, R5G6B5_UNORM = 0xE8,
BGR5A1_UNORM = 0xE9, A1R5G5B5_UNORM = 0xE9,
RG8_UNORM = 0xEA, R8G8_UNORM = 0xEA,
RG8_SNORM = 0xEB, R8G8_SNORM = 0xEB,
RG8_SINT = 0xEC, R8G8_SINT = 0xEC,
RG8_UINT = 0xED, R8G8_UINT = 0xED,
R16_UNORM = 0xEE, R16_UNORM = 0xEE,
R16_SNORM = 0xEF, R16_SNORM = 0xEF,
R16_SINT = 0xF0, R16_SINT = 0xF0,
@ -87,13 +87,13 @@ enum class RenderTargetFormat : u32 {
}; };
enum class DepthFormat : u32 { enum class DepthFormat : u32 {
Z32_FLOAT = 0xA, D32_FLOAT = 0xA,
Z16_UNORM = 0x13, D16_UNORM = 0x13,
S8_Z24_UNORM = 0x14, S8_UINT_Z24_UNORM = 0x14,
Z24_X8_UNORM = 0x15, D24X8_UNORM = 0x15,
Z24_S8_UNORM = 0x16, D24S8_UNORM = 0x16,
Z24_C8_UNORM = 0x18, D24C8_UNORM = 0x18,
Z32_S8_X24_FLOAT = 0x19, D32_FLOAT_S8X24_UINT = 0x19,
}; };
struct CommandListHeader; struct CommandListHeader;
@ -104,9 +104,9 @@ class DebugContext;
*/ */
struct FramebufferConfig { struct FramebufferConfig {
enum class PixelFormat : u32 { enum class PixelFormat : u32 {
ABGR8 = 1, A8B8G8R8_UNORM = 1,
RGB565 = 4, RGB565_UNORM = 4,
BGRA8 = 5, B8G8R8A8_UNORM = 5,
}; };
VAddr address; VAddr address;

View File

@ -41,168 +41,168 @@ static void MortonCopy(u32 stride, u32 block_height, u32 height, u32 block_depth
} }
static constexpr ConversionArray morton_to_linear_fns = { static constexpr ConversionArray morton_to_linear_fns = {
MortonCopy<true, PixelFormat::ABGR8U>, MortonCopy<true, PixelFormat::A8B8G8R8_UNORM>,
MortonCopy<true, PixelFormat::ABGR8S>, MortonCopy<true, PixelFormat::A8B8G8R8_SNORM>,
MortonCopy<true, PixelFormat::ABGR8I>, MortonCopy<true, PixelFormat::A8B8G8R8_SINT>,
MortonCopy<true, PixelFormat::ABGR8UI>, MortonCopy<true, PixelFormat::A8B8G8R8_UINT>,
MortonCopy<true, PixelFormat::B5G6R5U>, MortonCopy<true, PixelFormat::R5G6B5_UNORM>,
MortonCopy<true, PixelFormat::R5G6B5U>, MortonCopy<true, PixelFormat::B5G6R5_UNORM>,
MortonCopy<true, PixelFormat::B5G5R5A1U>, MortonCopy<true, PixelFormat::A1R5G5B5_UNORM>,
MortonCopy<true, PixelFormat::A2B10G10R10U>, MortonCopy<true, PixelFormat::A2B10G10R10_UNORM>,
MortonCopy<true, PixelFormat::A2B10G10R10UI>, MortonCopy<true, PixelFormat::A2B10G10R10_UINT>,
MortonCopy<true, PixelFormat::A1B5G5R5U>, MortonCopy<true, PixelFormat::A1B5G5R5_UNORM>,
MortonCopy<true, PixelFormat::R8U>, MortonCopy<true, PixelFormat::R8_UNORM>,
MortonCopy<true, PixelFormat::R8S>, MortonCopy<true, PixelFormat::R8_SNORM>,
MortonCopy<true, PixelFormat::R8I>, MortonCopy<true, PixelFormat::R8_SINT>,
MortonCopy<true, PixelFormat::R8UI>, MortonCopy<true, PixelFormat::R8_UINT>,
MortonCopy<true, PixelFormat::RGBA16F>, MortonCopy<true, PixelFormat::R16G16B16A16_FLOAT>,
MortonCopy<true, PixelFormat::RGBA16U>, MortonCopy<true, PixelFormat::R16G16B16A16_UNORM>,
MortonCopy<true, PixelFormat::RGBA16S>, MortonCopy<true, PixelFormat::R16G16B16A16_SNORM>,
MortonCopy<true, PixelFormat::RGBA16I>, MortonCopy<true, PixelFormat::R16G16B16A16_SINT>,
MortonCopy<true, PixelFormat::RGBA16UI>, MortonCopy<true, PixelFormat::R16G16B16A16_UINT>,
MortonCopy<true, PixelFormat::R11FG11FB10F>, MortonCopy<true, PixelFormat::B10G11R11_FLOAT>,
MortonCopy<true, PixelFormat::RGBA32UI>, MortonCopy<true, PixelFormat::R32G32B32A32_UINT>,
MortonCopy<true, PixelFormat::DXT1>, MortonCopy<true, PixelFormat::BC1_RGBA_UNORM>,
MortonCopy<true, PixelFormat::DXT23>, MortonCopy<true, PixelFormat::BC2_UNORM>,
MortonCopy<true, PixelFormat::DXT45>, MortonCopy<true, PixelFormat::BC3_UNORM>,
MortonCopy<true, PixelFormat::DXN1UNORM>, MortonCopy<true, PixelFormat::BC4_UNORM>,
MortonCopy<true, PixelFormat::DXN1SNORM>, MortonCopy<true, PixelFormat::BC4_SNORM>,
MortonCopy<true, PixelFormat::DXN2UNORM>, MortonCopy<true, PixelFormat::BC5_UNORM>,
MortonCopy<true, PixelFormat::DXN2SNORM>, MortonCopy<true, PixelFormat::BC5_SNORM>,
MortonCopy<true, PixelFormat::BC7U>, MortonCopy<true, PixelFormat::BC7_UNORM>,
MortonCopy<true, PixelFormat::BC6H_UF16>, MortonCopy<true, PixelFormat::BC6H_UFLOAT>,
MortonCopy<true, PixelFormat::BC6H_SF16>, MortonCopy<true, PixelFormat::BC6H_SFLOAT>,
MortonCopy<true, PixelFormat::ASTC_2D_4X4>, MortonCopy<true, PixelFormat::ASTC_2D_4X4_UNORM>,
MortonCopy<true, PixelFormat::BGRA8>, MortonCopy<true, PixelFormat::B8G8R8A8_UNORM>,
MortonCopy<true, PixelFormat::RGBA32F>, MortonCopy<true, PixelFormat::R32G32B32A32_FLOAT>,
MortonCopy<true, PixelFormat::RGBA32I>, MortonCopy<true, PixelFormat::R32G32B32A32_SINT>,
MortonCopy<true, PixelFormat::RG32F>, MortonCopy<true, PixelFormat::R32G32_FLOAT>,
MortonCopy<true, PixelFormat::RG32I>, MortonCopy<true, PixelFormat::R32G32_SINT>,
MortonCopy<true, PixelFormat::R32F>, MortonCopy<true, PixelFormat::R32_FLOAT>,
MortonCopy<true, PixelFormat::R16F>, MortonCopy<true, PixelFormat::R16_FLOAT>,
MortonCopy<true, PixelFormat::R16U>, MortonCopy<true, PixelFormat::R16_UNORM>,
MortonCopy<true, PixelFormat::R16S>, MortonCopy<true, PixelFormat::R16_SNORM>,
MortonCopy<true, PixelFormat::R16UI>, MortonCopy<true, PixelFormat::R16_UINT>,
MortonCopy<true, PixelFormat::R16I>, MortonCopy<true, PixelFormat::R16_SINT>,
MortonCopy<true, PixelFormat::RG16>, MortonCopy<true, PixelFormat::R16G16_UNORM>,
MortonCopy<true, PixelFormat::RG16F>, MortonCopy<true, PixelFormat::R16G16_FLOAT>,
MortonCopy<true, PixelFormat::RG16UI>, MortonCopy<true, PixelFormat::R16G16_UINT>,
MortonCopy<true, PixelFormat::RG16I>, MortonCopy<true, PixelFormat::R16G16_SINT>,
MortonCopy<true, PixelFormat::RG16S>, MortonCopy<true, PixelFormat::R16G16_SNORM>,
MortonCopy<true, PixelFormat::RGB32F>, MortonCopy<true, PixelFormat::R32G32B32_FLOAT>,
MortonCopy<true, PixelFormat::RGBA8_SRGB>, MortonCopy<true, PixelFormat::A8B8G8R8_SRGB>,
MortonCopy<true, PixelFormat::RG8U>, MortonCopy<true, PixelFormat::R8G8_UNORM>,
MortonCopy<true, PixelFormat::RG8S>, MortonCopy<true, PixelFormat::R8G8_SNORM>,
MortonCopy<true, PixelFormat::RG8I>, MortonCopy<true, PixelFormat::R8G8_SINT>,
MortonCopy<true, PixelFormat::RG8UI>, MortonCopy<true, PixelFormat::R8G8_UINT>,
MortonCopy<true, PixelFormat::RG32UI>, MortonCopy<true, PixelFormat::R32G32_UINT>,
MortonCopy<true, PixelFormat::RGBX16F>, MortonCopy<true, PixelFormat::R16G16B16X16_FLOAT>,
MortonCopy<true, PixelFormat::R32UI>, MortonCopy<true, PixelFormat::R32_UINT>,
MortonCopy<true, PixelFormat::R32I>, MortonCopy<true, PixelFormat::R32_SINT>,
MortonCopy<true, PixelFormat::ASTC_2D_8X8>, MortonCopy<true, PixelFormat::ASTC_2D_8X8_UNORM>,
MortonCopy<true, PixelFormat::ASTC_2D_8X5>, MortonCopy<true, PixelFormat::ASTC_2D_8X5_UNORM>,
MortonCopy<true, PixelFormat::ASTC_2D_5X4>, MortonCopy<true, PixelFormat::ASTC_2D_5X4_UNORM>,
MortonCopy<true, PixelFormat::BGRA8_SRGB>, MortonCopy<true, PixelFormat::B8G8R8A8_SRGB>,
MortonCopy<true, PixelFormat::DXT1_SRGB>, MortonCopy<true, PixelFormat::BC1_RGBA_SRGB>,
MortonCopy<true, PixelFormat::DXT23_SRGB>, MortonCopy<true, PixelFormat::BC2_SRGB>,
MortonCopy<true, PixelFormat::DXT45_SRGB>, MortonCopy<true, PixelFormat::BC3_SRGB>,
MortonCopy<true, PixelFormat::BC7U_SRGB>, MortonCopy<true, PixelFormat::BC7_SRGB>,
MortonCopy<true, PixelFormat::R4G4B4A4U>, MortonCopy<true, PixelFormat::A4B4G4R4_UNORM>,
MortonCopy<true, PixelFormat::ASTC_2D_4X4_SRGB>, MortonCopy<true, PixelFormat::ASTC_2D_4X4_SRGB>,
MortonCopy<true, PixelFormat::ASTC_2D_8X8_SRGB>, MortonCopy<true, PixelFormat::ASTC_2D_8X8_SRGB>,
MortonCopy<true, PixelFormat::ASTC_2D_8X5_SRGB>, MortonCopy<true, PixelFormat::ASTC_2D_8X5_SRGB>,
MortonCopy<true, PixelFormat::ASTC_2D_5X4_SRGB>, MortonCopy<true, PixelFormat::ASTC_2D_5X4_SRGB>,
MortonCopy<true, PixelFormat::ASTC_2D_5X5>, MortonCopy<true, PixelFormat::ASTC_2D_5X5_UNORM>,
MortonCopy<true, PixelFormat::ASTC_2D_5X5_SRGB>, MortonCopy<true, PixelFormat::ASTC_2D_5X5_SRGB>,
MortonCopy<true, PixelFormat::ASTC_2D_10X8>, MortonCopy<true, PixelFormat::ASTC_2D_10X8_UNORM>,
MortonCopy<true, PixelFormat::ASTC_2D_10X8_SRGB>, MortonCopy<true, PixelFormat::ASTC_2D_10X8_SRGB>,
MortonCopy<true, PixelFormat::ASTC_2D_6X6>, MortonCopy<true, PixelFormat::ASTC_2D_6X6_UNORM>,
MortonCopy<true, PixelFormat::ASTC_2D_6X6_SRGB>, MortonCopy<true, PixelFormat::ASTC_2D_6X6_SRGB>,
MortonCopy<true, PixelFormat::ASTC_2D_10X10>, MortonCopy<true, PixelFormat::ASTC_2D_10X10_UNORM>,
MortonCopy<true, PixelFormat::ASTC_2D_10X10_SRGB>, MortonCopy<true, PixelFormat::ASTC_2D_10X10_SRGB>,
MortonCopy<true, PixelFormat::ASTC_2D_12X12>, MortonCopy<true, PixelFormat::ASTC_2D_12X12_UNORM>,
MortonCopy<true, PixelFormat::ASTC_2D_12X12_SRGB>, MortonCopy<true, PixelFormat::ASTC_2D_12X12_SRGB>,
MortonCopy<true, PixelFormat::ASTC_2D_8X6>, MortonCopy<true, PixelFormat::ASTC_2D_8X6_UNORM>,
MortonCopy<true, PixelFormat::ASTC_2D_8X6_SRGB>, MortonCopy<true, PixelFormat::ASTC_2D_8X6_SRGB>,
MortonCopy<true, PixelFormat::ASTC_2D_6X5>, MortonCopy<true, PixelFormat::ASTC_2D_6X5_UNORM>,
MortonCopy<true, PixelFormat::ASTC_2D_6X5_SRGB>, MortonCopy<true, PixelFormat::ASTC_2D_6X5_SRGB>,
MortonCopy<true, PixelFormat::E5B9G9R9F>, MortonCopy<true, PixelFormat::E5B9G9R9_FLOAT>,
MortonCopy<true, PixelFormat::Z32F>, MortonCopy<true, PixelFormat::D32_FLOAT>,
MortonCopy<true, PixelFormat::Z16>, MortonCopy<true, PixelFormat::D16_UNORM>,
MortonCopy<true, PixelFormat::Z24S8>, MortonCopy<true, PixelFormat::D24_UNORM_S8_UINT>,
MortonCopy<true, PixelFormat::S8Z24>, MortonCopy<true, PixelFormat::S8_UINT_D24_UNORM>,
MortonCopy<true, PixelFormat::Z32FS8>, MortonCopy<true, PixelFormat::D32_FLOAT_S8_UINT>,
}; };
static constexpr ConversionArray linear_to_morton_fns = { static constexpr ConversionArray linear_to_morton_fns = {
MortonCopy<false, PixelFormat::ABGR8U>, MortonCopy<false, PixelFormat::A8B8G8R8_UNORM>,
MortonCopy<false, PixelFormat::ABGR8S>, MortonCopy<false, PixelFormat::A8B8G8R8_SNORM>,
MortonCopy<false, PixelFormat::ABGR8I>, MortonCopy<false, PixelFormat::A8B8G8R8_SINT>,
MortonCopy<false, PixelFormat::ABGR8UI>, MortonCopy<false, PixelFormat::A8B8G8R8_UINT>,
MortonCopy<false, PixelFormat::B5G6R5U>, MortonCopy<false, PixelFormat::R5G6B5_UNORM>,
MortonCopy<false, PixelFormat::R5G6B5U>, MortonCopy<false, PixelFormat::B5G6R5_UNORM>,
MortonCopy<false, PixelFormat::B5G5R5A1U>, MortonCopy<false, PixelFormat::A1R5G5B5_UNORM>,
MortonCopy<false, PixelFormat::A2B10G10R10U>, MortonCopy<false, PixelFormat::A2B10G10R10_UNORM>,
MortonCopy<false, PixelFormat::A2B10G10R10UI>, MortonCopy<false, PixelFormat::A2B10G10R10_UINT>,
MortonCopy<false, PixelFormat::A1B5G5R5U>, MortonCopy<false, PixelFormat::A1B5G5R5_UNORM>,
MortonCopy<false, PixelFormat::R8U>, MortonCopy<false, PixelFormat::R8_UNORM>,
MortonCopy<false, PixelFormat::R8S>, MortonCopy<false, PixelFormat::R8_SNORM>,
MortonCopy<false, PixelFormat::R8I>, MortonCopy<false, PixelFormat::R8_SINT>,
MortonCopy<false, PixelFormat::R8UI>, MortonCopy<false, PixelFormat::R8_UINT>,
MortonCopy<false, PixelFormat::RGBA16F>, MortonCopy<false, PixelFormat::R16G16B16A16_FLOAT>,
MortonCopy<false, PixelFormat::RGBA16S>, MortonCopy<false, PixelFormat::R16G16B16A16_SNORM>,
MortonCopy<false, PixelFormat::RGBA16I>, MortonCopy<false, PixelFormat::R16G16B16A16_SINT>,
MortonCopy<false, PixelFormat::RGBA16U>, MortonCopy<false, PixelFormat::R16G16B16A16_UNORM>,
MortonCopy<false, PixelFormat::RGBA16UI>, MortonCopy<false, PixelFormat::R16G16B16A16_UINT>,
MortonCopy<false, PixelFormat::R11FG11FB10F>, MortonCopy<false, PixelFormat::B10G11R11_FLOAT>,
MortonCopy<false, PixelFormat::RGBA32UI>, MortonCopy<false, PixelFormat::R32G32B32A32_UINT>,
MortonCopy<false, PixelFormat::DXT1>, MortonCopy<false, PixelFormat::BC1_RGBA_UNORM>,
MortonCopy<false, PixelFormat::DXT23>, MortonCopy<false, PixelFormat::BC2_UNORM>,
MortonCopy<false, PixelFormat::DXT45>, MortonCopy<false, PixelFormat::BC3_UNORM>,
MortonCopy<false, PixelFormat::DXN1UNORM>, MortonCopy<false, PixelFormat::BC4_UNORM>,
MortonCopy<false, PixelFormat::DXN1SNORM>, MortonCopy<false, PixelFormat::BC4_SNORM>,
MortonCopy<false, PixelFormat::DXN2UNORM>, MortonCopy<false, PixelFormat::BC5_UNORM>,
MortonCopy<false, PixelFormat::DXN2SNORM>, MortonCopy<false, PixelFormat::BC5_SNORM>,
MortonCopy<false, PixelFormat::BC7U>, MortonCopy<false, PixelFormat::BC7_UNORM>,
MortonCopy<false, PixelFormat::BC6H_UF16>, MortonCopy<false, PixelFormat::BC6H_UFLOAT>,
MortonCopy<false, PixelFormat::BC6H_SF16>, MortonCopy<false, PixelFormat::BC6H_SFLOAT>,
// TODO(Subv): Swizzling ASTC formats are not supported // TODO(Subv): Swizzling ASTC formats are not supported
nullptr, nullptr,
MortonCopy<false, PixelFormat::BGRA8>, MortonCopy<false, PixelFormat::B8G8R8A8_UNORM>,
MortonCopy<false, PixelFormat::RGBA32F>, MortonCopy<false, PixelFormat::R32G32B32A32_FLOAT>,
MortonCopy<false, PixelFormat::RGBA32I>, MortonCopy<false, PixelFormat::R32G32B32A32_SINT>,
MortonCopy<false, PixelFormat::RG32F>, MortonCopy<false, PixelFormat::R32G32_FLOAT>,
MortonCopy<false, PixelFormat::RG32I>, MortonCopy<false, PixelFormat::R32G32_SINT>,
MortonCopy<false, PixelFormat::R32F>, MortonCopy<false, PixelFormat::R32_FLOAT>,
MortonCopy<false, PixelFormat::R16F>, MortonCopy<false, PixelFormat::R16_FLOAT>,
MortonCopy<false, PixelFormat::R16U>, MortonCopy<false, PixelFormat::R16_UNORM>,
MortonCopy<false, PixelFormat::R16S>, MortonCopy<false, PixelFormat::R16_SNORM>,
MortonCopy<false, PixelFormat::R16UI>, MortonCopy<false, PixelFormat::R16_UINT>,
MortonCopy<false, PixelFormat::R16I>, MortonCopy<false, PixelFormat::R16_SINT>,
MortonCopy<false, PixelFormat::RG16>, MortonCopy<false, PixelFormat::R16G16_UNORM>,
MortonCopy<false, PixelFormat::RG16F>, MortonCopy<false, PixelFormat::R16G16_FLOAT>,
MortonCopy<false, PixelFormat::RG16UI>, MortonCopy<false, PixelFormat::R16G16_UINT>,
MortonCopy<false, PixelFormat::RG16I>, MortonCopy<false, PixelFormat::R16G16_SINT>,
MortonCopy<false, PixelFormat::RG16S>, MortonCopy<false, PixelFormat::R16G16_SNORM>,
MortonCopy<false, PixelFormat::RGB32F>, MortonCopy<false, PixelFormat::R32G32B32_FLOAT>,
MortonCopy<false, PixelFormat::RGBA8_SRGB>, MortonCopy<false, PixelFormat::A8B8G8R8_SRGB>,
MortonCopy<false, PixelFormat::RG8U>, MortonCopy<false, PixelFormat::R8G8_UNORM>,
MortonCopy<false, PixelFormat::RG8S>, MortonCopy<false, PixelFormat::R8G8_SNORM>,
MortonCopy<false, PixelFormat::RG8I>, MortonCopy<false, PixelFormat::R8G8_SINT>,
MortonCopy<false, PixelFormat::RG8UI>, MortonCopy<false, PixelFormat::R8G8_UINT>,
MortonCopy<false, PixelFormat::RG32UI>, MortonCopy<false, PixelFormat::R32G32_UINT>,
MortonCopy<false, PixelFormat::RGBX16F>, MortonCopy<false, PixelFormat::R16G16B16X16_FLOAT>,
MortonCopy<false, PixelFormat::R32UI>, MortonCopy<false, PixelFormat::R32_UINT>,
MortonCopy<false, PixelFormat::R32I>, MortonCopy<false, PixelFormat::R32_SINT>,
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
MortonCopy<false, PixelFormat::BGRA8_SRGB>, MortonCopy<false, PixelFormat::B8G8R8A8_SRGB>,
MortonCopy<false, PixelFormat::DXT1_SRGB>, MortonCopy<false, PixelFormat::BC1_RGBA_SRGB>,
MortonCopy<false, PixelFormat::DXT23_SRGB>, MortonCopy<false, PixelFormat::BC2_SRGB>,
MortonCopy<false, PixelFormat::DXT45_SRGB>, MortonCopy<false, PixelFormat::BC3_SRGB>,
MortonCopy<false, PixelFormat::BC7U_SRGB>, MortonCopy<false, PixelFormat::BC7_SRGB>,
MortonCopy<false, PixelFormat::R4G4B4A4U>, MortonCopy<false, PixelFormat::A4B4G4R4_UNORM>,
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
@ -221,12 +221,12 @@ static constexpr ConversionArray linear_to_morton_fns = {
nullptr, nullptr,
nullptr, nullptr,
nullptr, nullptr,
MortonCopy<false, PixelFormat::E5B9G9R9F>, MortonCopy<false, PixelFormat::E5B9G9R9_FLOAT>,
MortonCopy<false, PixelFormat::Z32F>, MortonCopy<false, PixelFormat::D32_FLOAT>,
MortonCopy<false, PixelFormat::Z16>, MortonCopy<false, PixelFormat::D16_UNORM>,
MortonCopy<false, PixelFormat::Z24S8>, MortonCopy<false, PixelFormat::D24_UNORM_S8_UINT>,
MortonCopy<false, PixelFormat::S8Z24>, MortonCopy<false, PixelFormat::S8_UINT_D24_UNORM>,
MortonCopy<false, PixelFormat::Z32FS8>, MortonCopy<false, PixelFormat::D32_FLOAT_S8_UINT>,
}; };
static MortonCopyFn GetSwizzleFunction(MortonSwizzleMode mode, Surface::PixelFormat format) { static MortonCopyFn GetSwizzleFunction(MortonSwizzleMode mode, Surface::PixelFormat format) {

View File

@ -41,102 +41,103 @@ struct FormatTuple {
}; };
constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> tex_format_tuples = {{ constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> tex_format_tuples = {{
{GL_RGBA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, // ABGR8U {GL_RGBA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, // A8B8G8R8_UNORM
{GL_RGBA8_SNORM, GL_RGBA, GL_BYTE}, // ABGR8S {GL_RGBA8_SNORM, GL_RGBA, GL_BYTE}, // A8B8G8R8_SNORM
{GL_RGBA8I, GL_RGBA_INTEGER, GL_BYTE}, // ABGR8I {GL_RGBA8I, GL_RGBA_INTEGER, GL_BYTE}, // A8B8G8R8_SINT
{GL_RGBA8UI, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE}, // ABGR8UI {GL_RGBA8UI, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE}, // A8B8G8R8_UINT
{GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5}, // B5G6R5U {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5}, // R5G6B5_UNORM
{GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV}, // R5G6B5U {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}, // B5G5R5A1U {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}, // A2B10G10R10U {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}, // A2B10G10R10UI {GL_RGB10_A2UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10_UINT
{GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // A1B5G5R5U {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // A1B5G5R5_UNORM
{GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8U {GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8_UNORM
{GL_R8_SNORM, GL_RED, GL_BYTE}, // R8S {GL_R8_SNORM, GL_RED, GL_BYTE}, // R8_SNORM
{GL_R8I, GL_RED_INTEGER, GL_BYTE}, // R8I {GL_R8I, GL_RED_INTEGER, GL_BYTE}, // R8_SINT
{GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE}, // R8UI {GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE}, // R8_UINT
{GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // RGBA16F {GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // R16G16B16A16_FLOAT
{GL_RGBA16, GL_RGBA, GL_UNSIGNED_SHORT}, // RGBA16U {GL_RGBA16, GL_RGBA, GL_UNSIGNED_SHORT}, // R16G16B16A16_UNORM
{GL_RGBA16_SNORM, GL_RGBA, GL_SHORT}, // RGBA16S {GL_RGBA16_SNORM, GL_RGBA, GL_SHORT}, // R16G16B16A16_SNORM
{GL_RGBA16I, GL_RGBA_INTEGER, GL_SHORT}, // RGBA16I {GL_RGBA16I, GL_RGBA_INTEGER, GL_SHORT}, // R16G16B16A16_SINT
{GL_RGBA16UI, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT}, // RGBA16UI {GL_RGBA16UI, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT}, // R16G16B16A16_UINT
{GL_R11F_G11F_B10F, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV}, // R11FG11FB10F {GL_R11F_G11F_B10F, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV}, // B10G11R11_FLOAT
{GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT}, // RGBA32UI {GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT}, // R32G32B32A32_UINT
{GL_COMPRESSED_RGBA_S3TC_DXT1_EXT}, // DXT1 {GL_COMPRESSED_RGBA_S3TC_DXT1_EXT}, // BC1_RGBA_UNORM
{GL_COMPRESSED_RGBA_S3TC_DXT3_EXT}, // DXT23 {GL_COMPRESSED_RGBA_S3TC_DXT3_EXT}, // BC2_UNORM
{GL_COMPRESSED_RGBA_S3TC_DXT5_EXT}, // DXT45 {GL_COMPRESSED_RGBA_S3TC_DXT5_EXT}, // BC3_UNORM
{GL_COMPRESSED_RED_RGTC1}, // DXN1UNORM {GL_COMPRESSED_RED_RGTC1}, // BC4_UNORM
{GL_COMPRESSED_SIGNED_RED_RGTC1}, // DXN1SNORM {GL_COMPRESSED_SIGNED_RED_RGTC1}, // BC4_SNORM
{GL_COMPRESSED_RG_RGTC2}, // DXN2UNORM {GL_COMPRESSED_RG_RGTC2}, // BC5_UNORM
{GL_COMPRESSED_SIGNED_RG_RGTC2}, // DXN2SNORM {GL_COMPRESSED_SIGNED_RG_RGTC2}, // BC5_SNORM
{GL_COMPRESSED_RGBA_BPTC_UNORM}, // BC7U {GL_COMPRESSED_RGBA_BPTC_UNORM}, // BC7_UNORM
{GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT}, // BC6H_UF16 {GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT}, // BC6H_UFLOAT
{GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT}, // BC6H_SF16 {GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT}, // BC6H_SFLOAT
{GL_COMPRESSED_RGBA_ASTC_4x4_KHR}, // ASTC_2D_4X4 {GL_COMPRESSED_RGBA_ASTC_4x4_KHR}, // ASTC_2D_4X4_UNORM
{GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE}, // BGRA8 {GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE}, // B8G8R8A8_UNORM
{GL_RGBA32F, GL_RGBA, GL_FLOAT}, // RGBA32F {GL_RGBA32F, GL_RGBA, GL_FLOAT}, // R32G32B32A32_FLOAT
{GL_RGBA32I, GL_RGBA_INTEGER, GL_INT}, // RGBA32I {GL_RGBA32I, GL_RGBA_INTEGER, GL_INT}, // R32G32B32A32_SINT
{GL_RG32F, GL_RG, GL_FLOAT}, // RG32F {GL_RG32F, GL_RG, GL_FLOAT}, // R32G32_FLOAT
{GL_RG32I, GL_RG_INTEGER, GL_INT}, // RG32I {GL_RG32I, GL_RG_INTEGER, GL_INT}, // R32G32_SINT
{GL_R32F, GL_RED, GL_FLOAT}, // R32F {GL_R32F, GL_RED, GL_FLOAT}, // R32_FLOAT
{GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16F {GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16_FLOAT
{GL_R16, GL_RED, GL_UNSIGNED_SHORT}, // R16U {GL_R16, GL_RED, GL_UNSIGNED_SHORT}, // R16_UNORM
{GL_R16_SNORM, GL_RED, GL_SHORT}, // R16S {GL_R16_SNORM, GL_RED, GL_SHORT}, // R16_SNORM
{GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT}, // R16UI {GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT}, // R16_UINT
{GL_R16I, GL_RED_INTEGER, GL_SHORT}, // R16I {GL_R16I, GL_RED_INTEGER, GL_SHORT}, // R16_SINT
{GL_RG16, GL_RG, GL_UNSIGNED_SHORT}, // RG16 {GL_RG16, GL_RG, GL_UNSIGNED_SHORT}, // R16G16_UNORM
{GL_RG16F, GL_RG, GL_HALF_FLOAT}, // RG16F {GL_RG16F, GL_RG, GL_HALF_FLOAT}, // R16G16_FLOAT
{GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT}, // RG16UI {GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT}, // R16G16_UINT
{GL_RG16I, GL_RG_INTEGER, GL_SHORT}, // RG16I {GL_RG16I, GL_RG_INTEGER, GL_SHORT}, // R16G16_SINT
{GL_RG16_SNORM, GL_RG, GL_SHORT}, // RG16S {GL_RG16_SNORM, GL_RG, GL_SHORT}, // R16G16_SNORM
{GL_RGB32F, GL_RGB, GL_FLOAT}, // RGB32F {GL_RGB32F, GL_RGB, GL_FLOAT}, // R32G32B32_FLOAT
{GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, // RGBA8_SRGB {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, // A8B8G8R8_SRGB
{GL_RG8, GL_RG, GL_UNSIGNED_BYTE}, // RG8U {GL_RG8, GL_RG, GL_UNSIGNED_BYTE}, // R8G8_UNORM
{GL_RG8_SNORM, GL_RG, GL_BYTE}, // RG8S {GL_RG8_SNORM, GL_RG, GL_BYTE}, // R8G8_SNORM
{GL_RG8I, GL_RG_INTEGER, GL_BYTE}, // RG8I {GL_RG8I, GL_RG_INTEGER, GL_BYTE}, // R8G8_SINT
{GL_RG8UI, GL_RG_INTEGER, GL_UNSIGNED_BYTE}, // RG8UI {GL_RG8UI, GL_RG_INTEGER, GL_UNSIGNED_BYTE}, // R8G8_UINT
{GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT}, // RG32UI {GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT}, // R32G32_UINT
{GL_RGB16F, GL_RGBA, GL_HALF_FLOAT}, // RGBX16F {GL_RGB16F, GL_RGBA, GL_HALF_FLOAT}, // R16G16B16X16_FLOAT
{GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT}, // R32UI {GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT}, // R32_UINT
{GL_R32I, GL_RED_INTEGER, GL_INT}, // R32I {GL_R32I, GL_RED_INTEGER, GL_INT}, // R32_SINT
{GL_COMPRESSED_RGBA_ASTC_8x8_KHR}, // ASTC_2D_8X8 {GL_COMPRESSED_RGBA_ASTC_8x8_KHR}, // ASTC_2D_8X8_UNORM
{GL_COMPRESSED_RGBA_ASTC_8x5_KHR}, // ASTC_2D_8X5 {GL_COMPRESSED_RGBA_ASTC_8x5_KHR}, // ASTC_2D_8X5_UNORM
{GL_COMPRESSED_RGBA_ASTC_5x4_KHR}, // ASTC_2D_5X4 {GL_COMPRESSED_RGBA_ASTC_5x4_KHR}, // ASTC_2D_5X4_UNORM
{GL_SRGB8_ALPHA8, GL_BGRA, GL_UNSIGNED_BYTE}, // BGRA8 {GL_SRGB8_ALPHA8, GL_BGRA, GL_UNSIGNED_BYTE}, // B8G8R8A8_UNORM
// Compressed sRGB formats // Compressed sRGB formats
{GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT}, // DXT1_SRGB {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT}, // BC1_RGBA_SRGB
{GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT}, // DXT23_SRGB {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT}, // BC2_SRGB
{GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}, // DXT45_SRGB {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}, // BC3_SRGB
{GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM}, // BC7U_SRGB {GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM}, // BC7_SRGB
{GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4_REV}, // R4G4B4A4U {GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4_REV}, // A4B4G4R4_UNORM
{GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR}, // ASTC_2D_4X4_SRGB {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_8x8_KHR}, // ASTC_2D_8X8_SRGB
{GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR}, // ASTC_2D_8X5_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_SRGB8_ALPHA8_ASTC_5x4_KHR}, // ASTC_2D_5X4_SRGB
{GL_COMPRESSED_RGBA_ASTC_5x5_KHR}, // ASTC_2D_5X5 {GL_COMPRESSED_RGBA_ASTC_5x5_KHR}, // ASTC_2D_5X5_UNORM
{GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR}, // ASTC_2D_5X5_SRGB {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR}, // ASTC_2D_5X5_SRGB
{GL_COMPRESSED_RGBA_ASTC_10x8_KHR}, // ASTC_2D_10X8 {GL_COMPRESSED_RGBA_ASTC_10x8_KHR}, // ASTC_2D_10X8_UNORM
{GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR}, // ASTC_2D_10X8_SRGB {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR}, // ASTC_2D_10X8_SRGB
{GL_COMPRESSED_RGBA_ASTC_6x6_KHR}, // ASTC_2D_6X6 {GL_COMPRESSED_RGBA_ASTC_6x6_KHR}, // ASTC_2D_6X6_UNORM
{GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR}, // ASTC_2D_6X6_SRGB {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR}, // ASTC_2D_6X6_SRGB
{GL_COMPRESSED_RGBA_ASTC_10x10_KHR}, // ASTC_2D_10X10 {GL_COMPRESSED_RGBA_ASTC_10x10_KHR}, // ASTC_2D_10X10_UNORM
{GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR}, // ASTC_2D_10X10_SRGB {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR}, // ASTC_2D_10X10_SRGB
{GL_COMPRESSED_RGBA_ASTC_12x12_KHR}, // ASTC_2D_12X12 {GL_COMPRESSED_RGBA_ASTC_12x12_KHR}, // ASTC_2D_12X12_UNORM
{GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR}, // ASTC_2D_12X12_SRGB {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR}, // ASTC_2D_12X12_SRGB
{GL_COMPRESSED_RGBA_ASTC_8x6_KHR}, // ASTC_2D_8X6 {GL_COMPRESSED_RGBA_ASTC_8x6_KHR}, // ASTC_2D_8X6_UNORM
{GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR}, // ASTC_2D_8X6_SRGB {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR}, // ASTC_2D_8X6_SRGB
{GL_COMPRESSED_RGBA_ASTC_6x5_KHR}, // ASTC_2D_6X5 {GL_COMPRESSED_RGBA_ASTC_6x5_KHR}, // ASTC_2D_6X5_UNORM
{GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR}, // ASTC_2D_6X5_SRGB {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR}, // ASTC_2D_6X5_SRGB
{GL_RGB9_E5, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV}, // E5B9G9R9F {GL_RGB9_E5, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV}, // E5B9G9R9_FLOAT
// Depth formats // Depth formats
{GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT}, // Z32F {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT}, // D32_FLOAT
{GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT}, // Z16 {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT}, // D16_UNORM
// DepthStencil formats // DepthStencil formats
{GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}, // Z24S8 {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}, // S8Z24 {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}, // Z32FS8 {GL_DEPTH32F_STENCIL8, GL_DEPTH_STENCIL,
GL_FLOAT_32_UNSIGNED_INT_24_8_REV}, // D32_FLOAT_S8_UINT
}}; }};
const FormatTuple& GetFormatTuple(PixelFormat pixel_format) { const FormatTuple& GetFormatTuple(PixelFormat pixel_format) {
@ -189,10 +190,10 @@ GLint GetSwizzleSource(SwizzleSource source) {
GLenum GetComponent(PixelFormat format, bool is_first) { GLenum GetComponent(PixelFormat format, bool is_first) {
switch (format) { switch (format) {
case PixelFormat::Z24S8: case PixelFormat::D24_UNORM_S8_UINT:
case PixelFormat::Z32FS8: case PixelFormat::D32_FLOAT_S8_UINT:
return is_first ? GL_DEPTH_COMPONENT : GL_STENCIL_INDEX; return is_first ? GL_DEPTH_COMPONENT : GL_STENCIL_INDEX;
case PixelFormat::S8Z24: case PixelFormat::S8_UINT_D24_UNORM:
return is_first ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT; return is_first ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT;
default: default:
UNREACHABLE(); UNREACHABLE();
@ -493,9 +494,9 @@ GLuint CachedSurfaceView::GetTexture(SwizzleSource x_source, SwizzleSource y_sou
std::array swizzle{x_source, y_source, z_source, w_source}; std::array swizzle{x_source, y_source, z_source, w_source};
switch (const PixelFormat format = GetSurfaceParams().pixel_format) { switch (const PixelFormat format = GetSurfaceParams().pixel_format) {
case PixelFormat::Z24S8: case PixelFormat::D24_UNORM_S8_UINT:
case PixelFormat::Z32FS8: case PixelFormat::D32_FLOAT_S8_UINT:
case PixelFormat::S8Z24: case PixelFormat::S8_UINT_D24_UNORM:
UNIMPLEMENTED_IF(x_source != SwizzleSource::R && x_source != SwizzleSource::G); UNIMPLEMENTED_IF(x_source != SwizzleSource::R && x_source != SwizzleSource::G);
glTextureParameteri(view.handle, GL_DEPTH_STENCIL_TEXTURE_MODE, glTextureParameteri(view.handle, GL_DEPTH_STENCIL_TEXTURE_MODE,
GetComponent(format, x_source == SwizzleSource::R)); GetComponent(format, x_source == SwizzleSource::R));

View File

@ -535,12 +535,12 @@ void RendererOpenGL::ConfigureFramebufferTexture(TextureInfo& texture,
GLint internal_format; GLint internal_format;
switch (framebuffer.pixel_format) { switch (framebuffer.pixel_format) {
case Tegra::FramebufferConfig::PixelFormat::ABGR8: case Tegra::FramebufferConfig::PixelFormat::A8B8G8R8_UNORM:
internal_format = GL_RGBA8; internal_format = GL_RGBA8;
texture.gl_format = GL_RGBA; texture.gl_format = GL_RGBA;
texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV; texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
break; break;
case Tegra::FramebufferConfig::PixelFormat::RGB565: case Tegra::FramebufferConfig::PixelFormat::RGB565_UNORM:
internal_format = GL_RGB565; internal_format = GL_RGB565;
texture.gl_format = GL_RGB; texture.gl_format = GL_RGB;
texture.gl_type = GL_UNSIGNED_SHORT_5_6_5; texture.gl_type = GL_UNSIGNED_SHORT_5_6_5;

View File

@ -117,101 +117,101 @@ struct FormatTuple {
VkFormat format; ///< Vulkan format VkFormat format; ///< Vulkan format
int usage = 0; ///< Describes image format usage int usage = 0; ///< Describes image format usage
} constexpr tex_format_tuples[] = { } constexpr tex_format_tuples[] = {
{VK_FORMAT_A8B8G8R8_UNORM_PACK32, Attachable | Storage}, // ABGR8U {VK_FORMAT_A8B8G8R8_UNORM_PACK32, Attachable | Storage}, // A8B8G8R8_UNORM
{VK_FORMAT_A8B8G8R8_SNORM_PACK32, Attachable | Storage}, // ABGR8S {VK_FORMAT_A8B8G8R8_SNORM_PACK32, Attachable | Storage}, // A8B8G8R8_SNORM
{VK_FORMAT_A8B8G8R8_SINT_PACK32, Attachable | Storage}, // ABGR8I {VK_FORMAT_A8B8G8R8_SINT_PACK32, Attachable | Storage}, // A8B8G8R8_SINT
{VK_FORMAT_A8B8G8R8_UINT_PACK32, Attachable | Storage}, // ABGR8UI {VK_FORMAT_A8B8G8R8_UINT_PACK32, Attachable | Storage}, // A8B8G8R8_UINT
{VK_FORMAT_R5G6B5_UNORM_PACK16, Attachable}, // B5G6R5U {VK_FORMAT_R5G6B5_UNORM_PACK16, Attachable}, // R5G6B5_UNORM
{VK_FORMAT_B5G6R5_UNORM_PACK16, Attachable}, // R5G6B5U {VK_FORMAT_B5G6R5_UNORM_PACK16, Attachable}, // B5G6R5_UNORM
{VK_FORMAT_A1R5G5B5_UNORM_PACK16, Attachable}, // B5G5R5A1U {VK_FORMAT_A1R5G5B5_UNORM_PACK16, Attachable}, // A1R5G5B5_UNORM
{VK_FORMAT_A2B10G10R10_UNORM_PACK32, Attachable | Storage}, // A2B10G10R10U {VK_FORMAT_A2B10G10R10_UNORM_PACK32, Attachable | Storage}, // A2B10G10R10_UNORM
{VK_FORMAT_A2B10G10R10_UINT_PACK32, Attachable | Storage}, // A2B10G10R10UI {VK_FORMAT_A2B10G10R10_UINT_PACK32, Attachable | Storage}, // A2B10G10R10_UINT
{VK_FORMAT_A1R5G5B5_UNORM_PACK16, Attachable}, // A1B5G5R5U (flipped with swizzle) {VK_FORMAT_A1R5G5B5_UNORM_PACK16, Attachable}, // A1B5G5R5_UNORM (flipped with swizzle)
{VK_FORMAT_R8_UNORM, Attachable | Storage}, // R8U {VK_FORMAT_R8_UNORM, Attachable | Storage}, // R8_UNORM
{VK_FORMAT_R8_SNORM, Attachable | Storage}, // R8S {VK_FORMAT_R8_SNORM, Attachable | Storage}, // R8_SNORM
{VK_FORMAT_R8_SINT, Attachable | Storage}, // R8I {VK_FORMAT_R8_SINT, Attachable | Storage}, // R8_SINT
{VK_FORMAT_R8_UINT, Attachable | Storage}, // R8UI {VK_FORMAT_R8_UINT, Attachable | Storage}, // R8_UINT
{VK_FORMAT_R16G16B16A16_SFLOAT, Attachable | Storage}, // RGBA16F {VK_FORMAT_R16G16B16A16_SFLOAT, Attachable | Storage}, // R16G16B16A16_FLOAT
{VK_FORMAT_R16G16B16A16_UNORM, Attachable | Storage}, // RGBA16U {VK_FORMAT_R16G16B16A16_UNORM, Attachable | Storage}, // R16G16B16A16_UNORM
{VK_FORMAT_R16G16B16A16_SNORM, Attachable | Storage}, // RGBA16S {VK_FORMAT_R16G16B16A16_SNORM, Attachable | Storage}, // R16G16B16A16_SNORM
{VK_FORMAT_R16G16B16A16_SINT, Attachable | Storage}, // RGBA16I {VK_FORMAT_R16G16B16A16_SINT, Attachable | Storage}, // R16G16B16A16_SINT
{VK_FORMAT_R16G16B16A16_UINT, Attachable | Storage}, // RGBA16UI {VK_FORMAT_R16G16B16A16_UINT, Attachable | Storage}, // R16G16B16A16_UINT
{VK_FORMAT_B10G11R11_UFLOAT_PACK32, Attachable | Storage}, // R11FG11FB10F {VK_FORMAT_B10G11R11_UFLOAT_PACK32, Attachable | Storage}, // B10G11R11_FLOAT
{VK_FORMAT_R32G32B32A32_UINT, Attachable | Storage}, // RGBA32UI {VK_FORMAT_R32G32B32A32_UINT, Attachable | Storage}, // R32G32B32A32_UINT
{VK_FORMAT_BC1_RGBA_UNORM_BLOCK}, // DXT1 {VK_FORMAT_BC1_RGBA_UNORM_BLOCK}, // BC1_RGBA_UNORM
{VK_FORMAT_BC2_UNORM_BLOCK}, // DXT23 {VK_FORMAT_BC2_UNORM_BLOCK}, // BC2_UNORM
{VK_FORMAT_BC3_UNORM_BLOCK}, // DXT45 {VK_FORMAT_BC3_UNORM_BLOCK}, // BC3_UNORM
{VK_FORMAT_BC4_UNORM_BLOCK}, // DXN1UNORM {VK_FORMAT_BC4_UNORM_BLOCK}, // BC4_UNORM
{VK_FORMAT_BC4_SNORM_BLOCK}, // DXN1SNORM {VK_FORMAT_BC4_SNORM_BLOCK}, // BC4_SNORM
{VK_FORMAT_BC5_UNORM_BLOCK}, // DXN2UNORM {VK_FORMAT_BC5_UNORM_BLOCK}, // BC5_UNORM
{VK_FORMAT_BC5_SNORM_BLOCK}, // DXN2SNORM {VK_FORMAT_BC5_SNORM_BLOCK}, // BC5_SNORM
{VK_FORMAT_BC7_UNORM_BLOCK}, // BC7U {VK_FORMAT_BC7_UNORM_BLOCK}, // BC7_UNORM
{VK_FORMAT_BC6H_UFLOAT_BLOCK}, // BC6H_UF16 {VK_FORMAT_BC6H_UFLOAT_BLOCK}, // BC6H_UFLOAT
{VK_FORMAT_BC6H_SFLOAT_BLOCK}, // BC6H_SF16 {VK_FORMAT_BC6H_SFLOAT_BLOCK}, // BC6H_SFLOAT
{VK_FORMAT_ASTC_4x4_UNORM_BLOCK}, // ASTC_2D_4X4 {VK_FORMAT_ASTC_4x4_UNORM_BLOCK}, // ASTC_2D_4X4_UNORM
{VK_FORMAT_B8G8R8A8_UNORM, Attachable}, // BGRA8 {VK_FORMAT_B8G8R8A8_UNORM, Attachable}, // B8G8R8A8_UNORM
{VK_FORMAT_R32G32B32A32_SFLOAT, Attachable | Storage}, // RGBA32F {VK_FORMAT_R32G32B32A32_SFLOAT, Attachable | Storage}, // R32G32B32A32_FLOAT
{VK_FORMAT_R32G32B32A32_SINT, Attachable | Storage}, // RGBA32I {VK_FORMAT_R32G32B32A32_SINT, Attachable | Storage}, // R32G32B32A32_SINT
{VK_FORMAT_R32G32_SFLOAT, Attachable | Storage}, // RG32F {VK_FORMAT_R32G32_SFLOAT, Attachable | Storage}, // R32G32_FLOAT
{VK_FORMAT_R32G32_SINT, Attachable | Storage}, // RG32I {VK_FORMAT_R32G32_SINT, Attachable | Storage}, // R32G32_SINT
{VK_FORMAT_R32_SFLOAT, Attachable | Storage}, // R32F {VK_FORMAT_R32_SFLOAT, Attachable | Storage}, // R32_FLOAT
{VK_FORMAT_R16_SFLOAT, Attachable | Storage}, // R16F {VK_FORMAT_R16_SFLOAT, Attachable | Storage}, // R16_FLOAT
{VK_FORMAT_R16_UNORM, Attachable | Storage}, // R16U {VK_FORMAT_R16_UNORM, Attachable | Storage}, // R16_UNORM
{VK_FORMAT_UNDEFINED}, // R16S {VK_FORMAT_UNDEFINED}, // R16_SNORM
{VK_FORMAT_R16_UINT, Attachable | Storage}, // R16UI {VK_FORMAT_R16_UINT, Attachable | Storage}, // R16_UINT
{VK_FORMAT_UNDEFINED}, // R16I {VK_FORMAT_UNDEFINED}, // R16_SINT
{VK_FORMAT_R16G16_UNORM, Attachable | Storage}, // RG16 {VK_FORMAT_R16G16_UNORM, Attachable | Storage}, // R16G16_UNORM
{VK_FORMAT_R16G16_SFLOAT, Attachable | Storage}, // RG16F {VK_FORMAT_R16G16_SFLOAT, Attachable | Storage}, // R16G16_FLOAT
{VK_FORMAT_UNDEFINED}, // RG16UI {VK_FORMAT_UNDEFINED}, // R16G16_UINT
{VK_FORMAT_UNDEFINED}, // RG16I {VK_FORMAT_UNDEFINED}, // R16G16_SINT
{VK_FORMAT_R16G16_SNORM, Attachable | Storage}, // RG16S {VK_FORMAT_R16G16_SNORM, Attachable | Storage}, // R16G16_SNORM
{VK_FORMAT_UNDEFINED}, // RGB32F {VK_FORMAT_UNDEFINED}, // R32G32B32_FLOAT
{VK_FORMAT_R8G8B8A8_SRGB, Attachable}, // RGBA8_SRGB {VK_FORMAT_R8G8B8A8_SRGB, Attachable}, // A8B8G8R8_SRGB
{VK_FORMAT_R8G8_UNORM, Attachable | Storage}, // RG8U {VK_FORMAT_R8G8_UNORM, Attachable | Storage}, // R8G8_UNORM
{VK_FORMAT_R8G8_SNORM, Attachable | Storage}, // RG8S {VK_FORMAT_R8G8_SNORM, Attachable | Storage}, // R8G8_SNORM
{VK_FORMAT_R8G8_SINT, Attachable | Storage}, // RG8I {VK_FORMAT_R8G8_SINT, Attachable | Storage}, // R8G8_SINT
{VK_FORMAT_R8G8_UINT, Attachable | Storage}, // RG8UI {VK_FORMAT_R8G8_UINT, Attachable | Storage}, // R8G8_UINT
{VK_FORMAT_R32G32_UINT, Attachable | Storage}, // RG32UI {VK_FORMAT_R32G32_UINT, Attachable | Storage}, // R32G32_UINT
{VK_FORMAT_UNDEFINED}, // RGBX16F {VK_FORMAT_UNDEFINED}, // R16G16B16X16_FLOAT
{VK_FORMAT_R32_UINT, Attachable | Storage}, // R32UI {VK_FORMAT_R32_UINT, Attachable | Storage}, // R32_UINT
{VK_FORMAT_R32_SINT, Attachable | Storage}, // R32I {VK_FORMAT_R32_SINT, Attachable | Storage}, // R32_SINT
{VK_FORMAT_ASTC_8x8_UNORM_BLOCK}, // ASTC_2D_8X8 {VK_FORMAT_ASTC_8x8_UNORM_BLOCK}, // ASTC_2D_8X8_UNORM
{VK_FORMAT_UNDEFINED}, // ASTC_2D_8X5 {VK_FORMAT_UNDEFINED}, // ASTC_2D_8X5_UNORM
{VK_FORMAT_UNDEFINED}, // ASTC_2D_5X4 {VK_FORMAT_UNDEFINED}, // ASTC_2D_5X4_UNORM
{VK_FORMAT_B8G8R8A8_SRGB, Attachable}, // BGRA8_SRGB {VK_FORMAT_B8G8R8A8_SRGB, Attachable}, // B8G8R8A8_SRGB
{VK_FORMAT_BC1_RGBA_SRGB_BLOCK}, // DXT1_SRGB {VK_FORMAT_BC1_RGBA_SRGB_BLOCK}, // BC1_RGBA_SRGB
{VK_FORMAT_BC2_SRGB_BLOCK}, // DXT23_SRGB {VK_FORMAT_BC2_SRGB_BLOCK}, // BC2_SRGB
{VK_FORMAT_BC3_SRGB_BLOCK}, // DXT45_SRGB {VK_FORMAT_BC3_SRGB_BLOCK}, // BC3_SRGB
{VK_FORMAT_BC7_SRGB_BLOCK}, // BC7U_SRGB {VK_FORMAT_BC7_SRGB_BLOCK}, // BC7_SRGB
{VK_FORMAT_R4G4B4A4_UNORM_PACK16, Attachable}, // R4G4B4A4U {VK_FORMAT_R4G4B4A4_UNORM_PACK16, Attachable}, // A4B4G4R4_UNORM
{VK_FORMAT_ASTC_4x4_SRGB_BLOCK}, // ASTC_2D_4X4_SRGB {VK_FORMAT_ASTC_4x4_SRGB_BLOCK}, // ASTC_2D_4X4_SRGB
{VK_FORMAT_ASTC_8x8_SRGB_BLOCK}, // ASTC_2D_8X8_SRGB {VK_FORMAT_ASTC_8x8_SRGB_BLOCK}, // ASTC_2D_8X8_SRGB
{VK_FORMAT_ASTC_8x5_SRGB_BLOCK}, // ASTC_2D_8X5_SRGB {VK_FORMAT_ASTC_8x5_SRGB_BLOCK}, // ASTC_2D_8X5_SRGB
{VK_FORMAT_ASTC_5x4_SRGB_BLOCK}, // ASTC_2D_5X4_SRGB {VK_FORMAT_ASTC_5x4_SRGB_BLOCK}, // ASTC_2D_5X4_SRGB
{VK_FORMAT_ASTC_5x5_UNORM_BLOCK}, // ASTC_2D_5X5 {VK_FORMAT_ASTC_5x5_UNORM_BLOCK}, // ASTC_2D_5X5_UNORM
{VK_FORMAT_ASTC_5x5_SRGB_BLOCK}, // ASTC_2D_5X5_SRGB {VK_FORMAT_ASTC_5x5_SRGB_BLOCK}, // ASTC_2D_5X5_SRGB
{VK_FORMAT_ASTC_10x8_UNORM_BLOCK}, // ASTC_2D_10X8 {VK_FORMAT_ASTC_10x8_UNORM_BLOCK}, // ASTC_2D_10X8_UNORM
{VK_FORMAT_ASTC_10x8_SRGB_BLOCK}, // ASTC_2D_10X8_SRGB {VK_FORMAT_ASTC_10x8_SRGB_BLOCK}, // ASTC_2D_10X8_SRGB
{VK_FORMAT_ASTC_6x6_UNORM_BLOCK}, // ASTC_2D_6X6 {VK_FORMAT_ASTC_6x6_UNORM_BLOCK}, // ASTC_2D_6X6_UNORM
{VK_FORMAT_ASTC_6x6_SRGB_BLOCK}, // ASTC_2D_6X6_SRGB {VK_FORMAT_ASTC_6x6_SRGB_BLOCK}, // ASTC_2D_6X6_SRGB
{VK_FORMAT_ASTC_10x10_UNORM_BLOCK}, // ASTC_2D_10X10 {VK_FORMAT_ASTC_10x10_UNORM_BLOCK}, // ASTC_2D_10X10_UNORM
{VK_FORMAT_ASTC_10x10_SRGB_BLOCK}, // ASTC_2D_10X10_SRGB {VK_FORMAT_ASTC_10x10_SRGB_BLOCK}, // ASTC_2D_10X10_SRGB
{VK_FORMAT_ASTC_12x12_UNORM_BLOCK}, // ASTC_2D_12X12 {VK_FORMAT_ASTC_12x12_UNORM_BLOCK}, // ASTC_2D_12X12_UNORM
{VK_FORMAT_ASTC_12x12_SRGB_BLOCK}, // ASTC_2D_12X12_SRGB {VK_FORMAT_ASTC_12x12_SRGB_BLOCK}, // ASTC_2D_12X12_SRGB
{VK_FORMAT_ASTC_8x6_UNORM_BLOCK}, // ASTC_2D_8X6 {VK_FORMAT_ASTC_8x6_UNORM_BLOCK}, // ASTC_2D_8X6_UNORM
{VK_FORMAT_ASTC_8x6_SRGB_BLOCK}, // ASTC_2D_8X6_SRGB {VK_FORMAT_ASTC_8x6_SRGB_BLOCK}, // ASTC_2D_8X6_SRGB
{VK_FORMAT_ASTC_6x5_UNORM_BLOCK}, // ASTC_2D_6X5 {VK_FORMAT_ASTC_6x5_UNORM_BLOCK}, // ASTC_2D_6X5_UNORM
{VK_FORMAT_ASTC_6x5_SRGB_BLOCK}, // ASTC_2D_6X5_SRGB {VK_FORMAT_ASTC_6x5_SRGB_BLOCK}, // ASTC_2D_6X5_SRGB
{VK_FORMAT_E5B9G9R9_UFLOAT_PACK32}, // E5B9G9R9F {VK_FORMAT_E5B9G9R9_UFLOAT_PACK32}, // E5B9G9R9_FLOAT
// Depth formats // Depth formats
{VK_FORMAT_D32_SFLOAT, Attachable}, // Z32F {VK_FORMAT_D32_SFLOAT, Attachable}, // D32_FLOAT
{VK_FORMAT_D16_UNORM, Attachable}, // Z16 {VK_FORMAT_D16_UNORM, Attachable}, // D16_UNORM
// DepthStencil formats // DepthStencil formats
{VK_FORMAT_D24_UNORM_S8_UINT, Attachable}, // Z24S8 {VK_FORMAT_D24_UNORM_S8_UINT, Attachable}, // D24_UNORM_S8_UINT
{VK_FORMAT_D24_UNORM_S8_UINT, Attachable}, // S8Z24 (emulated) {VK_FORMAT_D24_UNORM_S8_UINT, Attachable}, // S8_UINT_D24_UNORM (emulated)
{VK_FORMAT_D32_SFLOAT_S8_UINT, Attachable}, // Z32FS8 {VK_FORMAT_D32_SFLOAT_S8_UINT, Attachable}, // D32_FLOAT_S8_UINT
}; };
static_assert(std::size(tex_format_tuples) == VideoCore::Surface::MaxPixelFormat); static_assert(std::size(tex_format_tuples) == VideoCore::Surface::MaxPixelFormat);
@ -232,7 +232,7 @@ FormatInfo SurfaceFormat(const VKDevice& device, FormatType format_type, PixelFo
return {VK_FORMAT_A8B8G8R8_UNORM_PACK32, true, true}; return {VK_FORMAT_A8B8G8R8_UNORM_PACK32, true, true};
} }
// Use ABGR8 on hardware that doesn't support ASTC natively // Use A8B8G8R8_UNORM on hardware that doesn't support ASTC natively
if (!device.IsOptimalAstcSupported() && VideoCore::Surface::IsPixelFormatASTC(pixel_format)) { if (!device.IsOptimalAstcSupported() && VideoCore::Surface::IsPixelFormatASTC(pixel_format)) {
tuple.format = VideoCore::Surface::IsPixelFormatSRGB(pixel_format) tuple.format = VideoCore::Surface::IsPixelFormatSRGB(pixel_format)
? VK_FORMAT_A8B8G8R8_SRGB_PACK32 ? VK_FORMAT_A8B8G8R8_SRGB_PACK32

View File

@ -183,9 +183,9 @@ std::size_t GetSizeInBytes(const Tegra::FramebufferConfig& framebuffer) {
VkFormat GetFormat(const Tegra::FramebufferConfig& framebuffer) { VkFormat GetFormat(const Tegra::FramebufferConfig& framebuffer) {
switch (framebuffer.pixel_format) { switch (framebuffer.pixel_format) {
case Tegra::FramebufferConfig::PixelFormat::ABGR8: case Tegra::FramebufferConfig::PixelFormat::A8B8G8R8_UNORM:
return VK_FORMAT_A8B8G8R8_UNORM_PACK32; return VK_FORMAT_A8B8G8R8_UNORM_PACK32;
case Tegra::FramebufferConfig::PixelFormat::RGB565: case Tegra::FramebufferConfig::PixelFormat::RGB565_UNORM:
return VK_FORMAT_R5G6B5_UNORM_PACK16; return VK_FORMAT_R5G6B5_UNORM_PACK16;
default: default:
UNIMPLEMENTED_MSG("Unknown framebuffer pixel format: {}", UNIMPLEMENTED_MSG("Unknown framebuffer pixel format: {}",

View File

@ -233,7 +233,7 @@ void CachedSurface::UploadTexture(const std::vector<u8>& staging_buffer) {
void CachedSurface::DownloadTexture(std::vector<u8>& staging_buffer) { void CachedSurface::DownloadTexture(std::vector<u8>& staging_buffer) {
UNIMPLEMENTED_IF(params.IsBuffer()); UNIMPLEMENTED_IF(params.IsBuffer());
if (params.pixel_format == VideoCore::Surface::PixelFormat::A1B5G5R5U) { if (params.pixel_format == VideoCore::Surface::PixelFormat::A1B5G5R5_UNORM) {
LOG_WARNING(Render_Vulkan, "A1B5G5R5 flushing is stubbed"); LOG_WARNING(Render_Vulkan, "A1B5G5R5 flushing is stubbed");
} }
@ -382,7 +382,7 @@ VkImageView CachedSurfaceView::GetImageView(SwizzleSource x_source, SwizzleSourc
std::array swizzle{MaxwellToVK::SwizzleSource(x_source), MaxwellToVK::SwizzleSource(y_source), std::array swizzle{MaxwellToVK::SwizzleSource(x_source), MaxwellToVK::SwizzleSource(y_source),
MaxwellToVK::SwizzleSource(z_source), MaxwellToVK::SwizzleSource(w_source)}; MaxwellToVK::SwizzleSource(z_source), MaxwellToVK::SwizzleSource(w_source)};
if (params.pixel_format == VideoCore::Surface::PixelFormat::A1B5G5R5U) { if (params.pixel_format == VideoCore::Surface::PixelFormat::A1B5G5R5_UNORM) {
// A1B5G5R5 is implemented as A1R5G5B5, we have to change the swizzle here. // A1B5G5R5 is implemented as A1R5G5B5, we have to change the swizzle here.
std::swap(swizzle[0], swizzle[2]); std::swap(swizzle[0], swizzle[2]);
} }
@ -394,11 +394,11 @@ VkImageView CachedSurfaceView::GetImageView(SwizzleSource x_source, SwizzleSourc
UNIMPLEMENTED_IF(x_source != SwizzleSource::R && x_source != SwizzleSource::G); UNIMPLEMENTED_IF(x_source != SwizzleSource::R && x_source != SwizzleSource::G);
const bool is_first = x_source == SwizzleSource::R; const bool is_first = x_source == SwizzleSource::R;
switch (params.pixel_format) { switch (params.pixel_format) {
case VideoCore::Surface::PixelFormat::Z24S8: case VideoCore::Surface::PixelFormat::D24_UNORM_S8_UINT:
case VideoCore::Surface::PixelFormat::Z32FS8: case VideoCore::Surface::PixelFormat::D32_FLOAT_S8_UINT:
aspect = is_first ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_STENCIL_BIT; aspect = is_first ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_STENCIL_BIT;
break; break;
case VideoCore::Surface::PixelFormat::S8Z24: case VideoCore::Surface::PixelFormat::S8_UINT_D24_UNORM:
aspect = is_first ? VK_IMAGE_ASPECT_STENCIL_BIT : VK_IMAGE_ASPECT_DEPTH_BIT; aspect = is_first ? VK_IMAGE_ASPECT_STENCIL_BIT : VK_IMAGE_ASPECT_DEPTH_BIT;
break; break;
default: default:

View File

@ -31,11 +31,11 @@ ComponentType GetComponentType(Tegra::Engines::SamplerDescriptor descriptor,
std::size_t component) { std::size_t component) {
const TextureFormat format{descriptor.format}; const TextureFormat format{descriptor.format};
switch (format) { switch (format) {
case TextureFormat::R16_G16_B16_A16: case TextureFormat::R16G16B16A16:
case TextureFormat::R32_G32_B32_A32: case TextureFormat::R32G32B32A32:
case TextureFormat::R32_G32_B32: case TextureFormat::R32G32B32:
case TextureFormat::R32_G32: case TextureFormat::R32G32:
case TextureFormat::R16_G16: case TextureFormat::R16G16:
case TextureFormat::R32: case TextureFormat::R32:
case TextureFormat::R16: case TextureFormat::R16:
case TextureFormat::R8: case TextureFormat::R8:
@ -97,7 +97,7 @@ ComponentType GetComponentType(Tegra::Engines::SamplerDescriptor descriptor,
break; break;
case TextureFormat::B5G6R5: case TextureFormat::B5G6R5:
case TextureFormat::B6G5R5: case TextureFormat::B6G5R5:
case TextureFormat::BF10GF11RF11: case TextureFormat::B10G11R11:
if (component == 0) { if (component == 0) {
return descriptor.b_type; return descriptor.b_type;
} }
@ -108,9 +108,9 @@ ComponentType GetComponentType(Tegra::Engines::SamplerDescriptor descriptor,
return descriptor.r_type; return descriptor.r_type;
} }
break; break;
case TextureFormat::G8R24: case TextureFormat::R24G8:
case TextureFormat::G24R8: case TextureFormat::R8G24:
case TextureFormat::G8R8: case TextureFormat::R8G8:
case TextureFormat::G4R4: case TextureFormat::G4R4:
if (component == 0) { if (component == 0) {
return descriptor.g_type; return descriptor.g_type;
@ -137,15 +137,15 @@ bool IsComponentEnabled(std::size_t component_mask, std::size_t component) {
u32 GetComponentSize(TextureFormat format, std::size_t component) { u32 GetComponentSize(TextureFormat format, std::size_t component) {
switch (format) { switch (format) {
case TextureFormat::R32_G32_B32_A32: case TextureFormat::R32G32B32A32:
return 32; return 32;
case TextureFormat::R16_G16_B16_A16: case TextureFormat::R16G16B16A16:
return 16; return 16;
case TextureFormat::R32_G32_B32: case TextureFormat::R32G32B32:
return component <= 2 ? 32 : 0; return component <= 2 ? 32 : 0;
case TextureFormat::R32_G32: case TextureFormat::R32G32:
return component <= 1 ? 32 : 0; return component <= 1 ? 32 : 0;
case TextureFormat::R16_G16: case TextureFormat::R16G16:
return component <= 1 ? 16 : 0; return component <= 1 ? 16 : 0;
case TextureFormat::R32: case TextureFormat::R32:
return component == 0 ? 32 : 0; return component == 0 ? 32 : 0;
@ -192,7 +192,7 @@ u32 GetComponentSize(TextureFormat format, std::size_t component) {
return 6; return 6;
} }
return 0; return 0;
case TextureFormat::BF10GF11RF11: case TextureFormat::B10G11R11:
if (component == 1 || component == 2) { if (component == 1 || component == 2) {
return 11; return 11;
} }
@ -200,7 +200,7 @@ u32 GetComponentSize(TextureFormat format, std::size_t component) {
return 10; return 10;
} }
return 0; return 0;
case TextureFormat::G8R24: case TextureFormat::R24G8:
if (component == 0) { if (component == 0) {
return 8; return 8;
} }
@ -208,7 +208,7 @@ u32 GetComponentSize(TextureFormat format, std::size_t component) {
return 24; return 24;
} }
return 0; return 0;
case TextureFormat::G24R8: case TextureFormat::R8G24:
if (component == 0) { if (component == 0) {
return 8; return 8;
} }
@ -216,7 +216,7 @@ u32 GetComponentSize(TextureFormat format, std::size_t component) {
return 24; return 24;
} }
return 0; return 0;
case TextureFormat::G8R8: case TextureFormat::R8G8:
return (component == 0 || component == 1) ? 8 : 0; return (component == 0 || component == 1) ? 8 : 0;
case TextureFormat::G4R4: case TextureFormat::G4R4:
return (component == 0 || component == 1) ? 4 : 0; return (component == 0 || component == 1) ? 4 : 0;
@ -231,25 +231,25 @@ std::size_t GetImageComponentMask(TextureFormat format) {
constexpr u8 B = 0b0100; constexpr u8 B = 0b0100;
constexpr u8 A = 0b1000; constexpr u8 A = 0b1000;
switch (format) { switch (format) {
case TextureFormat::R32_G32_B32_A32: case TextureFormat::R32G32B32A32:
case TextureFormat::R16_G16_B16_A16: case TextureFormat::R16G16B16A16:
case TextureFormat::A8R8G8B8: case TextureFormat::A8R8G8B8:
case TextureFormat::A2B10G10R10: case TextureFormat::A2B10G10R10:
case TextureFormat::A4B4G4R4: case TextureFormat::A4B4G4R4:
case TextureFormat::A5B5G5R1: case TextureFormat::A5B5G5R1:
case TextureFormat::A1B5G5R5: case TextureFormat::A1B5G5R5:
return std::size_t{R | G | B | A}; return std::size_t{R | G | B | A};
case TextureFormat::R32_G32_B32: case TextureFormat::R32G32B32:
case TextureFormat::R32_B24G8: case TextureFormat::R32_B24G8:
case TextureFormat::B5G6R5: case TextureFormat::B5G6R5:
case TextureFormat::B6G5R5: case TextureFormat::B6G5R5:
case TextureFormat::BF10GF11RF11: case TextureFormat::B10G11R11:
return std::size_t{R | G | B}; return std::size_t{R | G | B};
case TextureFormat::R32_G32: case TextureFormat::R32G32:
case TextureFormat::R16_G16: case TextureFormat::R16G16:
case TextureFormat::G8R24: case TextureFormat::R24G8:
case TextureFormat::G24R8: case TextureFormat::R8G24:
case TextureFormat::G8R8: case TextureFormat::R8G8:
case TextureFormat::G4R4: case TextureFormat::G4R4:
return std::size_t{R | G}; return std::size_t{R | G};
case TextureFormat::R32: case TextureFormat::R32:

View File

@ -74,131 +74,131 @@ bool SurfaceTargetIsArray(SurfaceTarget target) {
PixelFormat PixelFormatFromDepthFormat(Tegra::DepthFormat format) { PixelFormat PixelFormatFromDepthFormat(Tegra::DepthFormat format) {
switch (format) { switch (format) {
case Tegra::DepthFormat::S8_Z24_UNORM: case Tegra::DepthFormat::S8_UINT_Z24_UNORM:
return PixelFormat::S8Z24; return PixelFormat::S8_UINT_D24_UNORM;
case Tegra::DepthFormat::Z24_S8_UNORM: case Tegra::DepthFormat::D24S8_UNORM:
return PixelFormat::Z24S8; return PixelFormat::D24_UNORM_S8_UINT;
case Tegra::DepthFormat::Z32_FLOAT: case Tegra::DepthFormat::D32_FLOAT:
return PixelFormat::Z32F; return PixelFormat::D32_FLOAT;
case Tegra::DepthFormat::Z16_UNORM: case Tegra::DepthFormat::D16_UNORM:
return PixelFormat::Z16; return PixelFormat::D16_UNORM;
case Tegra::DepthFormat::Z32_S8_X24_FLOAT: case Tegra::DepthFormat::D32_FLOAT_S8X24_UINT:
return PixelFormat::Z32FS8; return PixelFormat::D32_FLOAT_S8_UINT;
default: default:
UNIMPLEMENTED_MSG("Unimplemented format={}", static_cast<u32>(format)); UNIMPLEMENTED_MSG("Unimplemented format={}", static_cast<u32>(format));
return PixelFormat::S8Z24; return PixelFormat::S8_UINT_D24_UNORM;
} }
} }
PixelFormat PixelFormatFromRenderTargetFormat(Tegra::RenderTargetFormat format) { PixelFormat PixelFormatFromRenderTargetFormat(Tegra::RenderTargetFormat format) {
switch (format) { switch (format) {
case Tegra::RenderTargetFormat::RGBA32_FLOAT: case Tegra::RenderTargetFormat::R32B32G32A32_FLOAT:
return PixelFormat::RGBA32F; return PixelFormat::R32G32B32A32_FLOAT;
case Tegra::RenderTargetFormat::RGBA32_SINT: case Tegra::RenderTargetFormat::R32G32B32A32_SINT:
return PixelFormat::RGBA32I; return PixelFormat::R32G32B32A32_SINT;
case Tegra::RenderTargetFormat::RGBA32_UINT: case Tegra::RenderTargetFormat::R32G32B32A32_UINT:
return PixelFormat::RGBA32UI; return PixelFormat::R32G32B32A32_UINT;
case Tegra::RenderTargetFormat::RGBA16_UNORM: case Tegra::RenderTargetFormat::R16G16B16A16_UNORM:
return PixelFormat::RGBA16U; return PixelFormat::R16G16B16A16_UNORM;
case Tegra::RenderTargetFormat::RGBA16_SNORM: case Tegra::RenderTargetFormat::R16G16B16A16_SNORM:
return PixelFormat::RGBA16S; return PixelFormat::R16G16B16A16_SNORM;
case Tegra::RenderTargetFormat::RGBA16_SINT: case Tegra::RenderTargetFormat::R16G16B16A16_SINT:
return PixelFormat::RGBA16I; return PixelFormat::R16G16B16A16_SINT;
case Tegra::RenderTargetFormat::RGBA16_UINT: case Tegra::RenderTargetFormat::R16G16B16A16_UINT:
return PixelFormat::RGBA16UI; return PixelFormat::R16G16B16A16_UINT;
case Tegra::RenderTargetFormat::RGBA16_FLOAT: case Tegra::RenderTargetFormat::R16G16B16A16_FLOAT:
return PixelFormat::RGBA16F; return PixelFormat::R16G16B16A16_FLOAT;
case Tegra::RenderTargetFormat::RG32_FLOAT: case Tegra::RenderTargetFormat::R32G32_FLOAT:
return PixelFormat::RG32F; return PixelFormat::R32G32_FLOAT;
case Tegra::RenderTargetFormat::RG32_SINT: case Tegra::RenderTargetFormat::R32G32_SINT:
return PixelFormat::RG32I; return PixelFormat::R32G32_SINT;
case Tegra::RenderTargetFormat::RG32_UINT: case Tegra::RenderTargetFormat::R32G32_UINT:
return PixelFormat::RG32UI; return PixelFormat::R32G32_UINT;
case Tegra::RenderTargetFormat::RGBX16_FLOAT: case Tegra::RenderTargetFormat::R16G16B16X16_FLOAT:
return PixelFormat::RGBX16F; return PixelFormat::R16G16B16X16_FLOAT;
case Tegra::RenderTargetFormat::BGRA8_UNORM: case Tegra::RenderTargetFormat::B8G8R8A8_UNORM:
return PixelFormat::BGRA8; return PixelFormat::B8G8R8A8_UNORM;
case Tegra::RenderTargetFormat::BGRA8_SRGB: case Tegra::RenderTargetFormat::B8G8R8A8_SRGB:
return PixelFormat::BGRA8_SRGB; return PixelFormat::B8G8R8A8_SRGB;
case Tegra::RenderTargetFormat::RGB10_A2_UNORM: case Tegra::RenderTargetFormat::A2B10G10R10_UNORM:
return PixelFormat::A2B10G10R10U; return PixelFormat::A2B10G10R10_UNORM;
case Tegra::RenderTargetFormat::RGB10_A2_UINT: case Tegra::RenderTargetFormat::A2B10G10R10_UINT:
return PixelFormat::A2B10G10R10UI; return PixelFormat::A2B10G10R10_UINT;
case Tegra::RenderTargetFormat::RGBA8_UNORM: case Tegra::RenderTargetFormat::A8B8G8R8_UNORM:
return PixelFormat::ABGR8U; return PixelFormat::A8B8G8R8_UNORM;
case Tegra::RenderTargetFormat::RGBA8_SRGB: case Tegra::RenderTargetFormat::A8B8G8R8_SRGB:
return PixelFormat::RGBA8_SRGB; return PixelFormat::A8B8G8R8_SRGB;
case Tegra::RenderTargetFormat::RGBA8_SNORM: case Tegra::RenderTargetFormat::A8B8G8R8_SNORM:
return PixelFormat::ABGR8S; return PixelFormat::A8B8G8R8_SNORM;
case Tegra::RenderTargetFormat::RGBA8_SINT: case Tegra::RenderTargetFormat::A8B8G8R8_SINT:
return PixelFormat::ABGR8I; return PixelFormat::A8B8G8R8_SINT;
case Tegra::RenderTargetFormat::RGBA8_UINT: case Tegra::RenderTargetFormat::A8B8G8R8_UINT:
return PixelFormat::ABGR8UI; return PixelFormat::A8B8G8R8_UINT;
case Tegra::RenderTargetFormat::RG16_UNORM: case Tegra::RenderTargetFormat::R16G16_UNORM:
return PixelFormat::RG16; return PixelFormat::R16G16_UNORM;
case Tegra::RenderTargetFormat::RG16_SNORM: case Tegra::RenderTargetFormat::R16G16_SNORM:
return PixelFormat::RG16S; return PixelFormat::R16G16_SNORM;
case Tegra::RenderTargetFormat::RG16_SINT: case Tegra::RenderTargetFormat::R16G16_SINT:
return PixelFormat::RG16I; return PixelFormat::R16G16_SINT;
case Tegra::RenderTargetFormat::RG16_UINT: case Tegra::RenderTargetFormat::R16G16_UINT:
return PixelFormat::RG16UI; return PixelFormat::R16G16_UINT;
case Tegra::RenderTargetFormat::RG16_FLOAT: case Tegra::RenderTargetFormat::R16G16_FLOAT:
return PixelFormat::RG16F; return PixelFormat::R16G16_FLOAT;
case Tegra::RenderTargetFormat::R11G11B10_FLOAT: case Tegra::RenderTargetFormat::B10G11R11_FLOAT:
return PixelFormat::R11FG11FB10F; return PixelFormat::B10G11R11_FLOAT;
case Tegra::RenderTargetFormat::R32_SINT: case Tegra::RenderTargetFormat::R32_SINT:
return PixelFormat::R32I; return PixelFormat::R32_SINT;
case Tegra::RenderTargetFormat::R32_UINT: case Tegra::RenderTargetFormat::R32_UINT:
return PixelFormat::R32UI; return PixelFormat::R32_UINT;
case Tegra::RenderTargetFormat::R32_FLOAT: case Tegra::RenderTargetFormat::R32_FLOAT:
return PixelFormat::R32F; return PixelFormat::R32_FLOAT;
case Tegra::RenderTargetFormat::B5G6R5_UNORM: case Tegra::RenderTargetFormat::R5G6B5_UNORM:
return PixelFormat::B5G6R5U; return PixelFormat::R5G6B5_UNORM;
case Tegra::RenderTargetFormat::BGR5A1_UNORM: case Tegra::RenderTargetFormat::A1R5G5B5_UNORM:
return PixelFormat::B5G5R5A1U; return PixelFormat::A1R5G5B5_UNORM;
case Tegra::RenderTargetFormat::RG8_UNORM: case Tegra::RenderTargetFormat::R8G8_UNORM:
return PixelFormat::RG8U; return PixelFormat::R8G8_UNORM;
case Tegra::RenderTargetFormat::RG8_SNORM: case Tegra::RenderTargetFormat::R8G8_SNORM:
return PixelFormat::RG8S; return PixelFormat::R8G8_SNORM;
case Tegra::RenderTargetFormat::RG8_SINT: case Tegra::RenderTargetFormat::R8G8_SINT:
return PixelFormat::RG8I; return PixelFormat::R8G8_SINT;
case Tegra::RenderTargetFormat::RG8_UINT: case Tegra::RenderTargetFormat::R8G8_UINT:
return PixelFormat::RG8UI; return PixelFormat::R8G8_UINT;
case Tegra::RenderTargetFormat::R16_UNORM: case Tegra::RenderTargetFormat::R16_UNORM:
return PixelFormat::R16U; return PixelFormat::R16_UNORM;
case Tegra::RenderTargetFormat::R16_SNORM: case Tegra::RenderTargetFormat::R16_SNORM:
return PixelFormat::R16S; return PixelFormat::R16_SNORM;
case Tegra::RenderTargetFormat::R16_SINT: case Tegra::RenderTargetFormat::R16_SINT:
return PixelFormat::R16I; return PixelFormat::R16_SINT;
case Tegra::RenderTargetFormat::R16_UINT: case Tegra::RenderTargetFormat::R16_UINT:
return PixelFormat::R16UI; return PixelFormat::R16_UINT;
case Tegra::RenderTargetFormat::R16_FLOAT: case Tegra::RenderTargetFormat::R16_FLOAT:
return PixelFormat::R16F; return PixelFormat::R16_FLOAT;
case Tegra::RenderTargetFormat::R8_UNORM: case Tegra::RenderTargetFormat::R8_UNORM:
return PixelFormat::R8U; return PixelFormat::R8_UNORM;
case Tegra::RenderTargetFormat::R8_SNORM: case Tegra::RenderTargetFormat::R8_SNORM:
return PixelFormat::R8S; return PixelFormat::R8_SNORM;
case Tegra::RenderTargetFormat::R8_SINT: case Tegra::RenderTargetFormat::R8_SINT:
return PixelFormat::R8I; return PixelFormat::R8_SINT;
case Tegra::RenderTargetFormat::R8_UINT: case Tegra::RenderTargetFormat::R8_UINT:
return PixelFormat::R8UI; return PixelFormat::R8_UINT;
default: default:
UNIMPLEMENTED_MSG("Unimplemented format={}", static_cast<int>(format)); UNIMPLEMENTED_MSG("Unimplemented format={}", static_cast<int>(format));
return PixelFormat::ABGR8U; return PixelFormat::A8B8G8R8_UNORM;
} }
} }
PixelFormat PixelFormatFromGPUPixelFormat(Tegra::FramebufferConfig::PixelFormat format) { PixelFormat PixelFormatFromGPUPixelFormat(Tegra::FramebufferConfig::PixelFormat format) {
switch (format) { switch (format) {
case Tegra::FramebufferConfig::PixelFormat::ABGR8: case Tegra::FramebufferConfig::PixelFormat::A8B8G8R8_UNORM:
return PixelFormat::ABGR8U; return PixelFormat::A8B8G8R8_UNORM;
case Tegra::FramebufferConfig::PixelFormat::RGB565: case Tegra::FramebufferConfig::PixelFormat::RGB565_UNORM:
return PixelFormat::B5G6R5U; return PixelFormat::R5G6B5_UNORM;
case Tegra::FramebufferConfig::PixelFormat::BGRA8: case Tegra::FramebufferConfig::PixelFormat::B8G8R8A8_UNORM:
return PixelFormat::BGRA8; return PixelFormat::B8G8R8A8_UNORM;
default: default:
UNIMPLEMENTED_MSG("Unimplemented format={}", static_cast<u32>(format)); UNIMPLEMENTED_MSG("Unimplemented format={}", static_cast<u32>(format));
return PixelFormat::ABGR8U; return PixelFormat::A8B8G8R8_UNORM;
} }
} }
@ -226,27 +226,27 @@ SurfaceType GetFormatType(PixelFormat pixel_format) {
bool IsPixelFormatASTC(PixelFormat format) { bool IsPixelFormatASTC(PixelFormat format) {
switch (format) { switch (format) {
case PixelFormat::ASTC_2D_4X4: case PixelFormat::ASTC_2D_4X4_UNORM:
case PixelFormat::ASTC_2D_5X4: case PixelFormat::ASTC_2D_5X4_UNORM:
case PixelFormat::ASTC_2D_5X5: case PixelFormat::ASTC_2D_5X5_UNORM:
case PixelFormat::ASTC_2D_8X8: case PixelFormat::ASTC_2D_8X8_UNORM:
case PixelFormat::ASTC_2D_8X5: case PixelFormat::ASTC_2D_8X5_UNORM:
case PixelFormat::ASTC_2D_4X4_SRGB: case PixelFormat::ASTC_2D_4X4_SRGB:
case PixelFormat::ASTC_2D_5X4_SRGB: case PixelFormat::ASTC_2D_5X4_SRGB:
case PixelFormat::ASTC_2D_5X5_SRGB: case PixelFormat::ASTC_2D_5X5_SRGB:
case PixelFormat::ASTC_2D_8X8_SRGB: case PixelFormat::ASTC_2D_8X8_SRGB:
case PixelFormat::ASTC_2D_8X5_SRGB: case PixelFormat::ASTC_2D_8X5_SRGB:
case PixelFormat::ASTC_2D_10X8: case PixelFormat::ASTC_2D_10X8_UNORM:
case PixelFormat::ASTC_2D_10X8_SRGB: case PixelFormat::ASTC_2D_10X8_SRGB:
case PixelFormat::ASTC_2D_6X6: case PixelFormat::ASTC_2D_6X6_UNORM:
case PixelFormat::ASTC_2D_6X6_SRGB: case PixelFormat::ASTC_2D_6X6_SRGB:
case PixelFormat::ASTC_2D_10X10: case PixelFormat::ASTC_2D_10X10_UNORM:
case PixelFormat::ASTC_2D_10X10_SRGB: case PixelFormat::ASTC_2D_10X10_SRGB:
case PixelFormat::ASTC_2D_12X12: case PixelFormat::ASTC_2D_12X12_UNORM:
case PixelFormat::ASTC_2D_12X12_SRGB: case PixelFormat::ASTC_2D_12X12_SRGB:
case PixelFormat::ASTC_2D_8X6: case PixelFormat::ASTC_2D_8X6_UNORM:
case PixelFormat::ASTC_2D_8X6_SRGB: case PixelFormat::ASTC_2D_8X6_SRGB:
case PixelFormat::ASTC_2D_6X5: case PixelFormat::ASTC_2D_6X5_UNORM:
case PixelFormat::ASTC_2D_6X5_SRGB: case PixelFormat::ASTC_2D_6X5_SRGB:
return true; return true;
default: default:
@ -256,12 +256,12 @@ bool IsPixelFormatASTC(PixelFormat format) {
bool IsPixelFormatSRGB(PixelFormat format) { bool IsPixelFormatSRGB(PixelFormat format) {
switch (format) { switch (format) {
case PixelFormat::RGBA8_SRGB: case PixelFormat::A8B8G8R8_SRGB:
case PixelFormat::BGRA8_SRGB: case PixelFormat::B8G8R8A8_SRGB:
case PixelFormat::DXT1_SRGB: case PixelFormat::BC1_RGBA_SRGB:
case PixelFormat::DXT23_SRGB: case PixelFormat::BC2_SRGB:
case PixelFormat::DXT45_SRGB: case PixelFormat::BC3_SRGB:
case PixelFormat::BC7U_SRGB: case PixelFormat::BC7_SRGB:
case PixelFormat::ASTC_2D_4X4_SRGB: case PixelFormat::ASTC_2D_4X4_SRGB:
case PixelFormat::ASTC_2D_8X8_SRGB: case PixelFormat::ASTC_2D_8X8_SRGB:
case PixelFormat::ASTC_2D_8X5_SRGB: case PixelFormat::ASTC_2D_8X5_SRGB:

View File

@ -15,105 +15,105 @@
namespace VideoCore::Surface { namespace VideoCore::Surface {
enum class PixelFormat { enum class PixelFormat {
ABGR8U, A8B8G8R8_UNORM,
ABGR8S, A8B8G8R8_SNORM,
ABGR8I, A8B8G8R8_SINT,
ABGR8UI, A8B8G8R8_UINT,
B5G6R5U, R5G6B5_UNORM,
R5G6B5U, B5G6R5_UNORM,
B5G5R5A1U, A1R5G5B5_UNORM,
A2B10G10R10U, A2B10G10R10_UNORM,
A2B10G10R10UI, A2B10G10R10_UINT,
A1B5G5R5U, A1B5G5R5_UNORM,
R8U, R8_UNORM,
R8S, R8_SNORM,
R8I, R8_SINT,
R8UI, R8_UINT,
RGBA16F, R16G16B16A16_FLOAT,
RGBA16U, R16G16B16A16_UNORM,
RGBA16S, R16G16B16A16_SNORM,
RGBA16I, R16G16B16A16_SINT,
RGBA16UI, R16G16B16A16_UINT,
R11FG11FB10F, B10G11R11_FLOAT,
RGBA32UI, R32G32B32A32_UINT,
DXT1, BC1_RGBA_UNORM,
DXT23, BC2_UNORM,
DXT45, BC3_UNORM,
DXN1UNORM, // This is also known as BC4 BC4_UNORM,
DXN1SNORM, BC4_SNORM,
DXN2UNORM, BC5_UNORM,
DXN2SNORM, BC5_SNORM,
BC7U, BC7_UNORM,
BC6H_UF16, BC6H_UFLOAT,
BC6H_SF16, BC6H_SFLOAT,
ASTC_2D_4X4, ASTC_2D_4X4_UNORM,
BGRA8, B8G8R8A8_UNORM,
RGBA32F, R32G32B32A32_FLOAT,
RGBA32I, R32G32B32A32_SINT,
RG32F, R32G32_FLOAT,
RG32I, R32G32_SINT,
R32F, R32_FLOAT,
R16F, R16_FLOAT,
R16U, R16_UNORM,
R16S, R16_SNORM,
R16UI, R16_UINT,
R16I, R16_SINT,
RG16, R16G16_UNORM,
RG16F, R16G16_FLOAT,
RG16UI, R16G16_UINT,
RG16I, R16G16_SINT,
RG16S, R16G16_SNORM,
RGB32F, R32G32B32_FLOAT,
RGBA8_SRGB, A8B8G8R8_SRGB,
RG8U, R8G8_UNORM,
RG8S, R8G8_SNORM,
RG8I, R8G8_SINT,
RG8UI, R8G8_UINT,
RG32UI, R32G32_UINT,
RGBX16F, R16G16B16X16_FLOAT,
R32UI, R32_UINT,
R32I, R32_SINT,
ASTC_2D_8X8, ASTC_2D_8X8_UNORM,
ASTC_2D_8X5, ASTC_2D_8X5_UNORM,
ASTC_2D_5X4, ASTC_2D_5X4_UNORM,
BGRA8_SRGB, B8G8R8A8_SRGB,
DXT1_SRGB, BC1_RGBA_SRGB,
DXT23_SRGB, BC2_SRGB,
DXT45_SRGB, BC3_SRGB,
BC7U_SRGB, BC7_SRGB,
R4G4B4A4U, A4B4G4R4_UNORM,
ASTC_2D_4X4_SRGB, ASTC_2D_4X4_SRGB,
ASTC_2D_8X8_SRGB, ASTC_2D_8X8_SRGB,
ASTC_2D_8X5_SRGB, ASTC_2D_8X5_SRGB,
ASTC_2D_5X4_SRGB, ASTC_2D_5X4_SRGB,
ASTC_2D_5X5, ASTC_2D_5X5_UNORM,
ASTC_2D_5X5_SRGB, ASTC_2D_5X5_SRGB,
ASTC_2D_10X8, ASTC_2D_10X8_UNORM,
ASTC_2D_10X8_SRGB, ASTC_2D_10X8_SRGB,
ASTC_2D_6X6, ASTC_2D_6X6_UNORM,
ASTC_2D_6X6_SRGB, ASTC_2D_6X6_SRGB,
ASTC_2D_10X10, ASTC_2D_10X10_UNORM,
ASTC_2D_10X10_SRGB, ASTC_2D_10X10_SRGB,
ASTC_2D_12X12, ASTC_2D_12X12_UNORM,
ASTC_2D_12X12_SRGB, ASTC_2D_12X12_SRGB,
ASTC_2D_8X6, ASTC_2D_8X6_UNORM,
ASTC_2D_8X6_SRGB, ASTC_2D_8X6_SRGB,
ASTC_2D_6X5, ASTC_2D_6X5_UNORM,
ASTC_2D_6X5_SRGB, ASTC_2D_6X5_SRGB,
E5B9G9R9F, E5B9G9R9_FLOAT,
MaxColorFormat, MaxColorFormat,
// Depth formats // Depth formats
Z32F = MaxColorFormat, D32_FLOAT = MaxColorFormat,
Z16, D16_UNORM,
MaxDepthFormat, MaxDepthFormat,
// DepthStencil formats // DepthStencil formats
Z24S8 = MaxDepthFormat, D24_UNORM_S8_UINT = MaxDepthFormat,
S8Z24, S8_UINT_D24_UNORM,
Z32FS8, D32_FLOAT_S8_UINT,
MaxDepthStencilFormat, MaxDepthStencilFormat,
@ -141,97 +141,97 @@ enum class SurfaceTarget {
}; };
constexpr std::array<u32, MaxPixelFormat> compression_factor_shift_table = {{ constexpr std::array<u32, MaxPixelFormat> compression_factor_shift_table = {{
0, // ABGR8U 0, // A8B8G8R8_UNORM
0, // ABGR8S 0, // A8B8G8R8_SNORM
0, // ABGR8I 0, // A8B8G8R8_SINT
0, // ABGR8UI 0, // A8B8G8R8_UINT
0, // B5G6R5U 0, // R5G6B5_UNORM
0, // R5G6B5U 0, // B5G6R5_UNORM
0, // B5G5R5A1U 0, // A1R5G5B5_UNORM
0, // A2B10G10R10U 0, // A2B10G10R10_UNORM
0, // A2B10G10R10UI 0, // A2B10G10R10_UINT
0, // A1B5G5R5U 0, // A1B5G5R5_UNORM
0, // R8U 0, // R8_UNORM
0, // R8S 0, // R8_SNORM
0, // R8I 0, // R8_SINT
0, // R8UI 0, // R8_UINT
0, // RGBA16F 0, // R16G16B16A16_FLOAT
0, // RGBA16U 0, // R16G16B16A16_UNORM
0, // RGBA16S 0, // R16G16B16A16_SNORM
0, // RGBA16I 0, // R16G16B16A16_SINT
0, // RGBA16UI 0, // R16G16B16A16_UINT
0, // R11FG11FB10F 0, // B10G11R11_FLOAT
0, // RGBA32UI 0, // R32G32B32A32_UINT
2, // DXT1 2, // BC1_RGBA_UNORM
2, // DXT23 2, // BC2_UNORM
2, // DXT45 2, // BC3_UNORM
2, // DXN1UNORM 2, // BC4_UNORM
2, // DXN1SNORM 2, // BC4_SNORM
2, // DXN2UNORM 2, // BC5_UNORM
2, // DXN2SNORM 2, // BC5_SNORM
2, // BC7U 2, // BC7_UNORM
2, // BC6H_UF16 2, // BC6H_UFLOAT
2, // BC6H_SF16 2, // BC6H_SFLOAT
2, // ASTC_2D_4X4 2, // ASTC_2D_4X4_UNORM
0, // BGRA8 0, // B8G8R8A8_UNORM
0, // RGBA32F 0, // R32G32B32A32_FLOAT
0, // RGBA32I 0, // R32G32B32A32_SINT
0, // RG32F 0, // R32G32_FLOAT
0, // RG32I 0, // R32G32_SINT
0, // R32F 0, // R32_FLOAT
0, // R16F 0, // R16_FLOAT
0, // R16U 0, // R16_UNORM
0, // R16S 0, // R16_SNORM
0, // R16UI 0, // R16_UINT
0, // R16I 0, // R16_SINT
0, // RG16 0, // R16G16_UNORM
0, // RG16F 0, // R16G16_FLOAT
0, // RG16UI 0, // R16G16_UINT
0, // RG16I 0, // R16G16_SINT
0, // RG16S 0, // R16G16_SNORM
0, // RGB32F 0, // R32G32B32_FLOAT
0, // RGBA8_SRGB 0, // A8B8G8R8_SRGB
0, // RG8U 0, // R8G8_UNORM
0, // RG8S 0, // R8G8_SNORM
0, // RG8I 0, // R8G8_SINT
0, // RG8UI 0, // R8G8_UINT
0, // RG32UI 0, // R32G32_UINT
0, // RGBX16F 0, // R16G16B16X16_FLOAT
0, // R32UI 0, // R32_UINT
0, // R32I 0, // R32_SINT
2, // ASTC_2D_8X8 2, // ASTC_2D_8X8_UNORM
2, // ASTC_2D_8X5 2, // ASTC_2D_8X5_UNORM
2, // ASTC_2D_5X4 2, // ASTC_2D_5X4_UNORM
0, // BGRA8_SRGB 0, // B8G8R8A8_SRGB
2, // DXT1_SRGB 2, // BC1_RGBA_SRGB
2, // DXT23_SRGB 2, // BC2_SRGB
2, // DXT45_SRGB 2, // BC3_SRGB
2, // BC7U_SRGB 2, // BC7_SRGB
0, // R4G4B4A4U 0, // A4B4G4R4_UNORM
2, // ASTC_2D_4X4_SRGB 2, // ASTC_2D_4X4_SRGB
2, // ASTC_2D_8X8_SRGB 2, // ASTC_2D_8X8_SRGB
2, // ASTC_2D_8X5_SRGB 2, // ASTC_2D_8X5_SRGB
2, // ASTC_2D_5X4_SRGB 2, // ASTC_2D_5X4_SRGB
2, // ASTC_2D_5X5 2, // ASTC_2D_5X5_UNORM
2, // ASTC_2D_5X5_SRGB 2, // ASTC_2D_5X5_SRGB
2, // ASTC_2D_10X8 2, // ASTC_2D_10X8_UNORM
2, // ASTC_2D_10X8_SRGB 2, // ASTC_2D_10X8_SRGB
2, // ASTC_2D_6X6 2, // ASTC_2D_6X6_UNORM
2, // ASTC_2D_6X6_SRGB 2, // ASTC_2D_6X6_SRGB
2, // ASTC_2D_10X10 2, // ASTC_2D_10X10_UNORM
2, // ASTC_2D_10X10_SRGB 2, // ASTC_2D_10X10_SRGB
2, // ASTC_2D_12X12 2, // ASTC_2D_12X12_UNORM
2, // ASTC_2D_12X12_SRGB 2, // ASTC_2D_12X12_SRGB
2, // ASTC_2D_8X6 2, // ASTC_2D_8X6_UNORM
2, // ASTC_2D_8X6_SRGB 2, // ASTC_2D_8X6_SRGB
2, // ASTC_2D_6X5 2, // ASTC_2D_6X5_UNORM
2, // ASTC_2D_6X5_SRGB 2, // ASTC_2D_6X5_SRGB
0, // E5B9G9R9F 0, // E5B9G9R9_FLOAT
0, // Z32F 0, // D32_FLOAT
0, // Z16 0, // D16_UNORM
0, // Z24S8 0, // D24_UNORM_S8_UINT
0, // S8Z24 0, // S8_UINT_D24_UNORM
0, // Z32FS8 0, // D32_FLOAT_S8_UINT
}}; }};
/** /**
@ -251,97 +251,97 @@ inline constexpr u32 GetCompressionFactor(PixelFormat format) {
} }
constexpr std::array<u32, MaxPixelFormat> block_width_table = {{ constexpr std::array<u32, MaxPixelFormat> block_width_table = {{
1, // ABGR8U 1, // A8B8G8R8_UNORM
1, // ABGR8S 1, // A8B8G8R8_SNORM
1, // ABGR8I 1, // A8B8G8R8_SINT
1, // ABGR8UI 1, // A8B8G8R8_UINT
1, // B5G6R5U 1, // R5G6B5_UNORM
1, // R5G6B5U 1, // B5G6R5_UNORM
1, // B5G5R5A1U 1, // A1R5G5B5_UNORM
1, // A2B10G10R10U 1, // A2B10G10R10_UNORM
1, // A2B10G10R10UI 1, // A2B10G10R10_UINT
1, // A1B5G5R5U 1, // A1B5G5R5_UNORM
1, // R8U 1, // R8_UNORM
1, // R8S 1, // R8_SNORM
1, // R8I 1, // R8_SINT
1, // R8UI 1, // R8_UINT
1, // RGBA16F 1, // R16G16B16A16_FLOAT
1, // RGBA16U 1, // R16G16B16A16_UNORM
1, // RGBA16S 1, // R16G16B16A16_SNORM
1, // RGBA16I 1, // R16G16B16A16_SINT
1, // RGBA16UI 1, // R16G16B16A16_UINT
1, // R11FG11FB10F 1, // B10G11R11_FLOAT
1, // RGBA32UI 1, // R32G32B32A32_UINT
4, // DXT1 4, // BC1_RGBA_UNORM
4, // DXT23 4, // BC2_UNORM
4, // DXT45 4, // BC3_UNORM
4, // DXN1UNORM 4, // BC4_UNORM
4, // DXN1SNORM 4, // BC4_SNORM
4, // DXN2UNORM 4, // BC5_UNORM
4, // DXN2SNORM 4, // BC5_SNORM
4, // BC7U 4, // BC7_UNORM
4, // BC6H_UF16 4, // BC6H_UFLOAT
4, // BC6H_SF16 4, // BC6H_SFLOAT
4, // ASTC_2D_4X4 4, // ASTC_2D_4X4_UNORM
1, // BGRA8 1, // B8G8R8A8_UNORM
1, // RGBA32F 1, // R32G32B32A32_FLOAT
1, // RGBA32I 1, // R32G32B32A32_SINT
1, // RG32F 1, // R32G32_FLOAT
1, // RG32I 1, // R32G32_SINT
1, // R32F 1, // R32_FLOAT
1, // R16F 1, // R16_FLOAT
1, // R16U 1, // R16_UNORM
1, // R16S 1, // R16_SNORM
1, // R16UI 1, // R16_UINT
1, // R16I 1, // R16_SINT
1, // RG16 1, // R16G16_UNORM
1, // RG16F 1, // R16G16_FLOAT
1, // RG16UI 1, // R16G16_UINT
1, // RG16I 1, // R16G16_SINT
1, // RG16S 1, // R16G16_SNORM
1, // RGB32F 1, // R32G32B32_FLOAT
1, // RGBA8_SRGB 1, // A8B8G8R8_SRGB
1, // RG8U 1, // R8G8_UNORM
1, // RG8S 1, // R8G8_SNORM
1, // RG8I 1, // R8G8_SINT
1, // RG8UI 1, // R8G8_UINT
1, // RG32UI 1, // R32G32_UINT
1, // RGBX16F 1, // R16G16B16X16_FLOAT
1, // R32UI 1, // R32_UINT
1, // R32I 1, // R32_SINT
8, // ASTC_2D_8X8 8, // ASTC_2D_8X8_UNORM
8, // ASTC_2D_8X5 8, // ASTC_2D_8X5_UNORM
5, // ASTC_2D_5X4 5, // ASTC_2D_5X4_UNORM
1, // BGRA8_SRGB 1, // B8G8R8A8_SRGB
4, // DXT1_SRGB 4, // BC1_RGBA_SRGB
4, // DXT23_SRGB 4, // BC2_SRGB
4, // DXT45_SRGB 4, // BC3_SRGB
4, // BC7U_SRGB 4, // BC7_SRGB
1, // R4G4B4A4U 1, // A4B4G4R4_UNORM
4, // ASTC_2D_4X4_SRGB 4, // ASTC_2D_4X4_SRGB
8, // ASTC_2D_8X8_SRGB 8, // ASTC_2D_8X8_SRGB
8, // ASTC_2D_8X5_SRGB 8, // ASTC_2D_8X5_SRGB
5, // ASTC_2D_5X4_SRGB 5, // ASTC_2D_5X4_SRGB
5, // ASTC_2D_5X5 5, // ASTC_2D_5X5_UNORM
5, // ASTC_2D_5X5_SRGB 5, // ASTC_2D_5X5_SRGB
10, // ASTC_2D_10X8 10, // ASTC_2D_10X8_UNORM
10, // ASTC_2D_10X8_SRGB 10, // ASTC_2D_10X8_SRGB
6, // ASTC_2D_6X6 6, // ASTC_2D_6X6_UNORM
6, // ASTC_2D_6X6_SRGB 6, // ASTC_2D_6X6_SRGB
10, // ASTC_2D_10X10 10, // ASTC_2D_10X10_UNORM
10, // ASTC_2D_10X10_SRGB 10, // ASTC_2D_10X10_SRGB
12, // ASTC_2D_12X12 12, // ASTC_2D_12X12_UNORM
12, // ASTC_2D_12X12_SRGB 12, // ASTC_2D_12X12_SRGB
8, // ASTC_2D_8X6 8, // ASTC_2D_8X6_UNORM
8, // ASTC_2D_8X6_SRGB 8, // ASTC_2D_8X6_SRGB
6, // ASTC_2D_6X5 6, // ASTC_2D_6X5_UNORM
6, // ASTC_2D_6X5_SRGB 6, // ASTC_2D_6X5_SRGB
1, // E5B9G9R9F 1, // E5B9G9R9_FLOAT
1, // Z32F 1, // D32_FLOAT
1, // Z16 1, // D16_UNORM
1, // Z24S8 1, // D24_UNORM_S8_UINT
1, // S8Z24 1, // S8_UINT_D24_UNORM
1, // Z32FS8 1, // D32_FLOAT_S8_UINT
}}; }};
static constexpr u32 GetDefaultBlockWidth(PixelFormat format) { static constexpr u32 GetDefaultBlockWidth(PixelFormat format) {
@ -353,97 +353,97 @@ static constexpr u32 GetDefaultBlockWidth(PixelFormat format) {
} }
constexpr std::array<u32, MaxPixelFormat> block_height_table = {{ constexpr std::array<u32, MaxPixelFormat> block_height_table = {{
1, // ABGR8U 1, // A8B8G8R8_UNORM
1, // ABGR8S 1, // A8B8G8R8_SNORM
1, // ABGR8I 1, // A8B8G8R8_SINT
1, // ABGR8UI 1, // A8B8G8R8_UINT
1, // B5G6R5U 1, // R5G6B5_UNORM
1, // R5G6B5U 1, // B5G6R5_UNORM
1, // B5G5R5A1U 1, // A1R5G5B5_UNORM
1, // A2B10G10R10U 1, // A2B10G10R10_UNORM
1, // A2B10G10R10UI 1, // A2B10G10R10_UINT
1, // A1B5G5R5U 1, // A1B5G5R5_UNORM
1, // R8U 1, // R8_UNORM
1, // R8S 1, // R8_SNORM
1, // R8I 1, // R8_SINT
1, // R8UI 1, // R8_UINT
1, // RGBA16F 1, // R16G16B16A16_FLOAT
1, // RGBA16U 1, // R16G16B16A16_UNORM
1, // RGBA16S 1, // R16G16B16A16_SNORM
1, // RGBA16I 1, // R16G16B16A16_SINT
1, // RGBA16UI 1, // R16G16B16A16_UINT
1, // R11FG11FB10F 1, // B10G11R11_FLOAT
1, // RGBA32UI 1, // R32G32B32A32_UINT
4, // DXT1 4, // BC1_RGBA_UNORM
4, // DXT23 4, // BC2_UNORM
4, // DXT45 4, // BC3_UNORM
4, // DXN1UNORM 4, // BC4_UNORM
4, // DXN1SNORM 4, // BC4_SNORM
4, // DXN2UNORM 4, // BC5_UNORM
4, // DXN2SNORM 4, // BC5_SNORM
4, // BC7U 4, // BC7_UNORM
4, // BC6H_UF16 4, // BC6H_UFLOAT
4, // BC6H_SF16 4, // BC6H_SFLOAT
4, // ASTC_2D_4X4 4, // ASTC_2D_4X4_UNORM
1, // BGRA8 1, // B8G8R8A8_UNORM
1, // RGBA32F 1, // R32G32B32A32_FLOAT
1, // RGBA32I 1, // R32G32B32A32_SINT
1, // RG32F 1, // R32G32_FLOAT
1, // RG32I 1, // R32G32_SINT
1, // R32F 1, // R32_FLOAT
1, // R16F 1, // R16_FLOAT
1, // R16U 1, // R16_UNORM
1, // R16S 1, // R16_SNORM
1, // R16UI 1, // R16_UINT
1, // R16I 1, // R16_SINT
1, // RG16 1, // R16G16_UNORM
1, // RG16F 1, // R16G16_FLOAT
1, // RG16UI 1, // R16G16_UINT
1, // RG16I 1, // R16G16_SINT
1, // RG16S 1, // R16G16_SNORM
1, // RGB32F 1, // R32G32B32_FLOAT
1, // RGBA8_SRGB 1, // A8B8G8R8_SRGB
1, // RG8U 1, // R8G8_UNORM
1, // RG8S 1, // R8G8_SNORM
1, // RG8I 1, // R8G8_SINT
1, // RG8UI 1, // R8G8_UINT
1, // RG32UI 1, // R32G32_UINT
1, // RGBX16F 1, // R16G16B16X16_FLOAT
1, // R32UI 1, // R32_UINT
1, // R32I 1, // R32_SINT
8, // ASTC_2D_8X8 8, // ASTC_2D_8X8_UNORM
5, // ASTC_2D_8X5 5, // ASTC_2D_8X5_UNORM
4, // ASTC_2D_5X4 4, // ASTC_2D_5X4_UNORM
1, // BGRA8_SRGB 1, // B8G8R8A8_SRGB
4, // DXT1_SRGB 4, // BC1_RGBA_SRGB
4, // DXT23_SRGB 4, // BC2_SRGB
4, // DXT45_SRGB 4, // BC3_SRGB
4, // BC7U_SRGB 4, // BC7_SRGB
1, // R4G4B4A4U 1, // A4B4G4R4_UNORM
4, // ASTC_2D_4X4_SRGB 4, // ASTC_2D_4X4_SRGB
8, // ASTC_2D_8X8_SRGB 8, // ASTC_2D_8X8_SRGB
5, // ASTC_2D_8X5_SRGB 5, // ASTC_2D_8X5_SRGB
4, // ASTC_2D_5X4_SRGB 4, // ASTC_2D_5X4_SRGB
5, // ASTC_2D_5X5 5, // ASTC_2D_5X5_UNORM
5, // ASTC_2D_5X5_SRGB 5, // ASTC_2D_5X5_SRGB
8, // ASTC_2D_10X8 8, // ASTC_2D_10X8_UNORM
8, // ASTC_2D_10X8_SRGB 8, // ASTC_2D_10X8_SRGB
6, // ASTC_2D_6X6 6, // ASTC_2D_6X6_UNORM
6, // ASTC_2D_6X6_SRGB 6, // ASTC_2D_6X6_SRGB
10, // ASTC_2D_10X10 10, // ASTC_2D_10X10_UNORM
10, // ASTC_2D_10X10_SRGB 10, // ASTC_2D_10X10_SRGB
12, // ASTC_2D_12X12 12, // ASTC_2D_12X12_UNORM
12, // ASTC_2D_12X12_SRGB 12, // ASTC_2D_12X12_SRGB
6, // ASTC_2D_8X6 6, // ASTC_2D_8X6_UNORM
6, // ASTC_2D_8X6_SRGB 6, // ASTC_2D_8X6_SRGB
5, // ASTC_2D_6X5 5, // ASTC_2D_6X5_UNORM
5, // ASTC_2D_6X5_SRGB 5, // ASTC_2D_6X5_SRGB
1, // E5B9G9R9F 1, // E5B9G9R9_FLOAT
1, // Z32F 1, // D32_FLOAT
1, // Z16 1, // D16_UNORM
1, // Z24S8 1, // D24_UNORM_S8_UINT
1, // S8Z24 1, // S8_UINT_D24_UNORM
1, // Z32FS8 1, // D32_FLOAT_S8_UINT
}}; }};
static constexpr u32 GetDefaultBlockHeight(PixelFormat format) { static constexpr u32 GetDefaultBlockHeight(PixelFormat format) {
@ -455,97 +455,97 @@ static constexpr u32 GetDefaultBlockHeight(PixelFormat format) {
} }
constexpr std::array<u32, MaxPixelFormat> bpp_table = {{ constexpr std::array<u32, MaxPixelFormat> bpp_table = {{
32, // ABGR8U 32, // A8B8G8R8_UNORM
32, // ABGR8S 32, // A8B8G8R8_SNORM
32, // ABGR8I 32, // A8B8G8R8_SINT
32, // ABGR8UI 32, // A8B8G8R8_UINT
16, // B5G6R5U 16, // R5G6B5_UNORM
16, // R5G6B5U 16, // B5G6R5_UNORM
16, // B5G5R5A1U 16, // A1R5G5B5_UNORM
32, // A2B10G10R10U 32, // A2B10G10R10_UNORM
32, // A2B10G10R10UI 32, // A2B10G10R10_UINT
16, // A1B5G5R5U 16, // A1B5G5R5_UNORM
8, // R8U 8, // R8_UNORM
8, // R8S 8, // R8_SNORM
8, // R8I 8, // R8_SINT
8, // R8UI 8, // R8_UINT
64, // RGBA16F 64, // R16G16B16A16_FLOAT
64, // RGBA16U 64, // R16G16B16A16_UNORM
64, // RGBA16S 64, // R16G16B16A16_SNORM
64, // RGBA16I 64, // R16G16B16A16_SINT
64, // RGBA16UI 64, // R16G16B16A16_UINT
32, // R11FG11FB10F 32, // B10G11R11_FLOAT
128, // RGBA32UI 128, // R32G32B32A32_UINT
64, // DXT1 64, // BC1_RGBA_UNORM
128, // DXT23 128, // BC2_UNORM
128, // DXT45 128, // BC3_UNORM
64, // DXN1UNORM 64, // BC4_UNORM
64, // DXN1SNORM 64, // BC4_SNORM
128, // DXN2UNORM 128, // BC5_UNORM
128, // DXN2SNORM 128, // BC5_SNORM
128, // BC7U 128, // BC7_UNORM
128, // BC6H_UF16 128, // BC6H_UFLOAT
128, // BC6H_SF16 128, // BC6H_SFLOAT
128, // ASTC_2D_4X4 128, // ASTC_2D_4X4_UNORM
32, // BGRA8 32, // B8G8R8A8_UNORM
128, // RGBA32F 128, // R32G32B32A32_FLOAT
128, // RGBA32I 128, // R32G32B32A32_SINT
64, // RG32F 64, // R32G32_FLOAT
64, // RG32I 64, // R32G32_SINT
32, // R32F 32, // R32_FLOAT
16, // R16F 16, // R16_FLOAT
16, // R16U 16, // R16_UNORM
16, // R16S 16, // R16_SNORM
16, // R16UI 16, // R16_UINT
16, // R16I 16, // R16_SINT
32, // RG16 32, // R16G16_UNORM
32, // RG16F 32, // R16G16_FLOAT
32, // RG16UI 32, // R16G16_UINT
32, // RG16I 32, // R16G16_SINT
32, // RG16S 32, // R16G16_SNORM
96, // RGB32F 96, // R32G32B32_FLOAT
32, // RGBA8_SRGB 32, // A8B8G8R8_SRGB
16, // RG8U 16, // R8G8_UNORM
16, // RG8S 16, // R8G8_SNORM
16, // RG8I 16, // R8G8_SINT
16, // RG8UI 16, // R8G8_UINT
64, // RG32UI 64, // R32G32_UINT
64, // RGBX16F 64, // R16G16B16X16_FLOAT
32, // R32UI 32, // R32_UINT
32, // R32I 32, // R32_SINT
128, // ASTC_2D_8X8 128, // ASTC_2D_8X8_UNORM
128, // ASTC_2D_8X5 128, // ASTC_2D_8X5_UNORM
128, // ASTC_2D_5X4 128, // ASTC_2D_5X4_UNORM
32, // BGRA8_SRGB 32, // B8G8R8A8_SRGB
64, // DXT1_SRGB 64, // BC1_RGBA_SRGB
128, // DXT23_SRGB 128, // BC2_SRGB
128, // DXT45_SRGB 128, // BC3_SRGB
128, // BC7U 128, // BC7_UNORM
16, // R4G4B4A4U 16, // A4B4G4R4_UNORM
128, // ASTC_2D_4X4_SRGB 128, // ASTC_2D_4X4_SRGB
128, // ASTC_2D_8X8_SRGB 128, // ASTC_2D_8X8_SRGB
128, // ASTC_2D_8X5_SRGB 128, // ASTC_2D_8X5_SRGB
128, // ASTC_2D_5X4_SRGB 128, // ASTC_2D_5X4_SRGB
128, // ASTC_2D_5X5 128, // ASTC_2D_5X5_UNORM
128, // ASTC_2D_5X5_SRGB 128, // ASTC_2D_5X5_SRGB
128, // ASTC_2D_10X8 128, // ASTC_2D_10X8_UNORM
128, // ASTC_2D_10X8_SRGB 128, // ASTC_2D_10X8_SRGB
128, // ASTC_2D_6X6 128, // ASTC_2D_6X6_UNORM
128, // ASTC_2D_6X6_SRGB 128, // ASTC_2D_6X6_SRGB
128, // ASTC_2D_10X10 128, // ASTC_2D_10X10_UNORM
128, // ASTC_2D_10X10_SRGB 128, // ASTC_2D_10X10_SRGB
128, // ASTC_2D_12X12 128, // ASTC_2D_12X12_UNORM
128, // ASTC_2D_12X12_SRGB 128, // ASTC_2D_12X12_SRGB
128, // ASTC_2D_8X6 128, // ASTC_2D_8X6_UNORM
128, // ASTC_2D_8X6_SRGB 128, // ASTC_2D_8X6_SRGB
128, // ASTC_2D_6X5 128, // ASTC_2D_6X5_UNORM
128, // ASTC_2D_6X5_SRGB 128, // ASTC_2D_6X5_SRGB
32, // E5B9G9R9F 32, // E5B9G9R9_FLOAT
32, // Z32F 32, // D32_FLOAT
16, // Z16 16, // D16_UNORM
32, // Z24S8 32, // D24_UNORM_S8_UINT
32, // S8Z24 32, // S8_UINT_D24_UNORM
64, // Z32FS8 64, // D32_FLOAT_S8_UINT
}}; }};
static constexpr u32 GetFormatBpp(PixelFormat format) { static constexpr u32 GetFormatBpp(PixelFormat format) {

View File

@ -42,125 +42,125 @@ struct Table {
bool is_srgb; bool is_srgb;
}; };
constexpr std::array<Table, 86> DefinitionTable = {{ constexpr std::array<Table, 86> DefinitionTable = {{
{TextureFormat::A8R8G8B8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ABGR8U}, {TextureFormat::A8R8G8B8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::A8B8G8R8_UNORM},
{TextureFormat::A8R8G8B8, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::ABGR8S}, {TextureFormat::A8R8G8B8, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::A8B8G8R8_SNORM},
{TextureFormat::A8R8G8B8, C, UINT, UINT, UINT, UINT, PixelFormat::ABGR8UI}, {TextureFormat::A8R8G8B8, C, UINT, UINT, UINT, UINT, PixelFormat::A8B8G8R8_UINT},
{TextureFormat::A8R8G8B8, C, SINT, SINT, SINT, SINT, PixelFormat::ABGR8I}, {TextureFormat::A8R8G8B8, C, SINT, SINT, SINT, SINT, PixelFormat::A8B8G8R8_SINT},
{TextureFormat::A8R8G8B8, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::RGBA8_SRGB}, {TextureFormat::A8R8G8B8, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::A8B8G8R8_SRGB},
{TextureFormat::B5G6R5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R5G6B5U}, {TextureFormat::B5G6R5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::B5G6R5_UNORM},
{TextureFormat::A2B10G10R10, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::A2B10G10R10U}, {TextureFormat::A2B10G10R10, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::A2B10G10R10_UNORM},
{TextureFormat::A2B10G10R10, C, UINT, UINT, UINT, UINT, PixelFormat::A2B10G10R10UI}, {TextureFormat::A2B10G10R10, C, UINT, UINT, UINT, UINT, PixelFormat::A2B10G10R10_UINT},
{TextureFormat::A1B5G5R5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::A1B5G5R5U}, {TextureFormat::A1B5G5R5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::A1B5G5R5_UNORM},
{TextureFormat::A4B4G4R4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R4G4B4A4U}, {TextureFormat::A4B4G4R4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::A4B4G4R4_UNORM},
{TextureFormat::R8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R8U}, {TextureFormat::R8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R8_UNORM},
{TextureFormat::R8, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R8S}, {TextureFormat::R8, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R8_SNORM},
{TextureFormat::R8, C, UINT, UINT, UINT, UINT, PixelFormat::R8UI}, {TextureFormat::R8, C, UINT, UINT, UINT, UINT, PixelFormat::R8_UINT},
{TextureFormat::R8, C, SINT, SINT, SINT, SINT, PixelFormat::R8I}, {TextureFormat::R8, C, SINT, SINT, SINT, SINT, PixelFormat::R8_SINT},
{TextureFormat::G8R8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::RG8U}, {TextureFormat::R8G8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R8G8_UNORM},
{TextureFormat::G8R8, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::RG8S}, {TextureFormat::R8G8, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R8G8_SNORM},
{TextureFormat::G8R8, C, UINT, UINT, UINT, UINT, PixelFormat::RG8UI}, {TextureFormat::R8G8, C, UINT, UINT, UINT, UINT, PixelFormat::R8G8_UINT},
{TextureFormat::G8R8, C, SINT, SINT, SINT, SINT, PixelFormat::RG8I}, {TextureFormat::R8G8, C, SINT, SINT, SINT, SINT, PixelFormat::R8G8_SINT},
{TextureFormat::R16_G16_B16_A16, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::RGBA16S}, {TextureFormat::R16G16B16A16, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R16G16B16A16_SNORM},
{TextureFormat::R16_G16_B16_A16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::RGBA16U}, {TextureFormat::R16G16B16A16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R16G16B16A16_UNORM},
{TextureFormat::R16_G16_B16_A16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::RGBA16F}, {TextureFormat::R16G16B16A16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R16G16B16A16_FLOAT},
{TextureFormat::R16_G16_B16_A16, C, UINT, UINT, UINT, UINT, PixelFormat::RGBA16UI}, {TextureFormat::R16G16B16A16, C, UINT, UINT, UINT, UINT, PixelFormat::R16G16B16A16_UINT},
{TextureFormat::R16_G16_B16_A16, C, SINT, SINT, SINT, SINT, PixelFormat::RGBA16I}, {TextureFormat::R16G16B16A16, C, SINT, SINT, SINT, SINT, PixelFormat::R16G16B16A16_SINT},
{TextureFormat::R16_G16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::RG16F}, {TextureFormat::R16G16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R16G16_FLOAT},
{TextureFormat::R16_G16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::RG16}, {TextureFormat::R16G16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R16G16_UNORM},
{TextureFormat::R16_G16, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::RG16S}, {TextureFormat::R16G16, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R16G16_SNORM},
{TextureFormat::R16_G16, C, UINT, UINT, UINT, UINT, PixelFormat::RG16UI}, {TextureFormat::R16G16, C, UINT, UINT, UINT, UINT, PixelFormat::R16G16_UINT},
{TextureFormat::R16_G16, C, SINT, SINT, SINT, SINT, PixelFormat::RG16I}, {TextureFormat::R16G16, C, SINT, SINT, SINT, SINT, PixelFormat::R16G16_SINT},
{TextureFormat::R16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R16F}, {TextureFormat::R16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R16_FLOAT},
{TextureFormat::R16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R16U}, {TextureFormat::R16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R16_UNORM},
{TextureFormat::R16, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R16S}, {TextureFormat::R16, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R16_SNORM},
{TextureFormat::R16, C, UINT, UINT, UINT, UINT, PixelFormat::R16UI}, {TextureFormat::R16, C, UINT, UINT, UINT, UINT, PixelFormat::R16_UINT},
{TextureFormat::R16, C, SINT, SINT, SINT, SINT, PixelFormat::R16I}, {TextureFormat::R16, C, SINT, SINT, SINT, SINT, PixelFormat::R16_SINT},
{TextureFormat::BF10GF11RF11, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R11FG11FB10F}, {TextureFormat::B10G11R11, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::B10G11R11_FLOAT},
{TextureFormat::R32_G32_B32_A32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::RGBA32F}, {TextureFormat::R32G32B32A32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R32G32B32A32_FLOAT},
{TextureFormat::R32_G32_B32_A32, C, UINT, UINT, UINT, UINT, PixelFormat::RGBA32UI}, {TextureFormat::R32G32B32A32, C, UINT, UINT, UINT, UINT, PixelFormat::R32G32B32A32_UINT},
{TextureFormat::R32_G32_B32_A32, C, SINT, SINT, SINT, SINT, PixelFormat::RGBA32I}, {TextureFormat::R32G32B32A32, C, SINT, SINT, SINT, SINT, PixelFormat::R32G32B32A32_SINT},
{TextureFormat::R32_G32_B32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::RGB32F}, {TextureFormat::R32G32B32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R32G32B32_FLOAT},
{TextureFormat::R32_G32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::RG32F}, {TextureFormat::R32G32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R32G32_FLOAT},
{TextureFormat::R32_G32, C, UINT, UINT, UINT, UINT, PixelFormat::RG32UI}, {TextureFormat::R32G32, C, UINT, UINT, UINT, UINT, PixelFormat::R32G32_UINT},
{TextureFormat::R32_G32, C, SINT, SINT, SINT, SINT, PixelFormat::RG32I}, {TextureFormat::R32G32, C, SINT, SINT, SINT, SINT, PixelFormat::R32G32_SINT},
{TextureFormat::R32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R32F}, {TextureFormat::R32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R32_FLOAT},
{TextureFormat::R32, C, UINT, UINT, UINT, UINT, PixelFormat::R32UI}, {TextureFormat::R32, C, UINT, UINT, UINT, UINT, PixelFormat::R32_UINT},
{TextureFormat::R32, C, SINT, SINT, SINT, SINT, PixelFormat::R32I}, {TextureFormat::R32, C, SINT, SINT, SINT, SINT, PixelFormat::R32_SINT},
{TextureFormat::E5B9G9R9_SHAREDEXP, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::E5B9G9R9F}, {TextureFormat::E5B9G9R9, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::E5B9G9R9_FLOAT},
{TextureFormat::ZF32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::Z32F}, {TextureFormat::D32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::D32_FLOAT},
{TextureFormat::Z16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::Z16}, {TextureFormat::D16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::D16_UNORM},
{TextureFormat::S8Z24, C, UINT, UNORM, UNORM, UNORM, PixelFormat::S8Z24}, {TextureFormat::S8D24, C, UINT, UNORM, UNORM, UNORM, PixelFormat::S8_UINT_D24_UNORM},
{TextureFormat::G24R8, C, UINT, UNORM, UNORM, UNORM, PixelFormat::S8Z24}, {TextureFormat::R8G24, C, UINT, UNORM, UNORM, UNORM, PixelFormat::S8_UINT_D24_UNORM},
{TextureFormat::ZF32_X24S8, C, FLOAT, UINT, UNORM, UNORM, PixelFormat::Z32FS8}, {TextureFormat::D32S8, C, FLOAT, UINT, UNORM, UNORM, PixelFormat::D32_FLOAT_S8_UINT},
{TextureFormat::DXT1, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXT1}, {TextureFormat::BC1_RGBA, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC1_RGBA_UNORM},
{TextureFormat::DXT1, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXT1_SRGB}, {TextureFormat::BC1_RGBA, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC1_RGBA_SRGB},
{TextureFormat::DXT23, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXT23}, {TextureFormat::BC2, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC2_UNORM},
{TextureFormat::DXT23, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXT23_SRGB}, {TextureFormat::BC2, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC2_SRGB},
{TextureFormat::DXT45, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXT45}, {TextureFormat::BC3, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC3_UNORM},
{TextureFormat::DXT45, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXT45_SRGB}, {TextureFormat::BC3, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC3_SRGB},
{TextureFormat::DXN1, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXN1UNORM}, {TextureFormat::BC4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC4_UNORM},
{TextureFormat::DXN1, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::DXN1SNORM}, {TextureFormat::BC4, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::BC4_SNORM},
{TextureFormat::DXN2, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXN2UNORM}, {TextureFormat::BC5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC5_UNORM},
{TextureFormat::DXN2, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::DXN2SNORM}, {TextureFormat::BC5, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::BC5_SNORM},
{TextureFormat::BC7U, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC7U}, {TextureFormat::BC7, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC7_UNORM},
{TextureFormat::BC7U, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC7U_SRGB}, {TextureFormat::BC7, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC7_SRGB},
{TextureFormat::BC6H_SF16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::BC6H_SF16}, {TextureFormat::BC6H_SFLOAT, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::BC6H_SFLOAT},
{TextureFormat::BC6H_UF16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::BC6H_UF16}, {TextureFormat::BC6H_UFLOAT, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::BC6H_UFLOAT},
{TextureFormat::ASTC_2D_4X4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_4X4}, {TextureFormat::ASTC_2D_4X4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_4X4_UNORM},
{TextureFormat::ASTC_2D_4X4, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_4X4_SRGB}, {TextureFormat::ASTC_2D_4X4, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_4X4_SRGB},
{TextureFormat::ASTC_2D_5X4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X4}, {TextureFormat::ASTC_2D_5X4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X4_UNORM},
{TextureFormat::ASTC_2D_5X4, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X4_SRGB}, {TextureFormat::ASTC_2D_5X4, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X4_SRGB},
{TextureFormat::ASTC_2D_5X5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X5}, {TextureFormat::ASTC_2D_5X5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X5_UNORM},
{TextureFormat::ASTC_2D_5X5, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X5_SRGB}, {TextureFormat::ASTC_2D_5X5, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X5_SRGB},
{TextureFormat::ASTC_2D_8X8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X8}, {TextureFormat::ASTC_2D_8X8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X8_UNORM},
{TextureFormat::ASTC_2D_8X8, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X8_SRGB}, {TextureFormat::ASTC_2D_8X8, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X8_SRGB},
{TextureFormat::ASTC_2D_8X5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X5}, {TextureFormat::ASTC_2D_8X5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X5_UNORM},
{TextureFormat::ASTC_2D_8X5, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X5_SRGB}, {TextureFormat::ASTC_2D_8X5, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X5_SRGB},
{TextureFormat::ASTC_2D_10X8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X8}, {TextureFormat::ASTC_2D_10X8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X8_UNORM},
{TextureFormat::ASTC_2D_10X8, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X8_SRGB}, {TextureFormat::ASTC_2D_10X8, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X8_SRGB},
{TextureFormat::ASTC_2D_6X6, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X6}, {TextureFormat::ASTC_2D_6X6, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X6_UNORM},
{TextureFormat::ASTC_2D_6X6, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X6_SRGB}, {TextureFormat::ASTC_2D_6X6, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X6_SRGB},
{TextureFormat::ASTC_2D_10X10, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X10}, {TextureFormat::ASTC_2D_10X10, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X10_UNORM},
{TextureFormat::ASTC_2D_10X10, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X10_SRGB}, {TextureFormat::ASTC_2D_10X10, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X10_SRGB},
{TextureFormat::ASTC_2D_12X12, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_12X12}, {TextureFormat::ASTC_2D_12X12, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_12X12_UNORM},
{TextureFormat::ASTC_2D_12X12, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_12X12_SRGB}, {TextureFormat::ASTC_2D_12X12, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_12X12_SRGB},
{TextureFormat::ASTC_2D_8X6, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X6}, {TextureFormat::ASTC_2D_8X6, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X6_UNORM},
{TextureFormat::ASTC_2D_8X6, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X6_SRGB}, {TextureFormat::ASTC_2D_8X6, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X6_SRGB},
{TextureFormat::ASTC_2D_6X5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X5}, {TextureFormat::ASTC_2D_6X5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X5_UNORM},
{TextureFormat::ASTC_2D_6X5, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X5_SRGB}, {TextureFormat::ASTC_2D_6X5, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X5_SRGB},
}}; }};
@ -191,7 +191,7 @@ PixelFormat FormatLookupTable::GetPixelFormat(TextureFormat format, bool is_srgb
static_cast<int>(format), is_srgb, static_cast<int>(red_component), static_cast<int>(format), is_srgb, static_cast<int>(red_component),
static_cast<int>(green_component), static_cast<int>(blue_component), static_cast<int>(green_component), static_cast<int>(blue_component),
static_cast<int>(alpha_component)); static_cast<int>(alpha_component));
return PixelFormat::ABGR8U; return PixelFormat::A8B8G8R8_UNORM;
} }
void FormatLookupTable::Set(TextureFormat format, bool is_srgb, ComponentType red_component, void FormatLookupTable::Set(TextureFormat format, bool is_srgb, ComponentType red_component,

View File

@ -228,7 +228,7 @@ void SurfaceBaseImpl::LoadBuffer(Tegra::MemoryManager& memory_manager,
} }
} }
if (!is_converted && params.pixel_format != PixelFormat::S8Z24) { if (!is_converted && params.pixel_format != PixelFormat::S8_UINT_D24_UNORM) {
return; return;
} }

View File

@ -83,12 +83,12 @@ SurfaceParams SurfaceParams::CreateForTexture(const FormatLookupTable& lookup_ta
params.type = GetFormatType(params.pixel_format); params.type = GetFormatType(params.pixel_format);
if (entry.is_shadow && params.type == SurfaceType::ColorTexture) { if (entry.is_shadow && params.type == SurfaceType::ColorTexture) {
switch (params.pixel_format) { switch (params.pixel_format) {
case PixelFormat::R16U: case PixelFormat::R16_UNORM:
case PixelFormat::R16F: case PixelFormat::R16_FLOAT:
params.pixel_format = PixelFormat::Z16; params.pixel_format = PixelFormat::D16_UNORM;
break; break;
case PixelFormat::R32F: case PixelFormat::R32_FLOAT:
params.pixel_format = PixelFormat::Z32F; params.pixel_format = PixelFormat::D32_FLOAT;
break; break;
default: default:
UNIMPLEMENTED_MSG("Unimplemented shadow convert format: {}", UNIMPLEMENTED_MSG("Unimplemented shadow convert format: {}",
@ -195,8 +195,8 @@ SurfaceParams SurfaceParams::CreateForFramebuffer(Core::System& system, std::siz
SurfaceParams params; SurfaceParams params;
params.is_tiled = params.is_tiled =
config.memory_layout.type == Tegra::Engines::Maxwell3D::Regs::InvMemoryLayout::BlockLinear; config.memory_layout.type == Tegra::Engines::Maxwell3D::Regs::InvMemoryLayout::BlockLinear;
params.srgb_conversion = config.format == Tegra::RenderTargetFormat::BGRA8_SRGB || params.srgb_conversion = config.format == Tegra::RenderTargetFormat::B8G8R8A8_SRGB ||
config.format == Tegra::RenderTargetFormat::RGBA8_SRGB; config.format == Tegra::RenderTargetFormat::A8B8G8R8_SRGB;
params.block_width = config.memory_layout.block_width; params.block_width = config.memory_layout.block_width;
params.block_height = config.memory_layout.block_height; params.block_height = config.memory_layout.block_height;
params.block_depth = config.memory_layout.block_depth; params.block_depth = config.memory_layout.block_depth;
@ -235,8 +235,8 @@ SurfaceParams SurfaceParams::CreateForFermiCopySurface(
const Tegra::Engines::Fermi2D::Regs::Surface& config) { const Tegra::Engines::Fermi2D::Regs::Surface& config) {
SurfaceParams params{}; SurfaceParams params{};
params.is_tiled = !config.linear; params.is_tiled = !config.linear;
params.srgb_conversion = config.format == Tegra::RenderTargetFormat::BGRA8_SRGB || params.srgb_conversion = config.format == Tegra::RenderTargetFormat::B8G8R8A8_SRGB ||
config.format == Tegra::RenderTargetFormat::RGBA8_SRGB; config.format == Tegra::RenderTargetFormat::A8B8G8R8_SRGB;
params.block_width = params.is_tiled ? std::min(config.BlockWidth(), 5U) : 0, params.block_width = params.is_tiled ? std::min(config.BlockWidth(), 5U) : 0,
params.block_height = params.is_tiled ? std::min(config.BlockHeight(), 5U) : 0, params.block_height = params.is_tiled ? std::min(config.BlockHeight(), 5U) : 0,
params.block_depth = params.is_tiled ? std::min(config.BlockDepth(), 5U) : 0, params.block_depth = params.is_tiled ? std::min(config.BlockDepth(), 5U) : 0,

View File

@ -373,9 +373,9 @@ protected:
siblings_table[static_cast<std::size_t>(b)] = a; siblings_table[static_cast<std::size_t>(b)] = a;
}; };
std::fill(siblings_table.begin(), siblings_table.end(), PixelFormat::Invalid); std::fill(siblings_table.begin(), siblings_table.end(), PixelFormat::Invalid);
make_siblings(PixelFormat::Z16, PixelFormat::R16U); make_siblings(PixelFormat::D16_UNORM, PixelFormat::R16_UNORM);
make_siblings(PixelFormat::Z32F, PixelFormat::R32F); make_siblings(PixelFormat::D32_FLOAT, PixelFormat::R32_FLOAT);
make_siblings(PixelFormat::Z32FS8, PixelFormat::RG32F); make_siblings(PixelFormat::D32_FLOAT_S8_UINT, PixelFormat::R32G32_FLOAT);
sampled_textures.reserve(64); sampled_textures.reserve(64);
} }
@ -1031,7 +1031,7 @@ private:
params.pitch = 4; params.pitch = 4;
params.num_levels = 1; params.num_levels = 1;
params.emulated_levels = 1; params.emulated_levels = 1;
params.pixel_format = VideoCore::Surface::PixelFormat::R8U; params.pixel_format = VideoCore::Surface::PixelFormat::R8_UNORM;
params.type = VideoCore::Surface::SurfaceType::ColorTexture; params.type = VideoCore::Surface::SurfaceType::ColorTexture;
auto surface = CreateSurface(0ULL, params); auto surface = CreateSurface(0ULL, params);
invalid_memory.resize(surface->GetHostSizeInBytes(), 0U); invalid_memory.resize(surface->GetHostSizeInBytes(), 0U);

View File

@ -35,7 +35,7 @@ void SwapS8Z24ToZ24S8(u8* data, u32 width, u32 height) {
S8Z24 s8z24_pixel{}; S8Z24 s8z24_pixel{};
Z24S8 z24s8_pixel{}; Z24S8 z24s8_pixel{};
constexpr auto bpp{ constexpr auto bpp{
VideoCore::Surface::GetBytesPerPixel(VideoCore::Surface::PixelFormat::S8Z24)}; VideoCore::Surface::GetBytesPerPixel(VideoCore::Surface::PixelFormat::S8_UINT_D24_UNORM)};
for (std::size_t y = 0; y < height; ++y) { for (std::size_t y = 0; y < height; ++y) {
for (std::size_t x = 0; x < width; ++x) { for (std::size_t x = 0; x < width; ++x) {
const std::size_t offset{bpp * (y * width + x)}; const std::size_t offset{bpp * (y * width + x)};
@ -73,7 +73,7 @@ void ConvertFromGuestToHost(u8* in_data, u8* out_data, PixelFormat pixel_format,
in_data, width, height, depth, block_width, block_height); in_data, width, height, depth, block_width, block_height);
std::copy(rgba8_data.begin(), rgba8_data.end(), out_data); std::copy(rgba8_data.begin(), rgba8_data.end(), out_data);
} else if (convert_s8z24 && pixel_format == PixelFormat::S8Z24) { } else if (convert_s8z24 && pixel_format == PixelFormat::S8_UINT_D24_UNORM) {
Tegra::Texture::ConvertS8Z24ToZ24S8(in_data, width, height); Tegra::Texture::ConvertS8Z24ToZ24S8(in_data, width, height);
} }
} }
@ -85,7 +85,7 @@ void ConvertFromHostToGuest(u8* data, PixelFormat pixel_format, u32 width, u32 h
static_cast<u32>(pixel_format)); static_cast<u32>(pixel_format));
UNREACHABLE(); UNREACHABLE();
} else if (convert_s8z24 && pixel_format == PixelFormat::S8Z24) { } else if (convert_s8z24 && pixel_format == PixelFormat::S8_UINT_D24_UNORM) {
Tegra::Texture::ConvertZ24S8ToS8Z24(data, width, height); Tegra::Texture::ConvertZ24S8ToS8Z24(data, width, height);
} }
} }

View File

@ -193,53 +193,6 @@ void CopySwizzledData(u32 width, u32 height, u32 depth, u32 bytes_per_pixel,
} }
} }
u32 BytesPerPixel(TextureFormat format) {
switch (format) {
case TextureFormat::DXT1:
case TextureFormat::DXN1:
// In this case a 'pixel' actually refers to a 4x4 tile.
return 8;
case TextureFormat::DXT23:
case TextureFormat::DXT45:
case TextureFormat::DXN2:
case TextureFormat::BC7U:
case TextureFormat::BC6H_UF16:
case TextureFormat::BC6H_SF16:
// In this case a 'pixel' actually refers to a 4x4 tile.
return 16;
case TextureFormat::R32_G32_B32:
return 12;
case TextureFormat::ASTC_2D_4X4:
case TextureFormat::ASTC_2D_5X4:
case TextureFormat::ASTC_2D_8X8:
case TextureFormat::ASTC_2D_8X5:
case TextureFormat::ASTC_2D_10X8:
case TextureFormat::ASTC_2D_5X5:
case TextureFormat::A8R8G8B8:
case TextureFormat::A2B10G10R10:
case TextureFormat::BF10GF11RF11:
case TextureFormat::R32:
case TextureFormat::R16_G16:
return 4;
case TextureFormat::A1B5G5R5:
case TextureFormat::B5G6R5:
case TextureFormat::G8R8:
case TextureFormat::R16:
return 2;
case TextureFormat::R8:
return 1;
case TextureFormat::R16_G16_B16_A16:
return 8;
case TextureFormat::R32_G32_B32_A32:
return 16;
case TextureFormat::R32_G32:
return 8;
default:
UNIMPLEMENTED_MSG("Format not implemented");
return 1;
}
}
void UnswizzleTexture(u8* const unswizzled_data, u8* address, u32 tile_size_x, u32 tile_size_y, void UnswizzleTexture(u8* const unswizzled_data, u8* address, u32 tile_size_x, u32 tile_size_y,
u32 bytes_per_pixel, u32 width, u32 height, u32 depth, u32 block_height, u32 bytes_per_pixel, u32 width, u32 height, u32 depth, u32 block_height,
u32 block_depth, u32 width_spacing) { u32 block_depth, u32 width_spacing) {
@ -328,48 +281,6 @@ void SwizzleKepler(const u32 width, const u32 height, const u32 dst_x, const u32
} }
} }
std::vector<u8> DecodeTexture(const std::vector<u8>& texture_data, TextureFormat format, u32 width,
u32 height) {
std::vector<u8> rgba_data;
// TODO(Subv): Implement.
switch (format) {
case TextureFormat::DXT1:
case TextureFormat::DXT23:
case TextureFormat::DXT45:
case TextureFormat::DXN1:
case TextureFormat::DXN2:
case TextureFormat::BC7U:
case TextureFormat::BC6H_UF16:
case TextureFormat::BC6H_SF16:
case TextureFormat::ASTC_2D_4X4:
case TextureFormat::ASTC_2D_8X8:
case TextureFormat::ASTC_2D_5X5:
case TextureFormat::ASTC_2D_10X8:
case TextureFormat::A8R8G8B8:
case TextureFormat::A2B10G10R10:
case TextureFormat::A1B5G5R5:
case TextureFormat::B5G6R5:
case TextureFormat::R8:
case TextureFormat::G8R8:
case TextureFormat::BF10GF11RF11:
case TextureFormat::R32_G32_B32_A32:
case TextureFormat::R32_G32:
case TextureFormat::R32:
case TextureFormat::R16:
case TextureFormat::R16_G16:
case TextureFormat::R32_G32_B32:
// TODO(Subv): For the time being just forward the same data without any decoding.
rgba_data = texture_data;
break;
default:
UNIMPLEMENTED_MSG("Format not implemented");
break;
}
return rgba_data;
}
std::size_t CalculateSize(bool tiled, u32 bytes_per_pixel, u32 width, u32 height, u32 depth, std::size_t CalculateSize(bool tiled, u32 bytes_per_pixel, u32 width, u32 height, u32 depth,
u32 block_height, u32 block_depth) { u32 block_height, u32 block_depth) {
if (tiled) { if (tiled) {

View File

@ -38,10 +38,6 @@ void CopySwizzledData(u32 width, u32 height, u32 depth, u32 bytes_per_pixel,
u32 out_bytes_per_pixel, u8* swizzled_data, u8* unswizzled_data, u32 out_bytes_per_pixel, u8* swizzled_data, u8* unswizzled_data,
bool unswizzle, u32 block_height, u32 block_depth, u32 width_spacing); bool unswizzle, u32 block_height, u32 block_depth, u32 width_spacing);
/// Decodes an unswizzled texture into a A8R8G8B8 texture.
std::vector<u8> DecodeTexture(const std::vector<u8>& texture_data, TextureFormat format, u32 width,
u32 height);
/// This function calculates the correct size of a texture depending if it's tiled or not. /// This function calculates the correct size of a texture depending if it's tiled or not.
std::size_t CalculateSize(bool tiled, u32 bytes_per_pixel, u32 width, u32 height, u32 depth, std::size_t CalculateSize(bool tiled, u32 bytes_per_pixel, u32 width, u32 height, u32 depth,
u32 block_height, u32 block_depth); u32 block_height, u32 block_depth);

View File

@ -12,10 +12,10 @@
namespace Tegra::Texture { namespace Tegra::Texture {
enum class TextureFormat : u32 { enum class TextureFormat : u32 {
R32_G32_B32_A32 = 0x01, R32G32B32A32 = 0x01,
R32_G32_B32 = 0x02, R32G32B32 = 0x02,
R16_G16_B16_A16 = 0x03, R16G16B16A16 = 0x03,
R32_G32 = 0x04, R32G32 = 0x04,
R32_B24G8 = 0x05, R32_B24G8 = 0x05,
ETC2_RGB = 0x06, ETC2_RGB = 0x06,
X8B8G8R8 = 0x07, X8B8G8R8 = 0x07,
@ -23,19 +23,19 @@ enum class TextureFormat : u32 {
A2B10G10R10 = 0x09, A2B10G10R10 = 0x09,
ETC2_RGB_PTA = 0x0a, ETC2_RGB_PTA = 0x0a,
ETC2_RGBA = 0x0b, ETC2_RGBA = 0x0b,
R16_G16 = 0x0c, R16G16 = 0x0c,
G8R24 = 0x0d, R24G8 = 0x0d,
G24R8 = 0x0e, R8G24 = 0x0e,
R32 = 0x0f, R32 = 0x0f,
BC6H_SF16 = 0x10, BC6H_SFLOAT = 0x10,
BC6H_UF16 = 0x11, BC6H_UFLOAT = 0x11,
A4B4G4R4 = 0x12, A4B4G4R4 = 0x12,
A5B5G5R1 = 0x13, A5B5G5R1 = 0x13,
A1B5G5R5 = 0x14, A1B5G5R5 = 0x14,
B5G6R5 = 0x15, B5G6R5 = 0x15,
B6G5R5 = 0x16, B6G5R5 = 0x16,
BC7U = 0x17, BC7 = 0x17,
G8R8 = 0x18, R8G8 = 0x18,
EAC = 0x19, EAC = 0x19,
EACX2 = 0x1a, EACX2 = 0x1a,
R16 = 0x1b, R16 = 0x1b,
@ -43,23 +43,23 @@ enum class TextureFormat : u32 {
R8 = 0x1d, R8 = 0x1d,
G4R4 = 0x1e, G4R4 = 0x1e,
R1 = 0x1f, R1 = 0x1f,
E5B9G9R9_SHAREDEXP = 0x20, E5B9G9R9 = 0x20,
BF10GF11RF11 = 0x21, B10G11R11 = 0x21,
G8B8G8R8 = 0x22, G8B8G8R8 = 0x22,
B8G8R8G8 = 0x23, B8G8R8G8 = 0x23,
DXT1 = 0x24, BC1_RGBA = 0x24,
DXT23 = 0x25, BC2 = 0x25,
DXT45 = 0x26, BC3 = 0x26,
DXN1 = 0x27, BC4 = 0x27,
DXN2 = 0x28, BC5 = 0x28,
S8Z24 = 0x29, S8D24 = 0x29,
X8Z24 = 0x2a, X8Z24 = 0x2a,
Z24S8 = 0x2b, D24S8 = 0x2b,
X4V4Z24__COV4R4V = 0x2c, X4V4Z24__COV4R4V = 0x2c,
X4V4Z24__COV8R8V = 0x2d, X4V4Z24__COV8R8V = 0x2d,
V8Z24__COV4R12V = 0x2e, V8Z24__COV4R12V = 0x2e,
ZF32 = 0x2f, D32 = 0x2f,
ZF32_X24S8 = 0x30, D32S8 = 0x30,
X8Z24_X20V4S8__COV4R4V = 0x31, X8Z24_X20V4S8__COV4R4V = 0x31,
X8Z24_X20V4S8__COV8R8V = 0x32, X8Z24_X20V4S8__COV8R8V = 0x32,
ZF32_X20V4X8__COV4R4V = 0x33, ZF32_X20V4X8__COV4R4V = 0x33,
@ -69,7 +69,7 @@ enum class TextureFormat : u32 {
X8Z24_X16V8S8__COV4R12V = 0x37, X8Z24_X16V8S8__COV4R12V = 0x37,
ZF32_X16V8X8__COV4R12V = 0x38, ZF32_X16V8X8__COV4R12V = 0x38,
ZF32_X16V8S8__COV4R12V = 0x39, ZF32_X16V8S8__COV4R12V = 0x39,
Z16 = 0x3a, D16 = 0x3a,
V8Z24__COV8R24V = 0x3b, V8Z24__COV8R24V = 0x3b,
X8Z24_X16V8S8__COV8R24V = 0x3c, X8Z24_X16V8S8__COV8R24V = 0x3c,
ZF32_X16V8X8__COV8R24V = 0x3d, ZF32_X16V8X8__COV8R24V = 0x3d,
@ -375,7 +375,4 @@ struct FullTextureInfo {
TSCEntry tsc; TSCEntry tsc;
}; };
/// Returns the number of bytes per pixel of the input texture format.
u32 BytesPerPixel(TextureFormat format);
} // namespace Tegra::Texture } // namespace Tegra::Texture