3 Star 4 Fork 1

Gitee 极速下载/astc-encoder

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/ARM-software/astc-encoder
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

About

The Arm® Adaptive Scalable Texture Compression (ASTC) Encoder, astcenc, is a command-line tool for compressing and decompressing images using the ASTC texture compression standard.

The ASTC format

The ASTC compressed data format, developed by Arm® and AMD, has been adopted as an official extension to the OpenGL®, OpenGL ES, and Vulkan® graphics APIs. It provides a major step forward in terms of both the image quality at a given bitrate, and the format and bitrate flexibility available to content creators. This allows more assets to use compression, often at a reduced bitrate compared to other formats, reducing memory storage and bandwidth requirements.

Read the ASTC Format Overview for a quick introduction to the format, or read the full Khronos Data Format Specification for all the details.

License

This project is licensed under the Apache 2.0 license. By downloading any component from this repository you acknowledge that you accept terms specified in the LICENSE.txt file.

Encoder feature support

The encoder supports compression of low dynamic range (BMP, JPEG, PNG, TGA) and high dynamic range (EXR, HDR) images, as well as a subset of image data wrapped in the DDS and KTX container formats, into ASTC or KTX format output images.

The decoder supports decompression of ASTC or KTX format input images into low dynamic range (BMP, PNG, TGA), high dynamic range (EXR, HDR), or DDS and KTX wrapped output images.

The encoder allows control over the compression time/quality tradeoff with exhaustive, verythorough, thorough, medium, fast, and fastest encoding quality presets.

The encoder allows compression time and quality analysis by reporting the compression time, and the Peak Signal-to-Noise Ratio (PSNR) between the input image and the compressed output.

ASTC format support

The astcenc compressor supports generation of images for all three profiles allowed by the ASTC specification:

  • 2D Low Dynamic Range (LDR profile)
  • 2D LDR and High Dynamic Range (HDR profile)
  • 2D and 3D, LDR and HDR (Full profile)

It also supports all of the ASTC block sizes and compression modes, allowing content creators to use the full spectrum of quality-to-bitrate options ranging from 0.89 bits/pixel up to 8 bits/pixel.

Prebuilt binaries

Release build binaries for the astcenc stable releases are provided in the GitHub Releases page.

Binaries are provided for 64-bit builds on Windows, macOS, and Linux.

Windows and Linux

For Windows and Linux the builds of the astcenc are provided as multiple binaries, each tuned for a specific SIMD instruction set.

For x86-64 we provide, in order of increasing performance:

  • astcenc-sse2 - uses SSE2
  • astcenc-sse4.1 - uses SSE4.1 and POPCNT
  • astcenc-avx2 - uses AVX2, SSE4.2, POPCNT, and F16C

The x86-64 SSE2 builds will work on all x86-64 machines, but it is the slowest of the three. The other two require extended CPU instruction set support which is not universally available, but each step gains ~15% more performance.

For Arm we provide, in order of increasing performance:

  • astcenc-sve_256 - uses 256-bit SVE
  • astcenc-sve_128 - uses 128-bit SVE
  • astcenc-neon - uses NEON

Note: The Arm Scalable Vector Extensions (SVE) allow CPUs to have a variable vector length. The astcenc implementation is not written in a length-agnostic style and requires the binary to match the vector length on the host CPU.

macOS

For macOS devices we provide a single universal binary astcenc, which allows the OS to automatically use the correct binary variant for the current host machine. Support is provided for three architecture slices:

  • x86_64 - uses the astcenc-sse4.1 build defined above.
  • x86_64h - uses the astcenc-avx2 build defined above.
  • arm64 - uses the astcenc-neon build defined above.

Repository branches

The main branch is an active development branch for the compressor. It aims to be a stable branch for the latest major release series, but as it is used for ongoing development expect it to have some volatility. We recommend using the latest stable release tag for production development.

The 4.x branch is a stable branch for the older 4.x release series. It is no longer under active development, but is a supported branch that continues to get back-ported bug fixes.

The 1.x, 2.x, and 3.x branches are stable branches for older releases. They are no longer under active development or getting bug fixes.

Any other branches you might find are development branches for new features or optimizations, so might be interesting to play with but should be considered transient and unstable.

Getting started

