This page summarizes the major functional and performance changes in each release of the 5.x series.
All performance data on this page is measured on an Intel Core i5-9600K
clocked at 4.2 GHz, running astcenc using AVX2 and 6 threads.
Status: Released July 2026
The 5.6.0 release is a minor maintenance release.
- Codec library updates:
- Bug fix: Avoid undefined behavior caused by passing floating point values outside of the [0.0, 1.0] range as input data for a UNORM color channel.
- Bug fix: Avoid undefined behavior caused by unaligned access in SSE, AVX2, and NEON SIMD library implementations.
- Command line tool updates:
- Bug fix: Fixed incorrect plane stride when writing an uncompressed 3D LDR image to a DDS container.
- Bug fix: Fixed potential integer overflow when storing very large
uncompressed images to a
ddsor.ktxoutput image format. - Bug fix: Fixed missing initialization of the
reserved2field in the DDS file header when writing uncompressed.ddsoutput images. - Bug fix: Fixed typos and grammar issues in the command line
-helptext.
Status: Released June 2026
The 5.5.0 release is a minor maintenance release, fixing minor functional issues and improving robustness when processing invalid images.
- Codec library updates:
- Bug fix: Correct
vfloat8NaN inequality comparisons for AVX2 builds, so that decompressing an invalid encoding returns the correct max magenta error color for UNORM output formats instead of black. - Bug fix: Add overflow detection so that the API returns errors for cases when input image size would result in integer overflow in calculations of total texel count, total block count, or compressed image byte size.
- Bug fix: Fix bad offset calculation in
compute_averages()when using 3D block sizes. - Bug fix: Add missing low-clamp when storing decompressed HDR data into a UNORM8 image. Prior to this fix, output colors would be incorrect if a HDR void-extent block contained a negative FP16 constant color component.
- Improvement: Return standard error color when decompression requires an
unavailable partitioning when using an
ASTCENC_FLG_SELF_DECOMPRESS_ONLYcontext. Note that this is still not allowed API usage and may trigger asserts in a debug build.
- Bug fix: Correct
- Command line tool updates:
- Update: Update stb_image to v2.30.
- Update: Update Wuffs to v0.3.4.
- Update: Update TinyEXR to v1.0.13.
- Bug fix: Use C++ RAII to manage resource lifetime, removing resource leaks when an error condition is encountered.
- Bug fix: Report errors for
.astc,.dds, and.ktxinput image sizes that would result in integer overflow in calculations of total block count or data size. - Bug fix: Avoid undefined behavior on NaN to int conversion triggered by
atan2()calls when both inputs are zero. - Bug fix: Avoid undefined behavior on left shift of negative integer,
that is triggered for some HDR encodings in
hdr_alpha_unpack(). - Bug fix: Redirect error logging for failed
.ddsand.ktxinput image loading to stderr, and improve message consistency.
Status: Released May 2026
The 5.4.0 release is a minor feature release.
This release includes changes to the public interface in the astcenc.h
header. We always recommend rebuilding your client-side code using the
header from the same release to avoid compatibility issues.
- General:
- Improvement: The interface header
astcenc.his now C compliant to make it usable from C programs. - Improvement: Contexts using the same configuration can now share read-only data tables. This can significantly reduce the amount of memory needed for applications that parallelize by processing multiple images in parallel instead of slicing a single image in parallel.
- Improvement: Decompressor (
astcdec) builds, which lack compression support, now use a smallerblock_size_descriptorby omitting fields that are only needed for compression. This reduces the size of a decompressor context by more than 10MB! - Optimization: A SIMD backend for the RISC-V Vector extensions has been
added, and is auto-selected when configured with
ASTCENC_ISA_NONEand a core with a 256-bit vector width. See Building.md for details. - Bug fix: Avoid using an undefined
quant_weightvalue if all one partition trials return an error block. - Bug fix: Remove remaining instances of type aliasing through unions.
- Bug fix: Avoid compiler double definition warning for
NOMINMAXwhen compiling with MinGW. - Bug fix: Avoid compiler floating point model override warning when compiling with Clang 20.
- Improvement: The interface header
Status: Released March 2025
The 5.3.0 release is a minor maintenance release.
- General:
- Feature: Reference C builds (
ASTCENC_ISA_NONE) now support compiling for big-endian CPUs. Compile with-DASTCENC_BIG_ENDIAN=ONwhen compiling for a big-endian target; it is not auto-detected. - Improvement: Builds using GCC now specify
-flto=autoto allow parallel link steps, and remove the log warnings about not setting a CPU count parameter value. - Bug fix: Builds using MSVC
cl.exethat do not specify an explicit ISA using the preprocessor configuration defines will now correctly default to the SSE2 backend on x86-64 and the NEON backend on Arm64. Previously they would have defaulted to the reference C implementation, which is around 3.25 times slower.
- Feature: Reference C builds (
Status: Released February 2025
The 5.2.0 release is a minor maintenance release.
This release includes changes to the public interface in the astcenc.h
header. We always recommend rebuilding your client-side code using the
header from the same release to avoid compatibility issues.
- General:
- Change: Changed sRGB alpha channel endpoint expansion to match the revised Khronos Data Format Specification (v1.4.0), which reverts an unintended specification change. Compared to previous releases, this change can cause LSB bit differences in the alpha channel of compressed images.
- Feature: Arm64 builds for Linux added to the GitHub Actions builds, and Arm64 binaries for NEON, 128-bit SVE and 256-bit SVE added to release builds.
- Feature: Added a new codec API,
astcenc_compress_cancel(), which can be used to cancel an in-flight compression. This is designed to help make it easier to integrate the codec into an interactive user interface that can respond to user events with low latency. - Bug fix: Removed incorrect
staticvariable qualifier, which could result in an incorrecttune_mse_overshootheuristic threshold being used if a user ran multiple concurrent compressions with different settings.
Status: Released November 2024
The 5.1.0 release is an optimization release, giving moderate performance improvements on all platforms. There are no image quality differences.
- General:
- Feature: Added a new CMake build option to control use of native
gathers, as they can be slower than scalar loads on some common x86
microarchitectures. Build with
-DASTCENC_X86_GATHERS=OFFto disable use of native gathers in AVX2 builds. - Optimization: Added new
gather()abstraction for gathers using byte indices, allowing implementations without gather hardware to skip the byte-to-int index conversion. - Optimization: Optimized
compute_lowest_and_highest_weight()to pre-compute min/max outside of the main loop. - Optimization: Added improved intrinsics sequence for SSE and AVX2
integer
hmin()andhmax(). - Optimization: Added improved intrinsics sequence for
vint4(uint8_t*)on systems implementing Arm SVE.
- Feature: Added a new CMake build option to control use of native
gathers, as they can be slower than scalar loads on some common x86
microarchitectures. Build with
Status: Released November 2024
The 5.0.0 release is the first stable release in the 5.x series. The main new feature is support for the Arm Scalable Vector Extensions (SVE) SIMD instruction set.
- General:
- Bug fix: Fixed incorrect return type in "None" vector library reference implementation.
- Bug fix: Fixed sincos table index under/overflow.
- Feature: Changed
ASTCENC_ISA_NATIVEbuilds to use-march=nativeand-mcpu=native. - Feature: Added backend for Arm SVE fixed-width 256-bit builds. These can only run on hardware implementing 256-bit SVE.
- Feature: Added backend for Arm SVE 128-bit builds. These are portable builds and can run on hardware implementing any SVE vector length, but the explicit SVE use is augmented NEON and will only use the bottom 128 bits of each SVE vector.
- Feature: Optimized NEON mask
any()andall()functions. - Feature: Migrated build and test to GitHub Actions pipelines.
Copyright © 2022-2026, Arm Limited and contributors.