summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_disk_cache.cpp16
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() {
209std::optional<std::pair<std::unordered_map<u64, ShaderDiskCacheDecompiled>, 210std::optional<std::pair<std::unordered_map<u64, ShaderDiskCacheDecompiled>,
210 std::unordered_map<ShaderDiskCacheUsage, ShaderDiskCacheDump>>> 211 std::unordered_map<ShaderDiskCacheUsage, ShaderDiskCacheDump>>>
211ShaderDiskCacheOpenGL::LoadPrecompiledFile(FileUtil::IOFile& file) { 212ShaderDiskCacheOpenGL::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
565void ShaderDiskCacheOpenGL::SaveVirtualPrecompiledFile() { 568void 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;