summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/video_core/gpu.h1
-rw-r--r--src/video_core/morton.cpp2
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.cpp117
-rw-r--r--src/video_core/renderer_vulkan/maxwell_to_vk.cpp1
-rw-r--r--src/video_core/renderer_vulkan/vk_device.cpp1
-rw-r--r--src/video_core/surface.cpp2
-rw-r--r--src/video_core/surface.h5
7 files changed, 71 insertions, 58 deletions
diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h
index 102f528c5..464f5c7d6 100644
--- a/src/video_core/gpu.h
+++ b/src/video_core/gpu.h
@@ -54,6 +54,7 @@ enum class RenderTargetFormat : u32 {
54 BGRA8_UNORM = 0xCF, 54 BGRA8_UNORM = 0xCF,
55 BGRA8_SRGB = 0xD0, 55 BGRA8_SRGB = 0xD0,
56 RGB10_A2_UNORM = 0xD1, 56 RGB10_A2_UNORM = 0xD1,
57 RGB10_A2_UINT = 0xD2,
57 RGBA8_UNORM = 0xD5, 58 RGBA8_UNORM = 0xD5,
58 RGBA8_SRGB = 0xD6, 59 RGBA8_SRGB = 0xD6,
59 RGBA8_SNORM = 0xD7, 60 RGBA8_SNORM = 0xD7,
diff --git a/src/video_core/morton.cpp b/src/video_core/morton.cpp
index 18bcb60b0..889f7caac 100644
--- a/src/video_core/morton.cpp
+++ b/src/video_core/morton.cpp
@@ -47,6 +47,7 @@ static constexpr ConversionArray morton_to_linear_fns = {
47 MortonCopy<true, PixelFormat::ABGR8UI>, 47 MortonCopy<true, PixelFormat::ABGR8UI>,
48 MortonCopy<true, PixelFormat::B5G6R5U>, 48 MortonCopy<true, PixelFormat::B5G6R5U>,
49 MortonCopy<true, PixelFormat::A2B10G10R10U>, 49 MortonCopy<true, PixelFormat::A2B10G10R10U>,
50 MortonCopy<true, PixelFormat::A2B10G10R10UI>,
50 MortonCopy<true, PixelFormat::A1B5G5R5U>, 51 MortonCopy<true, PixelFormat::A1B5G5R5U>,
51 MortonCopy<true, PixelFormat::R8U>, 52 MortonCopy<true, PixelFormat::R8U>,
52 MortonCopy<true, PixelFormat::R8S>, 53 MortonCopy<true, PixelFormat::R8S>,
@@ -137,6 +138,7 @@ static constexpr ConversionArray linear_to_morton_fns = {
137 MortonCopy<false, PixelFormat::ABGR8UI>, 138 MortonCopy<false, PixelFormat::ABGR8UI>,
138 MortonCopy<false, PixelFormat::B5G6R5U>, 139 MortonCopy<false, PixelFormat::B5G6R5U>,
139 MortonCopy<false, PixelFormat::A2B10G10R10U>, 140 MortonCopy<false, PixelFormat::A2B10G10R10U>,
141 MortonCopy<false, PixelFormat::A2B10G10R10UI>,
140 MortonCopy<false, PixelFormat::A1B5G5R5U>, 142 MortonCopy<false, PixelFormat::A1B5G5R5U>,
141 MortonCopy<false, PixelFormat::R8U>, 143 MortonCopy<false, PixelFormat::R8U>,
142 MortonCopy<false, PixelFormat::R8S>, 144 MortonCopy<false, PixelFormat::R8S>,
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp
index de1e05cd2..b5ebe0c43 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp
@@ -41,64 +41,65 @@ 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}, // ABGR8U
45 {GL_RGBA8_SNORM, GL_RGBA, GL_BYTE}, // ABGR8S 45 {GL_RGBA8_SNORM, GL_RGBA, GL_BYTE}, // ABGR8S
46 {GL_RGBA8I, GL_RGBA_INTEGER, GL_BYTE}, // ABGR8I 46 {GL_RGBA8I, GL_RGBA_INTEGER, GL_BYTE}, // ABGR8I
47 {GL_RGBA8UI, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE}, // ABGR8UI 47 {GL_RGBA8UI, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE}, // ABGR8UI
48 {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV}, // B5G6R5U 48 {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV}, // B5G6R5U
49 {GL_RGB10_A2, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10U 49 {GL_RGB10_A2, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10U
50 {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // A1B5G5R5U 50 {GL_RGB10_A2UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10UI
51 {GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8U 51 {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // A1B5G5R5U
52 {GL_R8_SNORM, GL_RED, GL_BYTE}, // R8S 52 {GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8U
53 {GL_R8I, GL_RED_INTEGER, GL_BYTE}, // R8I 53 {GL_R8_SNORM, GL_RED, GL_BYTE}, // R8S
54 {GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE}, // R8UI 54 {GL_R8I, GL_RED_INTEGER, GL_BYTE}, // R8I
55 {GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // RGBA16F 55 {GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE}, // R8UI
56 {GL_RGBA16, GL_RGBA, GL_UNSIGNED_SHORT}, // RGBA16U 56 {GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // RGBA16F
57 {GL_RGBA16_SNORM, GL_RGBA, GL_SHORT}, // RGBA16S 57 {GL_RGBA16, GL_RGBA, GL_UNSIGNED_SHORT}, // RGBA16U
58 {GL_RGBA16I, GL_RGBA_INTEGER, GL_SHORT}, // RGBA16I 58 {GL_RGBA16_SNORM, GL_RGBA, GL_SHORT}, // RGBA16S
59 {GL_RGBA16UI, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT}, // RGBA16UI 59 {GL_RGBA16I, GL_RGBA_INTEGER, GL_SHORT}, // RGBA16I
60 {GL_R11F_G11F_B10F, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV}, // R11FG11FB10F 60 {GL_RGBA16UI, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT}, // RGBA16UI
61 {GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT}, // RGBA32UI 61 {GL_R11F_G11F_B10F, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV}, // R11FG11FB10F
62 {GL_COMPRESSED_RGBA_S3TC_DXT1_EXT}, // DXT1 62 {GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT}, // RGBA32UI
63 {GL_COMPRESSED_RGBA_S3TC_DXT3_EXT}, // DXT23 63 {GL_COMPRESSED_RGBA_S3TC_DXT1_EXT}, // DXT1
64 {GL_COMPRESSED_RGBA_S3TC_DXT5_EXT}, // DXT45 64 {GL_COMPRESSED_RGBA_S3TC_DXT3_EXT}, // DXT23
65 {GL_COMPRESSED_RED_RGTC1}, // DXN1 65 {GL_COMPRESSED_RGBA_S3TC_DXT5_EXT}, // DXT45
66 {GL_COMPRESSED_RG_RGTC2}, // DXN2UNORM 66 {GL_COMPRESSED_RED_RGTC1}, // DXN1
67 {GL_COMPRESSED_SIGNED_RG_RGTC2}, // DXN2SNORM 67 {GL_COMPRESSED_RG_RGTC2}, // DXN2UNORM
68 {GL_COMPRESSED_RGBA_BPTC_UNORM}, // BC7U 68 {GL_COMPRESSED_SIGNED_RG_RGTC2}, // DXN2SNORM
69 {GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT}, // BC6H_UF16 69 {GL_COMPRESSED_RGBA_BPTC_UNORM}, // BC7U
70 {GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT}, // BC6H_SF16 70 {GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT}, // BC6H_UF16
71 {GL_COMPRESSED_RGBA_ASTC_4x4_KHR}, // ASTC_2D_4X4 71 {GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT}, // BC6H_SF16
72 {GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE}, // BGRA8 72 {GL_COMPRESSED_RGBA_ASTC_4x4_KHR}, // ASTC_2D_4X4
73 {GL_RGBA32F, GL_RGBA, GL_FLOAT}, // RGBA32F 73 {GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE}, // BGRA8
74 {GL_RGBA32I, GL_RGBA_INTEGER, GL_INT}, // RGBA32I 74 {GL_RGBA32F, GL_RGBA, GL_FLOAT}, // RGBA32F
75 {GL_RG32F, GL_RG, GL_FLOAT}, // RG32F 75 {GL_RGBA32I, GL_RGBA_INTEGER, GL_INT}, // RGBA32I
76 {GL_RG32I, GL_RG_INTEGER, GL_INT}, // RG32I 76 {GL_RG32F, GL_RG, GL_FLOAT}, // RG32F
77 {GL_R32F, GL_RED, GL_FLOAT}, // R32F 77 {GL_RG32I, GL_RG_INTEGER, GL_INT}, // RG32I
78 {GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16F 78 {GL_R32F, GL_RED, GL_FLOAT}, // R32F
79 {GL_R16, GL_RED, GL_UNSIGNED_SHORT}, // R16U 79 {GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16F
80 {GL_R16_SNORM, GL_RED, GL_SHORT}, // R16S 80 {GL_R16, GL_RED, GL_UNSIGNED_SHORT}, // R16U
81 {GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT}, // R16UI 81 {GL_R16_SNORM, GL_RED, GL_SHORT}, // R16S
82 {GL_R16I, GL_RED_INTEGER, GL_SHORT}, // R16I 82 {GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT}, // R16UI
83 {GL_RG16, GL_RG, GL_UNSIGNED_SHORT}, // RG16 83 {GL_R16I, GL_RED_INTEGER, GL_SHORT}, // R16I
84 {GL_RG16F, GL_RG, GL_HALF_FLOAT}, // RG16F 84 {GL_RG16, GL_RG, GL_UNSIGNED_SHORT}, // RG16
85 {GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT}, // RG16UI 85 {GL_RG16F, GL_RG, GL_HALF_FLOAT}, // RG16F
86 {GL_RG16I, GL_RG_INTEGER, GL_SHORT}, // RG16I 86 {GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT}, // RG16UI
87 {GL_RG16_SNORM, GL_RG, GL_SHORT}, // RG16S 87 {GL_RG16I, GL_RG_INTEGER, GL_SHORT}, // RG16I
88 {GL_RGB32F, GL_RGB, GL_FLOAT}, // RGB32F 88 {GL_RG16_SNORM, GL_RG, GL_SHORT}, // RG16S
89 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, // RGBA8_SRGB 89 {GL_RGB32F, GL_RGB, GL_FLOAT}, // RGB32F
90 {GL_RG8, GL_RG, GL_UNSIGNED_BYTE}, // RG8U 90 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, // RGBA8_SRGB
91 {GL_RG8_SNORM, GL_RG, GL_BYTE}, // RG8S 91 {GL_RG8, GL_RG, GL_UNSIGNED_BYTE}, // RG8U
92 {GL_RG8I, GL_RG_INTEGER, GL_BYTE}, // RG8I 92 {GL_RG8_SNORM, GL_RG, GL_BYTE}, // RG8S
93 {GL_RG8UI, GL_RG_INTEGER, GL_UNSIGNED_BYTE}, // RG8UI 93 {GL_RG8I, GL_RG_INTEGER, GL_BYTE}, // RG8I
94 {GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT}, // RG32UI 94 {GL_RG8UI, GL_RG_INTEGER, GL_UNSIGNED_BYTE}, // RG8UI
95 {GL_RGB16F, GL_RGBA, GL_HALF_FLOAT}, // RGBX16F 95 {GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT}, // RG32UI
96 {GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT}, // R32UI 96 {GL_RGB16F, GL_RGBA, GL_HALF_FLOAT}, // RGBX16F
97 {GL_R32I, GL_RED_INTEGER, GL_INT}, // R32I 97 {GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT}, // R32UI
98 {GL_COMPRESSED_RGBA_ASTC_8x8_KHR}, // ASTC_2D_8X8 98 {GL_R32I, GL_RED_INTEGER, GL_INT}, // R32I
99 {GL_COMPRESSED_RGBA_ASTC_8x5_KHR}, // ASTC_2D_8X5 99 {GL_COMPRESSED_RGBA_ASTC_8x8_KHR}, // ASTC_2D_8X8
100 {GL_COMPRESSED_RGBA_ASTC_5x4_KHR}, // ASTC_2D_5X4 100 {GL_COMPRESSED_RGBA_ASTC_8x5_KHR}, // ASTC_2D_8X5
101 {GL_SRGB8_ALPHA8, GL_BGRA, GL_UNSIGNED_BYTE}, // BGRA8 101 {GL_COMPRESSED_RGBA_ASTC_5x4_KHR}, // ASTC_2D_5X4
102 {GL_SRGB8_ALPHA8, GL_BGRA, GL_UNSIGNED_BYTE}, // BGRA8
102 // Compressed sRGB formats 103 // Compressed sRGB formats
103 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT}, // DXT1_SRGB 104 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT}, // DXT1_SRGB
104 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT}, // DXT23_SRGB 105 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT}, // DXT23_SRGB
diff --git a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp
index bab9f485f..134ef1781 100644
--- a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp
+++ b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp
@@ -123,6 +123,7 @@ struct FormatTuple {
123 {VK_FORMAT_A8B8G8R8_UINT_PACK32, Attachable | Storage}, // ABGR8UI 123 {VK_FORMAT_A8B8G8R8_UINT_PACK32, Attachable | Storage}, // ABGR8UI
124 {VK_FORMAT_B5G6R5_UNORM_PACK16}, // B5G6R5U 124 {VK_FORMAT_B5G6R5_UNORM_PACK16}, // B5G6R5U
125 {VK_FORMAT_A2B10G10R10_UNORM_PACK32, Attachable | Storage}, // A2B10G10R10U 125 {VK_FORMAT_A2B10G10R10_UNORM_PACK32, Attachable | Storage}, // A2B10G10R10U
126 {VK_FORMAT_A2B10G10R10_UINT_PACK32, Attachable | Storage}, // A2B10G10R10UI
126 {VK_FORMAT_A1R5G5B5_UNORM_PACK16, Attachable}, // A1B5G5R5U (flipped with swizzle) 127 {VK_FORMAT_A1R5G5B5_UNORM_PACK16, Attachable}, // A1B5G5R5U (flipped with swizzle)
127 {VK_FORMAT_R8_UNORM, Attachable | Storage}, // R8U 128 {VK_FORMAT_R8_UNORM, Attachable | Storage}, // R8U
128 {VK_FORMAT_R8_SNORM, Attachable | Storage}, // R8S 129 {VK_FORMAT_R8_SNORM, Attachable | Storage}, // R8S
diff --git a/src/video_core/renderer_vulkan/vk_device.cpp b/src/video_core/renderer_vulkan/vk_device.cpp
index 173957533..2f5621889 100644
--- a/src/video_core/renderer_vulkan/vk_device.cpp
+++ b/src/video_core/renderer_vulkan/vk_device.cpp
@@ -81,6 +81,7 @@ std::unordered_map<VkFormat, VkFormatProperties> GetFormatProperties(
81 VK_FORMAT_A8B8G8R8_SRGB_PACK32, 81 VK_FORMAT_A8B8G8R8_SRGB_PACK32,
82 VK_FORMAT_B5G6R5_UNORM_PACK16, 82 VK_FORMAT_B5G6R5_UNORM_PACK16,
83 VK_FORMAT_A2B10G10R10_UNORM_PACK32, 83 VK_FORMAT_A2B10G10R10_UNORM_PACK32,
84 VK_FORMAT_A2B10G10R10_UINT_PACK32,
84 VK_FORMAT_A1R5G5B5_UNORM_PACK16, 85 VK_FORMAT_A1R5G5B5_UNORM_PACK16,
85 VK_FORMAT_R32G32B32A32_SFLOAT, 86 VK_FORMAT_R32G32B32A32_SFLOAT,
86 VK_FORMAT_R32G32B32A32_SINT, 87 VK_FORMAT_R32G32B32A32_SINT,
diff --git a/src/video_core/surface.cpp b/src/video_core/surface.cpp
index b287fe83f..ea1e20de7 100644
--- a/src/video_core/surface.cpp
+++ b/src/video_core/surface.cpp
@@ -122,6 +122,8 @@ PixelFormat PixelFormatFromRenderTargetFormat(Tegra::RenderTargetFormat format)
122 return PixelFormat::BGRA8_SRGB; 122 return PixelFormat::BGRA8_SRGB;
123 case Tegra::RenderTargetFormat::RGB10_A2_UNORM: 123 case Tegra::RenderTargetFormat::RGB10_A2_UNORM:
124 return PixelFormat::A2B10G10R10U; 124 return PixelFormat::A2B10G10R10U;
125 case Tegra::RenderTargetFormat::RGB10_A2_UINT:
126 return PixelFormat::A2B10G10R10UI;
125 case Tegra::RenderTargetFormat::RGBA8_UNORM: 127 case Tegra::RenderTargetFormat::RGBA8_UNORM:
126 return PixelFormat::ABGR8U; 128 return PixelFormat::ABGR8U;
127 case Tegra::RenderTargetFormat::RGBA8_SRGB: 129 case Tegra::RenderTargetFormat::RGBA8_SRGB:
diff --git a/src/video_core/surface.h b/src/video_core/surface.h
index a564a00e9..aec6b1734 100644
--- a/src/video_core/surface.h
+++ b/src/video_core/surface.h
@@ -21,6 +21,7 @@ enum class PixelFormat {
21 ABGR8UI, 21 ABGR8UI,
22 B5G6R5U, 22 B5G6R5U,
23 A2B10G10R10U, 23 A2B10G10R10U,
24 A2B10G10R10UI,
24 A1B5G5R5U, 25 A1B5G5R5U,
25 R8U, 26 R8U,
26 R8S, 27 R8S,
@@ -143,6 +144,7 @@ constexpr std::array<u32, MaxPixelFormat> compression_factor_shift_table = {{
143 0, // ABGR8UI 144 0, // ABGR8UI
144 0, // B5G6R5U 145 0, // B5G6R5U
145 0, // A2B10G10R10U 146 0, // A2B10G10R10U
147 0, // A2B10G10R10UI
146 0, // A1B5G5R5U 148 0, // A1B5G5R5U
147 0, // R8U 149 0, // R8U
148 0, // R8S 150 0, // R8S
@@ -249,6 +251,7 @@ constexpr std::array<u32, MaxPixelFormat> block_width_table = {{
249 1, // ABGR8UI 251 1, // ABGR8UI
250 1, // B5G6R5U 252 1, // B5G6R5U
251 1, // A2B10G10R10U 253 1, // A2B10G10R10U
254 1, // A2B10G10R10UI
252 1, // A1B5G5R5U 255 1, // A1B5G5R5U
253 1, // R8U 256 1, // R8U
254 1, // R8S 257 1, // R8S
@@ -347,6 +350,7 @@ constexpr std::array<u32, MaxPixelFormat> block_height_table = {{
347 1, // ABGR8UI 350 1, // ABGR8UI
348 1, // B5G6R5U 351 1, // B5G6R5U
349 1, // A2B10G10R10U 352 1, // A2B10G10R10U
353 1, // A2B10G10R10UI
350 1, // A1B5G5R5U 354 1, // A1B5G5R5U
351 1, // R8U 355 1, // R8U
352 1, // R8S 356 1, // R8S
@@ -445,6 +449,7 @@ constexpr std::array<u32, MaxPixelFormat> bpp_table = {{
445 32, // ABGR8UI 449 32, // ABGR8UI
446 16, // B5G6R5U 450 16, // B5G6R5U
447 32, // A2B10G10R10U 451 32, // A2B10G10R10U
452 32, // A2B10G10R10UI
448 16, // A1B5G5R5U 453 16, // A1B5G5R5U
449 8, // R8U 454 8, // R8U
450 8, // R8S 455 8, // R8S