diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
index 894f4f2944a3f69b699cc1d9db14054ba8ceff1c..24cd88d06ddbe89570ba9c360a75e4dc7b4f88ef 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
@@ -314,6 +314,8 @@ static constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> tex
     {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_5X4_SRGB
     {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false},        // ASTC_2D_5X5
     {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_5X5_SRGB
+    {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false},        // ASTC_2D_10X8
+    {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_10X8_SRGB
 
     // Depth formats
     {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT, ComponentType::Float, false}, // Z32F
@@ -456,6 +458,8 @@ static constexpr GLConversionArray morton_to_gl_fns = {
         MortonCopy<true, PixelFormat::ASTC_2D_5X4_SRGB>,
         MortonCopy<true, PixelFormat::ASTC_2D_5X5>,
         MortonCopy<true, PixelFormat::ASTC_2D_5X5_SRGB>,
+        MortonCopy<true, PixelFormat::ASTC_2D_10X8>,
+        MortonCopy<true, PixelFormat::ASTC_2D_10X8_SRGB>,
         MortonCopy<true, PixelFormat::Z32F>,
         MortonCopy<true, PixelFormat::Z16>,
         MortonCopy<true, PixelFormat::Z24S8>,
@@ -526,6 +530,8 @@ static constexpr GLConversionArray gl_to_morton_fns = {
         nullptr,
         nullptr,
         nullptr,
+        nullptr,
+        nullptr,
         MortonCopy<false, PixelFormat::Z32F>,
         MortonCopy<false, PixelFormat::Z16>,
         MortonCopy<false, PixelFormat::Z24S8>,
@@ -932,7 +938,9 @@ static void ConvertFormatAsNeeded_LoadGLBuffer(std::vector<u8>& data, PixelForma
     case PixelFormat::ASTC_2D_8X8_SRGB:
     case PixelFormat::ASTC_2D_8X5_SRGB:
     case PixelFormat::ASTC_2D_5X4_SRGB:
-    case PixelFormat::ASTC_2D_5X5_SRGB: {
+    case PixelFormat::ASTC_2D_5X5_SRGB:
+    case PixelFormat::ASTC_2D_10X8:
+    case PixelFormat::ASTC_2D_10X8_SRGB: {
         // Convert ASTC pixel formats to RGBA8, as most desktop GPUs do not support ASTC.
         u32 block_width{};
         u32 block_height{};
@@ -967,7 +975,11 @@ static void ConvertFormatAsNeeded_FlushGLBuffer(std::vector<u8>& data, PixelForm
     case PixelFormat::ASTC_2D_4X4:
     case PixelFormat::ASTC_2D_8X8:
     case PixelFormat::ASTC_2D_4X4_SRGB:
-    case PixelFormat::ASTC_2D_8X8_SRGB: {
+    case PixelFormat::ASTC_2D_8X8_SRGB:
+    case PixelFormat::ASTC_2D_5X5:
+    case PixelFormat::ASTC_2D_5X5_SRGB:
+    case PixelFormat::ASTC_2D_10X8:
+    case PixelFormat::ASTC_2D_10X8_SRGB: {
         LOG_CRITICAL(HW_GPU, "Conversion of format {} after texture flushing is not implemented",
                      static_cast<u32>(pixel_format));
         UNREACHABLE();
diff --git a/src/video_core/surface.cpp b/src/video_core/surface.cpp
index 051ad39649c091cf398321ea0afb7fc35b770038..9582dd2ca16de90537b36503ad30cccc547bf875 100644
--- a/src/video_core/surface.cpp
+++ b/src/video_core/surface.cpp
@@ -306,6 +306,8 @@ PixelFormat PixelFormatFromTextureFormat(Tegra::Texture::TextureFormat format,
         return is_srgb ? PixelFormat::ASTC_2D_8X8_SRGB : PixelFormat::ASTC_2D_8X8;
     case Tegra::Texture::TextureFormat::ASTC_2D_8X5:
         return is_srgb ? PixelFormat::ASTC_2D_8X5_SRGB : PixelFormat::ASTC_2D_8X5;
+    case Tegra::Texture::TextureFormat::ASTC_2D_10X8:
+        return is_srgb ? PixelFormat::ASTC_2D_10X8_SRGB : PixelFormat::ASTC_2D_10X8;
     case Tegra::Texture::TextureFormat::R16_G16:
         switch (component_type) {
         case Tegra::Texture::ComponentType::FLOAT:
@@ -453,6 +455,8 @@ bool IsPixelFormatASTC(PixelFormat format) {
     case PixelFormat::ASTC_2D_5X5_SRGB:
     case PixelFormat::ASTC_2D_8X8_SRGB:
     case PixelFormat::ASTC_2D_8X5_SRGB:
+    case PixelFormat::ASTC_2D_10X8:
+    case PixelFormat::ASTC_2D_10X8_SRGB:
         return true;
     default:
         return false;
diff --git a/src/video_core/surface.h b/src/video_core/surface.h
index dfdb8d122bfc227611beb1e2e7ef0c70dd79eb4e..0dd3eb2e49ce56fbc6675e5ebe60382117b0f8c2 100644
--- a/src/video_core/surface.h
+++ b/src/video_core/surface.h
@@ -74,19 +74,21 @@ enum class PixelFormat {
     ASTC_2D_5X4_SRGB = 56,
     ASTC_2D_5X5 = 57,
     ASTC_2D_5X5_SRGB = 58,
+    ASTC_2D_10X8 = 59,
+    ASTC_2D_10X8_SRGB = 60,
 
     MaxColorFormat,
 
     // Depth formats
-    Z32F = 59,
-    Z16 = 60,
+    Z32F = 61,
+    Z16 = 62,
 
     MaxDepthFormat,
 
     // DepthStencil formats
-    Z24S8 = 61,
-    S8Z24 = 62,
-    Z32FS8 = 63,
+    Z24S8 = 63,
+    S8Z24 = 64,
+    Z32FS8 = 65,
 
     MaxDepthStencilFormat,
 
@@ -193,6 +195,8 @@ static constexpr u32 GetCompressionFactor(PixelFormat format) {
         4, // ASTC_2D_5X4_SRGB
         4, // ASTC_2D_5X5
         4, // ASTC_2D_5X5_SRGB
+        4, // ASTC_2D_10X8
+        4, // ASTC_2D_10X8_SRGB
         1, // Z32F
         1, // Z16
         1, // Z24S8
@@ -208,70 +212,72 @@ static constexpr u32 GetDefaultBlockWidth(PixelFormat format) {
     if (format == PixelFormat::Invalid)
         return 0;
     constexpr std::array<u32, MaxPixelFormat> block_width_table = {{
-        1, // ABGR8U
-        1, // ABGR8S
-        1, // ABGR8UI
-        1, // B5G6R5U
-        1, // A2B10G10R10U
-        1, // A1B5G5R5U
-        1, // R8U
-        1, // R8UI
-        1, // RGBA16F
-        1, // RGBA16U
-        1, // RGBA16UI
-        1, // R11FG11FB10F
-        1, // RGBA32UI
-        4, // DXT1
-        4, // DXT23
-        4, // DXT45
-        4, // DXN1
-        4, // DXN2UNORM
-        4, // DXN2SNORM
-        4, // BC7U
-        4, // BC6H_UF16
-        4, // BC6H_SF16
-        4, // ASTC_2D_4X4
-        1, // G8R8U
-        1, // G8R8S
-        1, // BGRA8
-        1, // RGBA32F
-        1, // RG32F
-        1, // R32F
-        1, // R16F
-        1, // R16U
-        1, // R16S
-        1, // R16UI
-        1, // R16I
-        1, // RG16
-        1, // RG16F
-        1, // RG16UI
-        1, // RG16I
-        1, // RG16S
-        1, // RGB32F
-        1, // RGBA8_SRGB
-        1, // RG8U
-        1, // RG8S
-        1, // RG32UI
-        1, // R32UI
-        8, // ASTC_2D_8X8
-        8, // ASTC_2D_8X5
-        5, // ASTC_2D_5X4
-        1, // BGRA8_SRGB
-        4, // DXT1_SRGB
-        4, // DXT23_SRGB
-        4, // DXT45_SRGB
-        4, // BC7U_SRGB
-        4, // ASTC_2D_4X4_SRGB
-        8, // ASTC_2D_8X8_SRGB
-        8, // ASTC_2D_8X5_SRGB
-        5, // ASTC_2D_5X4_SRGB
-        5, // ASTC_2D_5X5
-        5, // ASTC_2D_5X5_SRGB
-        1, // Z32F
-        1, // Z16
-        1, // Z24S8
-        1, // S8Z24
-        1, // Z32FS8
+        1,  // ABGR8U
+        1,  // ABGR8S
+        1,  // ABGR8UI
+        1,  // B5G6R5U
+        1,  // A2B10G10R10U
+        1,  // A1B5G5R5U
+        1,  // R8U
+        1,  // R8UI
+        1,  // RGBA16F
+        1,  // RGBA16U
+        1,  // RGBA16UI
+        1,  // R11FG11FB10F
+        1,  // RGBA32UI
+        4,  // DXT1
+        4,  // DXT23
+        4,  // DXT45
+        4,  // DXN1
+        4,  // DXN2UNORM
+        4,  // DXN2SNORM
+        4,  // BC7U
+        4,  // BC6H_UF16
+        4,  // BC6H_SF16
+        4,  // ASTC_2D_4X4
+        1,  // G8R8U
+        1,  // G8R8S
+        1,  // BGRA8
+        1,  // RGBA32F
+        1,  // RG32F
+        1,  // R32F
+        1,  // R16F
+        1,  // R16U
+        1,  // R16S
+        1,  // R16UI
+        1,  // R16I
+        1,  // RG16
+        1,  // RG16F
+        1,  // RG16UI
+        1,  // RG16I
+        1,  // RG16S
+        1,  // RGB32F
+        1,  // RGBA8_SRGB
+        1,  // RG8U
+        1,  // RG8S
+        1,  // RG32UI
+        1,  // R32UI
+        8,  // ASTC_2D_8X8
+        8,  // ASTC_2D_8X5
+        5,  // ASTC_2D_5X4
+        1,  // BGRA8_SRGB
+        4,  // DXT1_SRGB
+        4,  // DXT23_SRGB
+        4,  // DXT45_SRGB
+        4,  // BC7U_SRGB
+        4,  // ASTC_2D_4X4_SRGB
+        8,  // ASTC_2D_8X8_SRGB
+        8,  // ASTC_2D_8X5_SRGB
+        5,  // ASTC_2D_5X4_SRGB
+        5,  // ASTC_2D_5X5
+        5,  // ASTC_2D_5X5_SRGB
+        10, // ASTC_2D_10X8
+        10, // ASTC_2D_10X8_SRGB
+        1,  // Z32F
+        1,  // Z16
+        1,  // Z24S8
+        1,  // S8Z24
+        1,  // Z32FS8
     }};
     ASSERT(static_cast<std::size_t>(format) < block_width_table.size());
     return block_width_table[static_cast<std::size_t>(format)];
@@ -341,6 +347,8 @@ static constexpr u32 GetDefaultBlockHeight(PixelFormat format) {
         4, // ASTC_2D_5X4_SRGB
         5, // ASTC_2D_5X5
         5, // ASTC_2D_5X5_SRGB
+        8, // ASTC_2D_10X8
+        8, // ASTC_2D_10X8_SRGB
         1, // Z32F
         1, // Z16
         1, // Z24S8
@@ -416,6 +424,8 @@ static constexpr u32 GetFormatBpp(PixelFormat format) {
         128, // ASTC_2D_5X4_SRGB
         128, // ASTC_2D_5X5
         128, // ASTC_2D_5X5_SRGB
+        128, // ASTC_2D_10X8
+        128, // ASTC_2D_10X8_SRGB
         32,  // Z32F
         16,  // Z16
         32,  // Z24S8
diff --git a/src/video_core/textures/decoders.cpp b/src/video_core/textures/decoders.cpp
index 3066abf61b1dc6e45b5164ee21ca473cdf120153..a9d134d1478d04640e4774a9c17dfd7a6f726618 100644
--- a/src/video_core/textures/decoders.cpp
+++ b/src/video_core/textures/decoders.cpp
@@ -202,6 +202,8 @@ u32 BytesPerPixel(TextureFormat format) {
     case TextureFormat::ASTC_2D_5X4:
     case TextureFormat::ASTC_2D_8X8:
     case TextureFormat::ASTC_2D_8X5:
+    case TextureFormat::ASTC_2D_10X8:
+    case TextureFormat::ASTC_2D_5X5:
     case TextureFormat::A8R8G8B8:
     case TextureFormat::A2B10G10R10:
     case TextureFormat::BF10GF11RF11:
@@ -294,6 +296,8 @@ std::vector<u8> DecodeTexture(const std::vector<u8>& texture_data, TextureFormat
     case TextureFormat::BC6H_SF16:
     case TextureFormat::ASTC_2D_4X4:
     case TextureFormat::ASTC_2D_8X8:
+    case TextureFormat::ASTC_2D_5X5:
+    case TextureFormat::ASTC_2D_10X8:
     case TextureFormat::A8R8G8B8:
     case TextureFormat::A2B10G10R10:
     case TextureFormat::A1B5G5R5: