Skip to content

Releases: ARM-software/astc-encoder

2.4

10 Feb 16:44
55ab22d
Compare
Choose a tag to compare
2.4

Status: Released

This release is a patch release fixing an HDR image handling bug in the command line tool (non-square images would load incorrectly).

Command Line:

  • Bug fix: The command line wrapper now correctly loads HDR images that have a non-square aspect ratio.

General:

  • Feature: When using the -a option, or the equivalent config option for the API, any 2D blocks that are entirely zero alpha after the alpha filter radius is taken into account are replaced by transparent black constant color blocks. This is an RDO-like technique to improve compression ratios of any additional application packaging compression that is applied.

Binary release sha256 checksums

95efbe4e87b9b4a6e379f068faa6f69b1f994fe6f3861dc5ae094218d8375892  astcenc-2.4-linux-x64.zip
aa743ac59efe1064f02d001f569e6cb30cbff3fffc89fbbc0b743046a02c72e8  astcenc-2.4-macos-aarch64.zip
76603df0ff71e06e16314a837d9307efc2fb1df81dcea9969755ee6f482d08b8  astcenc-2.4-macos-x64.zip
5099f8ccdd0d323629d7c92715f132f1366a932027e902e0e76430027c36c742  astcenc-2.4-windows-x64.zip

2.3

31 Jan 22:22
Compare
Choose a tag to compare
2.3

Status: Released

The 2.3 release is the fourth release in the 2.x series. It includes a number of performance improvements and new features.

Reminder for users of the library interface - the API is not designed to be stable across versions, and this release is not compatible with 2.2. Please recompile your client-side code using the updated astcenc.h header.

  • General:
    • Feature: Decompressor-only builds of the codec are supported again. While this is primarily a feature for library users who want to shrink binary size, a variant command line tool astcdec can be built by specifying DECOMPRESSOR=ON on the CMake configure command line.
    • Feature: Diagnostic builds of the codec can now be built. These builds generate a JSON file containing a trace of the compressor execution. Diagnostic builds are only suitable for codec development; they are slower and JSON generation cannot be disabled. Build by setting DIAGNOSTICS=ON on the CMake configure command line.
    • Feature: Code compatibility improved with older versions of GCC, earliest compiler now tested is GCC 7.5 (was GCC 9.3).
    • Feature: Code compatibility improved with newer versions of LLVM, latest compiler now tested is Clang 12.0 (was Clang 9.0).
    • Feature: Code compatibility improved with the Visual Studio 2019 LLVM toolset (clang-cl). Using the LLVM toolset gives 25% performance improvements and is recommended.
  • Command Line:
    • Feature: Quality level now accepts either a preset (-fast, etc) or a float value between 0 and 100, allowing more control over the compression quality vs performance trade-off. The presets are not evenly spaced in the float range; they have been spaced to give the best distribution of points between the fast and thorough presets.
      • -fastest: 0.0
      • -fast: 10.0
      • -medium: 60.0
      • -thorough: 98.0
      • -exhaustive: 100.0
  • Core API:
    • API Change: Quality level preset enum replaced with a float value between 0 (-fastest) and 100 (-exhaustive). See above for more info.

Performance

This release includes a number of optimizations to improve performance.

  • New compressor algorithm for handling encoding candidates and refinement.
  • Vectorized implementation of compute_error_of_weight_set().
  • Unrolled implementation of encode_ise().
  • Many other small improvements!

The most significant change is the change to the compressor path, which now uses an adaptive approach to candidate trials and block refinement.

In earlier releases the quality level will determine the number of encoding candidates and the number of iterative refinement passes that are used for each major encoding trial. This is a fixed behavior; it will always try the full N candidates and M refinement iterations specified by the quality level for each encoding trial.

The new approach implements two optimizations for this:

  • Compression will complete when a block candidate hits the specified target quality, after its M refinement iterations have been applied. Later block candidates are simply abandoned.
  • Block candidates will predict how much refinement can improve them, and abandon refinement if they are unlikely to improve upon the best known encoding already in-hand.

This pair of optimizations provides significant performance improvement to the high quality modes which use the most block candidates and refinement iterations. A minor loss of image quality is expected, as the blocks we no longer test or refine may have been better coding choices.

Performance benefits vary based on image color format, ASTC quality settings, and ASTC block size.

Compressing using -thorough is typically between 1.3x and 1.6x faster than asctenc 2.2.
Compressing using -medium is typically between 1.2x and 1.5x faster than asctenc 2.2.
Compressing using -fast is typically between 1.1x and 1.3x faster than asctenc 2.2.
Compressing using -fastest is typically between 1.1x and 1.2x faster than asctenc 2.2.

Binary release sha256 checksums

b31188a4c0343751354a7f68def833112fd1695e38b7f5da212efe11bd59e957  astcenc-2.3-linux-x64.zip
d6a1c8c437bc09dbf9113ac26bbc60856d7f2c974e5a0bfd3d737f51c1b9e318  astcenc-2.3-macos-aarch64.zip
eca84b57cc3ee653b809e30da999eac4f0525134600ba8b4a767cb9237f8bcad  astcenc-2.3-macos-x64.zip
1fd28ddafffdc5cdc6088c0129b9bfc1eac5e72b2ccfb4580195efe05af2c924  astcenc-2.3-windows-x64.zip

2.2

04 Jan 18:34
Compare
Choose a tag to compare
2.2

Status: Released, January 2021

The 2.2 release is the third release in the 2.x series. It includes a number of performance improvements and new features.

