aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/BinarySerializer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Graphics.Gpu/Shader/DiskCache/BinarySerializer.cs')
-rw-r--r--src/Ryujinx.Graphics.Gpu/Shader/DiskCache/BinarySerializer.cs39
1 files changed, 35 insertions, 4 deletions
diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/BinarySerializer.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/BinarySerializer.cs
index c4a648fe..ab4508f6 100644
--- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/BinarySerializer.cs
+++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/BinarySerializer.cs
@@ -125,9 +125,18 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
CompressionAlgorithm algorithm = CompressionAlgorithm.None;
Read(ref algorithm);
- if (algorithm == CompressionAlgorithm.Deflate)
+ switch (algorithm)
{
- _activeStream = new DeflateStream(_stream, CompressionMode.Decompress, true);
+ case CompressionAlgorithm.None:
+ break;
+ case CompressionAlgorithm.Deflate:
+ _activeStream = new DeflateStream(_stream, CompressionMode.Decompress, true);
+ break;
+ case CompressionAlgorithm.Brotli:
+ _activeStream = new BrotliStream(_stream, CompressionMode.Decompress, true);
+ break;
+ default:
+ throw new ArgumentException($"Invalid compression algorithm \"{algorithm}\"");
}
}
@@ -139,9 +148,18 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
{
Write(ref algorithm);
- if (algorithm == CompressionAlgorithm.Deflate)
+ switch (algorithm)
{
- _activeStream = new DeflateStream(_stream, CompressionLevel.Fastest, true);
+ case CompressionAlgorithm.None:
+ break;
+ case CompressionAlgorithm.Deflate:
+ _activeStream = new DeflateStream(_stream, CompressionLevel.Fastest, true);
+ break;
+ case CompressionAlgorithm.Brotli:
+ _activeStream = new BrotliStream(_stream, CompressionLevel.Fastest, true);
+ break;
+ default:
+ throw new ArgumentException($"Invalid compression algorithm \"{algorithm}\"");
}
}
@@ -187,6 +205,14 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
}
stream.Dispose();
break;
+ case CompressionAlgorithm.Brotli:
+ stream = new BrotliStream(stream, CompressionMode.Decompress, true);
+ for (int offset = 0; offset < data.Length;)
+ {
+ offset += stream.Read(data[offset..]);
+ }
+ stream.Dispose();
+ break;
}
}
@@ -210,6 +236,11 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
stream.Write(data);
stream.Dispose();
break;
+ case CompressionAlgorithm.Brotli:
+ stream = new BrotliStream(stream, CompressionLevel.Fastest, true);
+ stream.Write(data);
+ stream.Dispose();
+ break;
}
}
}