Add gdeflate compression and decompression with NVIDIA fork of libdeflate.
- Gdeflate compression can yield multiple 64K pages.
- Each chunk includes number of pages and size of each page.
- Off by default. gdeflate calls are wrapped and conditionally compiled in.
- CMake and Bazel builds can optionally fetch NVIDIA fork of libdeflate. Additional info and discussion on [email protected]
- :x: - login: @MarkLeone / name: Mark Leone . The commit (12fe74486cbd57a18d6cefeb25810fb35f90e626) is not authorized under a signed CLA. Please click here to be authorized. For further assistance with EasyCLA, please submit a support request ticket.
Thanks for this! I'll look into the failing CI checks this weekend, I think I know what's going on.
The project policy is to require a signed Contributor License Agreement. I don't recall if Nvidia has an agreement in place, but is that something you can follow up on?
Also, we require signed git commits. Could you amend your commit with "-s"? That adds the "Signed-off-by" line. Note it's not sufficient to submit an additional commit, they all have to be signed, so you'll need to amend the commit and force-push. Or close this PR and submit a fresh one.
@MarkLeone, looking at this a little deeper, I think the better configuration is to simply vendor in the source code directly from NVIDIA/libdeflate, and avoid the FetchContent altogether. Look in share/util/check_deflate.sh, which is a helper script to be run manually whenever a new version of libdeflate is released. In essence, that's what you've done, but with a forked repo. I think if you change the URL in that script to https://github.com/NVIDIA/libdeflate, then run it, the CMake configuration doesn't to change much at all.
src/lib/OpenEXRCore/compression.c includes only the files out of libdeflate that are needed, the rest are ignored. You'll need to add whatever gdeflate-related files are needed there.
@MarkLeone, it looks like NVIDIA/libdeflate is based on a very old fork of ebiggers/libdeflate (v1.8 from 2021), which was before libdeflate introduced cmake support, which complicates the setup, since your library has no cmake config. I started working on fixing the CI to test against an external build of NVIDIA/libdeflate, but that's going to require some extra hoops to jump through.