summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2019-10-08 12:54:59 -0400
committerGravatar FernandoS272019-10-09 12:57:02 -0400
commitf32a49d3d8b820a20c5311a0c27df5846d55b0e9 (patch)
tree6246dd9150144fdcb1947bb0d84105ed2e3f406c
parentSurfaces: Implement ASTC 6x6 10x10 12x12 8x6 6x5 (diff)
downloadyuzu-f32a49d3d8b820a20c5311a0c27df5846d55b0e9.tar.gz
yuzu-f32a49d3d8b820a20c5311a0c27df5846d55b0e9.tar.xz
yuzu-f32a49d3d8b820a20c5311a0c27df5846d55b0e9.zip
Surfaces: Implement R4G4B4A4U format.
-rw-r--r--src/video_core/morton.cpp2
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.cpp3
-rw-r--r--src/video_core/surface.cpp8
-rw-r--r--src/video_core/surface.h52
4 files changed, 41 insertions, 24 deletions
diff --git a/src/video_core/morton.cpp b/src/video_core/morton.cpp
index f8f841490..fe5f08ace 100644
--- a/src/video_core/morton.cpp
+++ b/src/video_core/morton.cpp
@@ -93,6 +93,7 @@ static constexpr ConversionArray morton_to_linear_fns = {
93 MortonCopy<true, PixelFormat::DXT23_SRGB>, 93 MortonCopy<true, PixelFormat::DXT23_SRGB>,
94 MortonCopy<true, PixelFormat::DXT45_SRGB>, 94 MortonCopy<true, PixelFormat::DXT45_SRGB>,
95 MortonCopy<true, PixelFormat::BC7U_SRGB>, 95 MortonCopy<true, PixelFormat::BC7U_SRGB>,
96 MortonCopy<true, PixelFormat::R4G4B4A4U>,
96 MortonCopy<true, PixelFormat::ASTC_2D_4X4_SRGB>, 97 MortonCopy<true, PixelFormat::ASTC_2D_4X4_SRGB>,
97 MortonCopy<true, PixelFormat::ASTC_2D_8X8_SRGB>, 98 MortonCopy<true, PixelFormat::ASTC_2D_8X8_SRGB>,
98 MortonCopy<true, PixelFormat::ASTC_2D_8X5_SRGB>, 99 MortonCopy<true, PixelFormat::ASTC_2D_8X5_SRGB>,
@@ -172,6 +173,7 @@ static constexpr ConversionArray linear_to_morton_fns = {
172 MortonCopy<false, PixelFormat::DXT23_SRGB>, 173 MortonCopy<false, PixelFormat::DXT23_SRGB>,
173 MortonCopy<false, PixelFormat::DXT45_SRGB>, 174 MortonCopy<false, PixelFormat::DXT45_SRGB>,
174 MortonCopy<false, PixelFormat::BC7U_SRGB>, 175 MortonCopy<false, PixelFormat::BC7U_SRGB>,
176 MortonCopy<false, PixelFormat::R4G4B4A4U>,
175 nullptr, 177 nullptr,
176 nullptr, 178 nullptr,
177 nullptr, 179 nullptr,
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp
index a0ca502b4..2f9bfd7e4 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp
@@ -111,7 +111,8 @@ constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> tex_format
111 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm, 111 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm,
112 true}, // DXT45_SRGB 112 true}, // DXT45_SRGB
113 {GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm, 113 {GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm,
114 true}, // BC7U_SRGB 114 true}, // BC7U_SRGB
115 {GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4_REV, ComponentType::UNorm, false}, // R4G4B4A4U
115 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_4X4_SRGB 116 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_4X4_SRGB
116 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X8_SRGB 117 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X8_SRGB
117 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X5_SRGB 118 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X5_SRGB
diff --git a/src/video_core/surface.cpp b/src/video_core/surface.cpp
index a61dcbfb0..4416fb4ac 100644
--- a/src/video_core/surface.cpp
+++ b/src/video_core/surface.cpp
@@ -212,6 +212,14 @@ PixelFormat PixelFormatFromTextureFormat(Tegra::Texture::TextureFormat format,
212 break; 212 break;
213 } 213 }
214 break; 214 break;
215 case Tegra::Texture::TextureFormat::A4B4G4R4:
216 switch (component_type) {
217 case Tegra::Texture::ComponentType::UNORM:
218 return PixelFormat::R4G4B4A4U;
219 default:
220 break;
221 }
222 break;
215 case Tegra::Texture::TextureFormat::R8: 223 case Tegra::Texture::TextureFormat::R8:
216 switch (component_type) { 224 switch (component_type) {
217 case Tegra::Texture::ComponentType::UNORM: 225 case Tegra::Texture::ComponentType::UNORM:
diff --git a/src/video_core/surface.h b/src/video_core/surface.h
index dc7306a74..97668f802 100644
--- a/src/video_core/surface.h
+++ b/src/video_core/surface.h
@@ -67,37 +67,38 @@ enum class PixelFormat {
67 DXT23_SRGB = 49, 67 DXT23_SRGB = 49,
68 DXT45_SRGB = 50, 68 DXT45_SRGB = 50,
69 BC7U_SRGB = 51, 69 BC7U_SRGB = 51,
70 ASTC_2D_4X4_SRGB = 52, 70 R4G4B4A4U = 52,
71 ASTC_2D_8X8_SRGB = 53, 71 ASTC_2D_4X4_SRGB = 53,
72 ASTC_2D_8X5_SRGB = 54, 72 ASTC_2D_8X8_SRGB = 54,
73 ASTC_2D_5X4_SRGB = 55, 73 ASTC_2D_8X5_SRGB = 55,
74 ASTC_2D_5X5 = 56, 74 ASTC_2D_5X4_SRGB = 56,
75 ASTC_2D_5X5_SRGB = 57, 75 ASTC_2D_5X5 = 57,
76 ASTC_2D_10X8 = 58, 76 ASTC_2D_5X5_SRGB = 58,
77 ASTC_2D_10X8_SRGB = 59, 77 ASTC_2D_10X8 = 59,
78 ASTC_2D_6X6 = 60, 78 ASTC_2D_10X8_SRGB = 60,
79 ASTC_2D_6X6_SRGB = 61, 79 ASTC_2D_6X6 = 61,
80 ASTC_2D_10X10 = 62, 80 ASTC_2D_6X6_SRGB = 62,
81 ASTC_2D_10X10_SRGB = 63, 81 ASTC_2D_10X10 = 63,
82 ASTC_2D_12X12 = 64, 82 ASTC_2D_10X10_SRGB = 64,
83 ASTC_2D_12X12_SRGB = 65, 83 ASTC_2D_12X12 = 65,
84 ASTC_2D_8X6 = 66, 84 ASTC_2D_12X12_SRGB = 66,
85 ASTC_2D_8X6_SRGB = 67, 85 ASTC_2D_8X6 = 67,
86 ASTC_2D_6X5 = 68, 86 ASTC_2D_8X6_SRGB = 68,
87 ASTC_2D_6X5_SRGB = 69, 87 ASTC_2D_6X5 = 69,
88 ASTC_2D_6X5_SRGB = 70,
88 89
89 MaxColorFormat, 90 MaxColorFormat,
90 91
91 // Depth formats 92 // Depth formats
92 Z32F = 70, 93 Z32F = 71,
93 Z16 = 71, 94 Z16 = 72,
94 95
95 MaxDepthFormat, 96 MaxDepthFormat,
96 97
97 // DepthStencil formats 98 // DepthStencil formats
98 Z24S8 = 72, 99 Z24S8 = 73,
99 S8Z24 = 73, 100 S8Z24 = 74,
100 Z32FS8 = 74, 101 Z32FS8 = 75,
101 102
102 MaxDepthStencilFormat, 103 MaxDepthStencilFormat,
103 104
@@ -187,6 +188,7 @@ constexpr std::array<u32, MaxPixelFormat> compression_factor_shift_table = {{
187 2, // DXT23_SRGB 188 2, // DXT23_SRGB
188 2, // DXT45_SRGB 189 2, // DXT45_SRGB
189 2, // BC7U_SRGB 190 2, // BC7U_SRGB
191 0, // R4G4B4A4U
190 2, // ASTC_2D_4X4_SRGB 192 2, // ASTC_2D_4X4_SRGB
191 2, // ASTC_2D_8X8_SRGB 193 2, // ASTC_2D_8X8_SRGB
192 2, // ASTC_2D_8X5_SRGB 194 2, // ASTC_2D_8X5_SRGB
@@ -281,6 +283,7 @@ constexpr std::array<u32, MaxPixelFormat> block_width_table = {{
281 4, // DXT23_SRGB 283 4, // DXT23_SRGB
282 4, // DXT45_SRGB 284 4, // DXT45_SRGB
283 4, // BC7U_SRGB 285 4, // BC7U_SRGB
286 1, // R4G4B4A4U
284 4, // ASTC_2D_4X4_SRGB 287 4, // ASTC_2D_4X4_SRGB
285 8, // ASTC_2D_8X8_SRGB 288 8, // ASTC_2D_8X8_SRGB
286 8, // ASTC_2D_8X5_SRGB 289 8, // ASTC_2D_8X5_SRGB
@@ -367,6 +370,7 @@ constexpr std::array<u32, MaxPixelFormat> block_height_table = {{
367 4, // DXT23_SRGB 370 4, // DXT23_SRGB
368 4, // DXT45_SRGB 371 4, // DXT45_SRGB
369 4, // BC7U_SRGB 372 4, // BC7U_SRGB
373 1, // R4G4B4A4U
370 4, // ASTC_2D_4X4_SRGB 374 4, // ASTC_2D_4X4_SRGB
371 8, // ASTC_2D_8X8_SRGB 375 8, // ASTC_2D_8X8_SRGB
372 5, // ASTC_2D_8X5_SRGB 376 5, // ASTC_2D_8X5_SRGB
@@ -453,6 +457,7 @@ constexpr std::array<u32, MaxPixelFormat> bpp_table = {{
453 128, // DXT23_SRGB 457 128, // DXT23_SRGB
454 128, // DXT45_SRGB 458 128, // DXT45_SRGB
455 128, // BC7U 459 128, // BC7U
460 16, // R4G4B4A4U
456 128, // ASTC_2D_4X4_SRGB 461 128, // ASTC_2D_4X4_SRGB
457 128, // ASTC_2D_8X8_SRGB 462 128, // ASTC_2D_8X8_SRGB
458 128, // ASTC_2D_8X5_SRGB 463 128, // ASTC_2D_8X5_SRGB
@@ -554,6 +559,7 @@ constexpr std::array<SurfaceCompression, MaxPixelFormat> compression_type_table
554 SurfaceCompression::Compressed, // DXT23_SRGB 559 SurfaceCompression::Compressed, // DXT23_SRGB
555 SurfaceCompression::Compressed, // DXT45_SRGB 560 SurfaceCompression::Compressed, // DXT45_SRGB
556 SurfaceCompression::Compressed, // BC7U_SRGB 561 SurfaceCompression::Compressed, // BC7U_SRGB
562 SurfaceCompression::None, // R4G4B4A4U
557 SurfaceCompression::Converted, // ASTC_2D_4X4_SRGB 563 SurfaceCompression::Converted, // ASTC_2D_4X4_SRGB
558 SurfaceCompression::Converted, // ASTC_2D_8X8_SRGB 564 SurfaceCompression::Converted, // ASTC_2D_8X8_SRGB
559 SurfaceCompression::Converted, // ASTC_2D_8X5_SRGB 565 SurfaceCompression::Converted, // ASTC_2D_8X5_SRGB