forked from Mirror/Ryujinx
misc: Change disk shader cache compression algorithm to Brotli
(RFC 7932) (#6841)
* Prefer `Brotli` compression for disk shader cache. * Final default case for decompression switch. * Prefer fastest compression.
This commit is contained in:
parent
53d096e392
commit
2ebe929fa5
3 changed files with 41 additions and 5 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,5 +14,10 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
|
|||
/// Deflate compression (RFC 1951).
|
||||
/// </summary>
|
||||
Deflate,
|
||||
|
||||
/// <summary>
|
||||
/// Brotli compression (RFC 7932).
|
||||
/// </summary>
|
||||
Brotli,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
|
|||
/// <returns>Compression algorithm</returns>
|
||||
public static CompressionAlgorithm GetCompressionAlgorithm()
|
||||
{
|
||||
return CompressionAlgorithm.Deflate;
|
||||
return CompressionAlgorithm.Brotli;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue