summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/video_core/compatible_formats.cpp87
-rw-r--r--src/video_core/gpu.h86
-rw-r--r--src/video_core/morton.cpp298
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.cpp173
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp4
-rw-r--r--src/video_core/renderer_vulkan/maxwell_to_vk.cpp184
-rw-r--r--src/video_core/renderer_vulkan/vk_blit_screen.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_texture_cache.cpp10
-rw-r--r--src/video_core/shader/decode/image.cpp54
-rw-r--r--src/video_core/surface.cpp228
-rw-r--r--src/video_core/surface.h800
-rw-r--r--src/video_core/texture_cache/format_lookup_table.cpp152
-rw-r--r--src/video_core/texture_cache/surface_base.cpp2
-rw-r--r--src/video_core/texture_cache/surface_params.cpp18
-rw-r--r--src/video_core/texture_cache/texture_cache.h8
-rw-r--r--src/video_core/textures/convert.cpp6
-rw-r--r--src/video_core/textures/decoders.cpp89
-rw-r--r--src/video_core/textures/decoders.h4
-rw-r--r--src/video_core/textures/texture.h49
19 files changed, 1077 insertions, 1179 deletions
diff --git a/src/video_core/compatible_formats.cpp b/src/video_core/compatible_formats.cpp
index 6c426b035..b06c32c84 100644
--- a/src/video_core/compatible_formats.cpp
+++ b/src/video_core/compatible_formats.cpp
@@ -17,101 +17,94 @@ namespace {
17// https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_texture_view.txt 17// https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_texture_view.txt
18 18
19constexpr std::array VIEW_CLASS_128_BITS = { 19constexpr std::array VIEW_CLASS_128_BITS = {
20 PixelFormat::RGBA32F, 20 PixelFormat::R32G32B32A32_FLOAT,
21 PixelFormat::RGBA32UI, 21 PixelFormat::R32G32B32A32_UINT,
22 PixelFormat::R32G32B32A32_SINT,
22}; 23};
23// Missing formats:
24// PixelFormat::RGBA32I
25 24
26constexpr std::array VIEW_CLASS_96_BITS = { 25constexpr std::array VIEW_CLASS_96_BITS = {
27 PixelFormat::RGB32F, 26 PixelFormat::R32G32B32_FLOAT,
28}; 27};
29// Missing formats: 28// Missing formats:
30// PixelFormat::RGB32UI, 29// PixelFormat::RGB32UI,
31// PixelFormat::RGB32I, 30// PixelFormat::RGB32I,
32 31
33constexpr std::array VIEW_CLASS_64_BITS = { 32constexpr std::array VIEW_CLASS_64_BITS = {
34 PixelFormat::RGBA16F, PixelFormat::RG32F, PixelFormat::RGBA16UI, PixelFormat::RG32UI, 33 PixelFormat::R32G32_FLOAT, PixelFormat::R32G32_UINT,
35 PixelFormat::RGBA16U, PixelFormat::RGBA16F, PixelFormat::RGBA16S, 34 PixelFormat::R32G32_SINT, PixelFormat::R16G16B16A16_FLOAT,
35 PixelFormat::R16G16B16A16_UNORM, PixelFormat::R16G16B16A16_SNORM,
36 PixelFormat::R16G16B16A16_UINT, PixelFormat::R16G16B16A16_SINT,
36}; 37};
37// Missing formats:
38// PixelFormat::RGBA16I
39// PixelFormat::RG32I
40 38
41// TODO: How should we handle 48 bits? 39// TODO: How should we handle 48 bits?
42 40
43constexpr std::array VIEW_CLASS_32_BITS = { 41constexpr std::array VIEW_CLASS_32_BITS = {
44 PixelFormat::RG16F, PixelFormat::R11FG11FB10F, PixelFormat::R32F, 42 PixelFormat::R16G16_FLOAT, PixelFormat::B10G11R11_FLOAT, PixelFormat::R32_FLOAT,
45 PixelFormat::A2B10G10R10U, PixelFormat::RG16UI, PixelFormat::R32UI, 43 PixelFormat::A2B10G10R10_UNORM, PixelFormat::R16G16_UINT, PixelFormat::R32_UINT,
46 PixelFormat::RG16I, PixelFormat::R32I, PixelFormat::ABGR8U, 44 PixelFormat::R16G16_SINT, PixelFormat::R32_SINT, PixelFormat::A8B8G8R8_UNORM,
47 PixelFormat::RG16, PixelFormat::ABGR8S, PixelFormat::RG16S, 45 PixelFormat::R16G16_UNORM, PixelFormat::A8B8G8R8_SNORM, PixelFormat::R16G16_SNORM,
48 PixelFormat::RGBA8_SRGB, PixelFormat::E5B9G9R9F, PixelFormat::BGRA8, 46 PixelFormat::A8B8G8R8_SRGB, PixelFormat::E5B9G9R9_FLOAT, PixelFormat::B8G8R8A8_UNORM,
49 PixelFormat::BGRA8_SRGB, 47 PixelFormat::B8G8R8A8_SRGB, PixelFormat::A8B8G8R8_UINT, PixelFormat::A8B8G8R8_SINT,
48 PixelFormat::A2B10G10R10_UINT,
50}; 49};
51// Missing formats:
52// PixelFormat::RGBA8UI
53// PixelFormat::RGBA8I
54// PixelFormat::RGB10_A2_UI
55 50
56// TODO: How should we handle 24 bits? 51// TODO: How should we handle 24 bits?
57 52
58constexpr std::array VIEW_CLASS_16_BITS = { 53constexpr std::array VIEW_CLASS_16_BITS = {
59 PixelFormat::R16F, PixelFormat::RG8UI, PixelFormat::R16UI, PixelFormat::R16I, 54 PixelFormat::R16_FLOAT, PixelFormat::R8G8_UINT, PixelFormat::R16_UINT,
60 PixelFormat::RG8U, PixelFormat::R16U, PixelFormat::RG8S, PixelFormat::R16S, 55 PixelFormat::R16_SINT, PixelFormat::R8G8_UNORM, PixelFormat::R16_UNORM,
56 PixelFormat::R8G8_SNORM, PixelFormat::R16_SNORM, PixelFormat::R8G8_SINT,
61}; 57};
62// Missing formats:
63// PixelFormat::RG8I
64 58
65constexpr std::array VIEW_CLASS_8_BITS = { 59constexpr std::array VIEW_CLASS_8_BITS = {
66 PixelFormat::R8UI, 60 PixelFormat::R8_UINT,
67 PixelFormat::R8U, 61 PixelFormat::R8_UNORM,
62 PixelFormat::R8_SINT,
63 PixelFormat::R8_SNORM,
68}; 64};
69// Missing formats:
70// PixelFormat::R8I
71// PixelFormat::R8S
72 65
73constexpr std::array VIEW_CLASS_RGTC1_RED = { 66constexpr std::array VIEW_CLASS_RGTC1_RED = {
74 PixelFormat::DXN1, 67 PixelFormat::BC4_UNORM,
68 PixelFormat::BC4_SNORM,
75}; 69};
76// Missing formats:
77// COMPRESSED_SIGNED_RED_RGTC1
78 70
79constexpr std::array VIEW_CLASS_RGTC2_RG = { 71constexpr std::array VIEW_CLASS_RGTC2_RG = {
80 PixelFormat::DXN2UNORM, 72 PixelFormat::BC5_UNORM,
81 PixelFormat::DXN2SNORM, 73 PixelFormat::BC5_SNORM,
82}; 74};
83 75
84constexpr std::array VIEW_CLASS_BPTC_UNORM = { 76constexpr std::array VIEW_CLASS_BPTC_UNORM = {
85 PixelFormat::BC7U, 77 PixelFormat::BC7_UNORM,
86 PixelFormat::BC7U_SRGB, 78 PixelFormat::BC7_SRGB,
87}; 79};
88 80
89constexpr std::array VIEW_CLASS_BPTC_FLOAT = { 81constexpr std::array VIEW_CLASS_BPTC_FLOAT = {
90 PixelFormat::BC6H_SF16, 82 PixelFormat::BC6H_SFLOAT,
91 PixelFormat::BC6H_UF16, 83 PixelFormat::BC6H_UFLOAT,
92}; 84};
93 85
94// Compatibility table taken from Table 4.X.1 in: 86// Compatibility table taken from Table 4.X.1 in:
95// https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_copy_image.txt 87// https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_copy_image.txt
96 88
97constexpr std::array COPY_CLASS_128_BITS = { 89constexpr std::array COPY_CLASS_128_BITS = {
98 PixelFormat::RGBA32UI, PixelFormat::RGBA32F, PixelFormat::DXT23, 90 PixelFormat::R32G32B32A32_UINT, PixelFormat::R32G32B32A32_FLOAT, PixelFormat::R32G32B32A32_SINT,
99 PixelFormat::DXT23_SRGB, PixelFormat::DXT45, PixelFormat::DXT45_SRGB, 91 PixelFormat::BC2_UNORM, PixelFormat::BC2_SRGB, PixelFormat::BC3_UNORM,
100 PixelFormat::DXN2SNORM, PixelFormat::BC7U, PixelFormat::BC7U_SRGB, 92 PixelFormat::BC3_SRGB, PixelFormat::BC5_UNORM, PixelFormat::BC5_SNORM,
101 PixelFormat::BC6H_SF16, PixelFormat::BC6H_UF16, 93 PixelFormat::BC7_UNORM, PixelFormat::BC7_SRGB, PixelFormat::BC6H_SFLOAT,
94 PixelFormat::BC6H_UFLOAT,
102}; 95};
103// Missing formats: 96// Missing formats:
104// PixelFormat::RGBA32I 97// PixelFormat::RGBA32I
105// COMPRESSED_RG_RGTC2 98// COMPRESSED_RG_RGTC2
106 99
107constexpr std::array COPY_CLASS_64_BITS = { 100constexpr std::array COPY_CLASS_64_BITS = {
108 PixelFormat::RGBA16F, PixelFormat::RG32F, PixelFormat::RGBA16UI, PixelFormat::RG32UI, 101 PixelFormat::R16G16B16A16_FLOAT, PixelFormat::R16G16B16A16_UINT,
109 PixelFormat::RGBA16U, PixelFormat::RGBA16S, PixelFormat::DXT1_SRGB, PixelFormat::DXT1, 102 PixelFormat::R16G16B16A16_UNORM, PixelFormat::R16G16B16A16_SNORM,
110 103 PixelFormat::R16G16B16A16_SINT, PixelFormat::R32G32_UINT,
104 PixelFormat::R32G32_FLOAT, PixelFormat::R32G32_SINT,
105 PixelFormat::BC1_RGBA_UNORM, PixelFormat::BC1_RGBA_SRGB,
111}; 106};
112// Missing formats: 107// Missing formats:
113// PixelFormat::RGBA16I
114// PixelFormat::RG32I,
115// COMPRESSED_RGB_S3TC_DXT1_EXT 108// COMPRESSED_RGB_S3TC_DXT1_EXT
116// COMPRESSED_SRGB_S3TC_DXT1_EXT 109// COMPRESSED_SRGB_S3TC_DXT1_EXT
117// COMPRESSED_RGBA_S3TC_DXT1_EXT 110// COMPRESSED_RGBA_S3TC_DXT1_EXT
diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h
index 464f5c7d6..d646c441c 100644
--- a/src/video_core/gpu.h
+++ b/src/video_core/gpu.h
@@ -39,42 +39,42 @@ namespace Tegra {
39 39
40enum class RenderTargetFormat : u32 { 40enum class RenderTargetFormat : u32 {
41 NONE = 0x0, 41 NONE = 0x0,
42 RGBA32_FLOAT = 0xC0, 42 R32B32G32A32_FLOAT = 0xC0,
43 RGBA32_SINT = 0xC1, 43 R32G32B32A32_SINT = 0xC1,
44 RGBA32_UINT = 0xC2, 44 R32G32B32A32_UINT = 0xC2,
45 RGBA16_UNORM = 0xC6, 45 R16G16B16A16_UNORM = 0xC6,
46 RGBA16_SNORM = 0xC7, 46 R16G16B16A16_SNORM = 0xC7,
47 RGBA16_SINT = 0xC8, 47 R16G16B16A16_SINT = 0xC8,
48 RGBA16_UINT = 0xC9, 48 R16G16B16A16_UINT = 0xC9,
49 RGBA16_FLOAT = 0xCA, 49 R16G16B16A16_FLOAT = 0xCA,
50 RG32_FLOAT = 0xCB, 50 R32G32_FLOAT = 0xCB,
51 RG32_SINT = 0xCC, 51 R32G32_SINT = 0xCC,
52 RG32_UINT = 0xCD, 52 R32G32_UINT = 0xCD,
53 RGBX16_FLOAT = 0xCE, 53 R16G16B16X16_FLOAT = 0xCE,
54 BGRA8_UNORM = 0xCF, 54 B8G8R8A8_UNORM = 0xCF,
55 BGRA8_SRGB = 0xD0, 55 B8G8R8A8_SRGB = 0xD0,
56 RGB10_A2_UNORM = 0xD1, 56 A2B10G10R10_UNORM = 0xD1,
57 RGB10_A2_UINT = 0xD2, 57 A2B10G10R10_UINT = 0xD2,
58 RGBA8_UNORM = 0xD5, 58 A8B8G8R8_UNORM = 0xD5,
59 RGBA8_SRGB = 0xD6, 59 A8B8G8R8_SRGB = 0xD6,
60 RGBA8_SNORM = 0xD7, 60 A8B8G8R8_SNORM = 0xD7,
61 RGBA8_SINT = 0xD8, 61 A8B8G8R8_SINT = 0xD8,
62 RGBA8_UINT = 0xD9, 62 A8B8G8R8_UINT = 0xD9,
63 RG16_UNORM = 0xDA, 63 R16G16_UNORM = 0xDA,
64 RG16_SNORM = 0xDB, 64 R16G16_SNORM = 0xDB,
65 RG16_SINT = 0xDC, 65 R16G16_SINT = 0xDC,
66 RG16_UINT = 0xDD, 66 R16G16_UINT = 0xDD,
67 RG16_FLOAT = 0xDE, 67 R16G16_FLOAT = 0xDE,
68 R11G11B10_FLOAT = 0xE0, 68 B10G11R11_FLOAT = 0xE0,
69 R32_SINT = 0xE3, 69 R32_SINT = 0xE3,
70 R32_UINT = 0xE4, 70 R32_UINT = 0xE4,
71 R32_FLOAT = 0xE5, 71 R32_FLOAT = 0xE5,
72 B5G6R5_UNORM = 0xE8, 72 R5G6B5_UNORM = 0xE8,
73 BGR5A1_UNORM = 0xE9, 73 A1R5G5B5_UNORM = 0xE9,
74 RG8_UNORM = 0xEA, 74 R8G8_UNORM = 0xEA,
75 RG8_SNORM = 0xEB, 75 R8G8_SNORM = 0xEB,
76 RG8_SINT = 0xEC, 76 R8G8_SINT = 0xEC,
77 RG8_UINT = 0xED, 77 R8G8_UINT = 0xED,
78 R16_UNORM = 0xEE, 78 R16_UNORM = 0xEE,
79 R16_SNORM = 0xEF, 79 R16_SNORM = 0xEF,
80 R16_SINT = 0xF0, 80 R16_SINT = 0xF0,
@@ -87,13 +87,13 @@ enum class RenderTargetFormat : u32 {
87}; 87};
88 88
89enum class DepthFormat : u32 { 89enum class DepthFormat : u32 {
90 Z32_FLOAT = 0xA, 90 D32_FLOAT = 0xA,
91 Z16_UNORM = 0x13, 91 D16_UNORM = 0x13,
92 S8_Z24_UNORM = 0x14, 92 S8_UINT_Z24_UNORM = 0x14,
93 Z24_X8_UNORM = 0x15, 93 D24X8_UNORM = 0x15,
94 Z24_S8_UNORM = 0x16, 94 D24S8_UNORM = 0x16,
95 Z24_C8_UNORM = 0x18, 95 D24C8_UNORM = 0x18,
96 Z32_S8_X24_FLOAT = 0x19, 96 D32_FLOAT_S8X24_UINT = 0x19,
97}; 97};
98 98
99struct CommandListHeader; 99struct CommandListHeader;
@@ -104,9 +104,9 @@ class DebugContext;
104 */ 104 */
105struct FramebufferConfig { 105struct FramebufferConfig {
106 enum class PixelFormat : u32 { 106 enum class PixelFormat : u32 {
107 ABGR8 = 1, 107 A8B8G8R8_UNORM = 1,
108 RGB565 = 4, 108 RGB565_UNORM = 4,
109 BGRA8 = 5, 109 B8G8R8A8_UNORM = 5,
110 }; 110 };
111 111
112 VAddr address; 112 VAddr address;
diff --git a/src/video_core/morton.cpp b/src/video_core/morton.cpp
index 0c3c9f12d..9da9fb4ff 100644
--- a/src/video_core/morton.cpp
+++ b/src/video_core/morton.cpp
@@ -41,168 +41,168 @@ static void MortonCopy(u32 stride, u32 block_height, u32 height, u32 block_depth
41} 41}
42 42
43static constexpr ConversionArray morton_to_linear_fns = { 43static constexpr ConversionArray morton_to_linear_fns = {
44 MortonCopy<true, PixelFormat::ABGR8U>, 44 MortonCopy<true, PixelFormat::A8B8G8R8_UNORM>,
45 MortonCopy<true, PixelFormat::ABGR8S>, 45 MortonCopy<true, PixelFormat::A8B8G8R8_SNORM>,
46 MortonCopy<true, PixelFormat::ABGR8I>, 46 MortonCopy<true, PixelFormat::A8B8G8R8_SINT>,
47 MortonCopy<true, PixelFormat::ABGR8UI>, 47 MortonCopy<true, PixelFormat::A8B8G8R8_UINT>,
48 MortonCopy<true, PixelFormat::B5G6R5U>, 48 MortonCopy<true, PixelFormat::R5G6B5_UNORM>,
49 MortonCopy<true, PixelFormat::R5G6B5U>, 49 MortonCopy<true, PixelFormat::B5G6R5_UNORM>,
50 MortonCopy<true, PixelFormat::B5G5R5A1U>, 50 MortonCopy<true, PixelFormat::A1R5G5B5_UNORM>,
51 MortonCopy<true, PixelFormat::A2B10G10R10U>, 51 MortonCopy<true, PixelFormat::A2B10G10R10_UNORM>,
52 MortonCopy<true, PixelFormat::A2B10G10R10UI>, 52 MortonCopy<true, PixelFormat::A2B10G10R10_UINT>,
53 MortonCopy<true, PixelFormat::A1B5G5R5U>, 53 MortonCopy<true, PixelFormat::A1B5G5R5_UNORM>,
54 MortonCopy<true, PixelFormat::R8U>, 54 MortonCopy<true, PixelFormat::R8_UNORM>,
55 MortonCopy<true, PixelFormat::R8S>, 55 MortonCopy<true, PixelFormat::R8_SNORM>,
56 MortonCopy<true, PixelFormat::R8I>, 56 MortonCopy<true, PixelFormat::R8_SINT>,
57 MortonCopy<true, PixelFormat::R8UI>, 57 MortonCopy<true, PixelFormat::R8_UINT>,
58 MortonCopy<true, PixelFormat::RGBA16F>, 58 MortonCopy<true, PixelFormat::R16G16B16A16_FLOAT>,
59 MortonCopy<true, PixelFormat::RGBA16U>, 59 MortonCopy<true, PixelFormat::R16G16B16A16_UNORM>,
60 MortonCopy<true, PixelFormat::RGBA16S>, 60 MortonCopy<true, PixelFormat::R16G16B16A16_SNORM>,
61 MortonCopy<true, PixelFormat::RGBA16I>, 61 MortonCopy<true, PixelFormat::R16G16B16A16_SINT>,
62 MortonCopy<true, PixelFormat::RGBA16UI>, 62 MortonCopy<true, PixelFormat::R16G16B16A16_UINT>,
63 MortonCopy<true, PixelFormat::R11FG11FB10F>, 63 MortonCopy<true, PixelFormat::B10G11R11_FLOAT>,
64 MortonCopy<true, PixelFormat::RGBA32UI>, 64 MortonCopy<true, PixelFormat::R32G32B32A32_UINT>,
65 MortonCopy<true, PixelFormat::DXT1>, 65 MortonCopy<true, PixelFormat::BC1_RGBA_UNORM>,
66 MortonCopy<true, PixelFormat::DXT23>, 66 MortonCopy<true, PixelFormat::BC2_UNORM>,
67 MortonCopy<true, PixelFormat::DXT45>, 67 MortonCopy<true, PixelFormat::BC3_UNORM>,
68 MortonCopy<true, PixelFormat::DXN1UNORM>, 68 MortonCopy<true, PixelFormat::BC4_UNORM>,
69 MortonCopy<true, PixelFormat::DXN1SNORM>, 69 MortonCopy<true, PixelFormat::BC4_SNORM>,
70 MortonCopy<true, PixelFormat::DXN2UNORM>, 70 MortonCopy<true, PixelFormat::BC5_UNORM>,
71 MortonCopy<true, PixelFormat::DXN2SNORM>, 71 MortonCopy<true, PixelFormat::BC5_SNORM>,
72 MortonCopy<true, PixelFormat::BC7U>, 72 MortonCopy<true, PixelFormat::BC7_UNORM>,
73 MortonCopy<true, PixelFormat::BC6H_UF16>, 73 MortonCopy<true, PixelFormat::BC6H_UFLOAT>,
74 MortonCopy<true, PixelFormat::BC6H_SF16>, 74 MortonCopy<true, PixelFormat::BC6H_SFLOAT>,
75 MortonCopy<true, PixelFormat::ASTC_2D_4X4>, 75 MortonCopy<true, PixelFormat::ASTC_2D_4X4_UNORM>,
76 MortonCopy<true, PixelFormat::BGRA8>, 76 MortonCopy<true, PixelFormat::B8G8R8A8_UNORM>,
77 MortonCopy<true, PixelFormat::RGBA32F>, 77 MortonCopy<true, PixelFormat::R32G32B32A32_FLOAT>,
78 MortonCopy<true, PixelFormat::RGBA32I>, 78 MortonCopy<true, PixelFormat::R32G32B32A32_SINT>,
79 MortonCopy<true, PixelFormat::RG32F>, 79 MortonCopy<true, PixelFormat::R32G32_FLOAT>,
80 MortonCopy<true, PixelFormat::RG32I>, 80 MortonCopy<true, PixelFormat::R32G32_SINT>,
81 MortonCopy<true, PixelFormat::R32F>, 81 MortonCopy<true, PixelFormat::R32_FLOAT>,
82 MortonCopy<true, PixelFormat::R16F>, 82 MortonCopy<true, PixelFormat::R16_FLOAT>,
83 MortonCopy<true, PixelFormat::R16U>, 83 MortonCopy<true, PixelFormat::R16_UNORM>,
84 MortonCopy<true, PixelFormat::R16S>, 84 MortonCopy<true, PixelFormat::R16_SNORM>,
85 MortonCopy<true, PixelFormat::R16UI>, 85 MortonCopy<true, PixelFormat::R16_UINT>,
86 MortonCopy<true, PixelFormat::R16I>, 86 MortonCopy<true, PixelFormat::R16_SINT>,
87 MortonCopy<true, PixelFormat::RG16>, 87 MortonCopy<true, PixelFormat::R16G16_UNORM>,
88 MortonCopy<true, PixelFormat::RG16F>, 88 MortonCopy<true, PixelFormat::R16G16_FLOAT>,
89 MortonCopy<true, PixelFormat::RG16UI>, 89 MortonCopy<true, PixelFormat::R16G16_UINT>,
90 MortonCopy<true, PixelFormat::RG16I>, 90 MortonCopy<true, PixelFormat::R16G16_SINT>,
91 MortonCopy<true, PixelFormat::RG16S>, 91 MortonCopy<true, PixelFormat::R16G16_SNORM>,
92 MortonCopy<true, PixelFormat::RGB32F>, 92 MortonCopy<true, PixelFormat::R32G32B32_FLOAT>,
93 MortonCopy<true, PixelFormat::RGBA8_SRGB>, 93 MortonCopy<true, PixelFormat::A8B8G8R8_SRGB>,
94 MortonCopy<true, PixelFormat::RG8U>, 94 MortonCopy<true, PixelFormat::R8G8_UNORM>,
95 MortonCopy<true, PixelFormat::RG8S>, 95 MortonCopy<true, PixelFormat::R8G8_SNORM>,
96 MortonCopy<true, PixelFormat::RG8I>, 96 MortonCopy<true, PixelFormat::R8G8_SINT>,
97 MortonCopy<true, PixelFormat::RG8UI>, 97 MortonCopy<true, PixelFormat::R8G8_UINT>,
98 MortonCopy<true, PixelFormat::RG32UI>, 98 MortonCopy<true, PixelFormat::R32G32_UINT>,
99 MortonCopy<true, PixelFormat::RGBX16F>, 99 MortonCopy<true, PixelFormat::R16G16B16X16_FLOAT>,
100 MortonCopy<true, PixelFormat::R32UI>, 100 MortonCopy<true, PixelFormat::R32_UINT>,
101 MortonCopy<true, PixelFormat::R32I>, 101 MortonCopy<true, PixelFormat::R32_SINT>,
102 MortonCopy<true, PixelFormat::ASTC_2D_8X8>, 102 MortonCopy<true, PixelFormat::ASTC_2D_8X8_UNORM>,
103 MortonCopy<true, PixelFormat::ASTC_2D_8X5>, 103 MortonCopy<true, PixelFormat::ASTC_2D_8X5_UNORM>,
104 MortonCopy<true, PixelFormat::ASTC_2D_5X4>, 104 MortonCopy<true, PixelFormat::ASTC_2D_5X4_UNORM>,
105 MortonCopy<true, PixelFormat::BGRA8_SRGB>, 105 MortonCopy<true, PixelFormat::B8G8R8A8_SRGB>,
106 MortonCopy<true, PixelFormat::DXT1_SRGB>, 106 MortonCopy<true, PixelFormat::BC1_RGBA_SRGB>,
107 MortonCopy<true, PixelFormat::DXT23_SRGB>, 107 MortonCopy<true, PixelFormat::BC2_SRGB>,
108 MortonCopy<true, PixelFormat::DXT45_SRGB>, 108 MortonCopy<true, PixelFormat::BC3_SRGB>,
109 MortonCopy<true, PixelFormat::BC7U_SRGB>, 109 MortonCopy<true, PixelFormat::BC7_SRGB>,
110 MortonCopy<true, PixelFormat::R4G4B4A4U>, 110 MortonCopy<true, PixelFormat::A4B4G4R4_UNORM>,
111 MortonCopy<true, PixelFormat::ASTC_2D_4X4_SRGB>, 111 MortonCopy<true, PixelFormat::ASTC_2D_4X4_SRGB>,
112 MortonCopy<true, PixelFormat::ASTC_2D_8X8_SRGB>, 112 MortonCopy<true, PixelFormat::ASTC_2D_8X8_SRGB>,
113 MortonCopy<true, PixelFormat::ASTC_2D_8X5_SRGB>, 113 MortonCopy<true, PixelFormat::ASTC_2D_8X5_SRGB>,
114 MortonCopy<true, PixelFormat::ASTC_2D_5X4_SRGB>, 114 MortonCopy<true, PixelFormat::ASTC_2D_5X4_SRGB>,
115 MortonCopy<true, PixelFormat::ASTC_2D_5X5>, 115 MortonCopy<true, PixelFormat::ASTC_2D_5X5_UNORM>,
116 MortonCopy<true, PixelFormat::ASTC_2D_5X5_SRGB>, 116 MortonCopy<true, PixelFormat::ASTC_2D_5X5_SRGB>,
117 MortonCopy<true, PixelFormat::ASTC_2D_10X8>, 117 MortonCopy<true, PixelFormat::ASTC_2D_10X8_UNORM>,
118 MortonCopy<true, PixelFormat::ASTC_2D_10X8_SRGB>, 118 MortonCopy<true, PixelFormat::ASTC_2D_10X8_SRGB>,
119 MortonCopy<true, PixelFormat::ASTC_2D_6X6>, 119 MortonCopy<true, PixelFormat::ASTC_2D_6X6_UNORM>,
120 MortonCopy<true, PixelFormat::ASTC_2D_6X6_SRGB>, 120 MortonCopy<true, PixelFormat::ASTC_2D_6X6_SRGB>,
121 MortonCopy<true, PixelFormat::ASTC_2D_10X10>, 121 MortonCopy<true, PixelFormat::ASTC_2D_10X10_UNORM>,
122 MortonCopy<true, PixelFormat::ASTC_2D_10X10_SRGB>, 122 MortonCopy<true, PixelFormat::ASTC_2D_10X10_SRGB>,
123 MortonCopy<true, PixelFormat::ASTC_2D_12X12>, 123 MortonCopy<true, PixelFormat::ASTC_2D_12X12_UNORM>,
124 MortonCopy<true, PixelFormat::ASTC_2D_12X12_SRGB>, 124 MortonCopy<true, PixelFormat::ASTC_2D_12X12_SRGB>,
125 MortonCopy<true, PixelFormat::ASTC_2D_8X6>, 125 MortonCopy<true, PixelFormat::ASTC_2D_8X6_UNORM>,
126 MortonCopy<true, PixelFormat::ASTC_2D_8X6_SRGB>, 126 MortonCopy<true, PixelFormat::ASTC_2D_8X6_SRGB>,
127 MortonCopy<true, PixelFormat::ASTC_2D_6X5>, 127 MortonCopy<true, PixelFormat::ASTC_2D_6X5_UNORM>,
128 MortonCopy<true, PixelFormat::ASTC_2D_6X5_SRGB>, 128 MortonCopy<true, PixelFormat::ASTC_2D_6X5_SRGB>,
129 MortonCopy<true, PixelFormat::E5B9G9R9F>, 129 MortonCopy<true, PixelFormat::E5B9G9R9_FLOAT>,
130 MortonCopy<true, PixelFormat::Z32F>, 130 MortonCopy<true, PixelFormat::D32_FLOAT>,
131 MortonCopy<true, PixelFormat::Z16>, 131 MortonCopy<true, PixelFormat::D16_UNORM>,
132 MortonCopy<true, PixelFormat::Z24S8>, 132 MortonCopy<true, PixelFormat::D24_UNORM_S8_UINT>,
133 MortonCopy<true, PixelFormat::S8Z24>, 133 MortonCopy<true, PixelFormat::S8_UINT_D24_UNORM>,
134 MortonCopy<true, PixelFormat::Z32FS8>, 134 MortonCopy<true, PixelFormat::D32_FLOAT_S8_UINT>,
135}; 135};
136 136
137static constexpr ConversionArray linear_to_morton_fns = { 137static constexpr ConversionArray linear_to_morton_fns = {
138 MortonCopy<false, PixelFormat::ABGR8U>, 138 MortonCopy<false, PixelFormat::A8B8G8R8_UNORM>,
139 MortonCopy<false, PixelFormat::ABGR8S>, 139 MortonCopy<false, PixelFormat::A8B8G8R8_SNORM>,
140 MortonCopy<false, PixelFormat::ABGR8I>, 140 MortonCopy<false, PixelFormat::A8B8G8R8_SINT>,
141 MortonCopy<false, PixelFormat::ABGR8UI>, 141 MortonCopy<false, PixelFormat::A8B8G8R8_UINT>,
142 MortonCopy<false, PixelFormat::B5G6R5U>, 142 MortonCopy<false, PixelFormat::R5G6B5_UNORM>,
143 MortonCopy<false, PixelFormat::R5G6B5U>, 143 MortonCopy<false, PixelFormat::B5G6R5_UNORM>,
144 MortonCopy<false, PixelFormat::B5G5R5A1U>, 144 MortonCopy<false, PixelFormat::A1R5G5B5_UNORM>,
145 MortonCopy<false, PixelFormat::A2B10G10R10U>, 145 MortonCopy<false, PixelFormat::A2B10G10R10_UNORM>,
146 MortonCopy<false, PixelFormat::A2B10G10R10UI>, 146 MortonCopy<false, PixelFormat::A2B10G10R10_UINT>,
147 MortonCopy<false, PixelFormat::A1B5G5R5U>, 147 MortonCopy<false, PixelFormat::A1B5G5R5_UNORM>,
148 MortonCopy<false, PixelFormat::R8U>, 148 MortonCopy<false, PixelFormat::R8_UNORM>,
149 MortonCopy<false, PixelFormat::R8S>, 149 MortonCopy<false, PixelFormat::R8_SNORM>,
150 MortonCopy<false, PixelFormat::R8I>, 150 MortonCopy<false, PixelFormat::R8_SINT>,
151 MortonCopy<false, PixelFormat::R8UI>, 151 MortonCopy<false, PixelFormat::R8_UINT>,
152 MortonCopy<false, PixelFormat::RGBA16F>, 152 MortonCopy<false, PixelFormat::R16G16B16A16_FLOAT>,
153 MortonCopy<false, PixelFormat::RGBA16S>, 153 MortonCopy<false, PixelFormat::R16G16B16A16_SNORM>,
154 MortonCopy<false, PixelFormat::RGBA16I>, 154 MortonCopy<false, PixelFormat::R16G16B16A16_SINT>,
155 MortonCopy<false, PixelFormat::RGBA16U>, 155 MortonCopy<false, PixelFormat::R16G16B16A16_UNORM>,
156 MortonCopy<false, PixelFormat::RGBA16UI>, 156 MortonCopy<false, PixelFormat::R16G16B16A16_UINT>,
157 MortonCopy<false, PixelFormat::R11FG11FB10F>, 157 MortonCopy<false, PixelFormat::B10G11R11_FLOAT>,
158 MortonCopy<false, PixelFormat::RGBA32UI>, 158 MortonCopy<false, PixelFormat::R32G32B32A32_UINT>,
159 MortonCopy<false, PixelFormat::DXT1>, 159 MortonCopy<false, PixelFormat::BC1_RGBA_UNORM>,
160 MortonCopy<false, PixelFormat::DXT23>, 160 MortonCopy<false, PixelFormat::BC2_UNORM>,
161 MortonCopy<false, PixelFormat::DXT45>, 161 MortonCopy<false, PixelFormat::BC3_UNORM>,
162 MortonCopy<false, PixelFormat::DXN1UNORM>, 162 MortonCopy<false, PixelFormat::BC4_UNORM>,
163 MortonCopy<false, PixelFormat::DXN1SNORM>, 163 MortonCopy<false, PixelFormat::BC4_SNORM>,
164 MortonCopy<false, PixelFormat::DXN2UNORM>, 164 MortonCopy<false, PixelFormat::BC5_UNORM>,
165 MortonCopy<false, PixelFormat::DXN2SNORM>, 165 MortonCopy<false, PixelFormat::BC5_SNORM>,
166 MortonCopy<false, PixelFormat::BC7U>, 166 MortonCopy<false, PixelFormat::BC7_UNORM>,
167 MortonCopy<false, PixelFormat::BC6H_UF16>, 167 MortonCopy<false, PixelFormat::BC6H_UFLOAT>,
168 MortonCopy<false, PixelFormat::BC6H_SF16>, 168 MortonCopy<false, PixelFormat::BC6H_SFLOAT>,
169 // TODO(Subv): Swizzling ASTC formats are not supported 169 // TODO(Subv): Swizzling ASTC formats are not supported
170 nullptr, 170 nullptr,
171 MortonCopy<false, PixelFormat::BGRA8>, 171 MortonCopy<false, PixelFormat::B8G8R8A8_UNORM>,
172 MortonCopy<false, PixelFormat::RGBA32F>, 172 MortonCopy<false, PixelFormat::R32G32B32A32_FLOAT>,
173 MortonCopy<false, PixelFormat::RGBA32I>, 173 MortonCopy<false, PixelFormat::R32G32B32A32_SINT>,
174 MortonCopy<false, PixelFormat::RG32F>, 174 MortonCopy<false, PixelFormat::R32G32_FLOAT>,
175 MortonCopy<false, PixelFormat::RG32I>, 175 MortonCopy<false, PixelFormat::R32G32_SINT>,
176 MortonCopy<false, PixelFormat::R32F>, 176 MortonCopy<false, PixelFormat::R32_FLOAT>,
177 MortonCopy<false, PixelFormat::R16F>, 177 MortonCopy<false, PixelFormat::R16_FLOAT>,
178 MortonCopy<false, PixelFormat::R16U>, 178 MortonCopy<false, PixelFormat::R16_UNORM>,
179 MortonCopy<false, PixelFormat::R16S>, 179 MortonCopy<false, PixelFormat::R16_SNORM>,
180 MortonCopy<false, PixelFormat::R16UI>, 180 MortonCopy<false, PixelFormat::R16_UINT>,
181 MortonCopy<false, PixelFormat::R16I>, 181 MortonCopy<false, PixelFormat::R16_SINT>,
182 MortonCopy<false, PixelFormat::RG16>, 182 MortonCopy<false, PixelFormat::R16G16_UNORM>,
183 MortonCopy<false, PixelFormat::RG16F>, 183 MortonCopy<false, PixelFormat::R16G16_FLOAT>,
184 MortonCopy<false, PixelFormat::RG16UI>, 184 MortonCopy<false, PixelFormat::R16G16_UINT>,
185 MortonCopy<false, PixelFormat::RG16I>, 185 MortonCopy<false, PixelFormat::R16G16_SINT>,
186 MortonCopy<false, PixelFormat::RG16S>, 186 MortonCopy<false, PixelFormat::R16G16_SNORM>,
187 MortonCopy<false, PixelFormat::RGB32F>, 187 MortonCopy<false, PixelFormat::R32G32B32_FLOAT>,
188 MortonCopy<false, PixelFormat::RGBA8_SRGB>, 188 MortonCopy<false, PixelFormat::A8B8G8R8_SRGB>,
189 MortonCopy<false, PixelFormat::RG8U>, 189 MortonCopy<false, PixelFormat::R8G8_UNORM>,
190 MortonCopy<false, PixelFormat::RG8S>, 190 MortonCopy<false, PixelFormat::R8G8_SNORM>,
191 MortonCopy<false, PixelFormat::RG8I>, 191 MortonCopy<false, PixelFormat::R8G8_SINT>,
192 MortonCopy<false, PixelFormat::RG8UI>, 192 MortonCopy<false, PixelFormat::R8G8_UINT>,
193 MortonCopy<false, PixelFormat::RG32UI>, 193 MortonCopy<false, PixelFormat::R32G32_UINT>,
194 MortonCopy<false, PixelFormat::RGBX16F>, 194 MortonCopy<false, PixelFormat::R16G16B16X16_FLOAT>,
195 MortonCopy<false, PixelFormat::R32UI>, 195 MortonCopy<false, PixelFormat::R32_UINT>,
196 MortonCopy<false, PixelFormat::R32I>, 196 MortonCopy<false, PixelFormat::R32_SINT>,
197 nullptr, 197 nullptr,
198 nullptr, 198 nullptr,
199 nullptr, 199 nullptr,
200 MortonCopy<false, PixelFormat::BGRA8_SRGB>, 200 MortonCopy<false, PixelFormat::B8G8R8A8_SRGB>,
201 MortonCopy<false, PixelFormat::DXT1_SRGB>, 201 MortonCopy<false, PixelFormat::BC1_RGBA_SRGB>,
202 MortonCopy<false, PixelFormat::DXT23_SRGB>, 202 MortonCopy<false, PixelFormat::BC2_SRGB>,
203 MortonCopy<false, PixelFormat::DXT45_SRGB>, 203 MortonCopy<false, PixelFormat::BC3_SRGB>,
204 MortonCopy<false, PixelFormat::BC7U_SRGB>, 204 MortonCopy<false, PixelFormat::BC7_SRGB>,
205 MortonCopy<false, PixelFormat::R4G4B4A4U>, 205 MortonCopy<false, PixelFormat::A4B4G4R4_UNORM>,
206 nullptr, 206 nullptr,
207 nullptr, 207 nullptr,
208 nullptr, 208 nullptr,
@@ -221,12 +221,12 @@ static constexpr ConversionArray linear_to_morton_fns = {
221 nullptr, 221 nullptr,
222 nullptr, 222 nullptr,
223 nullptr, 223 nullptr,
224 MortonCopy<false, PixelFormat::E5B9G9R9F>, 224 MortonCopy<false, PixelFormat::E5B9G9R9_FLOAT>,
225 MortonCopy<false, PixelFormat::Z32F>, 225 MortonCopy<false, PixelFormat::D32_FLOAT>,
226 MortonCopy<false, PixelFormat::Z16>, 226 MortonCopy<false, PixelFormat::D16_UNORM>,
227 MortonCopy<false, PixelFormat::Z24S8>, 227 MortonCopy<false, PixelFormat::D24_UNORM_S8_UINT>,
228 MortonCopy<false, PixelFormat::S8Z24>, 228 MortonCopy<false, PixelFormat::S8_UINT_D24_UNORM>,
229 MortonCopy<false, PixelFormat::Z32FS8>, 229 MortonCopy<false, PixelFormat::D32_FLOAT_S8_UINT>,
230}; 230};
231 231
232static MortonCopyFn GetSwizzleFunction(MortonSwizzleMode mode, Surface::PixelFormat format) { 232static MortonCopyFn GetSwizzleFunction(MortonSwizzleMode mode, Surface::PixelFormat format) {
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp
index 12f54c050..0a7bc9e2b 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp
@@ -41,102 +41,103 @@ struct FormatTuple {
41}; 41};
42 42
43constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> tex_format_tuples = {{ 43constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> tex_format_tuples = {{
44 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, // ABGR8U 44 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, // A8B8G8R8_UNORM
45 {GL_RGBA8_SNORM, GL_RGBA, GL_BYTE}, // ABGR8S 45 {GL_RGBA8_SNORM, GL_RGBA, GL_BYTE}, // A8B8G8R8_SNORM
46 {GL_RGBA8I, GL_RGBA_INTEGER, GL_BYTE}, // ABGR8I 46 {GL_RGBA8I, GL_RGBA_INTEGER, GL_BYTE}, // A8B8G8R8_SINT
47 {GL_RGBA8UI, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE}, // ABGR8UI 47 {GL_RGBA8UI, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE}, // A8B8G8R8_UINT
48 {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5}, // B5G6R5U 48 {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5}, // R5G6B5_UNORM
49 {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV}, // R5G6B5U 49 {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV}, // B5G6R5_UNORM
50 {GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // B5G5R5A1U 50 {GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // A1R5G5B5_UNORM
51 {GL_RGB10_A2, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10U 51 {GL_RGB10_A2, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10_UNORM
52 {GL_RGB10_A2UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10UI 52 {GL_RGB10_A2UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10_UINT
53 {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // A1B5G5R5U 53 {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // A1B5G5R5_UNORM
54 {GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8U 54 {GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8_UNORM
55 {GL_R8_SNORM, GL_RED, GL_BYTE}, // R8S 55 {GL_R8_SNORM, GL_RED, GL_BYTE}, // R8_SNORM
56 {GL_R8I, GL_RED_INTEGER, GL_BYTE}, // R8I 56 {GL_R8I, GL_RED_INTEGER, GL_BYTE}, // R8_SINT
57 {GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE}, // R8UI 57 {GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE}, // R8_UINT
58 {GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // RGBA16F 58 {GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // R16G16B16A16_FLOAT
59 {GL_RGBA16, GL_RGBA, GL_UNSIGNED_SHORT}, // RGBA16U 59 {GL_RGBA16, GL_RGBA, GL_UNSIGNED_SHORT}, // R16G16B16A16_UNORM
60 {GL_RGBA16_SNORM, GL_RGBA, GL_SHORT}, // RGBA16S 60 {GL_RGBA16_SNORM, GL_RGBA, GL_SHORT}, // R16G16B16A16_SNORM
61 {GL_RGBA16I, GL_RGBA_INTEGER, GL_SHORT}, // RGBA16I 61 {GL_RGBA16I, GL_RGBA_INTEGER, GL_SHORT}, // R16G16B16A16_SINT
62 {GL_RGBA16UI, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT}, // RGBA16UI 62 {GL_RGBA16UI, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT}, // R16G16B16A16_UINT
63 {GL_R11F_G11F_B10F, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV}, // R11FG11FB10F 63 {GL_R11F_G11F_B10F, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV}, // B10G11R11_FLOAT
64 {GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT}, // RGBA32UI 64 {GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT}, // R32G32B32A32_UINT
65 {GL_COMPRESSED_RGBA_S3TC_DXT1_EXT}, // DXT1 65 {GL_COMPRESSED_RGBA_S3TC_DXT1_EXT}, // BC1_RGBA_UNORM
66 {GL_COMPRESSED_RGBA_S3TC_DXT3_EXT}, // DXT23 66 {GL_COMPRESSED_RGBA_S3TC_DXT3_EXT}, // BC2_UNORM
67 {GL_COMPRESSED_RGBA_S3TC_DXT5_EXT}, // DXT45 67 {GL_COMPRESSED_RGBA_S3TC_DXT5_EXT}, // BC3_UNORM
68 {GL_COMPRESSED_RED_RGTC1}, // DXN1UNORM 68 {GL_COMPRESSED_RED_RGTC1}, // BC4_UNORM
69 {GL_COMPRESSED_SIGNED_RED_RGTC1}, // DXN1SNORM 69 {GL_COMPRESSED_SIGNED_RED_RGTC1}, // BC4_SNORM
70 {GL_COMPRESSED_RG_RGTC2}, // DXN2UNORM 70 {GL_COMPRESSED_RG_RGTC2}, // BC5_UNORM
71 {GL_COMPRESSED_SIGNED_RG_RGTC2}, // DXN2SNORM 71 {GL_COMPRESSED_SIGNED_RG_RGTC2}, // BC5_SNORM
72 {GL_COMPRESSED_RGBA_BPTC_UNORM}, // BC7U 72 {GL_COMPRESSED_RGBA_BPTC_UNORM}, // BC7_UNORM
73 {GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT}, // BC6H_UF16 73 {GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT}, // BC6H_UFLOAT
74 {GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT}, // BC6H_SF16 74 {GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT}, // BC6H_SFLOAT
75 {GL_COMPRESSED_RGBA_ASTC_4x4_KHR}, // ASTC_2D_4X4 75 {GL_COMPRESSED_RGBA_ASTC_4x4_KHR}, // ASTC_2D_4X4_UNORM
76 {GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE}, // BGRA8 76 {GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE}, // B8G8R8A8_UNORM
77 {GL_RGBA32F, GL_RGBA, GL_FLOAT}, // RGBA32F 77 {GL_RGBA32F, GL_RGBA, GL_FLOAT}, // R32G32B32A32_FLOAT
78 {GL_RGBA32I, GL_RGBA_INTEGER, GL_INT}, // RGBA32I 78 {GL_RGBA32I, GL_RGBA_INTEGER, GL_INT}, // R32G32B32A32_SINT
79 {GL_RG32F, GL_RG, GL_FLOAT}, // RG32F 79 {GL_RG32F, GL_RG, GL_FLOAT}, // R32G32_FLOAT
80 {GL_RG32I, GL_RG_INTEGER, GL_INT}, // RG32I 80 {GL_RG32I, GL_RG_INTEGER, GL_INT}, // R32G32_SINT
81 {GL_R32F, GL_RED, GL_FLOAT}, // R32F 81 {GL_R32F, GL_RED, GL_FLOAT}, // R32_FLOAT
82 {GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16F 82 {GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16_FLOAT
83 {GL_R16, GL_RED, GL_UNSIGNED_SHORT}, // R16U 83 {GL_R16, GL_RED, GL_UNSIGNED_SHORT}, // R16_UNORM
84 {GL_R16_SNORM, GL_RED, GL_SHORT}, // R16S 84 {GL_R16_SNORM, GL_RED, GL_SHORT}, // R16_SNORM
85 {GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT}, // R16UI 85 {GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT}, // R16_UINT
86 {GL_R16I, GL_RED_INTEGER, GL_SHORT}, // R16I 86 {GL_R16I, GL_RED_INTEGER, GL_SHORT}, // R16_SINT
87 {GL_RG16, GL_RG, GL_UNSIGNED_SHORT}, // RG16 87 {GL_RG16, GL_RG, GL_UNSIGNED_SHORT}, // R16G16_UNORM
88 {GL_RG16F, GL_RG, GL_HALF_FLOAT}, // RG16F 88 {GL_RG16F, GL_RG, GL_HALF_FLOAT}, // R16G16_FLOAT
89 {GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT}, // RG16UI 89 {GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT}, // R16G16_UINT
90 {GL_RG16I, GL_RG_INTEGER, GL_SHORT}, // RG16I 90 {GL_RG16I, GL_RG_INTEGER, GL_SHORT}, // R16G16_SINT
91 {GL_RG16_SNORM, GL_RG, GL_SHORT}, // RG16S 91 {GL_RG16_SNORM, GL_RG, GL_SHORT}, // R16G16_SNORM
92 {GL_RGB32F, GL_RGB, GL_FLOAT}, // RGB32F 92 {GL_RGB32F, GL_RGB, GL_FLOAT}, // R32G32B32_FLOAT
93 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, // RGBA8_SRGB 93 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, // A8B8G8R8_SRGB
94 {GL_RG8, GL_RG, GL_UNSIGNED_BYTE}, // RG8U 94 {GL_RG8, GL_RG, GL_UNSIGNED_BYTE}, // R8G8_UNORM
95 {GL_RG8_SNORM, GL_RG, GL_BYTE}, // RG8S 95 {GL_RG8_SNORM, GL_RG, GL_BYTE}, // R8G8_SNORM
96 {GL_RG8I, GL_RG_INTEGER, GL_BYTE}, // RG8I 96 {GL_RG8I, GL_RG_INTEGER, GL_BYTE}, // R8G8_SINT
97 {GL_RG8UI, GL_RG_INTEGER, GL_UNSIGNED_BYTE}, // RG8UI 97 {GL_RG8UI, GL_RG_INTEGER, GL_UNSIGNED_BYTE}, // R8G8_UINT
98 {GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT}, // RG32UI 98 {GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT}, // R32G32_UINT
99 {GL_RGB16F, GL_RGBA, GL_HALF_FLOAT}, // RGBX16F 99 {GL_RGB16F, GL_RGBA, GL_HALF_FLOAT}, // R16G16B16X16_FLOAT
100 {GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT}, // R32UI 100 {GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT}, // R32_UINT
101 {GL_R32I, GL_RED_INTEGER, GL_INT}, // R32I 101 {GL_R32I, GL_RED_INTEGER, GL_INT}, // R32_SINT
102 {GL_COMPRESSED_RGBA_ASTC_8x8_KHR}, // ASTC_2D_8X8 102 {GL_COMPRESSED_RGBA_ASTC_8x8_KHR}, // ASTC_2D_8X8_UNORM
103 {GL_COMPRESSED_RGBA_ASTC_8x5_KHR}, // ASTC_2D_8X5 103 {GL_COMPRESSED_RGBA_ASTC_8x5_KHR}, // ASTC_2D_8X5_UNORM
104 {GL_COMPRESSED_RGBA_ASTC_5x4_KHR}, // ASTC_2D_5X4 104 {GL_COMPRESSED_RGBA_ASTC_5x4_KHR}, // ASTC_2D_5X4_UNORM
105 {GL_SRGB8_ALPHA8, GL_BGRA, GL_UNSIGNED_BYTE}, // BGRA8 105 {GL_SRGB8_ALPHA8, GL_BGRA, GL_UNSIGNED_BYTE}, // B8G8R8A8_UNORM
106 // Compressed sRGB formats 106 // Compressed sRGB formats
107 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT}, // DXT1_SRGB 107 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT}, // BC1_RGBA_SRGB
108 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT}, // DXT23_SRGB 108 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT}, // BC2_SRGB
109 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}, // DXT45_SRGB 109 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}, // BC3_SRGB
110 {GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM}, // BC7U_SRGB 110 {GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM}, // BC7_SRGB
111 {GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4_REV}, // R4G4B4A4U 111 {GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4_REV}, // A4B4G4R4_UNORM
112 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR}, // ASTC_2D_4X4_SRGB 112 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR}, // ASTC_2D_4X4_SRGB
113 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR}, // ASTC_2D_8X8_SRGB 113 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR}, // ASTC_2D_8X8_SRGB
114 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR}, // ASTC_2D_8X5_SRGB 114 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR}, // ASTC_2D_8X5_SRGB
115 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR}, // ASTC_2D_5X4_SRGB 115 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR}, // ASTC_2D_5X4_SRGB
116 {GL_COMPRESSED_RGBA_ASTC_5x5_KHR}, // ASTC_2D_5X5 116 {GL_COMPRESSED_RGBA_ASTC_5x5_KHR}, // ASTC_2D_5X5_UNORM
117 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR}, // ASTC_2D_5X5_SRGB 117 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR}, // ASTC_2D_5X5_SRGB
118 {GL_COMPRESSED_RGBA_ASTC_10x8_KHR}, // ASTC_2D_10X8 118 {GL_COMPRESSED_RGBA_ASTC_10x8_KHR}, // ASTC_2D_10X8_UNORM
119 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR}, // ASTC_2D_10X8_SRGB 119 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR}, // ASTC_2D_10X8_SRGB
120 {GL_COMPRESSED_RGBA_ASTC_6x6_KHR}, // ASTC_2D_6X6 120 {GL_COMPRESSED_RGBA_ASTC_6x6_KHR}, // ASTC_2D_6X6_UNORM
121 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR}, // ASTC_2D_6X6_SRGB 121 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR}, // ASTC_2D_6X6_SRGB
122 {GL_COMPRESSED_RGBA_ASTC_10x10_KHR}, // ASTC_2D_10X10 122 {GL_COMPRESSED_RGBA_ASTC_10x10_KHR}, // ASTC_2D_10X10_UNORM
123 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR}, // ASTC_2D_10X10_SRGB 123 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR}, // ASTC_2D_10X10_SRGB
124 {GL_COMPRESSED_RGBA_ASTC_12x12_KHR}, // ASTC_2D_12X12 124 {GL_COMPRESSED_RGBA_ASTC_12x12_KHR}, // ASTC_2D_12X12_UNORM
125 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR}, // ASTC_2D_12X12_SRGB 125 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR}, // ASTC_2D_12X12_SRGB
126 {GL_COMPRESSED_RGBA_ASTC_8x6_KHR}, // ASTC_2D_8X6 126 {GL_COMPRESSED_RGBA_ASTC_8x6_KHR}, // ASTC_2D_8X6_UNORM
127 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR}, // ASTC_2D_8X6_SRGB 127 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR}, // ASTC_2D_8X6_SRGB
128 {GL_COMPRESSED_RGBA_ASTC_6x5_KHR}, // ASTC_2D_6X5 128 {GL_COMPRESSED_RGBA_ASTC_6x5_KHR}, // ASTC_2D_6X5_UNORM
129 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR}, // ASTC_2D_6X5_SRGB 129 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR}, // ASTC_2D_6X5_SRGB
130 {GL_RGB9_E5, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV}, // E5B9G9R9F 130 {GL_RGB9_E5, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV}, // E5B9G9R9_FLOAT
131 131
132 // Depth formats 132 // Depth formats
133 {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT}, // Z32F 133 {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT}, // D32_FLOAT
134 {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT}, // Z16 134 {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT}, // D16_UNORM
135 135
136 // DepthStencil formats 136 // DepthStencil formats
137 {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}, // Z24S8 137 {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}, // D24_UNORM_S8_UINT
138 {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}, // S8Z24 138 {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}, // S8_UINT_D24_UNORM
139 {GL_DEPTH32F_STENCIL8, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV}, // Z32FS8 139 {GL_DEPTH32F_STENCIL8, GL_DEPTH_STENCIL,
140 GL_FLOAT_32_UNSIGNED_INT_24_8_REV}, // D32_FLOAT_S8_UINT
140}}; 141}};
141 142
142const FormatTuple& GetFormatTuple(PixelFormat pixel_format) { 143const FormatTuple& GetFormatTuple(PixelFormat pixel_format) {
@@ -189,10 +190,10 @@ GLint GetSwizzleSource(SwizzleSource source) {
189 190
190GLenum GetComponent(PixelFormat format, bool is_first) { 191GLenum GetComponent(PixelFormat format, bool is_first) {
191 switch (format) { 192 switch (format) {
192 case PixelFormat::Z24S8: 193 case PixelFormat::D24_UNORM_S8_UINT:
193 case PixelFormat::Z32FS8: 194 case PixelFormat::D32_FLOAT_S8_UINT:
194 return is_first ? GL_DEPTH_COMPONENT : GL_STENCIL_INDEX; 195 return is_first ? GL_DEPTH_COMPONENT : GL_STENCIL_INDEX;
195 case PixelFormat::S8Z24: 196 case PixelFormat::S8_UINT_D24_UNORM:
196 return is_first ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT; 197 return is_first ? GL_STENCIL_INDEX : GL_DEPTH_COMPONENT;
197 default: 198 default:
198 UNREACHABLE(); 199 UNREACHABLE();
@@ -493,9 +494,9 @@ GLuint CachedSurfaceView::GetTexture(SwizzleSource x_source, SwizzleSource y_sou
493 std::array swizzle{x_source, y_source, z_source, w_source}; 494 std::array swizzle{x_source, y_source, z_source, w_source};
494 495
495 switch (const PixelFormat format = GetSurfaceParams().pixel_format) { 496 switch (const PixelFormat format = GetSurfaceParams().pixel_format) {
496 case PixelFormat::Z24S8: 497 case PixelFormat::D24_UNORM_S8_UINT:
497 case PixelFormat::Z32FS8: 498 case PixelFormat::D32_FLOAT_S8_UINT:
498 case PixelFormat::S8Z24: 499 case PixelFormat::S8_UINT_D24_UNORM:
499 UNIMPLEMENTED_IF(x_source != SwizzleSource::R && x_source != SwizzleSource::G); 500 UNIMPLEMENTED_IF(x_source != SwizzleSource::R && x_source != SwizzleSource::G);
500 glTextureParameteri(view.handle, GL_DEPTH_STENCIL_TEXTURE_MODE, 501 glTextureParameteri(view.handle, GL_DEPTH_STENCIL_TEXTURE_MODE,
501 GetComponent(format, x_source == SwizzleSource::R)); 502 GetComponent(format, x_source == SwizzleSource::R));
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp
index e66cdc083..52e9e8250 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.cpp
+++ b/src/video_core/renderer_opengl/renderer_opengl.cpp
@@ -535,12 +535,12 @@ void RendererOpenGL::ConfigureFramebufferTexture(TextureInfo& texture,
535 535
536 GLint internal_format; 536 GLint internal_format;
537 switch (framebuffer.pixel_format) { 537 switch (framebuffer.pixel_format) {
538 case Tegra::FramebufferConfig::PixelFormat::ABGR8: 538 case Tegra::FramebufferConfig::PixelFormat::A8B8G8R8_UNORM:
539 internal_format = GL_RGBA8; 539 internal_format = GL_RGBA8;
540 texture.gl_format = GL_RGBA; 540 texture.gl_format = GL_RGBA;
541 texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV; 541 texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
542 break; 542 break;
543 case Tegra::FramebufferConfig::PixelFormat::RGB565: 543 case Tegra::FramebufferConfig::PixelFormat::RGB565_UNORM:
544 internal_format = GL_RGB565; 544 internal_format = GL_RGB565;
545 texture.gl_format = GL_RGB; 545 texture.gl_format = GL_RGB;
546 texture.gl_type = GL_UNSIGNED_SHORT_5_6_5; 546 texture.gl_type = GL_UNSIGNED_SHORT_5_6_5;
diff --git a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp
index 57c3822c2..f8c77f4fa 100644
--- a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp
+++ b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp
@@ -117,101 +117,101 @@ struct FormatTuple {
117 VkFormat format; ///< Vulkan format 117 VkFormat format; ///< Vulkan format
118 int usage = 0; ///< Describes image format usage 118 int usage = 0; ///< Describes image format usage
119} constexpr tex_format_tuples[] = { 119} constexpr tex_format_tuples[] = {
120 {VK_FORMAT_A8B8G8R8_UNORM_PACK32, Attachable | Storage}, // ABGR8U 120 {VK_FORMAT_A8B8G8R8_UNORM_PACK32, Attachable | Storage}, // A8B8G8R8_UNORM
121 {VK_FORMAT_A8B8G8R8_SNORM_PACK32, Attachable | Storage}, // ABGR8S 121 {VK_FORMAT_A8B8G8R8_SNORM_PACK32, Attachable | Storage}, // A8B8G8R8_SNORM
122 {VK_FORMAT_A8B8G8R8_SINT_PACK32, Attachable | Storage}, // ABGR8I 122 {VK_FORMAT_A8B8G8R8_SINT_PACK32, Attachable | Storage}, // A8B8G8R8_SINT
123 {VK_FORMAT_A8B8G8R8_UINT_PACK32, Attachable | Storage}, // ABGR8UI 123 {VK_FORMAT_A8B8G8R8_UINT_PACK32, Attachable | Storage}, // A8B8G8R8_UINT
124 {VK_FORMAT_R5G6B5_UNORM_PACK16, Attachable}, // B5G6R5U 124 {VK_FORMAT_R5G6B5_UNORM_PACK16, Attachable}, // R5G6B5_UNORM
125 {VK_FORMAT_B5G6R5_UNORM_PACK16, Attachable}, // R5G6B5U 125 {VK_FORMAT_B5G6R5_UNORM_PACK16, Attachable}, // B5G6R5_UNORM
126 {VK_FORMAT_A1R5G5B5_UNORM_PACK16, Attachable}, // B5G5R5A1U 126 {VK_FORMAT_A1R5G5B5_UNORM_PACK16, Attachable}, // A1R5G5B5_UNORM
127 {VK_FORMAT_A2B10G10R10_UNORM_PACK32, Attachable | Storage}, // A2B10G10R10U 127 {VK_FORMAT_A2B10G10R10_UNORM_PACK32, Attachable | Storage}, // A2B10G10R10_UNORM
128 {VK_FORMAT_A2B10G10R10_UINT_PACK32, Attachable | Storage}, // A2B10G10R10UI 128 {VK_FORMAT_A2B10G10R10_UINT_PACK32, Attachable | Storage}, // A2B10G10R10_UINT
129 {VK_FORMAT_A1R5G5B5_UNORM_PACK16, Attachable}, // A1B5G5R5U (flipped with swizzle) 129 {VK_FORMAT_A1R5G5B5_UNORM_PACK16, Attachable}, // A1B5G5R5_UNORM (flipped with swizzle)
130 {VK_FORMAT_R8_UNORM, Attachable | Storage}, // R8U 130 {VK_FORMAT_R8_UNORM, Attachable | Storage}, // R8_UNORM
131 {VK_FORMAT_R8_SNORM, Attachable | Storage}, // R8S 131 {VK_FORMAT_R8_SNORM, Attachable | Storage}, // R8_SNORM
132 {VK_FORMAT_R8_SINT, Attachable | Storage}, // R8I 132 {VK_FORMAT_R8_SINT, Attachable | Storage}, // R8_SINT
133 {VK_FORMAT_R8_UINT, Attachable | Storage}, // R8UI 133 {VK_FORMAT_R8_UINT, Attachable | Storage}, // R8_UINT
134 {VK_FORMAT_R16G16B16A16_SFLOAT, Attachable | Storage}, // RGBA16F 134 {VK_FORMAT_R16G16B16A16_SFLOAT, Attachable | Storage}, // R16G16B16A16_FLOAT
135 {VK_FORMAT_R16G16B16A16_UNORM, Attachable | Storage}, // RGBA16U 135 {VK_FORMAT_R16G16B16A16_UNORM, Attachable | Storage}, // R16G16B16A16_UNORM
136 {VK_FORMAT_R16G16B16A16_SNORM, Attachable | Storage}, // RGBA16S 136 {VK_FORMAT_R16G16B16A16_SNORM, Attachable | Storage}, // R16G16B16A16_SNORM
137 {VK_FORMAT_R16G16B16A16_SINT, Attachable | Storage}, // RGBA16I 137 {VK_FORMAT_R16G16B16A16_SINT, Attachable | Storage}, // R16G16B16A16_SINT
138 {VK_FORMAT_R16G16B16A16_UINT, Attachable | Storage}, // RGBA16UI 138 {VK_FORMAT_R16G16B16A16_UINT, Attachable | Storage}, // R16G16B16A16_UINT
139 {VK_FORMAT_B10G11R11_UFLOAT_PACK32, Attachable | Storage}, // R11FG11FB10F 139 {VK_FORMAT_B10G11R11_UFLOAT_PACK32, Attachable | Storage}, // B10G11R11_FLOAT
140 {VK_FORMAT_R32G32B32A32_UINT, Attachable | Storage}, // RGBA32UI 140 {VK_FORMAT_R32G32B32A32_UINT, Attachable | Storage}, // R32G32B32A32_UINT
141 {VK_FORMAT_BC1_RGBA_UNORM_BLOCK}, // DXT1 141 {VK_FORMAT_BC1_RGBA_UNORM_BLOCK}, // BC1_RGBA_UNORM
142 {VK_FORMAT_BC2_UNORM_BLOCK}, // DXT23 142 {VK_FORMAT_BC2_UNORM_BLOCK}, // BC2_UNORM
143 {VK_FORMAT_BC3_UNORM_BLOCK}, // DXT45 143 {VK_FORMAT_BC3_UNORM_BLOCK}, // BC3_UNORM
144 {VK_FORMAT_BC4_UNORM_BLOCK}, // DXN1UNORM 144 {VK_FORMAT_BC4_UNORM_BLOCK}, // BC4_UNORM
145 {VK_FORMAT_BC4_SNORM_BLOCK}, // DXN1SNORM 145 {VK_FORMAT_BC4_SNORM_BLOCK}, // BC4_SNORM
146 {VK_FORMAT_BC5_UNORM_BLOCK}, // DXN2UNORM 146 {VK_FORMAT_BC5_UNORM_BLOCK}, // BC5_UNORM
147 {VK_FORMAT_BC5_SNORM_BLOCK}, // DXN2SNORM 147 {VK_FORMAT_BC5_SNORM_BLOCK}, // BC5_SNORM
148 {VK_FORMAT_BC7_UNORM_BLOCK}, // BC7U 148 {VK_FORMAT_BC7_UNORM_BLOCK}, // BC7_UNORM
149 {VK_FORMAT_BC6H_UFLOAT_BLOCK}, // BC6H_UF16 149 {VK_FORMAT_BC6H_UFLOAT_BLOCK}, // BC6H_UFLOAT
150 {VK_FORMAT_BC6H_SFLOAT_BLOCK}, // BC6H_SF16 150 {VK_FORMAT_BC6H_SFLOAT_BLOCK}, // BC6H_SFLOAT
151 {VK_FORMAT_ASTC_4x4_UNORM_BLOCK}, // ASTC_2D_4X4 151 {VK_FORMAT_ASTC_4x4_UNORM_BLOCK}, // ASTC_2D_4X4_UNORM
152 {VK_FORMAT_B8G8R8A8_UNORM, Attachable}, // BGRA8 152 {VK_FORMAT_B8G8R8A8_UNORM, Attachable}, // B8G8R8A8_UNORM
153 {VK_FORMAT_R32G32B32A32_SFLOAT, Attachable | Storage}, // RGBA32F 153 {VK_FORMAT_R32G32B32A32_SFLOAT, Attachable | Storage}, // R32G32B32A32_FLOAT
154 {VK_FORMAT_R32G32B32A32_SINT, Attachable | Storage}, // RGBA32I 154 {VK_FORMAT_R32G32B32A32_SINT, Attachable | Storage}, // R32G32B32A32_SINT
155 {VK_FORMAT_R32G32_SFLOAT, Attachable | Storage}, // RG32F 155 {VK_FORMAT_R32G32_SFLOAT, Attachable | Storage}, // R32G32_FLOAT
156 {VK_FORMAT_R32G32_SINT, Attachable | Storage}, // RG32I 156 {VK_FORMAT_R32G32_SINT, Attachable | Storage}, // R32G32_SINT
157 {VK_FORMAT_R32_SFLOAT, Attachable | Storage}, // R32F 157 {VK_FORMAT_R32_SFLOAT, Attachable | Storage}, // R32_FLOAT
158 {VK_FORMAT_R16_SFLOAT, Attachable | Storage}, // R16F 158 {VK_FORMAT_R16_SFLOAT, Attachable | Storage}, // R16_FLOAT
159 {VK_FORMAT_R16_UNORM, Attachable | Storage}, // R16U 159 {VK_FORMAT_R16_UNORM, Attachable | Storage}, // R16_UNORM
160 {VK_FORMAT_UNDEFINED}, // R16S 160 {VK_FORMAT_UNDEFINED}, // R16_SNORM
161 {VK_FORMAT_R16_UINT, Attachable | Storage}, // R16UI 161 {VK_FORMAT_R16_UINT, Attachable | Storage}, // R16_UINT
162 {VK_FORMAT_UNDEFINED}, // R16I 162 {VK_FORMAT_UNDEFINED}, // R16_SINT
163 {VK_FORMAT_R16G16_UNORM, Attachable | Storage}, // RG16 163 {VK_FORMAT_R16G16_UNORM, Attachable | Storage}, // R16G16_UNORM
164 {VK_FORMAT_R16G16_SFLOAT, Attachable | Storage}, // RG16F 164 {VK_FORMAT_R16G16_SFLOAT, Attachable | Storage}, // R16G16_FLOAT
165 {VK_FORMAT_UNDEFINED}, // RG16UI 165 {VK_FORMAT_UNDEFINED}, // R16G16_UINT
166 {VK_FORMAT_UNDEFINED}, // RG16I 166 {VK_FORMAT_UNDEFINED}, // R16G16_SINT
167 {VK_FORMAT_R16G16_SNORM, Attachable | Storage}, // RG16S 167 {VK_FORMAT_R16G16_SNORM, Attachable | Storage}, // R16G16_SNORM
168 {VK_FORMAT_UNDEFINED}, // RGB32F 168 {VK_FORMAT_UNDEFINED}, // R32G32B32_FLOAT
169 {VK_FORMAT_R8G8B8A8_SRGB, Attachable}, // RGBA8_SRGB 169 {VK_FORMAT_R8G8B8A8_SRGB, Attachable}, // A8B8G8R8_SRGB
170 {VK_FORMAT_R8G8_UNORM, Attachable | Storage}, // RG8U 170 {VK_FORMAT_R8G8_UNORM, Attachable | Storage}, // R8G8_UNORM
171 {VK_FORMAT_R8G8_SNORM, Attachable | Storage}, // RG8S 171 {VK_FORMAT_R8G8_SNORM, Attachable | Storage}, // R8G8_SNORM
172 {VK_FORMAT_R8G8_SINT, Attachable | Storage}, // RG8I 172 {VK_FORMAT_R8G8_SINT, Attachable | Storage}, // R8G8_SINT
173 {VK_FORMAT_R8G8_UINT, Attachable | Storage}, // RG8UI 173 {VK_FORMAT_R8G8_UINT, Attachable | Storage}, // R8G8_UINT
174 {VK_FORMAT_R32G32_UINT, Attachable | Storage}, // RG32UI 174 {VK_FORMAT_R32G32_UINT, Attachable | Storage}, // R32G32_UINT
175 {VK_FORMAT_UNDEFINED}, // RGBX16F 175 {VK_FORMAT_UNDEFINED}, // R16G16B16X16_FLOAT
176 {VK_FORMAT_R32_UINT, Attachable | Storage}, // R32UI 176 {VK_FORMAT_R32_UINT, Attachable | Storage}, // R32_UINT
177 {VK_FORMAT_R32_SINT, Attachable | Storage}, // R32I 177 {VK_FORMAT_R32_SINT, Attachable | Storage}, // R32_SINT
178 {VK_FORMAT_ASTC_8x8_UNORM_BLOCK}, // ASTC_2D_8X8 178 {VK_FORMAT_ASTC_8x8_UNORM_BLOCK}, // ASTC_2D_8X8_UNORM
179 {VK_FORMAT_UNDEFINED}, // ASTC_2D_8X5 179 {VK_FORMAT_UNDEFINED}, // ASTC_2D_8X5_UNORM
180 {VK_FORMAT_UNDEFINED}, // ASTC_2D_5X4 180 {VK_FORMAT_UNDEFINED}, // ASTC_2D_5X4_UNORM
181 {VK_FORMAT_B8G8R8A8_SRGB, Attachable}, // BGRA8_SRGB 181 {VK_FORMAT_B8G8R8A8_SRGB, Attachable}, // B8G8R8A8_SRGB
182 {VK_FORMAT_BC1_RGBA_SRGB_BLOCK}, // DXT1_SRGB 182 {VK_FORMAT_BC1_RGBA_SRGB_BLOCK}, // BC1_RGBA_SRGB
183 {VK_FORMAT_BC2_SRGB_BLOCK}, // DXT23_SRGB 183 {VK_FORMAT_BC2_SRGB_BLOCK}, // BC2_SRGB
184 {VK_FORMAT_BC3_SRGB_BLOCK}, // DXT45_SRGB 184 {VK_FORMAT_BC3_SRGB_BLOCK}, // BC3_SRGB
185 {VK_FORMAT_BC7_SRGB_BLOCK}, // BC7U_SRGB 185 {VK_FORMAT_BC7_SRGB_BLOCK}, // BC7_SRGB
186 {VK_FORMAT_R4G4B4A4_UNORM_PACK16, Attachable}, // R4G4B4A4U 186 {VK_FORMAT_R4G4B4A4_UNORM_PACK16, Attachable}, // A4B4G4R4_UNORM
187 {VK_FORMAT_ASTC_4x4_SRGB_BLOCK}, // ASTC_2D_4X4_SRGB 187 {VK_FORMAT_ASTC_4x4_SRGB_BLOCK}, // ASTC_2D_4X4_SRGB
188 {VK_FORMAT_ASTC_8x8_SRGB_BLOCK}, // ASTC_2D_8X8_SRGB 188 {VK_FORMAT_ASTC_8x8_SRGB_BLOCK}, // ASTC_2D_8X8_SRGB
189 {VK_FORMAT_ASTC_8x5_SRGB_BLOCK}, // ASTC_2D_8X5_SRGB 189 {VK_FORMAT_ASTC_8x5_SRGB_BLOCK}, // ASTC_2D_8X5_SRGB
190 {VK_FORMAT_ASTC_5x4_SRGB_BLOCK}, // ASTC_2D_5X4_SRGB 190 {VK_FORMAT_ASTC_5x4_SRGB_BLOCK}, // ASTC_2D_5X4_SRGB
191 {VK_FORMAT_ASTC_5x5_UNORM_BLOCK}, // ASTC_2D_5X5 191 {VK_FORMAT_ASTC_5x5_UNORM_BLOCK}, // ASTC_2D_5X5_UNORM
192 {VK_FORMAT_ASTC_5x5_SRGB_BLOCK}, // ASTC_2D_5X5_SRGB 192 {VK_FORMAT_ASTC_5x5_SRGB_BLOCK}, // ASTC_2D_5X5_SRGB
193 {VK_FORMAT_ASTC_10x8_UNORM_BLOCK}, // ASTC_2D_10X8 193 {VK_FORMAT_ASTC_10x8_UNORM_BLOCK}, // ASTC_2D_10X8_UNORM
194 {VK_FORMAT_ASTC_10x8_SRGB_BLOCK}, // ASTC_2D_10X8_SRGB 194 {VK_FORMAT_ASTC_10x8_SRGB_BLOCK}, // ASTC_2D_10X8_SRGB
195 {VK_FORMAT_ASTC_6x6_UNORM_BLOCK}, // ASTC_2D_6X6 195 {VK_FORMAT_ASTC_6x6_UNORM_BLOCK}, // ASTC_2D_6X6_UNORM
196 {VK_FORMAT_ASTC_6x6_SRGB_BLOCK}, // ASTC_2D_6X6_SRGB 196 {VK_FORMAT_ASTC_6x6_SRGB_BLOCK}, // ASTC_2D_6X6_SRGB
197 {VK_FORMAT_ASTC_10x10_UNORM_BLOCK}, // ASTC_2D_10X10 197 {VK_FORMAT_ASTC_10x10_UNORM_BLOCK}, // ASTC_2D_10X10_UNORM
198 {VK_FORMAT_ASTC_10x10_SRGB_BLOCK}, // ASTC_2D_10X10_SRGB 198 {VK_FORMAT_ASTC_10x10_SRGB_BLOCK}, // ASTC_2D_10X10_SRGB
199 {VK_FORMAT_ASTC_12x12_UNORM_BLOCK}, // ASTC_2D_12X12 199 {VK_FORMAT_ASTC_12x12_UNORM_BLOCK}, // ASTC_2D_12X12_UNORM
200 {VK_FORMAT_ASTC_12x12_SRGB_BLOCK}, // ASTC_2D_12X12_SRGB 200 {VK_FORMAT_ASTC_12x12_SRGB_BLOCK}, // ASTC_2D_12X12_SRGB
201 {VK_FORMAT_ASTC_8x6_UNORM_BLOCK}, // ASTC_2D_8X6 201 {VK_FORMAT_ASTC_8x6_UNORM_BLOCK}, // ASTC_2D_8X6_UNORM
202 {VK_FORMAT_ASTC_8x6_SRGB_BLOCK}, // ASTC_2D_8X6_SRGB 202 {VK_FORMAT_ASTC_8x6_SRGB_BLOCK}, // ASTC_2D_8X6_SRGB
203 {VK_FORMAT_ASTC_6x5_UNORM_BLOCK}, // ASTC_2D_6X5 203 {VK_FORMAT_ASTC_6x5_UNORM_BLOCK}, // ASTC_2D_6X5_UNORM
204 {VK_FORMAT_ASTC_6x5_SRGB_BLOCK}, // ASTC_2D_6X5_SRGB 204 {VK_FORMAT_ASTC_6x5_SRGB_BLOCK}, // ASTC_2D_6X5_SRGB
205 {VK_FORMAT_E5B9G9R9_UFLOAT_PACK32}, // E5B9G9R9F 205 {VK_FORMAT_E5B9G9R9_UFLOAT_PACK32}, // E5B9G9R9_FLOAT
206 206
207 // Depth formats 207 // Depth formats
208 {VK_FORMAT_D32_SFLOAT, Attachable}, // Z32F 208 {VK_FORMAT_D32_SFLOAT, Attachable}, // D32_FLOAT
209 {VK_FORMAT_D16_UNORM, Attachable}, // Z16 209 {VK_FORMAT_D16_UNORM, Attachable}, // D16_UNORM
210 210
211 // DepthStencil formats 211 // DepthStencil formats
212 {VK_FORMAT_D24_UNORM_S8_UINT, Attachable}, // Z24S8 212 {VK_FORMAT_D24_UNORM_S8_UINT, Attachable}, // D24_UNORM_S8_UINT
213 {VK_FORMAT_D24_UNORM_S8_UINT, Attachable}, // S8Z24 (emulated) 213 {VK_FORMAT_D24_UNORM_S8_UINT, Attachable}, // S8_UINT_D24_UNORM (emulated)
214 {VK_FORMAT_D32_SFLOAT_S8_UINT, Attachable}, // Z32FS8 214 {VK_FORMAT_D32_SFLOAT_S8_UINT, Attachable}, // D32_FLOAT_S8_UINT
215}; 215};
216static_assert(std::size(tex_format_tuples) == VideoCore::Surface::MaxPixelFormat); 216static_assert(std::size(tex_format_tuples) == VideoCore::Surface::MaxPixelFormat);
217 217
@@ -232,7 +232,7 @@ FormatInfo SurfaceFormat(const VKDevice& device, FormatType format_type, PixelFo
232 return {VK_FORMAT_A8B8G8R8_UNORM_PACK32, true, true}; 232 return {VK_FORMAT_A8B8G8R8_UNORM_PACK32, true, true};
233 } 233 }
234 234
235 // Use ABGR8 on hardware that doesn't support ASTC natively 235 // Use A8B8G8R8_UNORM on hardware that doesn't support ASTC natively
236 if (!device.IsOptimalAstcSupported() && VideoCore::Surface::IsPixelFormatASTC(pixel_format)) { 236 if (!device.IsOptimalAstcSupported() && VideoCore::Surface::IsPixelFormatASTC(pixel_format)) {
237 tuple.format = VideoCore::Surface::IsPixelFormatSRGB(pixel_format) 237 tuple.format = VideoCore::Surface::IsPixelFormatSRGB(pixel_format)
238 ? VK_FORMAT_A8B8G8R8_SRGB_PACK32 238 ? VK_FORMAT_A8B8G8R8_SRGB_PACK32
diff --git a/src/video_core/renderer_vulkan/vk_blit_screen.cpp b/src/video_core/renderer_vulkan/vk_blit_screen.cpp
index fbd406f2b..be175a829 100644
--- a/src/video_core/renderer_vulkan/vk_blit_screen.cpp
+++ b/src/video_core/renderer_vulkan/vk_blit_screen.cpp
@@ -183,9 +183,9 @@ std::size_t GetSizeInBytes(const Tegra::FramebufferConfig& framebuffer) {
183 183
184VkFormat GetFormat(const Tegra::FramebufferConfig& framebuffer) { 184VkFormat GetFormat(const Tegra::FramebufferConfig& framebuffer) {
185 switch (framebuffer.pixel_format) { 185 switch (framebuffer.pixel_format) {
186 case Tegra::FramebufferConfig::PixelFormat::ABGR8: 186 case Tegra::FramebufferConfig::PixelFormat::A8B8G8R8_UNORM:
187 return VK_FORMAT_A8B8G8R8_UNORM_PACK32; 187 return VK_FORMAT_A8B8G8R8_UNORM_PACK32;
188 case Tegra::FramebufferConfig::PixelFormat::RGB565: 188 case Tegra::FramebufferConfig::PixelFormat::RGB565_UNORM:
189 return VK_FORMAT_R5G6B5_UNORM_PACK16; 189 return VK_FORMAT_R5G6B5_UNORM_PACK16;
190 default: 190 default:
191 UNIMPLEMENTED_MSG("Unknown framebuffer pixel format: {}", 191 UNIMPLEMENTED_MSG("Unknown framebuffer pixel format: {}",
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp
index 430031665..29c53a5fa 100644
--- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp
@@ -233,7 +233,7 @@ void CachedSurface::UploadTexture(const std::vector<u8>& staging_buffer) {
233void CachedSurface::DownloadTexture(std::vector<u8>& staging_buffer) { 233void CachedSurface::DownloadTexture(std::vector<u8>& staging_buffer) {
234 UNIMPLEMENTED_IF(params.IsBuffer()); 234 UNIMPLEMENTED_IF(params.IsBuffer());
235 235
236 if (params.pixel_format == VideoCore::Surface::PixelFormat::A1B5G5R5U) { 236 if (params.pixel_format == VideoCore::Surface::PixelFormat::A1B5G5R5_UNORM) {
237 LOG_WARNING(Render_Vulkan, "A1B5G5R5 flushing is stubbed"); 237 LOG_WARNING(Render_Vulkan, "A1B5G5R5 flushing is stubbed");
238 } 238 }
239 239
@@ -382,7 +382,7 @@ VkImageView CachedSurfaceView::GetImageView(SwizzleSource x_source, SwizzleSourc
382 382
383 std::array swizzle{MaxwellToVK::SwizzleSource(x_source), MaxwellToVK::SwizzleSource(y_source), 383 std::array swizzle{MaxwellToVK::SwizzleSource(x_source), MaxwellToVK::SwizzleSource(y_source),
384 MaxwellToVK::SwizzleSource(z_source), MaxwellToVK::SwizzleSource(w_source)}; 384 MaxwellToVK::SwizzleSource(z_source), MaxwellToVK::SwizzleSource(w_source)};
385 if (params.pixel_format == VideoCore::Surface::PixelFormat::A1B5G5R5U) { 385 if (params.pixel_format == VideoCore::Surface::PixelFormat::A1B5G5R5_UNORM) {
386 // A1B5G5R5 is implemented as A1R5G5B5, we have to change the swizzle here. 386 // A1B5G5R5 is implemented as A1R5G5B5, we have to change the swizzle here.
387 std::swap(swizzle[0], swizzle[2]); 387 std::swap(swizzle[0], swizzle[2]);
388 } 388 }
@@ -394,11 +394,11 @@ VkImageView CachedSurfaceView::GetImageView(SwizzleSource x_source, SwizzleSourc
394 UNIMPLEMENTED_IF(x_source != SwizzleSource::R && x_source != SwizzleSource::G); 394 UNIMPLEMENTED_IF(x_source != SwizzleSource::R && x_source != SwizzleSource::G);
395 const bool is_first = x_source == SwizzleSource::R; 395 const bool is_first = x_source == SwizzleSource::R;
396 switch (params.pixel_format) { 396 switch (params.pixel_format) {
397 case VideoCore::Surface::PixelFormat::Z24S8: 397 case VideoCore::Surface::PixelFormat::D24_UNORM_S8_UINT:
398 case VideoCore::Surface::PixelFormat::Z32FS8: 398 case VideoCore::Surface::PixelFormat::D32_FLOAT_S8_UINT:
399 aspect = is_first ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_STENCIL_BIT; 399 aspect = is_first ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_STENCIL_BIT;
400 break; 400 break;
401 case VideoCore::Surface::PixelFormat::S8Z24: 401 case VideoCore::Surface::PixelFormat::S8_UINT_D24_UNORM:
402 aspect = is_first ? VK_IMAGE_ASPECT_STENCIL_BIT : VK_IMAGE_ASPECT_DEPTH_BIT; 402 aspect = is_first ? VK_IMAGE_ASPECT_STENCIL_BIT : VK_IMAGE_ASPECT_DEPTH_BIT;
403 break; 403 break;
404 default: 404 default:
diff --git a/src/video_core/shader/decode/image.cpp b/src/video_core/shader/decode/image.cpp
index 07778dc3e..e75ca4fdb 100644
--- a/src/video_core/shader/decode/image.cpp
+++ b/src/video_core/shader/decode/image.cpp
@@ -31,11 +31,11 @@ ComponentType GetComponentType(Tegra::Engines::SamplerDescriptor descriptor,
31 std::size_t component) { 31 std::size_t component) {
32 const TextureFormat format{descriptor.format}; 32 const TextureFormat format{descriptor.format};
33 switch (format) { 33 switch (format) {
34 case TextureFormat::R16_G16_B16_A16: 34 case TextureFormat::R16G16B16A16:
35 case TextureFormat::R32_G32_B32_A32: 35 case TextureFormat::R32G32B32A32:
36 case TextureFormat::R32_G32_B32: 36 case TextureFormat::R32G32B32:
37 case TextureFormat::R32_G32: 37 case TextureFormat::R32G32:
38 case TextureFormat::R16_G16: 38 case TextureFormat::R16G16:
39 case TextureFormat::R32: 39 case TextureFormat::R32:
40 case TextureFormat::R16: 40 case TextureFormat::R16:
41 case TextureFormat::R8: 41 case TextureFormat::R8:
@@ -97,7 +97,7 @@ ComponentType GetComponentType(Tegra::Engines::SamplerDescriptor descriptor,
97 break; 97 break;
98 case TextureFormat::B5G6R5: 98 case TextureFormat::B5G6R5:
99 case TextureFormat::B6G5R5: 99 case TextureFormat::B6G5R5:
100 case TextureFormat::BF10GF11RF11: 100 case TextureFormat::B10G11R11:
101 if (component == 0) { 101 if (component == 0) {
102 return descriptor.b_type; 102 return descriptor.b_type;
103 } 103 }
@@ -108,9 +108,9 @@ ComponentType GetComponentType(Tegra::Engines::SamplerDescriptor descriptor,
108 return descriptor.r_type; 108 return descriptor.r_type;
109 } 109 }
110 break; 110 break;
111 case TextureFormat::G8R24: 111 case TextureFormat::R24G8:
112 case TextureFormat::G24R8: 112 case TextureFormat::R8G24:
113 case TextureFormat::G8R8: 113 case TextureFormat::R8G8:
114 case TextureFormat::G4R4: 114 case TextureFormat::G4R4:
115 if (component == 0) { 115 if (component == 0) {
116 return descriptor.g_type; 116 return descriptor.g_type;
@@ -137,15 +137,15 @@ bool IsComponentEnabled(std::size_t component_mask, std::size_t component) {
137 137
138u32 GetComponentSize(TextureFormat format, std::size_t component) { 138u32 GetComponentSize(TextureFormat format, std::size_t component) {
139 switch (format) { 139 switch (format) {
140 case TextureFormat::R32_G32_B32_A32: 140 case TextureFormat::R32G32B32A32:
141 return 32; 141 return 32;
142 case TextureFormat::R16_G16_B16_A16: 142 case TextureFormat::R16G16B16A16:
143 return 16; 143 return 16;
144 case TextureFormat::R32_G32_B32: 144 case TextureFormat::R32G32B32:
145 return component <= 2 ? 32 : 0; 145 return component <= 2 ? 32 : 0;
146 case TextureFormat::R32_G32: 146 case TextureFormat::R32G32:
147 return component <= 1 ? 32 : 0; 147 return component <= 1 ? 32 : 0;
148 case TextureFormat::R16_G16: 148 case TextureFormat::R16G16:
149 return component <= 1 ? 16 : 0; 149 return component <= 1 ? 16 : 0;
150 case TextureFormat::R32: 150 case TextureFormat::R32:
151 return component == 0 ? 32 : 0; 151 return component == 0 ? 32 : 0;
@@ -192,7 +192,7 @@ u32 GetComponentSize(TextureFormat format, std::size_t component) {
192 return 6; 192 return 6;
193 } 193 }
194 return 0; 194 return 0;
195 case TextureFormat::BF10GF11RF11: 195 case TextureFormat::B10G11R11:
196 if (component == 1 || component == 2) { 196 if (component == 1 || component == 2) {
197 return 11; 197 return 11;
198 } 198 }
@@ -200,7 +200,7 @@ u32 GetComponentSize(TextureFormat format, std::size_t component) {
200 return 10; 200 return 10;
201 } 201 }
202 return 0; 202 return 0;
203 case TextureFormat::G8R24: 203 case TextureFormat::R24G8:
204 if (component == 0) { 204 if (component == 0) {
205 return 8; 205 return 8;
206 } 206 }
@@ -208,7 +208,7 @@ u32 GetComponentSize(TextureFormat format, std::size_t component) {
208 return 24; 208 return 24;
209 } 209 }
210 return 0; 210 return 0;
211 case TextureFormat::G24R8: 211 case TextureFormat::R8G24:
212 if (component == 0) { 212 if (component == 0) {
213 return 8; 213 return 8;
214 } 214 }
@@ -216,7 +216,7 @@ u32 GetComponentSize(TextureFormat format, std::size_t component) {
216 return 24; 216 return 24;
217 } 217 }
218 return 0; 218 return 0;
219 case TextureFormat::G8R8: 219 case TextureFormat::R8G8:
220 return (component == 0 || component == 1) ? 8 : 0; 220 return (component == 0 || component == 1) ? 8 : 0;
221 case TextureFormat::G4R4: 221 case TextureFormat::G4R4:
222 return (component == 0 || component == 1) ? 4 : 0; 222 return (component == 0 || component == 1) ? 4 : 0;
@@ -231,25 +231,25 @@ std::size_t GetImageComponentMask(TextureFormat format) {
231 constexpr u8 B = 0b0100; 231 constexpr u8 B = 0b0100;
232 constexpr u8 A = 0b1000; 232 constexpr u8 A = 0b1000;
233 switch (format) { 233 switch (format) {
234 case TextureFormat::R32_G32_B32_A32: 234 case TextureFormat::R32G32B32A32:
235 case TextureFormat::R16_G16_B16_A16: 235 case TextureFormat::R16G16B16A16:
236 case TextureFormat::A8R8G8B8: 236 case TextureFormat::A8R8G8B8:
237 case TextureFormat::A2B10G10R10: 237 case TextureFormat::A2B10G10R10:
238 case TextureFormat::A4B4G4R4: 238 case TextureFormat::A4B4G4R4:
239 case TextureFormat::A5B5G5R1: 239 case TextureFormat::A5B5G5R1:
240 case TextureFormat::A1B5G5R5: 240 case TextureFormat::A1B5G5R5:
241 return std::size_t{R | G | B | A}; 241 return std::size_t{R | G | B | A};
242 case TextureFormat::R32_G32_B32: 242 case TextureFormat::R32G32B32:
243 case TextureFormat::R32_B24G8: 243 case TextureFormat::R32_B24G8:
244 case TextureFormat::B5G6R5: 244 case TextureFormat::B5G6R5:
245 case TextureFormat::B6G5R5: 245 case TextureFormat::B6G5R5:
246 case TextureFormat::BF10GF11RF11: 246 case TextureFormat::B10G11R11:
247 return std::size_t{R | G | B}; 247 return std::size_t{R | G | B};
248 case TextureFormat::R32_G32: 248 case TextureFormat::R32G32:
249 case TextureFormat::R16_G16: 249 case TextureFormat::R16G16:
250 case TextureFormat::G8R24: 250 case TextureFormat::R24G8:
251 case TextureFormat::G24R8: 251 case TextureFormat::R8G24:
252 case TextureFormat::G8R8: 252 case TextureFormat::R8G8:
253 case TextureFormat::G4R4: 253 case TextureFormat::G4R4:
254 return std::size_t{R | G}; 254 return std::size_t{R | G};
255 case TextureFormat::R32: 255 case TextureFormat::R32:
diff --git a/src/video_core/surface.cpp b/src/video_core/surface.cpp
index 492ab6215..1688267bb 100644
--- a/src/video_core/surface.cpp
+++ b/src/video_core/surface.cpp
@@ -74,131 +74,131 @@ bool SurfaceTargetIsArray(SurfaceTarget target) {
74 74
75PixelFormat PixelFormatFromDepthFormat(Tegra::DepthFormat format) { 75PixelFormat PixelFormatFromDepthFormat(Tegra::DepthFormat format) {
76 switch (format) { 76 switch (format) {
77 case Tegra::DepthFormat::S8_Z24_UNORM: 77 case Tegra::DepthFormat::S8_UINT_Z24_UNORM:
78 return PixelFormat::S8Z24; 78 return PixelFormat::S8_UINT_D24_UNORM;
79 case Tegra::DepthFormat::Z24_S8_UNORM: 79 case Tegra::DepthFormat::D24S8_UNORM:
80 return PixelFormat::Z24S8; 80 return PixelFormat::D24_UNORM_S8_UINT;
81 case Tegra::DepthFormat::Z32_FLOAT: 81 case Tegra::DepthFormat::D32_FLOAT:
82 return PixelFormat::Z32F; 82 return PixelFormat::D32_FLOAT;
83 case Tegra::DepthFormat::Z16_UNORM: 83 case Tegra::DepthFormat::D16_UNORM:
84 return PixelFormat::Z16; 84 return PixelFormat::D16_UNORM;
85 case Tegra::DepthFormat::Z32_S8_X24_FLOAT: 85 case Tegra::DepthFormat::D32_FLOAT_S8X24_UINT:
86 return PixelFormat::Z32FS8; 86 return PixelFormat::D32_FLOAT_S8_UINT;
87 default: 87 default:
88 UNIMPLEMENTED_MSG("Unimplemented format={}", static_cast<u32>(format)); 88 UNIMPLEMENTED_MSG("Unimplemented format={}", static_cast<u32>(format));
89 return PixelFormat::S8Z24; 89 return PixelFormat::S8_UINT_D24_UNORM;
90 } 90 }
91} 91}
92 92
93PixelFormat PixelFormatFromRenderTargetFormat(Tegra::RenderTargetFormat format) { 93PixelFormat PixelFormatFromRenderTargetFormat(Tegra::RenderTargetFormat format) {
94 switch (format) { 94 switch (format) {
95 case Tegra::RenderTargetFormat::RGBA32_FLOAT: 95 case Tegra::RenderTargetFormat::R32B32G32A32_FLOAT:
96 return PixelFormat::RGBA32F; 96 return PixelFormat::R32G32B32A32_FLOAT;
97 case Tegra::RenderTargetFormat::RGBA32_SINT: 97 case Tegra::RenderTargetFormat::R32G32B32A32_SINT:
98 return PixelFormat::RGBA32I; 98 return PixelFormat::R32G32B32A32_SINT;
99 case Tegra::RenderTargetFormat::RGBA32_UINT: 99 case Tegra::RenderTargetFormat::R32G32B32A32_UINT:
100 return PixelFormat::RGBA32UI; 100 return PixelFormat::R32G32B32A32_UINT;
101 case Tegra::RenderTargetFormat::RGBA16_UNORM: 101 case Tegra::RenderTargetFormat::R16G16B16A16_UNORM:
102 return PixelFormat::RGBA16U; 102 return PixelFormat::R16G16B16A16_UNORM;
103 case Tegra::RenderTargetFormat::RGBA16_SNORM: 103 case Tegra::RenderTargetFormat::R16G16B16A16_SNORM:
104 return PixelFormat::RGBA16S; 104 return PixelFormat::R16G16B16A16_SNORM;
105 case Tegra::RenderTargetFormat::RGBA16_SINT: 105 case Tegra::RenderTargetFormat::R16G16B16A16_SINT:
106 return PixelFormat::RGBA16I; 106 return PixelFormat::R16G16B16A16_SINT;
107 case Tegra::RenderTargetFormat::RGBA16_UINT: 107 case Tegra::RenderTargetFormat::R16G16B16A16_UINT:
108 return PixelFormat::RGBA16UI; 108 return PixelFormat::R16G16B16A16_UINT;
109 case Tegra::RenderTargetFormat::RGBA16_FLOAT: 109 case Tegra::RenderTargetFormat::R16G16B16A16_FLOAT:
110 return PixelFormat::RGBA16F; 110 return PixelFormat::R16G16B16A16_FLOAT;
111 case Tegra::RenderTargetFormat::RG32_FLOAT: 111 case Tegra::RenderTargetFormat::R32G32_FLOAT:
112 return PixelFormat::RG32F; 112 return PixelFormat::R32G32_FLOAT;
113 case Tegra::RenderTargetFormat::RG32_SINT: 113 case Tegra::RenderTargetFormat::R32G32_SINT:
114 return PixelFormat::RG32I; 114 return PixelFormat::R32G32_SINT;
115 case Tegra::RenderTargetFormat::RG32_UINT: 115 case Tegra::RenderTargetFormat::R32G32_UINT:
116 return PixelFormat::RG32UI; 116 return PixelFormat::R32G32_UINT;
117 case Tegra::RenderTargetFormat::RGBX16_FLOAT: 117 case Tegra::RenderTargetFormat::R16G16B16X16_FLOAT:
118 return PixelFormat::RGBX16F; 118 return PixelFormat::R16G16B16X16_FLOAT;
119 case Tegra::RenderTargetFormat::BGRA8_UNORM: 119 case Tegra::RenderTargetFormat::B8G8R8A8_UNORM:
120 return PixelFormat::BGRA8; 120 return PixelFormat::B8G8R8A8_UNORM;
121 case Tegra::RenderTargetFormat::BGRA8_SRGB: 121 case Tegra::RenderTargetFormat::B8G8R8A8_SRGB:
122 return PixelFormat::BGRA8_SRGB; 122 return PixelFormat::B8G8R8A8_SRGB;
123 case Tegra::RenderTargetFormat::RGB10_A2_UNORM: 123 case Tegra::RenderTargetFormat::A2B10G10R10_UNORM:
124 return PixelFormat::A2B10G10R10U; 124 return PixelFormat::A2B10G10R10_UNORM;
125 case Tegra::RenderTargetFormat::RGB10_A2_UINT: 125 case Tegra::RenderTargetFormat::A2B10G10R10_UINT:
126 return PixelFormat::A2B10G10R10UI; 126 return PixelFormat::A2B10G10R10_UINT;
127 case Tegra::RenderTargetFormat::RGBA8_UNORM: 127 case Tegra::RenderTargetFormat::A8B8G8R8_UNORM:
128 return PixelFormat::ABGR8U; 128 return PixelFormat::A8B8G8R8_UNORM;
129 case Tegra::RenderTargetFormat::RGBA8_SRGB: 129 case Tegra::RenderTargetFormat::A8B8G8R8_SRGB:
130 return PixelFormat::RGBA8_SRGB; 130 return PixelFormat::A8B8G8R8_SRGB;
131 case Tegra::RenderTargetFormat::RGBA8_SNORM: 131 case Tegra::RenderTargetFormat::A8B8G8R8_SNORM:
132 return PixelFormat::ABGR8S; 132 return PixelFormat::A8B8G8R8_SNORM;
133 case Tegra::RenderTargetFormat::RGBA8_SINT: 133 case Tegra::RenderTargetFormat::A8B8G8R8_SINT:
134 return PixelFormat::ABGR8I; 134 return PixelFormat::A8B8G8R8_SINT;
135 case Tegra::RenderTargetFormat::RGBA8_UINT: 135 case Tegra::RenderTargetFormat::A8B8G8R8_UINT:
136 return PixelFormat::ABGR8UI; 136 return PixelFormat::A8B8G8R8_UINT;
137 case Tegra::RenderTargetFormat::RG16_UNORM: 137 case Tegra::RenderTargetFormat::R16G16_UNORM:
138 return PixelFormat::RG16; 138 return PixelFormat::R16G16_UNORM;
139 case Tegra::RenderTargetFormat::RG16_SNORM: 139 case Tegra::RenderTargetFormat::R16G16_SNORM:
140 return PixelFormat::RG16S; 140 return PixelFormat::R16G16_SNORM;
141 case Tegra::RenderTargetFormat::RG16_SINT: 141 case Tegra::RenderTargetFormat::R16G16_SINT:
142 return PixelFormat::RG16I; 142 return PixelFormat::R16G16_SINT;
143 case Tegra::RenderTargetFormat::RG16_UINT: 143 case Tegra::RenderTargetFormat::R16G16_UINT:
144 return PixelFormat::RG16UI; 144 return PixelFormat::R16G16_UINT;
145 case Tegra::RenderTargetFormat::RG16_FLOAT: 145 case Tegra::RenderTargetFormat::R16G16_FLOAT:
146 return PixelFormat::RG16F; 146 return PixelFormat::R16G16_FLOAT;
147 case Tegra::RenderTargetFormat::R11G11B10_FLOAT: 147 case Tegra::RenderTargetFormat::B10G11R11_FLOAT:
148 return PixelFormat::R11FG11FB10F; 148 return PixelFormat::B10G11R11_FLOAT;
149 case Tegra::RenderTargetFormat::R32_SINT: 149 case Tegra::RenderTargetFormat::R32_SINT:
150 return PixelFormat::R32I; 150 return PixelFormat::R32_SINT;
151 case Tegra::RenderTargetFormat::R32_UINT: 151 case Tegra::RenderTargetFormat::R32_UINT:
152 return PixelFormat::R32UI; 152 return PixelFormat::R32_UINT;
153 case Tegra::RenderTargetFormat::R32_FLOAT: 153 case Tegra::RenderTargetFormat::R32_FLOAT:
154 return PixelFormat::R32F; 154 return PixelFormat::R32_FLOAT;
155 case Tegra::RenderTargetFormat::B5G6R5_UNORM: 155 case Tegra::RenderTargetFormat::R5G6B5_UNORM:
156 return PixelFormat::B5G6R5U; 156 return PixelFormat::R5G6B5_UNORM;
157 case Tegra::RenderTargetFormat::BGR5A1_UNORM: 157 case Tegra::RenderTargetFormat::A1R5G5B5_UNORM:
158 return PixelFormat::B5G5R5A1U; 158 return PixelFormat::A1R5G5B5_UNORM;
159 case Tegra::RenderTargetFormat::RG8_UNORM: 159 case Tegra::RenderTargetFormat::R8G8_UNORM:
160 return PixelFormat::RG8U; 160 return PixelFormat::R8G8_UNORM;
161 case Tegra::RenderTargetFormat::RG8_SNORM: 161 case Tegra::RenderTargetFormat::R8G8_SNORM:
162 return PixelFormat::RG8S; 162 return PixelFormat::R8G8_SNORM;
163 case Tegra::RenderTargetFormat::RG8_SINT: 163 case Tegra::RenderTargetFormat::R8G8_SINT:
164 return PixelFormat::RG8I; 164 return PixelFormat::R8G8_SINT;
165 case Tegra::RenderTargetFormat::RG8_UINT: 165 case Tegra::RenderTargetFormat::R8G8_UINT:
166 return PixelFormat::RG8UI; 166 return PixelFormat::R8G8_UINT;
167 case Tegra::RenderTargetFormat::R16_UNORM: 167 case Tegra::RenderTargetFormat::R16_UNORM:
168 return PixelFormat::R16U; 168 return PixelFormat::R16_UNORM;
169 case Tegra::RenderTargetFormat::R16_SNORM: 169 case Tegra::RenderTargetFormat::R16_SNORM:
170 return PixelFormat::R16S; 170 return PixelFormat::R16_SNORM;
171 case Tegra::RenderTargetFormat::R16_SINT: 171 case Tegra::RenderTargetFormat::R16_SINT:
172 return PixelFormat::R16I; 172 return PixelFormat::R16_SINT;
173 case Tegra::RenderTargetFormat::R16_UINT: 173 case Tegra::RenderTargetFormat::R16_UINT:
174 return PixelFormat::R16UI; 174 return PixelFormat::R16_UINT;
175 case Tegra::RenderTargetFormat::R16_FLOAT: 175 case Tegra::RenderTargetFormat::R16_FLOAT:
176 return PixelFormat::R16F; 176 return PixelFormat::R16_FLOAT;
177 case Tegra::RenderTargetFormat::R8_UNORM: 177 case Tegra::RenderTargetFormat::R8_UNORM:
178 return PixelFormat::R8U; 178 return PixelFormat::R8_UNORM;
179 case Tegra::RenderTargetFormat::R8_SNORM: 179 case Tegra::RenderTargetFormat::R8_SNORM:
180 return PixelFormat::R8S; 180 return PixelFormat::R8_SNORM;
181 case Tegra::RenderTargetFormat::R8_SINT: 181 case Tegra::RenderTargetFormat::R8_SINT:
182 return PixelFormat::R8I; 182 return PixelFormat::R8_SINT;
183 case Tegra::RenderTargetFormat::R8_UINT: 183 case Tegra::RenderTargetFormat::R8_UINT:
184 return PixelFormat::R8UI; 184 return PixelFormat::R8_UINT;
185 default: 185 default:
186 UNIMPLEMENTED_MSG("Unimplemented format={}", static_cast<int>(format)); 186 UNIMPLEMENTED_MSG("Unimplemented format={}", static_cast<int>(format));
187 return PixelFormat::ABGR8U; 187 return PixelFormat::A8B8G8R8_UNORM;
188 } 188 }
189} 189}
190 190
191PixelFormat PixelFormatFromGPUPixelFormat(Tegra::FramebufferConfig::PixelFormat format) { 191PixelFormat PixelFormatFromGPUPixelFormat(Tegra::FramebufferConfig::PixelFormat format) {
192 switch (format) { 192 switch (format) {
193 case Tegra::FramebufferConfig::PixelFormat::ABGR8: 193 case Tegra::FramebufferConfig::PixelFormat::A8B8G8R8_UNORM:
194 return PixelFormat::ABGR8U; 194 return PixelFormat::A8B8G8R8_UNORM;
195 case Tegra::FramebufferConfig::PixelFormat::RGB565: 195 case Tegra::FramebufferConfig::PixelFormat::RGB565_UNORM:
196 return PixelFormat::B5G6R5U; 196 return PixelFormat::R5G6B5_UNORM;
197 case Tegra::FramebufferConfig::PixelFormat::BGRA8: 197 case Tegra::FramebufferConfig::PixelFormat::B8G8R8A8_UNORM:
198 return PixelFormat::BGRA8; 198 return PixelFormat::B8G8R8A8_UNORM;
199 default: 199 default:
200 UNIMPLEMENTED_MSG("Unimplemented format={}", static_cast<u32>(format)); 200 UNIMPLEMENTED_MSG("Unimplemented format={}", static_cast<u32>(format));
201 return PixelFormat::ABGR8U; 201 return PixelFormat::A8B8G8R8_UNORM;
202 } 202 }
203} 203}
204 204
@@ -226,27 +226,27 @@ SurfaceType GetFormatType(PixelFormat pixel_format) {
226 226
227bool IsPixelFormatASTC(PixelFormat format) { 227bool IsPixelFormatASTC(PixelFormat format) {
228 switch (format) { 228 switch (format) {
229 case PixelFormat::ASTC_2D_4X4: 229 case PixelFormat::ASTC_2D_4X4_UNORM:
230 case PixelFormat::ASTC_2D_5X4: 230 case PixelFormat::ASTC_2D_5X4_UNORM:
231 case PixelFormat::ASTC_2D_5X5: 231 case PixelFormat::ASTC_2D_5X5_UNORM:
232 case PixelFormat::ASTC_2D_8X8: 232 case PixelFormat::ASTC_2D_8X8_UNORM:
233 case PixelFormat::ASTC_2D_8X5: 233 case PixelFormat::ASTC_2D_8X5_UNORM:
234 case PixelFormat::ASTC_2D_4X4_SRGB: 234 case PixelFormat::ASTC_2D_4X4_SRGB:
235 case PixelFormat::ASTC_2D_5X4_SRGB: 235 case PixelFormat::ASTC_2D_5X4_SRGB:
236 case PixelFormat::ASTC_2D_5X5_SRGB: 236 case PixelFormat::ASTC_2D_5X5_SRGB:
237 case PixelFormat::ASTC_2D_8X8_SRGB: 237 case PixelFormat::ASTC_2D_8X8_SRGB:
238 case PixelFormat::ASTC_2D_8X5_SRGB: 238 case PixelFormat::ASTC_2D_8X5_SRGB:
239 case PixelFormat::ASTC_2D_10X8: 239 case PixelFormat::ASTC_2D_10X8_UNORM:
240 case PixelFormat::ASTC_2D_10X8_SRGB: 240 case PixelFormat::ASTC_2D_10X8_SRGB:
241 case PixelFormat::ASTC_2D_6X6: 241 case PixelFormat::ASTC_2D_6X6_UNORM:
242 case PixelFormat::ASTC_2D_6X6_SRGB: 242 case PixelFormat::ASTC_2D_6X6_SRGB:
243 case PixelFormat::ASTC_2D_10X10: 243 case PixelFormat::ASTC_2D_10X10_UNORM:
244 case PixelFormat::ASTC_2D_10X10_SRGB: 244 case PixelFormat::ASTC_2D_10X10_SRGB:
245 case PixelFormat::ASTC_2D_12X12: 245 case PixelFormat::ASTC_2D_12X12_UNORM:
246 case PixelFormat::ASTC_2D_12X12_SRGB: 246 case PixelFormat::ASTC_2D_12X12_SRGB:
247 case PixelFormat::ASTC_2D_8X6: 247 case PixelFormat::ASTC_2D_8X6_UNORM:
248 case PixelFormat::ASTC_2D_8X6_SRGB: 248 case PixelFormat::ASTC_2D_8X6_SRGB:
249 case PixelFormat::ASTC_2D_6X5: 249 case PixelFormat::ASTC_2D_6X5_UNORM:
250 case PixelFormat::ASTC_2D_6X5_SRGB: 250 case PixelFormat::ASTC_2D_6X5_SRGB:
251 return true; 251 return true;
252 default: 252 default:
@@ -256,12 +256,12 @@ bool IsPixelFormatASTC(PixelFormat format) {
256 256
257bool IsPixelFormatSRGB(PixelFormat format) { 257bool IsPixelFormatSRGB(PixelFormat format) {
258 switch (format) { 258 switch (format) {
259 case PixelFormat::RGBA8_SRGB: 259 case PixelFormat::A8B8G8R8_SRGB:
260 case PixelFormat::BGRA8_SRGB: 260 case PixelFormat::B8G8R8A8_SRGB:
261 case PixelFormat::DXT1_SRGB: 261 case PixelFormat::BC1_RGBA_SRGB:
262 case PixelFormat::DXT23_SRGB: 262 case PixelFormat::BC2_SRGB:
263 case PixelFormat::DXT45_SRGB: 263 case PixelFormat::BC3_SRGB:
264 case PixelFormat::BC7U_SRGB: 264 case PixelFormat::BC7_SRGB:
265 case PixelFormat::ASTC_2D_4X4_SRGB: 265 case PixelFormat::ASTC_2D_4X4_SRGB:
266 case PixelFormat::ASTC_2D_8X8_SRGB: 266 case PixelFormat::ASTC_2D_8X8_SRGB:
267 case PixelFormat::ASTC_2D_8X5_SRGB: 267 case PixelFormat::ASTC_2D_8X5_SRGB:
diff --git a/src/video_core/surface.h b/src/video_core/surface.h
index 826c5a3ad..cfd12fa61 100644
--- a/src/video_core/surface.h
+++ b/src/video_core/surface.h
@@ -15,105 +15,105 @@
15namespace VideoCore::Surface { 15namespace VideoCore::Surface {
16 16
17enum class PixelFormat { 17enum class PixelFormat {
18 ABGR8U, 18 A8B8G8R8_UNORM,
19 ABGR8S, 19 A8B8G8R8_SNORM,
20 ABGR8I, 20 A8B8G8R8_SINT,
21 ABGR8UI, 21 A8B8G8R8_UINT,
22 B5G6R5U, 22 R5G6B5_UNORM,
23 R5G6B5U, 23 B5G6R5_UNORM,
24 B5G5R5A1U, 24 A1R5G5B5_UNORM,
25 A2B10G10R10U, 25 A2B10G10R10_UNORM,
26 A2B10G10R10UI, 26 A2B10G10R10_UINT,
27 A1B5G5R5U, 27 A1B5G5R5_UNORM,
28 R8U, 28 R8_UNORM,
29 R8S, 29 R8_SNORM,
30 R8I, 30 R8_SINT,
31 R8UI, 31 R8_UINT,
32 RGBA16F, 32 R16G16B16A16_FLOAT,
33 RGBA16U, 33 R16G16B16A16_UNORM,
34 RGBA16S, 34 R16G16B16A16_SNORM,
35 RGBA16I, 35 R16G16B16A16_SINT,
36 RGBA16UI, 36 R16G16B16A16_UINT,
37 R11FG11FB10F, 37 B10G11R11_FLOAT,
38 RGBA32UI, 38 R32G32B32A32_UINT,
39 DXT1, 39 BC1_RGBA_UNORM,
40 DXT23, 40 BC2_UNORM,
41 DXT45, 41 BC3_UNORM,
42 DXN1UNORM, // This is also known as BC4 42 BC4_UNORM,
43 DXN1SNORM, 43 BC4_SNORM,
44 DXN2UNORM, 44 BC5_UNORM,
45 DXN2SNORM, 45 BC5_SNORM,
46 BC7U, 46 BC7_UNORM,
47 BC6H_UF16, 47 BC6H_UFLOAT,
48 BC6H_SF16, 48 BC6H_SFLOAT,
49 ASTC_2D_4X4, 49 ASTC_2D_4X4_UNORM,
50 BGRA8, 50 B8G8R8A8_UNORM,
51 RGBA32F, 51 R32G32B32A32_FLOAT,
52 RGBA32I, 52 R32G32B32A32_SINT,
53 RG32F, 53 R32G32_FLOAT,
54 RG32I, 54 R32G32_SINT,
55 R32F, 55 R32_FLOAT,
56 R16F, 56 R16_FLOAT,
57 R16U, 57 R16_UNORM,
58 R16S, 58 R16_SNORM,
59 R16UI, 59 R16_UINT,
60 R16I, 60 R16_SINT,
61 RG16, 61 R16G16_UNORM,
62 RG16F, 62 R16G16_FLOAT,
63 RG16UI, 63 R16G16_UINT,
64 RG16I, 64 R16G16_SINT,
65 RG16S, 65 R16G16_SNORM,
66 RGB32F, 66 R32G32B32_FLOAT,
67 RGBA8_SRGB, 67 A8B8G8R8_SRGB,
68 RG8U, 68 R8G8_UNORM,
69 RG8S, 69 R8G8_SNORM,
70 RG8I, 70 R8G8_SINT,
71 RG8UI, 71 R8G8_UINT,
72 RG32UI, 72 R32G32_UINT,
73 RGBX16F, 73 R16G16B16X16_FLOAT,
74 R32UI, 74 R32_UINT,
75 R32I, 75 R32_SINT,
76 ASTC_2D_8X8, 76 ASTC_2D_8X8_UNORM,
77 ASTC_2D_8X5, 77 ASTC_2D_8X5_UNORM,
78 ASTC_2D_5X4, 78 ASTC_2D_5X4_UNORM,
79 BGRA8_SRGB, 79 B8G8R8A8_SRGB,
80 DXT1_SRGB, 80 BC1_RGBA_SRGB,
81 DXT23_SRGB, 81 BC2_SRGB,
82 DXT45_SRGB, 82 BC3_SRGB,
83 BC7U_SRGB, 83 BC7_SRGB,
84 R4G4B4A4U, 84 A4B4G4R4_UNORM,
85 ASTC_2D_4X4_SRGB, 85 ASTC_2D_4X4_SRGB,
86 ASTC_2D_8X8_SRGB, 86 ASTC_2D_8X8_SRGB,
87 ASTC_2D_8X5_SRGB, 87 ASTC_2D_8X5_SRGB,
88 ASTC_2D_5X4_SRGB, 88 ASTC_2D_5X4_SRGB,
89 ASTC_2D_5X5, 89 ASTC_2D_5X5_UNORM,
90 ASTC_2D_5X5_SRGB, 90 ASTC_2D_5X5_SRGB,
91 ASTC_2D_10X8, 91 ASTC_2D_10X8_UNORM,
92 ASTC_2D_10X8_SRGB, 92 ASTC_2D_10X8_SRGB,
93 ASTC_2D_6X6, 93 ASTC_2D_6X6_UNORM,
94 ASTC_2D_6X6_SRGB, 94 ASTC_2D_6X6_SRGB,
95 ASTC_2D_10X10, 95 ASTC_2D_10X10_UNORM,
96 ASTC_2D_10X10_SRGB, 96 ASTC_2D_10X10_SRGB,
97 ASTC_2D_12X12, 97 ASTC_2D_12X12_UNORM,
98 ASTC_2D_12X12_SRGB, 98 ASTC_2D_12X12_SRGB,
99 ASTC_2D_8X6, 99 ASTC_2D_8X6_UNORM,
100 ASTC_2D_8X6_SRGB, 100 ASTC_2D_8X6_SRGB,
101 ASTC_2D_6X5, 101 ASTC_2D_6X5_UNORM,
102 ASTC_2D_6X5_SRGB, 102 ASTC_2D_6X5_SRGB,
103 E5B9G9R9F, 103 E5B9G9R9_FLOAT,
104 104
105 MaxColorFormat, 105 MaxColorFormat,
106 106
107 // Depth formats 107 // Depth formats
108 Z32F = MaxColorFormat, 108 D32_FLOAT = MaxColorFormat,
109 Z16, 109 D16_UNORM,
110 110
111 MaxDepthFormat, 111 MaxDepthFormat,
112 112
113 // DepthStencil formats 113 // DepthStencil formats
114 Z24S8 = MaxDepthFormat, 114 D24_UNORM_S8_UINT = MaxDepthFormat,
115 S8Z24, 115 S8_UINT_D24_UNORM,
116 Z32FS8, 116 D32_FLOAT_S8_UINT,
117 117
118 MaxDepthStencilFormat, 118 MaxDepthStencilFormat,
119 119
@@ -141,97 +141,97 @@ enum class SurfaceTarget {
141}; 141};
142 142
143constexpr std::array<u32, MaxPixelFormat> compression_factor_shift_table = {{ 143constexpr std::array<u32, MaxPixelFormat> compression_factor_shift_table = {{
144 0, // ABGR8U 144 0, // A8B8G8R8_UNORM
145 0, // ABGR8S 145 0, // A8B8G8R8_SNORM
146 0, // ABGR8I 146 0, // A8B8G8R8_SINT
147 0, // ABGR8UI 147 0, // A8B8G8R8_UINT
148 0, // B5G6R5U 148 0, // R5G6B5_UNORM
149 0, // R5G6B5U 149 0, // B5G6R5_UNORM
150 0, // B5G5R5A1U 150 0, // A1R5G5B5_UNORM
151 0, // A2B10G10R10U 151 0, // A2B10G10R10_UNORM
152 0, // A2B10G10R10UI 152 0, // A2B10G10R10_UINT
153 0, // A1B5G5R5U 153 0, // A1B5G5R5_UNORM
154 0, // R8U 154 0, // R8_UNORM
155 0, // R8S 155 0, // R8_SNORM
156 0, // R8I 156 0, // R8_SINT
157 0, // R8UI 157 0, // R8_UINT
158 0, // RGBA16F 158 0, // R16G16B16A16_FLOAT
159 0, // RGBA16U 159 0, // R16G16B16A16_UNORM
160 0, // RGBA16S 160 0, // R16G16B16A16_SNORM
161 0, // RGBA16I 161 0, // R16G16B16A16_SINT
162 0, // RGBA16UI 162 0, // R16G16B16A16_UINT
163 0, // R11FG11FB10F 163 0, // B10G11R11_FLOAT
164 0, // RGBA32UI 164 0, // R32G32B32A32_UINT
165 2, // DXT1 165 2, // BC1_RGBA_UNORM
166 2, // DXT23 166 2, // BC2_UNORM
167 2, // DXT45 167 2, // BC3_UNORM
168 2, // DXN1UNORM 168 2, // BC4_UNORM
169 2, // DXN1SNORM 169 2, // BC4_SNORM
170 2, // DXN2UNORM 170 2, // BC5_UNORM
171 2, // DXN2SNORM 171 2, // BC5_SNORM
172 2, // BC7U 172 2, // BC7_UNORM
173 2, // BC6H_UF16 173 2, // BC6H_UFLOAT
174 2, // BC6H_SF16 174 2, // BC6H_SFLOAT
175 2, // ASTC_2D_4X4 175 2, // ASTC_2D_4X4_UNORM
176 0, // BGRA8 176 0, // B8G8R8A8_UNORM
177 0, // RGBA32F 177 0, // R32G32B32A32_FLOAT
178 0, // RGBA32I 178 0, // R32G32B32A32_SINT
179 0, // RG32F 179 0, // R32G32_FLOAT
180 0, // RG32I 180 0, // R32G32_SINT
181 0, // R32F 181 0, // R32_FLOAT
182 0, // R16F 182 0, // R16_FLOAT
183 0, // R16U 183 0, // R16_UNORM
184 0, // R16S 184 0, // R16_SNORM
185 0, // R16UI 185 0, // R16_UINT
186 0, // R16I 186 0, // R16_SINT
187 0, // RG16 187 0, // R16G16_UNORM
188 0, // RG16F 188 0, // R16G16_FLOAT
189 0, // RG16UI 189 0, // R16G16_UINT
190 0, // RG16I 190 0, // R16G16_SINT
191 0, // RG16S 191 0, // R16G16_SNORM
192 0, // RGB32F 192 0, // R32G32B32_FLOAT
193 0, // RGBA8_SRGB 193 0, // A8B8G8R8_SRGB
194 0, // RG8U 194 0, // R8G8_UNORM
195 0, // RG8S 195 0, // R8G8_SNORM
196 0, // RG8I 196 0, // R8G8_SINT
197 0, // RG8UI 197 0, // R8G8_UINT
198 0, // RG32UI 198 0, // R32G32_UINT
199 0, // RGBX16F 199 0, // R16G16B16X16_FLOAT
200 0, // R32UI 200 0, // R32_UINT
201 0, // R32I 201 0, // R32_SINT
202 2, // ASTC_2D_8X8 202 2, // ASTC_2D_8X8_UNORM
203 2, // ASTC_2D_8X5 203 2, // ASTC_2D_8X5_UNORM
204 2, // ASTC_2D_5X4 204 2, // ASTC_2D_5X4_UNORM
205 0, // BGRA8_SRGB 205 0, // B8G8R8A8_SRGB
206 2, // DXT1_SRGB 206 2, // BC1_RGBA_SRGB
207 2, // DXT23_SRGB 207 2, // BC2_SRGB
208 2, // DXT45_SRGB 208 2, // BC3_SRGB
209 2, // BC7U_SRGB 209 2, // BC7_SRGB
210 0, // R4G4B4A4U 210 0, // A4B4G4R4_UNORM
211 2, // ASTC_2D_4X4_SRGB 211 2, // ASTC_2D_4X4_SRGB
212 2, // ASTC_2D_8X8_SRGB 212 2, // ASTC_2D_8X8_SRGB
213 2, // ASTC_2D_8X5_SRGB 213 2, // ASTC_2D_8X5_SRGB
214 2, // ASTC_2D_5X4_SRGB 214 2, // ASTC_2D_5X4_SRGB
215 2, // ASTC_2D_5X5 215 2, // ASTC_2D_5X5_UNORM
216 2, // ASTC_2D_5X5_SRGB 216 2, // ASTC_2D_5X5_SRGB
217 2, // ASTC_2D_10X8 217 2, // ASTC_2D_10X8_UNORM
218 2, // ASTC_2D_10X8_SRGB 218 2, // ASTC_2D_10X8_SRGB
219 2, // ASTC_2D_6X6 219 2, // ASTC_2D_6X6_UNORM
220 2, // ASTC_2D_6X6_SRGB 220 2, // ASTC_2D_6X6_SRGB
221 2, // ASTC_2D_10X10 221 2, // ASTC_2D_10X10_UNORM
222 2, // ASTC_2D_10X10_SRGB 222 2, // ASTC_2D_10X10_SRGB
223 2, // ASTC_2D_12X12 223 2, // ASTC_2D_12X12_UNORM
224 2, // ASTC_2D_12X12_SRGB 224 2, // ASTC_2D_12X12_SRGB
225 2, // ASTC_2D_8X6 225 2, // ASTC_2D_8X6_UNORM
226 2, // ASTC_2D_8X6_SRGB 226 2, // ASTC_2D_8X6_SRGB
227 2, // ASTC_2D_6X5 227 2, // ASTC_2D_6X5_UNORM
228 2, // ASTC_2D_6X5_SRGB 228 2, // ASTC_2D_6X5_SRGB
229 0, // E5B9G9R9F 229 0, // E5B9G9R9_FLOAT
230 0, // Z32F 230 0, // D32_FLOAT
231 0, // Z16 231 0, // D16_UNORM
232 0, // Z24S8 232 0, // D24_UNORM_S8_UINT
233 0, // S8Z24 233 0, // S8_UINT_D24_UNORM
234 0, // Z32FS8 234 0, // D32_FLOAT_S8_UINT
235}}; 235}};
236 236
237/** 237/**
@@ -251,97 +251,97 @@ inline constexpr u32 GetCompressionFactor(PixelFormat format) {
251} 251}
252 252
253constexpr std::array<u32, MaxPixelFormat> block_width_table = {{ 253constexpr std::array<u32, MaxPixelFormat> block_width_table = {{
254 1, // ABGR8U 254 1, // A8B8G8R8_UNORM
255 1, // ABGR8S 255 1, // A8B8G8R8_SNORM
256 1, // ABGR8I 256 1, // A8B8G8R8_SINT
257 1, // ABGR8UI 257 1, // A8B8G8R8_UINT
258 1, // B5G6R5U 258 1, // R5G6B5_UNORM
259 1, // R5G6B5U 259 1, // B5G6R5_UNORM
260 1, // B5G5R5A1U 260 1, // A1R5G5B5_UNORM
261 1, // A2B10G10R10U 261 1, // A2B10G10R10_UNORM
262 1, // A2B10G10R10UI 262 1, // A2B10G10R10_UINT
263 1, // A1B5G5R5U 263 1, // A1B5G5R5_UNORM
264 1, // R8U 264 1, // R8_UNORM
265 1, // R8S 265 1, // R8_SNORM
266 1, // R8I 266 1, // R8_SINT
267 1, // R8UI 267 1, // R8_UINT
268 1, // RGBA16F 268 1, // R16G16B16A16_FLOAT
269 1, // RGBA16U 269 1, // R16G16B16A16_UNORM
270 1, // RGBA16S 270 1, // R16G16B16A16_SNORM
271 1, // RGBA16I 271 1, // R16G16B16A16_SINT
272 1, // RGBA16UI 272 1, // R16G16B16A16_UINT
273 1, // R11FG11FB10F 273 1, // B10G11R11_FLOAT
274 1, // RGBA32UI 274 1, // R32G32B32A32_UINT
275 4, // DXT1 275 4, // BC1_RGBA_UNORM
276 4, // DXT23 276 4, // BC2_UNORM
277 4, // DXT45 277 4, // BC3_UNORM
278 4, // DXN1UNORM 278 4, // BC4_UNORM
279 4, // DXN1SNORM 279 4, // BC4_SNORM
280 4, // DXN2UNORM 280 4, // BC5_UNORM
281 4, // DXN2SNORM 281 4, // BC5_SNORM
282 4, // BC7U 282 4, // BC7_UNORM
283 4, // BC6H_UF16 283 4, // BC6H_UFLOAT
284 4, // BC6H_SF16 284 4, // BC6H_SFLOAT
285 4, // ASTC_2D_4X4 285 4, // ASTC_2D_4X4_UNORM
286 1, // BGRA8 286 1, // B8G8R8A8_UNORM
287 1, // RGBA32F 287 1, // R32G32B32A32_FLOAT
288 1, // RGBA32I 288 1, // R32G32B32A32_SINT
289 1, // RG32F 289 1, // R32G32_FLOAT
290 1, // RG32I 290 1, // R32G32_SINT
291 1, // R32F 291 1, // R32_FLOAT
292 1, // R16F 292 1, // R16_FLOAT
293 1, // R16U 293 1, // R16_UNORM
294 1, // R16S 294 1, // R16_SNORM
295 1, // R16UI 295 1, // R16_UINT
296 1, // R16I 296 1, // R16_SINT
297 1, // RG16 297 1, // R16G16_UNORM
298 1, // RG16F 298 1, // R16G16_FLOAT
299 1, // RG16UI 299 1, // R16G16_UINT
300 1, // RG16I 300 1, // R16G16_SINT
301 1, // RG16S 301 1, // R16G16_SNORM
302 1, // RGB32F 302 1, // R32G32B32_FLOAT
303 1, // RGBA8_SRGB 303 1, // A8B8G8R8_SRGB
304 1, // RG8U 304 1, // R8G8_UNORM
305 1, // RG8S 305 1, // R8G8_SNORM
306 1, // RG8I 306 1, // R8G8_SINT
307 1, // RG8UI 307 1, // R8G8_UINT
308 1, // RG32UI 308 1, // R32G32_UINT
309 1, // RGBX16F 309 1, // R16G16B16X16_FLOAT
310 1, // R32UI 310 1, // R32_UINT
311 1, // R32I 311 1, // R32_SINT
312 8, // ASTC_2D_8X8 312 8, // ASTC_2D_8X8_UNORM
313 8, // ASTC_2D_8X5 313 8, // ASTC_2D_8X5_UNORM
314 5, // ASTC_2D_5X4 314 5, // ASTC_2D_5X4_UNORM
315 1, // BGRA8_SRGB 315 1, // B8G8R8A8_SRGB
316 4, // DXT1_SRGB 316 4, // BC1_RGBA_SRGB
317 4, // DXT23_SRGB 317 4, // BC2_SRGB
318 4, // DXT45_SRGB 318 4, // BC3_SRGB
319 4, // BC7U_SRGB 319 4, // BC7_SRGB
320 1, // R4G4B4A4U 320 1, // A4B4G4R4_UNORM
321 4, // ASTC_2D_4X4_SRGB 321 4, // ASTC_2D_4X4_SRGB
322 8, // ASTC_2D_8X8_SRGB 322 8, // ASTC_2D_8X8_SRGB
323 8, // ASTC_2D_8X5_SRGB 323 8, // ASTC_2D_8X5_SRGB
324 5, // ASTC_2D_5X4_SRGB 324 5, // ASTC_2D_5X4_SRGB
325 5, // ASTC_2D_5X5 325 5, // ASTC_2D_5X5_UNORM
326 5, // ASTC_2D_5X5_SRGB 326 5, // ASTC_2D_5X5_SRGB
327 10, // ASTC_2D_10X8 327 10, // ASTC_2D_10X8_UNORM
328 10, // ASTC_2D_10X8_SRGB 328 10, // ASTC_2D_10X8_SRGB
329 6, // ASTC_2D_6X6 329 6, // ASTC_2D_6X6_UNORM
330 6, // ASTC_2D_6X6_SRGB 330 6, // ASTC_2D_6X6_SRGB
331 10, // ASTC_2D_10X10 331 10, // ASTC_2D_10X10_UNORM
332 10, // ASTC_2D_10X10_SRGB 332 10, // ASTC_2D_10X10_SRGB
333 12, // ASTC_2D_12X12 333 12, // ASTC_2D_12X12_UNORM
334 12, // ASTC_2D_12X12_SRGB 334 12, // ASTC_2D_12X12_SRGB
335 8, // ASTC_2D_8X6 335 8, // ASTC_2D_8X6_UNORM
336 8, // ASTC_2D_8X6_SRGB 336 8, // ASTC_2D_8X6_SRGB
337 6, // ASTC_2D_6X5 337 6, // ASTC_2D_6X5_UNORM
338 6, // ASTC_2D_6X5_SRGB 338 6, // ASTC_2D_6X5_SRGB
339 1, // E5B9G9R9F 339 1, // E5B9G9R9_FLOAT
340 1, // Z32F 340 1, // D32_FLOAT
341 1, // Z16 341 1, // D16_UNORM
342 1, // Z24S8 342 1, // D24_UNORM_S8_UINT
343 1, // S8Z24 343 1, // S8_UINT_D24_UNORM
344 1, // Z32FS8 344 1, // D32_FLOAT_S8_UINT
345}}; 345}};
346 346
347static constexpr u32 GetDefaultBlockWidth(PixelFormat format) { 347static constexpr u32 GetDefaultBlockWidth(PixelFormat format) {
@@ -353,97 +353,97 @@ static constexpr u32 GetDefaultBlockWidth(PixelFormat format) {
353} 353}
354 354
355constexpr std::array<u32, MaxPixelFormat> block_height_table = {{ 355constexpr std::array<u32, MaxPixelFormat> block_height_table = {{
356 1, // ABGR8U 356 1, // A8B8G8R8_UNORM
357 1, // ABGR8S 357 1, // A8B8G8R8_SNORM
358 1, // ABGR8I 358 1, // A8B8G8R8_SINT
359 1, // ABGR8UI 359 1, // A8B8G8R8_UINT
360 1, // B5G6R5U 360 1, // R5G6B5_UNORM
361 1, // R5G6B5U 361 1, // B5G6R5_UNORM
362 1, // B5G5R5A1U 362 1, // A1R5G5B5_UNORM
363 1, // A2B10G10R10U 363 1, // A2B10G10R10_UNORM
364 1, // A2B10G10R10UI 364 1, // A2B10G10R10_UINT
365 1, // A1B5G5R5U 365 1, // A1B5G5R5_UNORM
366 1, // R8U 366 1, // R8_UNORM
367 1, // R8S 367 1, // R8_SNORM
368 1, // R8I 368 1, // R8_SINT
369 1, // R8UI 369 1, // R8_UINT
370 1, // RGBA16F 370 1, // R16G16B16A16_FLOAT
371 1, // RGBA16U 371 1, // R16G16B16A16_UNORM
372 1, // RGBA16S 372 1, // R16G16B16A16_SNORM
373 1, // RGBA16I 373 1, // R16G16B16A16_SINT
374 1, // RGBA16UI 374 1, // R16G16B16A16_UINT
375 1, // R11FG11FB10F 375 1, // B10G11R11_FLOAT
376 1, // RGBA32UI 376 1, // R32G32B32A32_UINT
377 4, // DXT1 377 4, // BC1_RGBA_UNORM
378 4, // DXT23 378 4, // BC2_UNORM
379 4, // DXT45 379 4, // BC3_UNORM
380 4, // DXN1UNORM 380 4, // BC4_UNORM
381 4, // DXN1SNORM 381 4, // BC4_SNORM
382 4, // DXN2UNORM 382 4, // BC5_UNORM
383 4, // DXN2SNORM 383 4, // BC5_SNORM
384 4, // BC7U 384 4, // BC7_UNORM
385 4, // BC6H_UF16 385 4, // BC6H_UFLOAT
386 4, // BC6H_SF16 386 4, // BC6H_SFLOAT
387 4, // ASTC_2D_4X4 387 4, // ASTC_2D_4X4_UNORM
388 1, // BGRA8 388 1, // B8G8R8A8_UNORM
389 1, // RGBA32F 389 1, // R32G32B32A32_FLOAT
390 1, // RGBA32I 390 1, // R32G32B32A32_SINT
391 1, // RG32F 391 1, // R32G32_FLOAT
392 1, // RG32I 392 1, // R32G32_SINT
393 1, // R32F 393 1, // R32_FLOAT
394 1, // R16F 394 1, // R16_FLOAT
395 1, // R16U 395 1, // R16_UNORM
396 1, // R16S 396 1, // R16_SNORM
397 1, // R16UI 397 1, // R16_UINT
398 1, // R16I 398 1, // R16_SINT
399 1, // RG16 399 1, // R16G16_UNORM
400 1, // RG16F 400 1, // R16G16_FLOAT
401 1, // RG16UI 401 1, // R16G16_UINT
402 1, // RG16I 402 1, // R16G16_SINT
403 1, // RG16S 403 1, // R16G16_SNORM
404 1, // RGB32F 404 1, // R32G32B32_FLOAT
405 1, // RGBA8_SRGB 405 1, // A8B8G8R8_SRGB
406 1, // RG8U 406 1, // R8G8_UNORM
407 1, // RG8S 407 1, // R8G8_SNORM
408 1, // RG8I 408 1, // R8G8_SINT
409 1, // RG8UI 409 1, // R8G8_UINT
410 1, // RG32UI 410 1, // R32G32_UINT
411 1, // RGBX16F 411 1, // R16G16B16X16_FLOAT
412 1, // R32UI 412 1, // R32_UINT
413 1, // R32I 413 1, // R32_SINT
414 8, // ASTC_2D_8X8 414 8, // ASTC_2D_8X8_UNORM
415 5, // ASTC_2D_8X5 415 5, // ASTC_2D_8X5_UNORM
416 4, // ASTC_2D_5X4 416 4, // ASTC_2D_5X4_UNORM
417 1, // BGRA8_SRGB 417 1, // B8G8R8A8_SRGB
418 4, // DXT1_SRGB 418 4, // BC1_RGBA_SRGB
419 4, // DXT23_SRGB 419 4, // BC2_SRGB
420 4, // DXT45_SRGB 420 4, // BC3_SRGB
421 4, // BC7U_SRGB 421 4, // BC7_SRGB
422 1, // R4G4B4A4U 422 1, // A4B4G4R4_UNORM
423 4, // ASTC_2D_4X4_SRGB 423 4, // ASTC_2D_4X4_SRGB
424 8, // ASTC_2D_8X8_SRGB 424 8, // ASTC_2D_8X8_SRGB
425 5, // ASTC_2D_8X5_SRGB 425 5, // ASTC_2D_8X5_SRGB
426 4, // ASTC_2D_5X4_SRGB 426 4, // ASTC_2D_5X4_SRGB
427 5, // ASTC_2D_5X5 427 5, // ASTC_2D_5X5_UNORM
428 5, // ASTC_2D_5X5_SRGB 428 5, // ASTC_2D_5X5_SRGB
429 8, // ASTC_2D_10X8 429 8, // ASTC_2D_10X8_UNORM
430 8, // ASTC_2D_10X8_SRGB 430 8, // ASTC_2D_10X8_SRGB
431 6, // ASTC_2D_6X6 431 6, // ASTC_2D_6X6_UNORM
432 6, // ASTC_2D_6X6_SRGB 432 6, // ASTC_2D_6X6_SRGB
433 10, // ASTC_2D_10X10 433 10, // ASTC_2D_10X10_UNORM
434 10, // ASTC_2D_10X10_SRGB 434 10, // ASTC_2D_10X10_SRGB
435 12, // ASTC_2D_12X12 435 12, // ASTC_2D_12X12_UNORM
436 12, // ASTC_2D_12X12_SRGB 436 12, // ASTC_2D_12X12_SRGB
437 6, // ASTC_2D_8X6 437 6, // ASTC_2D_8X6_UNORM
438 6, // ASTC_2D_8X6_SRGB 438 6, // ASTC_2D_8X6_SRGB
439 5, // ASTC_2D_6X5 439 5, // ASTC_2D_6X5_UNORM
440 5, // ASTC_2D_6X5_SRGB 440 5, // ASTC_2D_6X5_SRGB
441 1, // E5B9G9R9F 441 1, // E5B9G9R9_FLOAT
442 1, // Z32F 442 1, // D32_FLOAT
443 1, // Z16 443 1, // D16_UNORM
444 1, // Z24S8 444 1, // D24_UNORM_S8_UINT
445 1, // S8Z24 445 1, // S8_UINT_D24_UNORM
446 1, // Z32FS8 446 1, // D32_FLOAT_S8_UINT
447}}; 447}};
448 448
449static constexpr u32 GetDefaultBlockHeight(PixelFormat format) { 449static constexpr u32 GetDefaultBlockHeight(PixelFormat format) {
@@ -455,97 +455,97 @@ static constexpr u32 GetDefaultBlockHeight(PixelFormat format) {
455} 455}
456 456
457constexpr std::array<u32, MaxPixelFormat> bpp_table = {{ 457constexpr std::array<u32, MaxPixelFormat> bpp_table = {{
458 32, // ABGR8U 458 32, // A8B8G8R8_UNORM
459 32, // ABGR8S 459 32, // A8B8G8R8_SNORM
460 32, // ABGR8I 460 32, // A8B8G8R8_SINT
461 32, // ABGR8UI 461 32, // A8B8G8R8_UINT
462 16, // B5G6R5U 462 16, // R5G6B5_UNORM
463 16, // R5G6B5U 463 16, // B5G6R5_UNORM
464 16, // B5G5R5A1U 464 16, // A1R5G5B5_UNORM
465 32, // A2B10G10R10U 465 32, // A2B10G10R10_UNORM
466 32, // A2B10G10R10UI 466 32, // A2B10G10R10_UINT
467 16, // A1B5G5R5U 467 16, // A1B5G5R5_UNORM
468 8, // R8U 468 8, // R8_UNORM
469 8, // R8S 469 8, // R8_SNORM
470 8, // R8I 470 8, // R8_SINT
471 8, // R8UI 471 8, // R8_UINT
472 64, // RGBA16F 472 64, // R16G16B16A16_FLOAT
473 64, // RGBA16U 473 64, // R16G16B16A16_UNORM
474 64, // RGBA16S 474 64, // R16G16B16A16_SNORM
475 64, // RGBA16I 475 64, // R16G16B16A16_SINT
476 64, // RGBA16UI 476 64, // R16G16B16A16_UINT
477 32, // R11FG11FB10F 477 32, // B10G11R11_FLOAT
478 128, // RGBA32UI 478 128, // R32G32B32A32_UINT
479 64, // DXT1 479 64, // BC1_RGBA_UNORM
480 128, // DXT23 480 128, // BC2_UNORM
481 128, // DXT45 481 128, // BC3_UNORM
482 64, // DXN1UNORM 482 64, // BC4_UNORM
483 64, // DXN1SNORM 483 64, // BC4_SNORM
484 128, // DXN2UNORM 484 128, // BC5_UNORM
485 128, // DXN2SNORM 485 128, // BC5_SNORM
486 128, // BC7U 486 128, // BC7_UNORM
487 128, // BC6H_UF16 487 128, // BC6H_UFLOAT
488 128, // BC6H_SF16 488 128, // BC6H_SFLOAT
489 128, // ASTC_2D_4X4 489 128, // ASTC_2D_4X4_UNORM
490 32, // BGRA8 490 32, // B8G8R8A8_UNORM
491 128, // RGBA32F 491 128, // R32G32B32A32_FLOAT
492 128, // RGBA32I 492 128, // R32G32B32A32_SINT
493 64, // RG32F 493 64, // R32G32_FLOAT
494 64, // RG32I 494 64, // R32G32_SINT
495 32, // R32F 495 32, // R32_FLOAT
496 16, // R16F 496 16, // R16_FLOAT
497 16, // R16U 497 16, // R16_UNORM
498 16, // R16S 498 16, // R16_SNORM
499 16, // R16UI 499 16, // R16_UINT
500 16, // R16I 500 16, // R16_SINT
501 32, // RG16 501 32, // R16G16_UNORM
502 32, // RG16F 502 32, // R16G16_FLOAT
503 32, // RG16UI 503 32, // R16G16_UINT
504 32, // RG16I 504 32, // R16G16_SINT
505 32, // RG16S 505 32, // R16G16_SNORM
506 96, // RGB32F 506 96, // R32G32B32_FLOAT
507 32, // RGBA8_SRGB 507 32, // A8B8G8R8_SRGB
508 16, // RG8U 508 16, // R8G8_UNORM
509 16, // RG8S 509 16, // R8G8_SNORM
510 16, // RG8I 510 16, // R8G8_SINT
511 16, // RG8UI 511 16, // R8G8_UINT
512 64, // RG32UI 512 64, // R32G32_UINT
513 64, // RGBX16F 513 64, // R16G16B16X16_FLOAT
514 32, // R32UI 514 32, // R32_UINT
515 32, // R32I 515 32, // R32_SINT
516 128, // ASTC_2D_8X8 516 128, // ASTC_2D_8X8_UNORM
517 128, // ASTC_2D_8X5 517 128, // ASTC_2D_8X5_UNORM
518 128, // ASTC_2D_5X4 518 128, // ASTC_2D_5X4_UNORM
519 32, // BGRA8_SRGB 519 32, // B8G8R8A8_SRGB
520 64, // DXT1_SRGB 520 64, // BC1_RGBA_SRGB
521 128, // DXT23_SRGB 521 128, // BC2_SRGB
522 128, // DXT45_SRGB 522 128, // BC3_SRGB
523 128, // BC7U 523 128, // BC7_UNORM
524 16, // R4G4B4A4U 524 16, // A4B4G4R4_UNORM
525 128, // ASTC_2D_4X4_SRGB 525 128, // ASTC_2D_4X4_SRGB
526 128, // ASTC_2D_8X8_SRGB 526 128, // ASTC_2D_8X8_SRGB
527 128, // ASTC_2D_8X5_SRGB 527 128, // ASTC_2D_8X5_SRGB
528 128, // ASTC_2D_5X4_SRGB 528 128, // ASTC_2D_5X4_SRGB
529 128, // ASTC_2D_5X5 529 128, // ASTC_2D_5X5_UNORM
530 128, // ASTC_2D_5X5_SRGB 530 128, // ASTC_2D_5X5_SRGB
531 128, // ASTC_2D_10X8 531 128, // ASTC_2D_10X8_UNORM
532 128, // ASTC_2D_10X8_SRGB 532 128, // ASTC_2D_10X8_SRGB
533 128, // ASTC_2D_6X6 533 128, // ASTC_2D_6X6_UNORM
534 128, // ASTC_2D_6X6_SRGB 534 128, // ASTC_2D_6X6_SRGB
535 128, // ASTC_2D_10X10 535 128, // ASTC_2D_10X10_UNORM
536 128, // ASTC_2D_10X10_SRGB 536 128, // ASTC_2D_10X10_SRGB
537 128, // ASTC_2D_12X12 537 128, // ASTC_2D_12X12_UNORM
538 128, // ASTC_2D_12X12_SRGB 538 128, // ASTC_2D_12X12_SRGB
539 128, // ASTC_2D_8X6 539 128, // ASTC_2D_8X6_UNORM
540 128, // ASTC_2D_8X6_SRGB 540 128, // ASTC_2D_8X6_SRGB
541 128, // ASTC_2D_6X5 541 128, // ASTC_2D_6X5_UNORM
542 128, // ASTC_2D_6X5_SRGB 542 128, // ASTC_2D_6X5_SRGB
543 32, // E5B9G9R9F 543 32, // E5B9G9R9_FLOAT
544 32, // Z32F 544 32, // D32_FLOAT
545 16, // Z16 545 16, // D16_UNORM
546 32, // Z24S8 546 32, // D24_UNORM_S8_UINT
547 32, // S8Z24 547 32, // S8_UINT_D24_UNORM
548 64, // Z32FS8 548 64, // D32_FLOAT_S8_UINT
549}}; 549}};
550 550
551static constexpr u32 GetFormatBpp(PixelFormat format) { 551static constexpr u32 GetFormatBpp(PixelFormat format) {
diff --git a/src/video_core/texture_cache/format_lookup_table.cpp b/src/video_core/texture_cache/format_lookup_table.cpp
index 148a3935d..a1cc4756d 100644
--- a/src/video_core/texture_cache/format_lookup_table.cpp
+++ b/src/video_core/texture_cache/format_lookup_table.cpp
@@ -42,125 +42,125 @@ struct Table {
42 bool is_srgb; 42 bool is_srgb;
43}; 43};
44constexpr std::array<Table, 86> DefinitionTable = {{ 44constexpr std::array<Table, 86> DefinitionTable = {{
45 {TextureFormat::A8R8G8B8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ABGR8U}, 45 {TextureFormat::A8R8G8B8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::A8B8G8R8_UNORM},
46 {TextureFormat::A8R8G8B8, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::ABGR8S}, 46 {TextureFormat::A8R8G8B8, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::A8B8G8R8_SNORM},
47 {TextureFormat::A8R8G8B8, C, UINT, UINT, UINT, UINT, PixelFormat::ABGR8UI}, 47 {TextureFormat::A8R8G8B8, C, UINT, UINT, UINT, UINT, PixelFormat::A8B8G8R8_UINT},
48 {TextureFormat::A8R8G8B8, C, SINT, SINT, SINT, SINT, PixelFormat::ABGR8I}, 48 {TextureFormat::A8R8G8B8, C, SINT, SINT, SINT, SINT, PixelFormat::A8B8G8R8_SINT},
49 {TextureFormat::A8R8G8B8, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::RGBA8_SRGB}, 49 {TextureFormat::A8R8G8B8, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::A8B8G8R8_SRGB},
50 50
51 {TextureFormat::B5G6R5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R5G6B5U}, 51 {TextureFormat::B5G6R5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::B5G6R5_UNORM},
52 52
53 {TextureFormat::A2B10G10R10, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::A2B10G10R10U}, 53 {TextureFormat::A2B10G10R10, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::A2B10G10R10_UNORM},
54 {TextureFormat::A2B10G10R10, C, UINT, UINT, UINT, UINT, PixelFormat::A2B10G10R10UI}, 54 {TextureFormat::A2B10G10R10, C, UINT, UINT, UINT, UINT, PixelFormat::A2B10G10R10_UINT},
55 55
56 {TextureFormat::A1B5G5R5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::A1B5G5R5U}, 56 {TextureFormat::A1B5G5R5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::A1B5G5R5_UNORM},
57 57
58 {TextureFormat::A4B4G4R4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R4G4B4A4U}, 58 {TextureFormat::A4B4G4R4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::A4B4G4R4_UNORM},
59 59
60 {TextureFormat::R8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R8U}, 60 {TextureFormat::R8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R8_UNORM},
61 {TextureFormat::R8, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R8S}, 61 {TextureFormat::R8, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R8_SNORM},
62 {TextureFormat::R8, C, UINT, UINT, UINT, UINT, PixelFormat::R8UI}, 62 {TextureFormat::R8, C, UINT, UINT, UINT, UINT, PixelFormat::R8_UINT},
63 {TextureFormat::R8, C, SINT, SINT, SINT, SINT, PixelFormat::R8I}, 63 {TextureFormat::R8, C, SINT, SINT, SINT, SINT, PixelFormat::R8_SINT},
64 64
65 {TextureFormat::G8R8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::RG8U}, 65 {TextureFormat::R8G8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R8G8_UNORM},
66 {TextureFormat::G8R8, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::RG8S}, 66 {TextureFormat::R8G8, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R8G8_SNORM},
67 {TextureFormat::G8R8, C, UINT, UINT, UINT, UINT, PixelFormat::RG8UI}, 67 {TextureFormat::R8G8, C, UINT, UINT, UINT, UINT, PixelFormat::R8G8_UINT},
68 {TextureFormat::G8R8, C, SINT, SINT, SINT, SINT, PixelFormat::RG8I}, 68 {TextureFormat::R8G8, C, SINT, SINT, SINT, SINT, PixelFormat::R8G8_SINT},
69 69
70 {TextureFormat::R16_G16_B16_A16, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::RGBA16S}, 70 {TextureFormat::R16G16B16A16, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R16G16B16A16_SNORM},
71 {TextureFormat::R16_G16_B16_A16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::RGBA16U}, 71 {TextureFormat::R16G16B16A16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R16G16B16A16_UNORM},
72 {TextureFormat::R16_G16_B16_A16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::RGBA16F}, 72 {TextureFormat::R16G16B16A16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R16G16B16A16_FLOAT},
73 {TextureFormat::R16_G16_B16_A16, C, UINT, UINT, UINT, UINT, PixelFormat::RGBA16UI}, 73 {TextureFormat::R16G16B16A16, C, UINT, UINT, UINT, UINT, PixelFormat::R16G16B16A16_UINT},
74 {TextureFormat::R16_G16_B16_A16, C, SINT, SINT, SINT, SINT, PixelFormat::RGBA16I}, 74 {TextureFormat::R16G16B16A16, C, SINT, SINT, SINT, SINT, PixelFormat::R16G16B16A16_SINT},
75 75
76 {TextureFormat::R16_G16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::RG16F}, 76 {TextureFormat::R16G16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R16G16_FLOAT},
77 {TextureFormat::R16_G16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::RG16}, 77 {TextureFormat::R16G16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R16G16_UNORM},
78 {TextureFormat::R16_G16, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::RG16S}, 78 {TextureFormat::R16G16, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R16G16_SNORM},
79 {TextureFormat::R16_G16, C, UINT, UINT, UINT, UINT, PixelFormat::RG16UI}, 79 {TextureFormat::R16G16, C, UINT, UINT, UINT, UINT, PixelFormat::R16G16_UINT},
80 {TextureFormat::R16_G16, C, SINT, SINT, SINT, SINT, PixelFormat::RG16I}, 80 {TextureFormat::R16G16, C, SINT, SINT, SINT, SINT, PixelFormat::R16G16_SINT},
81 81
82 {TextureFormat::R16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R16F}, 82 {TextureFormat::R16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R16_FLOAT},
83 {TextureFormat::R16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R16U}, 83 {TextureFormat::R16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::R16_UNORM},
84 {TextureFormat::R16, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R16S}, 84 {TextureFormat::R16, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::R16_SNORM},
85 {TextureFormat::R16, C, UINT, UINT, UINT, UINT, PixelFormat::R16UI}, 85 {TextureFormat::R16, C, UINT, UINT, UINT, UINT, PixelFormat::R16_UINT},
86 {TextureFormat::R16, C, SINT, SINT, SINT, SINT, PixelFormat::R16I}, 86 {TextureFormat::R16, C, SINT, SINT, SINT, SINT, PixelFormat::R16_SINT},
87 87
88 {TextureFormat::BF10GF11RF11, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R11FG11FB10F}, 88 {TextureFormat::B10G11R11, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::B10G11R11_FLOAT},
89 89
90 {TextureFormat::R32_G32_B32_A32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::RGBA32F}, 90 {TextureFormat::R32G32B32A32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R32G32B32A32_FLOAT},
91 {TextureFormat::R32_G32_B32_A32, C, UINT, UINT, UINT, UINT, PixelFormat::RGBA32UI}, 91 {TextureFormat::R32G32B32A32, C, UINT, UINT, UINT, UINT, PixelFormat::R32G32B32A32_UINT},
92 {TextureFormat::R32_G32_B32_A32, C, SINT, SINT, SINT, SINT, PixelFormat::RGBA32I}, 92 {TextureFormat::R32G32B32A32, C, SINT, SINT, SINT, SINT, PixelFormat::R32G32B32A32_SINT},
93 93
94 {TextureFormat::R32_G32_B32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::RGB32F}, 94 {TextureFormat::R32G32B32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R32G32B32_FLOAT},
95 95
96 {TextureFormat::R32_G32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::RG32F}, 96 {TextureFormat::R32G32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R32G32_FLOAT},
97 {TextureFormat::R32_G32, C, UINT, UINT, UINT, UINT, PixelFormat::RG32UI}, 97 {TextureFormat::R32G32, C, UINT, UINT, UINT, UINT, PixelFormat::R32G32_UINT},
98 {TextureFormat::R32_G32, C, SINT, SINT, SINT, SINT, PixelFormat::RG32I}, 98 {TextureFormat::R32G32, C, SINT, SINT, SINT, SINT, PixelFormat::R32G32_SINT},
99 99
100 {TextureFormat::R32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R32F}, 100 {TextureFormat::R32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::R32_FLOAT},
101 {TextureFormat::R32, C, UINT, UINT, UINT, UINT, PixelFormat::R32UI}, 101 {TextureFormat::R32, C, UINT, UINT, UINT, UINT, PixelFormat::R32_UINT},
102 {TextureFormat::R32, C, SINT, SINT, SINT, SINT, PixelFormat::R32I}, 102 {TextureFormat::R32, C, SINT, SINT, SINT, SINT, PixelFormat::R32_SINT},
103 103
104 {TextureFormat::E5B9G9R9_SHAREDEXP, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::E5B9G9R9F}, 104 {TextureFormat::E5B9G9R9, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::E5B9G9R9_FLOAT},
105 105
106 {TextureFormat::ZF32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::Z32F}, 106 {TextureFormat::D32, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::D32_FLOAT},
107 {TextureFormat::Z16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::Z16}, 107 {TextureFormat::D16, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::D16_UNORM},
108 {TextureFormat::S8Z24, C, UINT, UNORM, UNORM, UNORM, PixelFormat::S8Z24}, 108 {TextureFormat::S8D24, C, UINT, UNORM, UNORM, UNORM, PixelFormat::S8_UINT_D24_UNORM},
109 {TextureFormat::G24R8, C, UINT, UNORM, UNORM, UNORM, PixelFormat::S8Z24}, 109 {TextureFormat::R8G24, C, UINT, UNORM, UNORM, UNORM, PixelFormat::S8_UINT_D24_UNORM},
110 {TextureFormat::ZF32_X24S8, C, FLOAT, UINT, UNORM, UNORM, PixelFormat::Z32FS8}, 110 {TextureFormat::D32S8, C, FLOAT, UINT, UNORM, UNORM, PixelFormat::D32_FLOAT_S8_UINT},
111 111
112 {TextureFormat::DXT1, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXT1}, 112 {TextureFormat::BC1_RGBA, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC1_RGBA_UNORM},
113 {TextureFormat::DXT1, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXT1_SRGB}, 113 {TextureFormat::BC1_RGBA, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC1_RGBA_SRGB},
114 114
115 {TextureFormat::DXT23, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXT23}, 115 {TextureFormat::BC2, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC2_UNORM},
116 {TextureFormat::DXT23, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXT23_SRGB}, 116 {TextureFormat::BC2, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC2_SRGB},
117 117
118 {TextureFormat::DXT45, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXT45}, 118 {TextureFormat::BC3, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC3_UNORM},
119 {TextureFormat::DXT45, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXT45_SRGB}, 119 {TextureFormat::BC3, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC3_SRGB},
120 120
121 {TextureFormat::DXN1, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXN1UNORM}, 121 {TextureFormat::BC4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC4_UNORM},
122 {TextureFormat::DXN1, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::DXN1SNORM}, 122 {TextureFormat::BC4, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::BC4_SNORM},
123 123
124 {TextureFormat::DXN2, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::DXN2UNORM}, 124 {TextureFormat::BC5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC5_UNORM},
125 {TextureFormat::DXN2, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::DXN2SNORM}, 125 {TextureFormat::BC5, C, SNORM, SNORM, SNORM, SNORM, PixelFormat::BC5_SNORM},
126 126
127 {TextureFormat::BC7U, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC7U}, 127 {TextureFormat::BC7, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC7_UNORM},
128 {TextureFormat::BC7U, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC7U_SRGB}, 128 {TextureFormat::BC7, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::BC7_SRGB},
129 129
130 {TextureFormat::BC6H_SF16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::BC6H_SF16}, 130 {TextureFormat::BC6H_SFLOAT, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::BC6H_SFLOAT},
131 {TextureFormat::BC6H_UF16, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::BC6H_UF16}, 131 {TextureFormat::BC6H_UFLOAT, C, FLOAT, FLOAT, FLOAT, FLOAT, PixelFormat::BC6H_UFLOAT},
132 132
133 {TextureFormat::ASTC_2D_4X4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_4X4}, 133 {TextureFormat::ASTC_2D_4X4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_4X4_UNORM},
134 {TextureFormat::ASTC_2D_4X4, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_4X4_SRGB}, 134 {TextureFormat::ASTC_2D_4X4, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_4X4_SRGB},
135 135
136 {TextureFormat::ASTC_2D_5X4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X4}, 136 {TextureFormat::ASTC_2D_5X4, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X4_UNORM},
137 {TextureFormat::ASTC_2D_5X4, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X4_SRGB}, 137 {TextureFormat::ASTC_2D_5X4, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X4_SRGB},
138 138
139 {TextureFormat::ASTC_2D_5X5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X5}, 139 {TextureFormat::ASTC_2D_5X5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X5_UNORM},
140 {TextureFormat::ASTC_2D_5X5, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X5_SRGB}, 140 {TextureFormat::ASTC_2D_5X5, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_5X5_SRGB},
141 141
142 {TextureFormat::ASTC_2D_8X8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X8}, 142 {TextureFormat::ASTC_2D_8X8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X8_UNORM},
143 {TextureFormat::ASTC_2D_8X8, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X8_SRGB}, 143 {TextureFormat::ASTC_2D_8X8, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X8_SRGB},
144 144
145 {TextureFormat::ASTC_2D_8X5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X5}, 145 {TextureFormat::ASTC_2D_8X5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X5_UNORM},
146 {TextureFormat::ASTC_2D_8X5, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X5_SRGB}, 146 {TextureFormat::ASTC_2D_8X5, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X5_SRGB},
147 147
148 {TextureFormat::ASTC_2D_10X8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X8}, 148 {TextureFormat::ASTC_2D_10X8, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X8_UNORM},
149 {TextureFormat::ASTC_2D_10X8, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X8_SRGB}, 149 {TextureFormat::ASTC_2D_10X8, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X8_SRGB},
150 150
151 {TextureFormat::ASTC_2D_6X6, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X6}, 151 {TextureFormat::ASTC_2D_6X6, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X6_UNORM},
152 {TextureFormat::ASTC_2D_6X6, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X6_SRGB}, 152 {TextureFormat::ASTC_2D_6X6, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X6_SRGB},
153 153
154 {TextureFormat::ASTC_2D_10X10, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X10}, 154 {TextureFormat::ASTC_2D_10X10, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X10_UNORM},
155 {TextureFormat::ASTC_2D_10X10, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X10_SRGB}, 155 {TextureFormat::ASTC_2D_10X10, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_10X10_SRGB},
156 156
157 {TextureFormat::ASTC_2D_12X12, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_12X12}, 157 {TextureFormat::ASTC_2D_12X12, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_12X12_UNORM},
158 {TextureFormat::ASTC_2D_12X12, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_12X12_SRGB}, 158 {TextureFormat::ASTC_2D_12X12, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_12X12_SRGB},
159 159
160 {TextureFormat::ASTC_2D_8X6, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X6}, 160 {TextureFormat::ASTC_2D_8X6, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X6_UNORM},
161 {TextureFormat::ASTC_2D_8X6, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X6_SRGB}, 161 {TextureFormat::ASTC_2D_8X6, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_8X6_SRGB},
162 162
163 {TextureFormat::ASTC_2D_6X5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X5}, 163 {TextureFormat::ASTC_2D_6X5, C, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X5_UNORM},
164 {TextureFormat::ASTC_2D_6X5, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X5_SRGB}, 164 {TextureFormat::ASTC_2D_6X5, S, UNORM, UNORM, UNORM, UNORM, PixelFormat::ASTC_2D_6X5_SRGB},
165}}; 165}};
166 166
@@ -191,7 +191,7 @@ PixelFormat FormatLookupTable::GetPixelFormat(TextureFormat format, bool is_srgb
191 static_cast<int>(format), is_srgb, static_cast<int>(red_component), 191 static_cast<int>(format), is_srgb, static_cast<int>(red_component),
192 static_cast<int>(green_component), static_cast<int>(blue_component), 192 static_cast<int>(green_component), static_cast<int>(blue_component),
193 static_cast<int>(alpha_component)); 193 static_cast<int>(alpha_component));
194 return PixelFormat::ABGR8U; 194 return PixelFormat::A8B8G8R8_UNORM;
195} 195}
196 196
197void FormatLookupTable::Set(TextureFormat format, bool is_srgb, ComponentType red_component, 197void FormatLookupTable::Set(TextureFormat format, bool is_srgb, ComponentType red_component,
diff --git a/src/video_core/texture_cache/surface_base.cpp b/src/video_core/texture_cache/surface_base.cpp
index 0caf3b4f0..dfcf36e0b 100644
--- a/src/video_core/texture_cache/surface_base.cpp
+++ b/src/video_core/texture_cache/surface_base.cpp
@@ -228,7 +228,7 @@ void SurfaceBaseImpl::LoadBuffer(Tegra::MemoryManager& memory_manager,
228 } 228 }
229 } 229 }
230 230
231 if (!is_converted && params.pixel_format != PixelFormat::S8Z24) { 231 if (!is_converted && params.pixel_format != PixelFormat::S8_UINT_D24_UNORM) {
232 return; 232 return;
233 } 233 }
234 234
diff --git a/src/video_core/texture_cache/surface_params.cpp b/src/video_core/texture_cache/surface_params.cpp
index 0b2b2b8c4..1803fce15 100644
--- a/src/video_core/texture_cache/surface_params.cpp
+++ b/src/video_core/texture_cache/surface_params.cpp
@@ -83,12 +83,12 @@ SurfaceParams SurfaceParams::CreateForTexture(const FormatLookupTable& lookup_ta
83 params.type = GetFormatType(params.pixel_format); 83 params.type = GetFormatType(params.pixel_format);
84 if (entry.is_shadow && params.type == SurfaceType::ColorTexture) { 84 if (entry.is_shadow && params.type == SurfaceType::ColorTexture) {
85 switch (params.pixel_format) { 85 switch (params.pixel_format) {
86 case PixelFormat::R16U: 86 case PixelFormat::R16_UNORM:
87 case PixelFormat::R16F: 87 case PixelFormat::R16_FLOAT:
88 params.pixel_format = PixelFormat::Z16; 88 params.pixel_format = PixelFormat::D16_UNORM;
89 break; 89 break;
90 case PixelFormat::R32F: 90 case PixelFormat::R32_FLOAT:
91 params.pixel_format = PixelFormat::Z32F; 91 params.pixel_format = PixelFormat::D32_FLOAT;
92 break; 92 break;
93 default: 93 default:
94 UNIMPLEMENTED_MSG("Unimplemented shadow convert format: {}", 94 UNIMPLEMENTED_MSG("Unimplemented shadow convert format: {}",
@@ -195,8 +195,8 @@ SurfaceParams SurfaceParams::CreateForFramebuffer(Core::System& system, std::siz
195 SurfaceParams params; 195 SurfaceParams params;
196 params.is_tiled = 196 params.is_tiled =
197 config.memory_layout.type == Tegra::Engines::Maxwell3D::Regs::InvMemoryLayout::BlockLinear; 197 config.memory_layout.type == Tegra::Engines::Maxwell3D::Regs::InvMemoryLayout::BlockLinear;
198 params.srgb_conversion = config.format == Tegra::RenderTargetFormat::BGRA8_SRGB || 198 params.srgb_conversion = config.format == Tegra::RenderTargetFormat::B8G8R8A8_SRGB ||
199 config.format == Tegra::RenderTargetFormat::RGBA8_SRGB; 199 config.format == Tegra::RenderTargetFormat::A8B8G8R8_SRGB;
200 params.block_width = config.memory_layout.block_width; 200 params.block_width = config.memory_layout.block_width;
201 params.block_height = config.memory_layout.block_height; 201 params.block_height = config.memory_layout.block_height;
202 params.block_depth = config.memory_layout.block_depth; 202 params.block_depth = config.memory_layout.block_depth;
@@ -235,8 +235,8 @@ SurfaceParams SurfaceParams::CreateForFermiCopySurface(
235 const Tegra::Engines::Fermi2D::Regs::Surface& config) { 235 const Tegra::Engines::Fermi2D::Regs::Surface& config) {
236 SurfaceParams params{}; 236 SurfaceParams params{};
237 params.is_tiled = !config.linear; 237 params.is_tiled = !config.linear;
238 params.srgb_conversion = config.format == Tegra::RenderTargetFormat::BGRA8_SRGB || 238 params.srgb_conversion = config.format == Tegra::RenderTargetFormat::B8G8R8A8_SRGB ||
239 config.format == Tegra::RenderTargetFormat::RGBA8_SRGB; 239 config.format == Tegra::RenderTargetFormat::A8B8G8R8_SRGB;
240 params.block_width = params.is_tiled ? std::min(config.BlockWidth(), 5U) : 0, 240 params.block_width = params.is_tiled ? std::min(config.BlockWidth(), 5U) : 0,
241 params.block_height = params.is_tiled ? std::min(config.BlockHeight(), 5U) : 0, 241 params.block_height = params.is_tiled ? std::min(config.BlockHeight(), 5U) : 0,
242 params.block_depth = params.is_tiled ? std::min(config.BlockDepth(), 5U) : 0, 242 params.block_depth = params.is_tiled ? std::min(config.BlockDepth(), 5U) : 0,
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index cdcddb225..96c4e4cc2 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -373,9 +373,9 @@ protected:
373 siblings_table[static_cast<std::size_t>(b)] = a; 373 siblings_table[static_cast<std::size_t>(b)] = a;
374 }; 374 };
375 std::fill(siblings_table.begin(), siblings_table.end(), PixelFormat::Invalid); 375 std::fill(siblings_table.begin(), siblings_table.end(), PixelFormat::Invalid);
376 make_siblings(PixelFormat::Z16, PixelFormat::R16U); 376 make_siblings(PixelFormat::D16_UNORM, PixelFormat::R16_UNORM);
377 make_siblings(PixelFormat::Z32F, PixelFormat::R32F); 377 make_siblings(PixelFormat::D32_FLOAT, PixelFormat::R32_FLOAT);
378 make_siblings(PixelFormat::Z32FS8, PixelFormat::RG32F); 378 make_siblings(PixelFormat::D32_FLOAT_S8_UINT, PixelFormat::R32G32_FLOAT);
379 379
380 sampled_textures.reserve(64); 380 sampled_textures.reserve(64);
381 } 381 }
@@ -1031,7 +1031,7 @@ private:
1031 params.pitch = 4; 1031 params.pitch = 4;
1032 params.num_levels = 1; 1032 params.num_levels = 1;
1033 params.emulated_levels = 1; 1033 params.emulated_levels = 1;
1034 params.pixel_format = VideoCore::Surface::PixelFormat::R8U; 1034 params.pixel_format = VideoCore::Surface::PixelFormat::R8_UNORM;
1035 params.type = VideoCore::Surface::SurfaceType::ColorTexture; 1035 params.type = VideoCore::Surface::SurfaceType::ColorTexture;
1036 auto surface = CreateSurface(0ULL, params); 1036 auto surface = CreateSurface(0ULL, params);
1037 invalid_memory.resize(surface->GetHostSizeInBytes(), 0U); 1037 invalid_memory.resize(surface->GetHostSizeInBytes(), 0U);
diff --git a/src/video_core/textures/convert.cpp b/src/video_core/textures/convert.cpp
index f3efa7eb0..962921483 100644
--- a/src/video_core/textures/convert.cpp
+++ b/src/video_core/textures/convert.cpp
@@ -35,7 +35,7 @@ void SwapS8Z24ToZ24S8(u8* data, u32 width, u32 height) {
35 S8Z24 s8z24_pixel{}; 35 S8Z24 s8z24_pixel{};
36 Z24S8 z24s8_pixel{}; 36 Z24S8 z24s8_pixel{};
37 constexpr auto bpp{ 37 constexpr auto bpp{
38 VideoCore::Surface::GetBytesPerPixel(VideoCore::Surface::PixelFormat::S8Z24)}; 38 VideoCore::Surface::GetBytesPerPixel(VideoCore::Surface::PixelFormat::S8_UINT_D24_UNORM)};
39 for (std::size_t y = 0; y < height; ++y) { 39 for (std::size_t y = 0; y < height; ++y) {
40 for (std::size_t x = 0; x < width; ++x) { 40 for (std::size_t x = 0; x < width; ++x) {
41 const std::size_t offset{bpp * (y * width + x)}; 41 const std::size_t offset{bpp * (y * width + x)};
@@ -73,7 +73,7 @@ void ConvertFromGuestToHost(u8* in_data, u8* out_data, PixelFormat pixel_format,
73 in_data, width, height, depth, block_width, block_height); 73 in_data, width, height, depth, block_width, block_height);
74 std::copy(rgba8_data.begin(), rgba8_data.end(), out_data); 74 std::copy(rgba8_data.begin(), rgba8_data.end(), out_data);
75 75
76 } else if (convert_s8z24 && pixel_format == PixelFormat::S8Z24) { 76 } else if (convert_s8z24 && pixel_format == PixelFormat::S8_UINT_D24_UNORM) {
77 Tegra::Texture::ConvertS8Z24ToZ24S8(in_data, width, height); 77 Tegra::Texture::ConvertS8Z24ToZ24S8(in_data, width, height);
78 } 78 }
79} 79}
@@ -85,7 +85,7 @@ void ConvertFromHostToGuest(u8* data, PixelFormat pixel_format, u32 width, u32 h
85 static_cast<u32>(pixel_format)); 85 static_cast<u32>(pixel_format));
86 UNREACHABLE(); 86 UNREACHABLE();
87 87
88 } else if (convert_s8z24 && pixel_format == PixelFormat::S8Z24) { 88 } else if (convert_s8z24 && pixel_format == PixelFormat::S8_UINT_D24_UNORM) {
89 Tegra::Texture::ConvertZ24S8ToS8Z24(data, width, height); 89 Tegra::Texture::ConvertZ24S8ToS8Z24(data, width, height);
90 } 90 }
91} 91}
diff --git a/src/video_core/textures/decoders.cpp b/src/video_core/textures/decoders.cpp
index 548e4c3fe..0cd17cb89 100644
--- a/src/video_core/textures/decoders.cpp
+++ b/src/video_core/textures/decoders.cpp
@@ -193,53 +193,6 @@ void CopySwizzledData(u32 width, u32 height, u32 depth, u32 bytes_per_pixel,
193 } 193 }
194} 194}
195 195
196u32 BytesPerPixel(TextureFormat format) {
197 switch (format) {
198 case TextureFormat::DXT1:
199 case TextureFormat::DXN1:
200 // In this case a 'pixel' actually refers to a 4x4 tile.
201 return 8;
202 case TextureFormat::DXT23:
203 case TextureFormat::DXT45:
204 case TextureFormat::DXN2:
205 case TextureFormat::BC7U:
206 case TextureFormat::BC6H_UF16:
207 case TextureFormat::BC6H_SF16:
208 // In this case a 'pixel' actually refers to a 4x4 tile.
209 return 16;
210 case TextureFormat::R32_G32_B32:
211 return 12;
212 case TextureFormat::ASTC_2D_4X4:
213 case TextureFormat::ASTC_2D_5X4:
214 case TextureFormat::ASTC_2D_8X8:
215 case TextureFormat::ASTC_2D_8X5:
216 case TextureFormat::ASTC_2D_10X8:
217 case TextureFormat::ASTC_2D_5X5:
218 case TextureFormat::A8R8G8B8:
219 case TextureFormat::A2B10G10R10:
220 case TextureFormat::BF10GF11RF11:
221 case TextureFormat::R32:
222 case TextureFormat::R16_G16:
223 return 4;
224 case TextureFormat::A1B5G5R5:
225 case TextureFormat::B5G6R5:
226 case TextureFormat::G8R8:
227 case TextureFormat::R16:
228 return 2;
229 case TextureFormat::R8:
230 return 1;
231 case TextureFormat::R16_G16_B16_A16:
232 return 8;
233 case TextureFormat::R32_G32_B32_A32:
234 return 16;
235 case TextureFormat::R32_G32:
236 return 8;
237 default:
238 UNIMPLEMENTED_MSG("Format not implemented");
239 return 1;
240 }
241}
242
243void UnswizzleTexture(u8* const unswizzled_data, u8* address, u32 tile_size_x, u32 tile_size_y, 196void UnswizzleTexture(u8* const unswizzled_data, u8* address, u32 tile_size_x, u32 tile_size_y,
244 u32 bytes_per_pixel, u32 width, u32 height, u32 depth, u32 block_height, 197 u32 bytes_per_pixel, u32 width, u32 height, u32 depth, u32 block_height,
245 u32 block_depth, u32 width_spacing) { 198 u32 block_depth, u32 width_spacing) {
@@ -328,48 +281,6 @@ void SwizzleKepler(const u32 width, const u32 height, const u32 dst_x, const u32
328 } 281 }
329} 282}
330 283
331std::vector<u8> DecodeTexture(const std::vector<u8>& texture_data, TextureFormat format, u32 width,
332 u32 height) {
333 std::vector<u8> rgba_data;
334
335 // TODO(Subv): Implement.
336 switch (format) {
337 case TextureFormat::DXT1:
338 case TextureFormat::DXT23:
339 case TextureFormat::DXT45:
340 case TextureFormat::DXN1:
341 case TextureFormat::DXN2:
342 case TextureFormat::BC7U:
343 case TextureFormat::BC6H_UF16:
344 case TextureFormat::BC6H_SF16:
345 case TextureFormat::ASTC_2D_4X4:
346 case TextureFormat::ASTC_2D_8X8:
347 case TextureFormat::ASTC_2D_5X5:
348 case TextureFormat::ASTC_2D_10X8:
349 case TextureFormat::A8R8G8B8:
350 case TextureFormat::A2B10G10R10:
351 case TextureFormat::A1B5G5R5:
352 case TextureFormat::B5G6R5:
353 case TextureFormat::R8:
354 case TextureFormat::G8R8:
355 case TextureFormat::BF10GF11RF11:
356 case TextureFormat::R32_G32_B32_A32:
357 case TextureFormat::R32_G32:
358 case TextureFormat::R32:
359 case TextureFormat::R16:
360 case TextureFormat::R16_G16:
361 case TextureFormat::R32_G32_B32:
362 // TODO(Subv): For the time being just forward the same data without any decoding.
363 rgba_data = texture_data;
364 break;
365 default:
366 UNIMPLEMENTED_MSG("Format not implemented");
367 break;
368 }
369
370 return rgba_data;
371}
372
373std::size_t CalculateSize(bool tiled, u32 bytes_per_pixel, u32 width, u32 height, u32 depth, 284std::size_t CalculateSize(bool tiled, u32 bytes_per_pixel, u32 width, u32 height, u32 depth,
374 u32 block_height, u32 block_depth) { 285 u32 block_height, u32 block_depth) {
375 if (tiled) { 286 if (tiled) {
diff --git a/src/video_core/textures/decoders.h b/src/video_core/textures/decoders.h
index 06f3ebf87..4c9a15048 100644
--- a/src/video_core/textures/decoders.h
+++ b/src/video_core/textures/decoders.h
@@ -38,10 +38,6 @@ void CopySwizzledData(u32 width, u32 height, u32 depth, u32 bytes_per_pixel,
38 u32 out_bytes_per_pixel, u8* swizzled_data, u8* unswizzled_data, 38 u32 out_bytes_per_pixel, u8* swizzled_data, u8* unswizzled_data,
39 bool unswizzle, u32 block_height, u32 block_depth, u32 width_spacing); 39 bool unswizzle, u32 block_height, u32 block_depth, u32 width_spacing);
40 40
41/// Decodes an unswizzled texture into a A8R8G8B8 texture.
42std::vector<u8> DecodeTexture(const std::vector<u8>& texture_data, TextureFormat format, u32 width,
43 u32 height);
44
45/// This function calculates the correct size of a texture depending if it's tiled or not. 41/// This function calculates the correct size of a texture depending if it's tiled or not.
46std::size_t CalculateSize(bool tiled, u32 bytes_per_pixel, u32 width, u32 height, u32 depth, 42std::size_t CalculateSize(bool tiled, u32 bytes_per_pixel, u32 width, u32 height, u32 depth,
47 u32 block_height, u32 block_depth); 43 u32 block_height, u32 block_depth);
diff --git a/src/video_core/textures/texture.h b/src/video_core/textures/texture.h
index eba05aced..0574fef12 100644
--- a/src/video_core/textures/texture.h
+++ b/src/video_core/textures/texture.h
@@ -12,10 +12,10 @@
12namespace Tegra::Texture { 12namespace Tegra::Texture {
13 13
14enum class TextureFormat : u32 { 14enum class TextureFormat : u32 {
15 R32_G32_B32_A32 = 0x01, 15 R32G32B32A32 = 0x01,
16 R32_G32_B32 = 0x02, 16 R32G32B32 = 0x02,
17 R16_G16_B16_A16 = 0x03, 17 R16G16B16A16 = 0x03,
18 R32_G32 = 0x04, 18 R32G32 = 0x04,
19 R32_B24G8 = 0x05, 19 R32_B24G8 = 0x05,
20 ETC2_RGB = 0x06, 20 ETC2_RGB = 0x06,
21 X8B8G8R8 = 0x07, 21 X8B8G8R8 = 0x07,
@@ -23,19 +23,19 @@ enum class TextureFormat : u32 {
23 A2B10G10R10 = 0x09, 23 A2B10G10R10 = 0x09,
24 ETC2_RGB_PTA = 0x0a, 24 ETC2_RGB_PTA = 0x0a,
25 ETC2_RGBA = 0x0b, 25 ETC2_RGBA = 0x0b,
26 R16_G16 = 0x0c, 26 R16G16 = 0x0c,
27 G8R24 = 0x0d, 27 R24G8 = 0x0d,
28 G24R8 = 0x0e, 28 R8G24 = 0x0e,
29 R32 = 0x0f, 29 R32 = 0x0f,
30 BC6H_SF16 = 0x10, 30 BC6H_SFLOAT = 0x10,
31 BC6H_UF16 = 0x11, 31 BC6H_UFLOAT = 0x11,
32 A4B4G4R4 = 0x12, 32 A4B4G4R4 = 0x12,
33 A5B5G5R1 = 0x13, 33 A5B5G5R1 = 0x13,
34 A1B5G5R5 = 0x14, 34 A1B5G5R5 = 0x14,
35 B5G6R5 = 0x15, 35 B5G6R5 = 0x15,
36 B6G5R5 = 0x16, 36 B6G5R5 = 0x16,
37 BC7U = 0x17, 37 BC7 = 0x17,
38 G8R8 = 0x18, 38 R8G8 = 0x18,
39 EAC = 0x19, 39 EAC = 0x19,
40 EACX2 = 0x1a, 40 EACX2 = 0x1a,
41 R16 = 0x1b, 41 R16 = 0x1b,
@@ -43,23 +43,23 @@ enum class TextureFormat : u32 {
43 R8 = 0x1d, 43 R8 = 0x1d,
44 G4R4 = 0x1e, 44 G4R4 = 0x1e,
45 R1 = 0x1f, 45 R1 = 0x1f,
46 E5B9G9R9_SHAREDEXP = 0x20, 46 E5B9G9R9 = 0x20,
47 BF10GF11RF11 = 0x21, 47 B10G11R11 = 0x21,
48 G8B8G8R8 = 0x22, 48 G8B8G8R8 = 0x22,
49 B8G8R8G8 = 0x23, 49 B8G8R8G8 = 0x23,
50 DXT1 = 0x24, 50 BC1_RGBA = 0x24,
51 DXT23 = 0x25, 51 BC2 = 0x25,
52 DXT45 = 0x26, 52 BC3 = 0x26,
53 DXN1 = 0x27, 53 BC4 = 0x27,
54 DXN2 = 0x28, 54 BC5 = 0x28,
55 S8Z24 = 0x29, 55 S8D24 = 0x29,
56 X8Z24 = 0x2a, 56 X8Z24 = 0x2a,
57 Z24S8 = 0x2b, 57 D24S8 = 0x2b,
58 X4V4Z24__COV4R4V = 0x2c, 58 X4V4Z24__COV4R4V = 0x2c,
59 X4V4Z24__COV8R8V = 0x2d, 59 X4V4Z24__COV8R8V = 0x2d,
60 V8Z24__COV4R12V = 0x2e, 60 V8Z24__COV4R12V = 0x2e,
61 ZF32 = 0x2f, 61 D32 = 0x2f,
62 ZF32_X24S8 = 0x30, 62 D32S8 = 0x30,
63 X8Z24_X20V4S8__COV4R4V = 0x31, 63 X8Z24_X20V4S8__COV4R4V = 0x31,
64 X8Z24_X20V4S8__COV8R8V = 0x32, 64 X8Z24_X20V4S8__COV8R8V = 0x32,
65 ZF32_X20V4X8__COV4R4V = 0x33, 65 ZF32_X20V4X8__COV4R4V = 0x33,
@@ -69,7 +69,7 @@ enum class TextureFormat : u32 {
69 X8Z24_X16V8S8__COV4R12V = 0x37, 69 X8Z24_X16V8S8__COV4R12V = 0x37,
70 ZF32_X16V8X8__COV4R12V = 0x38, 70 ZF32_X16V8X8__COV4R12V = 0x38,
71 ZF32_X16V8S8__COV4R12V = 0x39, 71 ZF32_X16V8S8__COV4R12V = 0x39,
72 Z16 = 0x3a, 72 D16 = 0x3a,
73 V8Z24__COV8R24V = 0x3b, 73 V8Z24__COV8R24V = 0x3b,
74 X8Z24_X16V8S8__COV8R24V = 0x3c, 74 X8Z24_X16V8S8__COV8R24V = 0x3c,
75 ZF32_X16V8X8__COV8R24V = 0x3d, 75 ZF32_X16V8X8__COV8R24V = 0x3d,
@@ -375,7 +375,4 @@ struct FullTextureInfo {
375 TSCEntry tsc; 375 TSCEntry tsc;
376}; 376};
377 377
378/// Returns the number of bytes per pixel of the input texture format.
379u32 BytesPerPixel(TextureFormat format);
380
381} // namespace Tegra::Texture 378} // namespace Tegra::Texture