diff options
| author | unknown <FreddyFunk@users.noreply.github.com> | 2019-02-07 18:28:06 +0100 | 
|---|---|---|
| committer | unknown <FreddyFunk@users.noreply.github.com> | 2019-03-29 16:42:19 +0100 | 
| commit | 798d76f4c7018174e58702fb06a042dc8c84f0be (patch) | |
| tree | acfd88bacaf40e3c0895ab5503aac20ec0feb470 /src/video_core | |
| parent | f770c17d011e76cb268df5ba5d687609a0f514d4 (diff) | |
data_compression: Move LZ4 compression from video_core/gl_shader_disk_cache to common/data_compression
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_disk_cache.cpp | 46 | 
2 files changed, 9 insertions, 39 deletions
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index 14b76680f..d5695638b 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt @@ -137,4 +137,4 @@ endif()  create_target_directory_groups(video_core)  target_link_libraries(video_core PUBLIC common core) -target_link_libraries(video_core PRIVATE glad lz4_static) +target_link_libraries(video_core PRIVATE glad) 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 82fc4d44b..a74b66a90 100644 --- a/src/video_core/renderer_opengl/gl_shader_disk_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_disk_cache.cpp @@ -4,11 +4,11 @@  #include <cstring>  #include <fmt/format.h> -#include <lz4.h>  #include "common/assert.h"  #include "common/common_paths.h"  #include "common/common_types.h" +#include "common/data_compression.h"  #include "common/file_util.h"  #include "common/logging/log.h"  #include "common/scm_rev.h" @@ -49,39 +49,6 @@ ShaderCacheVersionHash GetShaderCacheVersionHash() {      return hash;  } -template <typename T> -std::vector<u8> CompressData(const T* source, std::size_t source_size) { -    if (source_size > LZ4_MAX_INPUT_SIZE) { -        // Source size exceeds LZ4 maximum input size -        return {}; -    } -    const auto source_size_int = static_cast<int>(source_size); -    const int max_compressed_size = LZ4_compressBound(source_size_int); -    std::vector<u8> compressed(max_compressed_size); -    const int compressed_size = LZ4_compress_default(reinterpret_cast<const char*>(source), -                                                     reinterpret_cast<char*>(compressed.data()), -                                                     source_size_int, max_compressed_size); -    if (compressed_size <= 0) { -        // Compression failed -        return {}; -    } -    compressed.resize(compressed_size); -    return compressed; -} - -std::vector<u8> DecompressData(const std::vector<u8>& compressed, std::size_t uncompressed_size) { -    std::vector<u8> uncompressed(uncompressed_size); -    const int size_check = LZ4_decompress_safe(reinterpret_cast<const char*>(compressed.data()), -                                               reinterpret_cast<char*>(uncompressed.data()), -                                               static_cast<int>(compressed.size()), -                                               static_cast<int>(uncompressed.size())); -    if (static_cast<int>(uncompressed_size) != size_check) { -        // Decompression failed -        return {}; -    } -    return uncompressed; -} -  } // namespace  ShaderDiskCacheRaw::ShaderDiskCacheRaw(u64 unique_identifier, Maxwell::ShaderProgram program_type, @@ -292,7 +259,7 @@ ShaderDiskCacheOpenGL::LoadPrecompiledFile(FileUtil::IOFile& file) {                  return {};              } -            dump.binary = DecompressData(compressed_binary, binary_length); +            dump.binary = Compression::DecompressDataLZ4(compressed_binary, binary_length);              if (dump.binary.empty()) {                  return {};              } @@ -321,7 +288,7 @@ std::optional<ShaderDiskCacheDecompiled> ShaderDiskCacheOpenGL::LoadDecompiledEn          return {};      } -    const std::vector<u8> code = DecompressData(compressed_code, code_size); +    const std::vector<u8> code = Compression::DecompressDataLZ4(compressed_code, code_size);      if (code.empty()) {          return {};      } @@ -507,7 +474,8 @@ void ShaderDiskCacheOpenGL::SaveDecompiled(u64 unique_identifier, const std::str      if (!IsUsable())          return; -    const std::vector<u8> compressed_code{CompressData(code.data(), code.size())}; +    const std::vector<u8> compressed_code{ +        Compression::CompressDataLZ4(reinterpret_cast<const u8*>(code.data()), code.size())};      if (compressed_code.empty()) {          LOG_ERROR(Render_OpenGL, "Failed to compress GLSL code - skipping shader {:016x}",                    unique_identifier); @@ -537,7 +505,9 @@ void ShaderDiskCacheOpenGL::SaveDump(const ShaderDiskCacheUsage& usage, GLuint p      std::vector<u8> binary(binary_length);      glGetProgramBinary(program, binary_length, nullptr, &binary_format, binary.data()); -    const std::vector<u8> compressed_binary = CompressData(binary.data(), binary.size()); +    const std::vector<u8> compressed_binary = +        Compression::CompressDataLZ4(binary.data(), binary.size()); +      if (compressed_binary.empty()) {          LOG_ERROR(Render_OpenGL, "Failed to compress binary program in shader={:016x}",                    usage.unique_identifier);  | 
