0
0
Fork 0

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:
MutantAura 2024-05-26 19:06:41 +01:00 committed by GitHub
parent 53d096e392
commit 2ebe929fa5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 41 additions and 5 deletions

View file

@ -125,9 +125,18 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
CompressionAlgorithm algorithm = CompressionAlgorithm.None; CompressionAlgorithm algorithm = CompressionAlgorithm.None;
Read(ref algorithm); 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); 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(); stream.Dispose();
break; 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.Write(data);
stream.Dispose(); stream.Dispose();
break; break;
case CompressionAlgorithm.Brotli:
stream = new BrotliStream(stream, CompressionLevel.Fastest, true);
stream.Write(data);
stream.Dispose();
break;
} }
} }
} }

View file

@ -14,5 +14,10 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
/// Deflate compression (RFC 1951). /// Deflate compression (RFC 1951).
/// </summary> /// </summary>
Deflate, Deflate,
/// <summary>
/// Brotli compression (RFC 7932).
/// </summary>
Brotli,
} }
} }

View file

@ -51,7 +51,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache
/// <returns>Compression algorithm</returns> /// <returns>Compression algorithm</returns>
public static CompressionAlgorithm GetCompressionAlgorithm() public static CompressionAlgorithm GetCompressionAlgorithm()
{ {
return CompressionAlgorithm.Deflate; return CompressionAlgorithm.Brotli;
} }
} }
} }