From 6991f819f3f7e292a8f7d714062229420c2f4bc0 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Tue, 12 Apr 2022 18:41:22 +1000 Subject: [PATCH] SaveState: Switch to zstd compression zstd can be 10x+ fast compressing, 2x+ decompressing at default levels, and provides slightly better ratios. There's a hidden option in the config, SavestateZstdCompression, which you can set to false if you want to use deflate. --- pcsx2/Config.h | 1 + pcsx2/Pcsx2Config.cpp | 2 ++ pcsx2/SaveState.cpp | 7 +++---- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pcsx2/Config.h b/pcsx2/Config.h index 8ee823d5e1..c771b2a291 100644 --- a/pcsx2/Config.h +++ b/pcsx2/Config.h @@ -939,6 +939,7 @@ struct Pcsx2Config // when enabled uses BOOT2 injection, skipping sony bios splashes UseBOOT2Injection : 1, BackupSavestate : 1, + SavestateZstdCompression : 1, // enables simulated ejection of memory cards when loading savestates McdEnableEjection : 1, McdFolderAutoManage : 1, diff --git a/pcsx2/Pcsx2Config.cpp b/pcsx2/Pcsx2Config.cpp index 2a3d2a9988..efa4c69a22 100644 --- a/pcsx2/Pcsx2Config.cpp +++ b/pcsx2/Pcsx2Config.cpp @@ -1021,6 +1021,7 @@ Pcsx2Config::Pcsx2Config() EnableGameFixes = true; #endif BackupSavestate = true; + SavestateZstdCompression = true; #ifdef __WXMSW__ McdCompressNTFS = true; @@ -1060,6 +1061,7 @@ void Pcsx2Config::LoadSave(SettingsWrapper& wrap) SettingsWrapBitBool(HostFs); SettingsWrapBitBool(BackupSavestate); + SettingsWrapBitBool(SavestateZstdCompression); SettingsWrapBitBool(McdEnableEjection); SettingsWrapBitBool(McdFolderAutoManage); SettingsWrapBitBool(MultitapPort0_Enabled); diff --git a/pcsx2/SaveState.cpp b/pcsx2/SaveState.cpp index bb7cddb13a..a9d5d78878 100644 --- a/pcsx2/SaveState.cpp +++ b/pcsx2/SaveState.cpp @@ -806,10 +806,9 @@ static void ZipStateToDiskOnThread(std::unique_ptr srclist, st // discard zip file if we fail saving something ScopedGuard zip_discarder([&zf]() { zip_discard(zf.release()); }); - // use deflate compression by default - // TODO: switch to zstd - constexpr u32 compression = ZIP_CM_DEFLATE; - constexpr u32 compression_level = 0; + // use zstd compression, it can be 10x+ faster for saving. + const u32 compression = EmuConfig.SavestateZstdCompression ? ZIP_CM_ZSTD : ZIP_CM_DEFLATE; + const u32 compression_level = 0; // version indicator {