|
@@ -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;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|