summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2019-10-02 19:00:16 -0400
committerGravatar FernandoS272019-10-09 12:44:31 -0400
commitb9ddb517b191b449b8d935acb29962e43054dde4 (patch)
tree1b57f73765004537476b04cb7ce131a3a7522453 /src
parentMerge pull request #2921 from FreddyFunk/compiler-warnings-core (diff)
downloadyuzu-b9ddb517b191b449b8d935acb29962e43054dde4.tar.gz
yuzu-b9ddb517b191b449b8d935acb29962e43054dde4.tar.xz
yuzu-b9ddb517b191b449b8d935acb29962e43054dde4.zip
Surfaces: Implement ASTC 6x6 10x10 12x12 8x6 6x5
Diffstat (limited to 'src')
-rw-r--r--src/video_core/morton.cpp20
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.cpp10
-rw-r--r--src/video_core/surface.cpp25
-rw-r--r--src/video_core/surface.h200
4 files changed, 185 insertions, 70 deletions
diff --git a/src/video_core/morton.cpp b/src/video_core/morton.cpp
index ab71870ab..f8f841490 100644
--- a/src/video_core/morton.cpp
+++ b/src/video_core/morton.cpp
@@ -101,6 +101,16 @@ static constexpr ConversionArray morton_to_linear_fns = {
101 MortonCopy<true, PixelFormat::ASTC_2D_5X5_SRGB>, 101 MortonCopy<true, PixelFormat::ASTC_2D_5X5_SRGB>,
102 MortonCopy<true, PixelFormat::ASTC_2D_10X8>, 102 MortonCopy<true, PixelFormat::ASTC_2D_10X8>,
103 MortonCopy<true, PixelFormat::ASTC_2D_10X8_SRGB>, 103 MortonCopy<true, PixelFormat::ASTC_2D_10X8_SRGB>,
104 MortonCopy<true, PixelFormat::ASTC_2D_6X6>,
105 MortonCopy<true, PixelFormat::ASTC_2D_6X6_SRGB>,
106 MortonCopy<true, PixelFormat::ASTC_2D_10X10>,
107 MortonCopy<true, PixelFormat::ASTC_2D_10X10_SRGB>,
108 MortonCopy<true, PixelFormat::ASTC_2D_12X12>,
109 MortonCopy<true, PixelFormat::ASTC_2D_12X12_SRGB>,
110 MortonCopy<true, PixelFormat::ASTC_2D_8X6>,
111 MortonCopy<true, PixelFormat::ASTC_2D_8X6_SRGB>,
112 MortonCopy<true, PixelFormat::ASTC_2D_6X5>,
113 MortonCopy<true, PixelFormat::ASTC_2D_6X5_SRGB>,
104 MortonCopy<true, PixelFormat::Z32F>, 114 MortonCopy<true, PixelFormat::Z32F>,
105 MortonCopy<true, PixelFormat::Z16>, 115 MortonCopy<true, PixelFormat::Z16>,
106 MortonCopy<true, PixelFormat::Z24S8>, 116 MortonCopy<true, PixelFormat::Z24S8>,
@@ -170,6 +180,16 @@ static constexpr ConversionArray linear_to_morton_fns = {
170 nullptr, 180 nullptr,
171 nullptr, 181 nullptr,
172 nullptr, 182 nullptr,
183 nullptr,
184 nullptr,
185 nullptr,
186 nullptr,
187 nullptr,
188 nullptr,
189 nullptr,
190 nullptr,
191 nullptr,
192 nullptr,
173 MortonCopy<false, PixelFormat::Z32F>, 193 MortonCopy<false, PixelFormat::Z32F>,
174 MortonCopy<false, PixelFormat::Z16>, 194 MortonCopy<false, PixelFormat::Z16>,
175 MortonCopy<false, PixelFormat::Z24S8>, 195 MortonCopy<false, PixelFormat::Z24S8>,
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp
index 173b76c4e..a0ca502b4 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp
@@ -120,6 +120,16 @@ constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> tex_format
120 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_5X5_SRGB 120 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_5X5_SRGB
121 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_10X8 121 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_10X8
122 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_10X8_SRGB 122 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_10X8_SRGB
123 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_6X6
124 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_6X6_SRGB
125 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_10X10
126 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_10X10_SRGB
127 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_12X12
128 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_12X12_SRGB
129 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X6
130 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X6_SRGB
131 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_6X5
132 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_6X5_SRGB
123 133
124 // Depth formats 134 // Depth formats
125 {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT, ComponentType::Float, false}, // Z32F 135 {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT, ComponentType::Float, false}, // Z32F
diff --git a/src/video_core/surface.cpp b/src/video_core/surface.cpp
index 250afc6d6..a61dcbfb0 100644
--- a/src/video_core/surface.cpp
+++ b/src/video_core/surface.cpp
@@ -350,6 +350,16 @@ PixelFormat PixelFormatFromTextureFormat(Tegra::Texture::TextureFormat format,
350 return is_srgb ? PixelFormat::ASTC_2D_8X5_SRGB : PixelFormat::ASTC_2D_8X5; 350 return is_srgb ? PixelFormat::ASTC_2D_8X5_SRGB : PixelFormat::ASTC_2D_8X5;
351 case Tegra::Texture::TextureFormat::ASTC_2D_10X8: 351 case Tegra::Texture::TextureFormat::ASTC_2D_10X8:
352 return is_srgb ? PixelFormat::ASTC_2D_10X8_SRGB : PixelFormat::ASTC_2D_10X8; 352 return is_srgb ? PixelFormat::ASTC_2D_10X8_SRGB : PixelFormat::ASTC_2D_10X8;
353 case Tegra::Texture::TextureFormat::ASTC_2D_6X6:
354 return is_srgb ? PixelFormat::ASTC_2D_6X6_SRGB : PixelFormat::ASTC_2D_6X6;
355 case Tegra::Texture::TextureFormat::ASTC_2D_10X10:
356 return is_srgb ? PixelFormat::ASTC_2D_10X10_SRGB : PixelFormat::ASTC_2D_10X10;
357 case Tegra::Texture::TextureFormat::ASTC_2D_12X12:
358 return is_srgb ? PixelFormat::ASTC_2D_12X12_SRGB : PixelFormat::ASTC_2D_12X12;
359 case Tegra::Texture::TextureFormat::ASTC_2D_8X6:
360 return is_srgb ? PixelFormat::ASTC_2D_8X6_SRGB : PixelFormat::ASTC_2D_8X6;
361 case Tegra::Texture::TextureFormat::ASTC_2D_6X5:
362 return is_srgb ? PixelFormat::ASTC_2D_6X5_SRGB : PixelFormat::ASTC_2D_6X5;
353 case Tegra::Texture::TextureFormat::R16_G16: 363 case Tegra::Texture::TextureFormat::R16_G16:
354 switch (component_type) { 364 switch (component_type) {
355 case Tegra::Texture::ComponentType::FLOAT: 365 case Tegra::Texture::ComponentType::FLOAT:
@@ -510,6 +520,16 @@ bool IsPixelFormatASTC(PixelFormat format) {
510 case PixelFormat::ASTC_2D_8X5_SRGB: 520 case PixelFormat::ASTC_2D_8X5_SRGB:
511 case PixelFormat::ASTC_2D_10X8: 521 case PixelFormat::ASTC_2D_10X8:
512 case PixelFormat::ASTC_2D_10X8_SRGB: 522 case PixelFormat::ASTC_2D_10X8_SRGB:
523 case PixelFormat::ASTC_2D_6X6:
524 case PixelFormat::ASTC_2D_6X6_SRGB:
525 case PixelFormat::ASTC_2D_10X10:
526 case PixelFormat::ASTC_2D_10X10_SRGB:
527 case PixelFormat::ASTC_2D_12X12:
528 case PixelFormat::ASTC_2D_12X12_SRGB:
529 case PixelFormat::ASTC_2D_8X6:
530 case PixelFormat::ASTC_2D_8X6_SRGB:
531 case PixelFormat::ASTC_2D_6X5:
532 case PixelFormat::ASTC_2D_6X5_SRGB:
513 return true; 533 return true;
514 default: 534 default:
515 return false; 535 return false;
@@ -530,6 +550,11 @@ bool IsPixelFormatSRGB(PixelFormat format) {
530 case PixelFormat::ASTC_2D_5X4_SRGB: 550 case PixelFormat::ASTC_2D_5X4_SRGB:
531 case PixelFormat::ASTC_2D_5X5_SRGB: 551 case PixelFormat::ASTC_2D_5X5_SRGB:
532 case PixelFormat::ASTC_2D_10X8_SRGB: 552 case PixelFormat::ASTC_2D_10X8_SRGB:
553 case PixelFormat::ASTC_2D_6X6_SRGB:
554 case PixelFormat::ASTC_2D_10X10_SRGB:
555 case PixelFormat::ASTC_2D_12X12_SRGB:
556 case PixelFormat::ASTC_2D_8X6_SRGB:
557 case PixelFormat::ASTC_2D_6X5_SRGB:
533 return true; 558 return true;
534 default: 559 default:
535 return false; 560 return false;
diff --git a/src/video_core/surface.h b/src/video_core/surface.h
index 1e1c432a5..dc7306a74 100644
--- a/src/video_core/surface.h
+++ b/src/video_core/surface.h
@@ -75,19 +75,29 @@ enum class PixelFormat {
75 ASTC_2D_5X5_SRGB = 57, 75 ASTC_2D_5X5_SRGB = 57,
76 ASTC_2D_10X8 = 58, 76 ASTC_2D_10X8 = 58,
77 ASTC_2D_10X8_SRGB = 59, 77 ASTC_2D_10X8_SRGB = 59,
78 ASTC_2D_6X6 = 60,
79 ASTC_2D_6X6_SRGB = 61,
80 ASTC_2D_10X10 = 62,
81 ASTC_2D_10X10_SRGB = 63,
82 ASTC_2D_12X12 = 64,
83 ASTC_2D_12X12_SRGB = 65,
84 ASTC_2D_8X6 = 66,
85 ASTC_2D_8X6_SRGB = 67,
86 ASTC_2D_6X5 = 68,
87 ASTC_2D_6X5_SRGB = 69,
78 88
79 MaxColorFormat, 89 MaxColorFormat,
80 90
81 // Depth formats 91 // Depth formats
82 Z32F = 60, 92 Z32F = 70,
83 Z16 = 61, 93 Z16 = 71,
84 94
85 MaxDepthFormat, 95 MaxDepthFormat,
86 96
87 // DepthStencil formats 97 // DepthStencil formats
88 Z24S8 = 62, 98 Z24S8 = 72,
89 S8Z24 = 63, 99 S8Z24 = 73,
90 Z32FS8 = 64, 100 Z32FS8 = 74,
91 101
92 MaxDepthStencilFormat, 102 MaxDepthStencilFormat,
93 103
@@ -185,6 +195,16 @@ constexpr std::array<u32, MaxPixelFormat> compression_factor_shift_table = {{
185 2, // ASTC_2D_5X5_SRGB 195 2, // ASTC_2D_5X5_SRGB
186 2, // ASTC_2D_10X8 196 2, // ASTC_2D_10X8
187 2, // ASTC_2D_10X8_SRGB 197 2, // ASTC_2D_10X8_SRGB
198 2, // ASTC_2D_6X6
199 2, // ASTC_2D_6X6_SRGB
200 2, // ASTC_2D_10X10
201 2, // ASTC_2D_10X10_SRGB
202 2, // ASTC_2D_12X12
203 2, // ASTC_2D_12X12_SRGB
204 2, // ASTC_2D_8X6
205 2, // ASTC_2D_8X6_SRGB
206 2, // ASTC_2D_6X5
207 2, // ASTC_2D_6X5_SRGB
188 0, // Z32F 208 0, // Z32F
189 0, // Z16 209 0, // Z16
190 0, // Z24S8 210 0, // Z24S8
@@ -269,6 +289,16 @@ constexpr std::array<u32, MaxPixelFormat> block_width_table = {{
269 5, // ASTC_2D_5X5_SRGB 289 5, // ASTC_2D_5X5_SRGB
270 10, // ASTC_2D_10X8 290 10, // ASTC_2D_10X8
271 10, // ASTC_2D_10X8_SRGB 291 10, // ASTC_2D_10X8_SRGB
292 6, // ASTC_2D_6X6
293 6, // ASTC_2D_6X6_SRGB
294 10, // ASTC_2D_10X10
295 10, // ASTC_2D_10X10_SRGB
296 12, // ASTC_2D_12X12
297 12, // ASTC_2D_12X12_SRGB
298 8, // ASTC_2D_8X6
299 8, // ASTC_2D_8X6_SRGB
300 6, // ASTC_2D_6X5
301 6, // ASTC_2D_6X5_SRGB
272 1, // Z32F 302 1, // Z32F
273 1, // Z16 303 1, // Z16
274 1, // Z24S8 304 1, // Z24S8
@@ -285,71 +315,81 @@ static constexpr u32 GetDefaultBlockWidth(PixelFormat format) {
285} 315}
286 316
287constexpr std::array<u32, MaxPixelFormat> block_height_table = {{ 317constexpr std::array<u32, MaxPixelFormat> block_height_table = {{
288 1, // ABGR8U 318 1, // ABGR8U
289 1, // ABGR8S 319 1, // ABGR8S
290 1, // ABGR8UI 320 1, // ABGR8UI
291 1, // B5G6R5U 321 1, // B5G6R5U
292 1, // A2B10G10R10U 322 1, // A2B10G10R10U
293 1, // A1B5G5R5U 323 1, // A1B5G5R5U
294 1, // R8U 324 1, // R8U
295 1, // R8UI 325 1, // R8UI
296 1, // RGBA16F 326 1, // RGBA16F
297 1, // RGBA16U 327 1, // RGBA16U
298 1, // RGBA16UI 328 1, // RGBA16UI
299 1, // R11FG11FB10F 329 1, // R11FG11FB10F
300 1, // RGBA32UI 330 1, // RGBA32UI
301 4, // DXT1 331 4, // DXT1
302 4, // DXT23 332 4, // DXT23
303 4, // DXT45 333 4, // DXT45
304 4, // DXN1 334 4, // DXN1
305 4, // DXN2UNORM 335 4, // DXN2UNORM
306 4, // DXN2SNORM 336 4, // DXN2SNORM
307 4, // BC7U 337 4, // BC7U
308 4, // BC6H_UF16 338 4, // BC6H_UF16
309 4, // BC6H_SF16 339 4, // BC6H_SF16
310 4, // ASTC_2D_4X4 340 4, // ASTC_2D_4X4
311 1, // BGRA8 341 1, // BGRA8
312 1, // RGBA32F 342 1, // RGBA32F
313 1, // RG32F 343 1, // RG32F
314 1, // R32F 344 1, // R32F
315 1, // R16F 345 1, // R16F
316 1, // R16U 346 1, // R16U
317 1, // R16S 347 1, // R16S
318 1, // R16UI 348 1, // R16UI
319 1, // R16I 349 1, // R16I
320 1, // RG16 350 1, // RG16
321 1, // RG16F 351 1, // RG16F
322 1, // RG16UI 352 1, // RG16UI
323 1, // RG16I 353 1, // RG16I
324 1, // RG16S 354 1, // RG16S
325 1, // RGB32F 355 1, // RGB32F
326 1, // RGBA8_SRGB 356 1, // RGBA8_SRGB
327 1, // RG8U 357 1, // RG8U
328 1, // RG8S 358 1, // RG8S
329 1, // RG32UI 359 1, // RG32UI
330 1, // RGBX16F 360 1, // RGBX16F
331 1, // R32UI 361 1, // R32UI
332 8, // ASTC_2D_8X8 362 8, // ASTC_2D_8X8
333 5, // ASTC_2D_8X5 363 5, // ASTC_2D_8X5
334 4, // ASTC_2D_5X4 364 4, // ASTC_2D_5X4
335 1, // BGRA8_SRGB 365 1, // BGRA8_SRGB
336 4, // DXT1_SRGB 366 4, // DXT1_SRGB
337 4, // DXT23_SRGB 367 4, // DXT23_SRGB
338 4, // DXT45_SRGB 368 4, // DXT45_SRGB
339 4, // BC7U_SRGB 369 4, // BC7U_SRGB
340 4, // ASTC_2D_4X4_SRGB 370 4, // ASTC_2D_4X4_SRGB
341 8, // ASTC_2D_8X8_SRGB 371 8, // ASTC_2D_8X8_SRGB
342 5, // ASTC_2D_8X5_SRGB 372 5, // ASTC_2D_8X5_SRGB
343 4, // ASTC_2D_5X4_SRGB 373 4, // ASTC_2D_5X4_SRGB
344 5, // ASTC_2D_5X5 374 5, // ASTC_2D_5X5
345 5, // ASTC_2D_5X5_SRGB 375 5, // ASTC_2D_5X5_SRGB
346 8, // ASTC_2D_10X8 376 8, // ASTC_2D_10X8
347 8, // ASTC_2D_10X8_SRGB 377 8, // ASTC_2D_10X8_SRGB
348 1, // Z32F 378 6, // ASTC_2D_6X6
349 1, // Z16 379 6, // ASTC_2D_6X6_SRGB
350 1, // Z24S8 380 10, // ASTC_2D_10X10
351 1, // S8Z24 381 10, // ASTC_2D_10X10_SRGB
352 1, // Z32FS8 382 12, // ASTC_2D_12X12
383 12, // ASTC_2D_12X12_SRGB
384 6, // ASTC_2D_8X6
385 6, // ASTC_2D_8X6_SRGB
386 5, // ASTC_2D_6X5
387 5, // ASTC_2D_6X5_SRGB
388 1, // Z32F
389 1, // Z16
390 1, // Z24S8
391 1, // S8Z24
392 1, // Z32FS8
353}}; 393}};
354 394
355static constexpr u32 GetDefaultBlockHeight(PixelFormat format) { 395static constexpr u32 GetDefaultBlockHeight(PixelFormat format) {
@@ -421,6 +461,16 @@ constexpr std::array<u32, MaxPixelFormat> bpp_table = {{
421 128, // ASTC_2D_5X5_SRGB 461 128, // ASTC_2D_5X5_SRGB
422 128, // ASTC_2D_10X8 462 128, // ASTC_2D_10X8
423 128, // ASTC_2D_10X8_SRGB 463 128, // ASTC_2D_10X8_SRGB
464 128, // ASTC_2D_6X6
465 128, // ASTC_2D_6X6_SRGB
466 128, // ASTC_2D_10X10
467 128, // ASTC_2D_10X10_SRGB
468 128, // ASTC_2D_12X12
469 128, // ASTC_2D_12X12_SRGB
470 128, // ASTC_2D_8X6
471 128, // ASTC_2D_8X6_SRGB
472 128, // ASTC_2D_6X5
473 128, // ASTC_2D_6X5_SRGB
424 32, // Z32F 474 32, // Z32F
425 16, // Z16 475 16, // Z16
426 32, // Z24S8 476 32, // Z24S8
@@ -512,6 +562,16 @@ constexpr std::array<SurfaceCompression, MaxPixelFormat> compression_type_table
512 SurfaceCompression::Converted, // ASTC_2D_5X5_SRGB 562 SurfaceCompression::Converted, // ASTC_2D_5X5_SRGB
513 SurfaceCompression::Converted, // ASTC_2D_10X8 563 SurfaceCompression::Converted, // ASTC_2D_10X8
514 SurfaceCompression::Converted, // ASTC_2D_10X8_SRGB 564 SurfaceCompression::Converted, // ASTC_2D_10X8_SRGB
565 SurfaceCompression::Converted, // ASTC_2D_6X6
566 SurfaceCompression::Converted, // ASTC_2D_6X6_SRGB
567 SurfaceCompression::Converted, // ASTC_2D_10X10
568 SurfaceCompression::Converted, // ASTC_2D_10X10_SRGB
569 SurfaceCompression::Converted, // ASTC_2D_12X12
570 SurfaceCompression::Converted, // ASTC_2D_12X12_SRGB
571 SurfaceCompression::Converted, // ASTC_2D_8X6
572 SurfaceCompression::Converted, // ASTC_2D_8X6_SRGB
573 SurfaceCompression::Converted, // ASTC_2D_6X5
574 SurfaceCompression::Converted, // ASTC_2D_6X5_SRGB
515 SurfaceCompression::None, // Z32F 575 SurfaceCompression::None, // Z32F
516 SurfaceCompression::None, // Z16 576 SurfaceCompression::None, // Z16
517 SurfaceCompression::None, // Z24S8 577 SurfaceCompression::None, // Z24S8