Преглед на файлове

squish: Update to upstream version 1.15

Also fix clang-format pre-commit hook to ignore thirdparty files.
Rémi Verschelde преди 8 години
родител
ревизия
fa2d5b91dc
променени са 4 файла, в които са добавени 31 реда и са изтрити 9 реда
  1. 5 0
      misc/hooks/pre-commit-clang-format
  2. 1 1
      thirdparty/README.md
  3. 16 8
      thirdparty/squish/squish.cpp
  4. 9 0
      thirdparty/squish/squish.h

+ 5 - 0
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
 # create one patch containing all changes to the files
 git diff-index --cached --diff-filter=ACMR --name-only $against -- | while read file;
 git diff-index --cached --diff-filter=ACMR --name-only $against -- | while read file;
 do
 do
+    # ignore thirdparty files
+    if grep -q "thirdparty" <<< $file; then
+        continue;
+    fi
+
     # ignore file if we do check for file extensions and the file
     # ignore file if we do check for file extensions and the file
     # does not match any of the extensions specified in $FILE_EXTS
     # does not match any of the extensions specified in $FILE_EXTS
     if $PARSE_EXTS && ! matches_extension "$file"; then
     if $PARSE_EXTS && ! matches_extension "$file"; then

+ 1 - 1
thirdparty/README.md

@@ -204,7 +204,7 @@ Files extracted from upstream source:
 ## squish
 ## squish
 
 
 - Upstream: https://sourceforge.net/projects/libsquish
 - Upstream: https://sourceforge.net/projects/libsquish
-- Version: 1.14
+- Version: 1.15
 - License: MIT
 - License: MIT
 
 
 Files extracted from upstream source:
 Files extracted from upstream source:

+ 16 - 8
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
     // fix any bad flags
     flags = FixFlags( 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
     // loop over blocks
+#ifdef SQUISH_USE_OPENMP
+#   pragma omp parallel for
+#endif
     for( int y = 0; y < height; y += 4 )
     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 )
         for( int x = 0; x < width; x += 4 )
         {
         {
             // build the 4x4 block of pixels
             // 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
     // fix any bad flags
     flags = FixFlags( 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
     // loop over blocks
+#ifdef SQUISH_USE_OPENMP
+#   pragma omp parallel for
+#endif
     for( int y = 0; y < height; y += 4 )
     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 )
         for( int x = 0; x < width; x += 4 )
         {
         {
             // decompress the block
             // decompress the block

+ 9 - 0
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
     allows for pixels outside the image to take arbitrary values. The function
     squish::GetStorageRequirements can be called to compute the amount of memory
     squish::GetStorageRequirements can be called to compute the amount of memory
     to allocate for the compressed output.
     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, 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 );
 void CompressImage( u8 const* rgba, int width, int height, void* blocks, int flags, float* metric = 0 );