DDS: replace libsquish with bcdec, add BC4-BC7 #3462
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Implements support for BC4, BC5, BC6H (unsigned and signed) and BC7 GPU texture compressed formats in DDS reader (#2338).
This is implemented by replacing whole of libsquish (~4700 lines of code) with bcdec.h (https://github.com/iOrange/bcdec, ~1300 lines of code). bcdec.h has an advantage of being faster, smaller and supports all BCn formats for decoding.
bcdec.h license is MIT or Unlicense (aka public domain), updated all the relevant third party / license files that I could find.
Tests
This uses just-added extended DDS test coverage (#3459) and enables previously disabled BC4..BC7 tests. The pixel value SHA1 hashes of BC1..BC3 formats do change - BC1..BC3 decoding is not specified bit-exactly anywhere, and out there in the wild there are 4 possible ways to decode it. bcdec.h decodes it slightly differently from libsquish (i.e. some color values might be 1 off in 0..255 range, sometimes). Visually I've compared the results and they are all fine.
Checklist:
have previously submitted a Contributor License Agreement
(individual, and if there is any way my
employers might think my programming belongs to them, then also
corporate).
(adding new test cases if necessary).