Open a terminal, change to the appropriate directory for your system, and run the astcenc encoder program, like this on Linux or macOS:

./astcenc

... or like this on Windows:

astcenc

Invoking astcenc -help gives an extensive help message, including usage instructions and details of all available command line options. A summary of the main encoder options are shown below.

Compressing an image

Compress an image using the -cl \ -cs \ -ch \ -cH modes. For example:

astcenc -cl example.png example.astc 6x6 -medium

This compresses example.png using the LDR color profile and a 6x6 block footprint (3.56 bits/pixel). The -medium quality preset gives a reasonable image quality for a relatively fast compression speed, so is a good starting point for compression. The output is stored to a linear color space compressed image, example.astc.

The modes available are:

  • -cl : use the linear LDR color profile.
  • -cs : use the sRGB LDR color profile.
  • -ch : use the HDR color profile, tuned for HDR RGB and LDR A.
  • -cH : use the HDR color profile, tuned for HDR RGBA.

If you intend to use the resulting image with the decode mode extensions to limit the decompressed precision to UNORM8, it is recommended that you also specify the -decode_unorm8 flag. This will ensure that the compressor uses the correct rounding rules when choosing encodings.

Decompressing an image

Decompress an image using the -dl \ -ds \ -dh \ -dH modes. For example:

astcenc -dh example.astc example.tga

This decompresses example.astc using the full HDR feature profile, storing the decompressed output to example.tga.

The modes available mirror the options used for compression, but use a d prefix. Note that for decompression there is no difference between the two HDR modes, they are both provided simply to maintain symmetry across operations.

Measuring image quality

Review the compression quality using the -tl \ -ts \ -th \ -tH modes. For example:

astcenc -tl example.png example.tga 5x5 -thorough

This is equivalent to using using the LDR color profile and a 5x5 block size to compress the image, using the -thorough quality preset, and then immediately decompressing the image and saving the result. This can be used to enable a visual inspection of the compressed image quality. In addition this mode also prints out some image quality metrics to the console.

The modes available mirror the options used for compression, but use a t prefix.

Experimenting

Efficient real-time graphics benefits from minimizing compressed texture size, as it reduces memory footprint, reduces memory bandwidth, saves energy, and can improve texture cache efficiency. However, like any lossy compression format there will come a point where the compressed image quality is unacceptable because there are simply not enough bits to represent the output with the precision needed. We recommend experimenting with the block footprint to find the optimum balance between size and quality, as the finely adjustable compression ratio is one of major strengths of the ASTC format.

The compression speed can be controlled from -fastest, through -fast, -medium and -thorough, up to -exhaustive. In general, the more time the encoder has to spend looking for good encodings the better the results, but it does result in increasingly small improvements for the amount of time required.

There are many other command line options for tuning the encoder parameters which can be used to fine tune the compression algorithm. See the command line help message for more details.

Documentation

The ASTC Format Overview page provides a high level introduction to the ASTC texture format, how it encodes data, and why it is both flexible and efficient.

The Effective ASTC Encoding page looks at some of the guidelines that should be followed when compressing data using astcenc. It covers:

  • How to efficiently encode data with fewer than 4 channels.
  • How to efficiently encode normal maps, sRGB data, and HDR data.
  • Coding equivalents to other compression formats.

The ASTC Developer Guide document (external link) provides a more detailed guide for developers using the astcenc compressor.

The .astc File Format page provides a light-weight specification for the .astc file format and how to read or write it.

The Building ASTC Encoder page provides instructions on how to build astcenc from the sources in this repository.

The Testing ASTC Encoder page provides instructions on how to test any modifications to the source code in this repository.

Support

If you have issues with the astcenc encoder, or questions about the ASTC texture format itself, please raise them in the GitHub issue tracker.

If you have any questions about Arm GPUs, application development for Arm GPUs, or general mobile graphics development or technology please submit them on the Arm Community graphics forums.


Copyright © 2013-2025, Arm Limited and contributors. All rights reserved.

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.

简介

ASTC(Adaptive Scalable Texture Compression)是由 Arm 和 AMD 开发的一种先进的纹理压缩格式 展开 收起
README
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C/C++
1
https://gitee.com/mirrors/astc-encoder.git
git@gitee.com:mirrors/astc-encoder.git
mirrors
astc-encoder
astc-encoder
main

搜索帮助