Reminder for users of the library interface - the API is not designed to be stable across versions, and this release is not compatible with 2.1. Please recompile your client-side code using the updated astcenc.h header.

  • General:
    • Feature: New Arm aarch64 NEON accelerated vector library support.
    • Improvement: New CMake build system for all platforms.
    • Improvement: SSE4.2 feature profile changed to SSE4.1, which more accurately reflects the feature set used.
  • Binary releases:
    • Improvement: Linux binaries changed to use Clang 9.0.
    • Improvement: Windows binaries are now code signed.
    • Improvement: macOS binaries for Apple Silicon platforms now provided.
    • Improvement: macOS binaries are now code signed and notarized.
  • Command Line:
    • Feature: New image preprocess -pp-normalize option added.
    • Feature: New image preprocess -pp-premultiply option added.
    • Improvements: Cleaner error handling for corrupt images.
  • Core API:
    • API Change: Images no longer need to include padding. All input images should be tightly packed. The dim_pad field is removed
      from the astcenc_image structure.
    • API Change: Image data is no longer a 3D array accessed using data[z][y][x] indexing, it's an array of N packed 2D slices.
    • API Change: New ASTCENC_FLG_SELF_DECOMPRESS_ONLY flag added to the codec config. Using this flag enables additional optimizations that aggressively exploit implementation- and configuration-specific, behavior. When using this flag the codec can only reliably decompress images that were compressed in the same context session.

Performance

There is one major set of optimizations in this release, related to the new ASTCENC_FLG_SELF_DECOMPRESS_ONLY mode. These allow the compressor to only create data tables it knows that it is going to use, based on its current set of heuristics, rather than needing the full set the format allows.

The first benefit of these changes is reduced context creation time. This can be a significant percentage of the command line utility runtime when compressing a small image and/or when using a quick search preset. Compressing the whole Kodak test suite using the command
line utility and the -fastest preset is ~30% faster with this release, which is mostly due to faster context creation.

The reduction in the data table size in this mode also improves the core codec speed. Our test sets show an average of 12% improvement in the codec for -fastest mode, and an average of 3% for -medium mode.

Binary release sha256 checksums

d3e5fe5dd0cad92ae12406654c1f7de563d042b5130c064de852c6293ffdcda2  astcenc-2.2-linux-x64.zip
ff5e095609db0d08560c3fbf0bc6ed19484d77ed0112f822df61305d3345383e  astcenc-2.2-macos-aarch64.zip
5662773b923b5ffa0b5c907afd9c5599c977d4736af4bab1f77cbf92a5902a84  astcenc-2.2-macos-x64.zip
733b74264ec3da8fb243cd2720f06b20b030c6d38e330981b8f2fe0531af4345  astcenc-2.2-windows-x64.zip

2.1

13 Nov 16:32
Compare
Choose a tag to compare
2.1

The 2.1 release is the second release in the 2.x series. It includes another set of significant performance optimizations and number of smaller new features.

⚠️ A reminder for users of the library interface - the library API is not designed to be stable across versions, and this release is not compatible with 2.0. Please recompile the client-side using the updated astcenc.h header.

Features:

  • Command line:
    • Bug fix: The meaning of the -tH\cH\dH and -th\ch\dh compression modes was inverted. They now match the documentation; use -*H for HDR RGBA, and -*h for HDR RGB with LDR alpha.
    • Feature: A new -fastest quality preset is now available. This is designed for fast "roughing out" of new content, and sacrifices significant image quality compared to -fast. We do not recommend its use for production builds.
    • Feature: A new -candidatelimit compression tuning option is now available. This is a power-user control to determine how many candidates are returned for each block mode encoding trial. This feature is used automatically by the search presets; see -help for details.
    • Improvement: The compression test modes (-tl\ts\th\tH) now emit a MTex/s performance metric, in addition to coding time.
  • Core API:
    • Feature: A new quality preset ASTCENC_PRE_FASTEST is available. See -fastest above for details.
    • Feature: A new tuning option tune_candidate_limit is available in the config structure. See -candidatelimit above for details.
    • Feature: Image input/output can now use ASTCENC_TYPE_F32 data types.
  • Stability:
    • Feature: The SSE2, SSE4.2, and AVX2 variants now produce identical compressed output when run on the same CPU when compiled with the preprocessor define ASTCENC_ISA_INVARIANCE=1. For Make builds this can be set on the command line by setting ISA_INV=1. ISA invariance is off by default; it reduces performance by 1-3%.

Performance

Performance benefits vary based on image color format, ASTC quality settings, and ASTC block size.

  • Compressing using -thorough is between 1.3x and 1.6x faster than asctenc 2.0.
  • Compressing using -medium is between 1.4x and 2.1x faster than asctenc 2.0.
  • Compressing using -fast is between 1.4x and 2.4x faster than asctenc 2.0.
  • Compressing using the new -fastest setting is 2.1x - 3.8x faster than using astcenc 2.0 -fast.

2.0

07 Aug 20:51
Compare
Choose a tag to compare
2.0

This is first release of the astcenc 2.x series, providing a number of major improvements for content creators.

The core codec performance is now up to three times faster, with optimized builds for the SSE2, SSE4.2, and AVX2 instruction sets.

The core codec now has a clean library API separating the command line wrapper and the main algorithm core. This makes it easier to directly integrate the compressor into other applications.

The command line tool supports a wider range of input and output file formats for both uncompressed files and compressed files.

Note: this release is not command line compatible with the 1.x series. Some options have been renamed and some options have been removed.

1.7

08 Jul 08:36
Compare
Choose a tag to compare
1.7
  • Re-enable JPEG and GIF image support

1.6

05 Jul 08:22
Compare
Choose a tag to compare
1.6

Update all binaries to source version 62fadfc.

1.5

27 Jun 12:30
Compare
Choose a tag to compare
1.5
Update all binaries to source version a4cfd6b

1.4

14 Nov 11:10
Compare
Choose a tag to compare
1.4
Improved binary for windows x64