diff options
| -rw-r--r-- | src/common/zstd_compression.cpp | 15 | ||||
| -rw-r--r-- | src/common/zstd_compression.h | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_disk_cache.cpp | 5 |
3 files changed, 11 insertions, 13 deletions
diff --git a/src/common/zstd_compression.cpp b/src/common/zstd_compression.cpp index f6cf7a791..60a35c67c 100644 --- a/src/common/zstd_compression.cpp +++ b/src/common/zstd_compression.cpp | |||
| @@ -13,7 +13,6 @@ | |||
| 13 | namespace Common::Compression { | 13 | namespace Common::Compression { |
| 14 | 14 | ||
| 15 | std::vector<u8> CompressDataZSTD(const u8* source, std::size_t source_size, s32 compression_level) { | 15 | std::vector<u8> CompressDataZSTD(const u8* source, std::size_t source_size, s32 compression_level) { |
| 16 | |||
| 17 | compression_level = std::clamp(compression_level, 1, ZSTD_maxCLevel()); | 16 | compression_level = std::clamp(compression_level, 1, ZSTD_maxCLevel()); |
| 18 | 17 | ||
| 19 | const std::size_t max_compressed_size = ZSTD_compressBound(source_size); | 18 | const std::size_t max_compressed_size = ZSTD_compressBound(source_size); |
| @@ -36,17 +35,19 @@ std::vector<u8> CompressDataZSTDDefault(const u8* source, std::size_t source_siz | |||
| 36 | return CompressDataZSTD(source, source_size, ZSTD_CLEVEL_DEFAULT); | 35 | return CompressDataZSTD(source, source_size, ZSTD_CLEVEL_DEFAULT); |
| 37 | } | 36 | } |
| 38 | 37 | ||
| 39 | std::vector<u8> DecompressDataZSTD(const std::vector<u8>& compressed, | 38 | std::vector<u8> DecompressDataZSTD(const std::vector<u8>& compressed) { |
| 40 | std::size_t uncompressed_size) { | 39 | const std::size_t decompressed_size = |
| 41 | std::vector<u8> uncompressed(uncompressed_size); | 40 | ZSTD_getDecompressedSize(compressed.data(), compressed.size()); |
| 41 | std::vector<u8> decompressed(decompressed_size); | ||
| 42 | |||
| 42 | const std::size_t uncompressed_result_size = ZSTD_decompress( | 43 | const std::size_t uncompressed_result_size = ZSTD_decompress( |
| 43 | uncompressed.data(), uncompressed.size(), compressed.data(), compressed.size()); | 44 | decompressed.data(), decompressed.size(), compressed.data(), compressed.size()); |
| 44 | 45 | ||
| 45 | if (uncompressed_size != uncompressed_result_size || ZSTD_isError(uncompressed_result_size)) { | 46 | if (decompressed_size != uncompressed_result_size || ZSTD_isError(uncompressed_result_size)) { |
| 46 | // Decompression failed | 47 | // Decompression failed |
| 47 | return {}; | 48 | return {}; |
| 48 | } | 49 | } |
| 49 | return uncompressed; | 50 | return decompressed; |
| 50 | } | 51 | } |
| 51 | 52 | ||
| 52 | } // namespace Common::Compression | 53 | } // namespace Common::Compression |
diff --git a/src/common/zstd_compression.h b/src/common/zstd_compression.h index c011ac34b..e0a64b035 100644 --- a/src/common/zstd_compression.h +++ b/src/common/zstd_compression.h | |||
| @@ -34,11 +34,9 @@ std::vector<u8> CompressDataZSTDDefault(const u8* source, std::size_t source_siz | |||
| 34 | * Decompresses a source memory region with Zstandard and returns the uncompressed data in a vector. | 34 | * Decompresses a source memory region with Zstandard and returns the uncompressed data in a vector. |
| 35 | * | 35 | * |
| 36 | * @param compressed the compressed source memory region. | 36 | * @param compressed the compressed source memory region. |
| 37 | * @param uncompressed_size the size in bytes of the uncompressed data. | ||
| 38 | * | 37 | * |
| 39 | * @return the decompressed data. | 38 | * @return the decompressed data. |
| 40 | */ | 39 | */ |
| 41 | std::vector<u8> DecompressDataZSTD(const std::vector<u8>& compressed, | 40 | std::vector<u8> DecompressDataZSTD(const std::vector<u8>& compressed); |
| 42 | std::size_t uncompressed_size); | ||
| 43 | 41 | ||
| 44 | } // namespace Common::Compression \ No newline at end of file | 42 | } // namespace Common::Compression \ No newline at end of file |
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 ec32602ad..8a43eb157 100644 --- a/src/video_core/renderer_opengl/gl_shader_disk_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_disk_cache.cpp | |||
| @@ -259,7 +259,7 @@ ShaderDiskCacheOpenGL::LoadPrecompiledFile(FileUtil::IOFile& file) { | |||
| 259 | return {}; | 259 | return {}; |
| 260 | } | 260 | } |
| 261 | 261 | ||
| 262 | dump.binary = Common::Compression::DecompressDataZSTD(compressed_binary, binary_length); | 262 | dump.binary = Common::Compression::DecompressDataZSTD(compressed_binary); |
| 263 | if (dump.binary.empty()) { | 263 | if (dump.binary.empty()) { |
| 264 | return {}; | 264 | return {}; |
| 265 | } | 265 | } |
| @@ -288,8 +288,7 @@ std::optional<ShaderDiskCacheDecompiled> ShaderDiskCacheOpenGL::LoadDecompiledEn | |||
| 288 | return {}; | 288 | return {}; |
| 289 | } | 289 | } |
| 290 | 290 | ||
| 291 | const std::vector<u8> code = | 291 | const std::vector<u8> code = Common::Compression::DecompressDataZSTD(compressed_code); |
| 292 | Common::Compression::DecompressDataZSTD(compressed_code, code_size); | ||
| 293 | if (code.empty()) { | 292 | if (code.empty()) { |
| 294 | return {}; | 293 | return {}; |
| 295 | } | 294 | } |