From fa2d5b91dc390a11262859e5309351ba58842901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Sun, 9 Apr 2017 15:02:09 +0200 Subject: [PATCH] squish: Update to upstream version 1.15 Also fix clang-format pre-commit hook to ignore thirdparty files. --- misc/hooks/pre-commit-clang-format | 5 +++++ thirdparty/README.md | 2 +- thirdparty/squish/squish.cpp | 24 ++++++++++++++++-------- thirdparty/squish/squish.h | 9 +++++++++ 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/misc/hooks/pre-commit-clang-format b/misc/hooks/pre-commit-clang-format index 88c43fc1f5..0971ebe23a 100755 --- a/misc/hooks/pre-commit-clang-format +++ b/misc/hooks/pre-commit-clang-format @@ -82,6 +82,11 @@ $DELETE_OLD_PATCHES && rm -f /tmp/$prefix*.patch # create one patch containing all changes to the files git diff-index --cached --diff-filter=ACMR --name-only $against -- | while read file; do + # ignore thirdparty files + if grep -q "thirdparty" <<< $file; then + continue; + fi + # ignore file if we do check for file extensions and the file # does not match any of the extensions specified in $FILE_EXTS if $PARSE_EXTS && ! matches_extension "$file"; then diff --git a/thirdparty/README.md b/thirdparty/README.md index f35a95df37..8aec75b57d 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -204,7 +204,7 @@ Files extracted from upstream source: ## squish - Upstream: https://sourceforge.net/projects/libsquish -- Version: 1.14 +- Version: 1.15 - License: MIT Files extracted from upstream source: diff --git a/thirdparty/squish/squish.cpp b/thirdparty/squish/squish.cpp index d3cbabbafd..1d22a64ad6 100644 --- a/thirdparty/squish/squish.cpp +++ b/thirdparty/squish/squish.cpp @@ -177,13 +177,17 @@ void CompressImage( u8 const* rgba, int width, int height, int pitch, void* bloc // fix any bad flags flags = FixFlags( flags ); - // initialise the block output - u8* targetBlock = reinterpret_cast< u8* >( blocks ); - int bytesPerBlock = ( ( flags & ( kDxt1 | kBc4 ) ) != 0 ) ? 8 : 16; - // loop over blocks +#ifdef SQUISH_USE_OPENMP +# pragma omp parallel for +#endif for( int y = 0; y < height; y += 4 ) { + // initialise the block output + u8* targetBlock = reinterpret_cast< u8* >( blocks ); + int bytesPerBlock = ( ( flags & ( kDxt1 | kBc4 ) ) != 0 ) ? 8 : 16; + targetBlock += ( (y / 4) * ( (width + 3) / 4) ) * bytesPerBlock; + for( int x = 0; x < width; x += 4 ) { // build the 4x4 block of pixels @@ -232,13 +236,17 @@ void DecompressImage( u8* rgba, int width, int height, int pitch, void const* bl // fix any bad flags flags = FixFlags( flags ); - // initialise the block input - u8 const* sourceBlock = reinterpret_cast< u8 const* >( blocks ); - int bytesPerBlock = ( ( flags & ( kDxt1 | kBc4 ) ) != 0 ) ? 8 : 16; - // loop over blocks +#ifdef SQUISH_USE_OPENMP +# pragma omp parallel for +#endif for( int y = 0; y < height; y += 4 ) { + // initialise the block input + u8 const* sourceBlock = reinterpret_cast< u8 const* >( blocks ); + int bytesPerBlock = ( ( flags & ( kDxt1 | kBc4 ) ) != 0 ) ? 8 : 16; + sourceBlock += ( (y / 4) * ( (width + 3) / 4) ) * bytesPerBlock; + for( int x = 0; x < width; x += 4 ) { // decompress the block diff --git a/thirdparty/squish/squish.h b/thirdparty/squish/squish.h index 7c46e37ff1..14c9bb59fb 100644 --- a/thirdparty/squish/squish.h +++ b/thirdparty/squish/squish.h @@ -239,6 +239,15 @@ int GetStorageRequirements( int width, int height, int flags ); allows for pixels outside the image to take arbitrary values. The function squish::GetStorageRequirements can be called to compute the amount of memory to allocate for the compressed output. + + Note on compression quality: When compressing textures with + libsquish it is recommended to apply a gamma-correction + beforehand. This will reduce the blockiness in dark areas. The + level of necessary gamma-correction is platform dependent. For + example, a gamma correction with gamma = 0.5 before compression + and gamma = 2.0 after decompression yields good results on the + Windows platform but for other platforms like MacOS X a different + gamma value may be more suitable. */ void CompressImage( u8 const* rgba, int width, int height, int pitch, void* blocks, int flags, float* metric = 0 ); void CompressImage( u8 const* rgba, int width, int height, void* blocks, int flags, float* metric = 0 );