mirror of
				https://github.com/ryujinx-mirror/ryujinx.git
				synced 2025-11-04 08:59:04 -06:00 
			
		
		
		
	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:
		@@ -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;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user