diff options
| author | 2019-02-10 16:38:34 +0100 | |
|---|---|---|
| committer | 2019-04-23 22:24:31 +0200 | |
| commit | 3091b40691d767161c0265bab4bddb6687e3698d (patch) | |
| tree | 666759e8e32f39543f2f5928efc47abe5f784d5c | |
| parent | gl_shader_disk_cache: Use VectorVfsFile for the virtual precompiled shader ca... (diff) | |
| download | yuzu-3091b40691d767161c0265bab4bddb6687e3698d.tar.gz yuzu-3091b40691d767161c0265bab4bddb6687e3698d.tar.xz yuzu-3091b40691d767161c0265bab4bddb6687e3698d.zip | |
gl_shader_disk_cache: Compress precompiled shader cache file with Zstandard
Diffstat (limited to '')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_disk_cache.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_disk_cache.cpp b/src/video_core/renderer_opengl/gl_shader_disk_cache.cpp index 4c76f943f..3c39e5c8c 100644 --- a/src/video_core/renderer_opengl/gl_shader_disk_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_disk_cache.cpp | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include "common/file_util.h" | 11 | #include "common/file_util.h" |
| 12 | #include "common/logging/log.h" | 12 | #include "common/logging/log.h" |
| 13 | #include "common/scm_rev.h" | 13 | #include "common/scm_rev.h" |
| 14 | #include "common/zstd_compression.h" | ||
| 14 | 15 | ||
| 15 | #include "core/core.h" | 16 | #include "core/core.h" |
| 16 | #include "core/hle/kernel/process.h" | 17 | #include "core/hle/kernel/process.h" |
| @@ -209,9 +210,11 @@ ShaderDiskCacheOpenGL::LoadPrecompiled() { | |||
| 209 | std::optional<std::pair<std::unordered_map<u64, ShaderDiskCacheDecompiled>, | 210 | std::optional<std::pair<std::unordered_map<u64, ShaderDiskCacheDecompiled>, |
| 210 | std::unordered_map<ShaderDiskCacheUsage, ShaderDiskCacheDump>>> | 211 | std::unordered_map<ShaderDiskCacheUsage, ShaderDiskCacheDump>>> |
| 211 | ShaderDiskCacheOpenGL::LoadPrecompiledFile(FileUtil::IOFile& file) { | 212 | ShaderDiskCacheOpenGL::LoadPrecompiledFile(FileUtil::IOFile& file) { |
| 212 | std::vector<u8> precompiled_cache(file.GetSize()); | 213 | // Read compressed file from disk and decompress to virtual precompiled cache file |
| 213 | file.ReadBytes(precompiled_cache.data(), precompiled_cache.size()); | 214 | std::vector<u8> compressed(file.GetSize()); |
| 214 | SaveArrayToPrecompiled(precompiled_cache.data(), precompiled_cache.size()); | 215 | file.ReadBytes(compressed.data(), compressed.size()); |
| 216 | const std::vector<u8> decompressed = Common::Compression::DecompressDataZSTD(compressed); | ||
| 217 | SaveArrayToPrecompiled(decompressed.data(), decompressed.size()); | ||
| 215 | precompiled_cache_virtual_file_offset = 0; | 218 | precompiled_cache_virtual_file_offset = 0; |
| 216 | 219 | ||
| 217 | ShaderCacheVersionHash file_hash{}; | 220 | ShaderCacheVersionHash file_hash{}; |
| @@ -564,7 +567,9 @@ void ShaderDiskCacheOpenGL::SavePrecompiledHeaderToVirtualPrecompiledCache() { | |||
| 564 | 567 | ||
| 565 | void ShaderDiskCacheOpenGL::SaveVirtualPrecompiledFile() { | 568 | void ShaderDiskCacheOpenGL::SaveVirtualPrecompiledFile() { |
| 566 | precompiled_cache_virtual_file_offset = 0; | 569 | precompiled_cache_virtual_file_offset = 0; |
| 567 | const std::vector<u8>& precompiled_cache = precompiled_cache_virtual_file.ReadAllBytes(); | 570 | const std::vector<u8>& uncompressed = precompiled_cache_virtual_file.ReadAllBytes(); |
| 571 | const std::vector<u8>& compressed = | ||
| 572 | Common::Compression::CompressDataZSTDDefault(uncompressed.data(), uncompressed.size()); | ||
| 568 | 573 | ||
| 569 | const auto precompiled_path{GetPrecompiledPath()}; | 574 | const auto precompiled_path{GetPrecompiledPath()}; |
| 570 | FileUtil::IOFile file(precompiled_path, "wb"); | 575 | FileUtil::IOFile file(precompiled_path, "wb"); |
| @@ -573,8 +578,7 @@ void ShaderDiskCacheOpenGL::SaveVirtualPrecompiledFile() { | |||
| 573 | LOG_ERROR(Render_OpenGL, "Failed to open precompiled cache in path={}", precompiled_path); | 578 | LOG_ERROR(Render_OpenGL, "Failed to open precompiled cache in path={}", precompiled_path); |
| 574 | return; | 579 | return; |
| 575 | } | 580 | } |
| 576 | if (file.WriteBytes(precompiled_cache.data(), precompiled_cache.size()) != | 581 | if (file.WriteBytes(compressed.data(), compressed.size()) != compressed.size()) { |
| 577 | precompiled_cache.size()) { | ||
| 578 | LOG_ERROR(Render_OpenGL, "Failed to write precompiled cache version in path={}", | 582 | LOG_ERROR(Render_OpenGL, "Failed to write precompiled cache version in path={}", |
| 579 | precompiled_path); | 583 | precompiled_path); |
| 580 | return; | 584 | return; |