Adaptive scalable texture compression: Difference between revisions

Content deleted Content added
mark intel gpu support as full and cite
Rescuing 0 sources and tagging 2 as dead.) #IABot (v2.0.9.5
 
(27 intermediate revisions by 18 users not shown)
Line 1:
{{Short description|Computer graphics algorithm}}
'''Adaptive scalable texture compression''' ('''ASTC''') is a [[lossy compression|lossy]] block-based [[texture compression]] [[algorithm]] developed by Jørn Nystad et al. of [[ARM Holdings|ARM Ltd.]] and [[Advanced Micro Devices|AMD]].<ref>{{cite web |url=https://www.arm.com/products/multimedia/mali-technologies/adaptive-scalable-texture-compression.php |title=Adaptive Scalable Texture Compression (ASTC) technology developed by ARM® and AMD}}</ref>
 
Full details of ASTC were first presented publicly at the High Performance Graphics 2012 conference, in a paper by Olson et al. entitled "Adaptive Scalable Texture Compression".<ref name=astc_paper>{{cite web|url=https://www.cs.cmu.edu/afs/cs/academic/class/15869-f11/www/readings/nystad12_astc.pdf|title=Adaptive Scalable Texture Compression |publisher=HPG 2012 |date= |accessdate=2012-06-27}}</ref>
 
ASTC was adopted as an official extension for both [[OpenGL]] and [[OpenGL ES]] by the [[Khronos Group]] on 6 August 2012.<ref>{{cite web|url=http://www.khronos.org/news/press/khronos-releases-atsc-next-generation-texture-compression-specification|title=Khronos Releases ATSC Next-Generation Texture Compression Specification|publisher=The Khronos Group Inc.|date=2012-08-06|accessdate=2012-08-06}}</ref>
 
== Hardware support ==
Line 10 ⟶ 11:
|-
! Vendor/product !! Profile !! Generation
|-
| AMD [[Radeon]] || || ?
|-
|rowspan="2"| [[Apple silicon|Apple GPUs]] ||style="background:#FFB"| LDR only || [[Apple A8|A8]] through [[Apple A12|A12]]<ref name=apple>{{cite web|url=https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf|title=Metal Feature Set Tables|accessdate=2021-08-31|date=2020-10-21|publisher=[[Apple Inc]]}}</ref>
|-
|style="background:#9F9"| Full || Since [[Apple A13|A13]]<ref name=apple>< /ref>
|-
| [[Arm Limited|Arm]] [[Mali (GPU)|Mali]] ||style="background:#9F9"| Full || Since Mali-T620/T720/T820<ref>{{cite web|url=https://developer.arm.com/-/media/Arm%20Developer%20Community/PDF/Mali%20GPU%20datasheet/Arm%20Mali%20GPU%20Datasheet%202021.pdf?revision=d3378de8-806b-4920-897c-e295509847b3|title=Arm Mali GPU Datasheet|date=2021|accessdate=2021-08-31|publisher=[[Arm Limited]]}}{{Dead link|date=August 2025 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>
|-
| [[Imagination Technologies|Imagination]] [[PowerVR]] ||style="background:#9F9"| Full || Since Series6XT<ref>{{cite web|url=https://www.imaginationtech.com/news/press-release/imaginations-new-generation-powervr-series6xt-architecture-delivers-up-to-50-higher-performance-and-advanced-power-management/|title=Imagination’sImagination's new generation PowerVR Series6XT architecture delivers up to 50% higher performance and advanced power management|date=2014-01-06|accessdate=2021-08-21|publisher=[[Imagination Technologies]]}}{{Dead link|date=August 2025 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>
|-
| [[Intel HD and Iris Graphics|Intel GPUs]] ||style="background:#9F9"| Full<ref>{{cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=ASTC-Skylake-Intel-Mesa|website=Phoronix|title=Intel Skylake Adds ASTC Texture Compression, Open-Source Support Coming|date=2015-05-20|accessdate=2021-08-31}}</ref> || SinceFrom [[Skylake (microarchitecture)|Skylake]]<ref>{{cite web |url=https://software.intel.com/en-us/articles/6th-gen-graphics-api-dev-guide|archiveurl=https://web.archive.org/web/20170720043433/https://software.intel.com/en-us/articles/6th-gen-graphics-api-dev-guide|archivedate=2017-07-20|title=Graphics API Developer’sDeveloper's Guide For 6th Generation Intel® Core™Core Processors}}</ref> <span style="color:darkred">; Removed in [[Intel Arc|Arc]] / Gen12.5</span><ref>{{cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=Intel-Gen12.5-No-ASTC|title=Intel Removes ASTC Hardware From Gen12.5+ Graphics|author=Michael Larabel|date=2021-10-07|accessdate=2022-07-10|website=[[Phoronix]]}}</ref>
|-
| [[Nvidia]] [[Tegra]] || ? || Since [[Kepler (microarchitecture)|Kepler]]<ref>{{cite web |url=http://on-demand.gputechconf.com/siggraph/2015/presentation/SIG1501-Piers-Daniell.pdf |title=Vulkan API}}</ref>
|-
| [[Qualcomm]] [[Adreno]] ||style="background:#FFB9F9"| LDR onlyFull || SinceLDR since 4xx series,<ref>{{cite web|url=https://developer.qualcomm.com/qfile/28557/80-nu141-1_b_adreno_opengl_es_developer_guide.pdf|date=2015-05-01|accessdate=2021-08-31|title=Qualcomm® Adreno™Adreno OpenGL ES Developer Guide|publisher=[[Qualcomm]]}}</ref> at least 7xx series support GL_KHR_texture_compression_astc_hdr extension on Android 13
|}
 
On Linux, all Gallium 3D drivers have a software fallback since 2018, so ASTC can be used on any AMD Radeon GPU.<ref>{{cite web|url=https://lists.freedesktop.org/archives/mesa-dev/2018-July/200867.html |title=[Mesa-dev&#93; [PATCH 0/7&#93; ASTC texture compression for all Gallium drivers |publisher=Lists.freedesktop.org |date= 23 July 2018|accessdate=2022-09-01}}</ref>
 
== Overview ==
Line 41 ⟶ 44:
 
== Supported color formats ==
 
ASTC supports anywhere from 1 to 4 channels. In modes with 2&ndash;4 channels, one of the channels can be treated as "uncorrelated" and be given a separate gradient for prediction. In any case, the data is decoded as RGBA.<ref>{{cite web |title=Khronos Data Format Specification v1.1 rev 9 |url=https://registry.khronos.org/DataFormat/specs/1.1/dataformat.1.1.html#ASTC |website=registry.khronos.org}}</ref>
 
{| class="wikitable"
|- style="text-align:center;"
! Channel count
! Encoding Format
! RGBA interpretation
! Description
|- style="text-align:center;"
| 1 || L || Luminance-only: RGB set to same value in decoded buffer, alpha set to 1
|- style="text-align:center;"
| 2 || LA || Luminance with transparency
|- style="text-align:center;"
| 2 || L+A || Luminance with uncorrelated transparency
|- style="text-align:center;"
| 3 || RGB || Full color, alpha set to 1
| X+Y || Surface normals
|- style="text-align:center;"
| RGB3 || RG+AB || Full color with uncorrelated transparencyblue (not actually used for color purposes)
| RGB || Full color
|- style="text-align:center;"
| 4 || RGBA || Full color with transparency
| XY+Z || Surface normals with uncorrelated Z
|- style="text-align:center;"
| RGBA4 || RGB+A || Full color with uncorrelated transparency
|- style="text-align:center;"
| RGB+A || Full color with uncorrelated transparency
|}
 
Each of these may be encoded as low or high dynamic range. The encoder selects color formats independently for each block in the image.
 
In practice, ASTC may be used to represent data other than color. For example, the L+A format may be used to represent "X+Y", a [[Normal mapping|normal map]] with uncorrelated components; the "RG+B" format can be used to represent XY+Z.<ref>{{cite web |title=Khronos Releases ASTC Next-Generation Texture Compression Specification |url=https://www.khronos.org/news/press/khronos-releases-atsc-next-generation-texture-compression-specification |website=The Khronos Group |language=en |date=6 August 2012}}</ref> The {{code|astc-encoder}} software supplied by ARM supports "X+Y" generation with the {{code|-normal}} option. The shader is expected to treat the decoded output as a [[swizzled texture]].<ref>{{cite web |title=Effective ASTC Encoding [astc-encoder/Docs/Encoding.md at 2042cfc1a507c0414fb41dce1603ed53c503a0da · ARM-software/astc-encoder] |url=https://github.com/ARM-software/astc-encoder/blob/2042cfc1a507c0414fb41dce1603ed53c503a0da/Docs/Encoding.md |website=GitHub |language=en |quote=The best way to store normal maps using ASTC is similar to the scheme used by BC5; store the X and Y components of a unit-length normal. The Z component of the normal can be reconstructed in shader code based on the knowledge that the vector is unit length. To encode this we need to store only two input components in the compressed data, and therefore use the rrrg coding swizzle to align the data with the ASTC luminance+alpha endpoint.}}</ref>
 
== 2D block footprints and bit rates ==
Line 139 ⟶ 145:
 
Block footprints are presented as width × height × depth.
 
== Universal ASTC ==
UASTC (Universal ASTC) is a subset of ASTC specified by Binomial. The format is used in their Basis Universal "[[texture supercompression|supercompressed]]" GPU texture format, which adds extra compression over compressed texture formats such as UASTC and [[ETC1|ETC1S]] and allows for efficient conversion from UASTC/ETC1S to compressed texture formats directly usable by GPUs.<ref>{{cite web |title=UASTC Texture Specification |url=https://github.com/BinomialLLC/basis_universal/wiki/UASTC-Texture-Specification |website=GitHub |language=en}}</ref> UASTC, as part of Basis Universal, is part of the KTX (Khronos Texture) file format.<ref>{{cite web |title=KTX - GPU Texture Container Format |url=https://www.khronos.org/ktx/ |website=The Khronos Group |language=en |date=16 April 2021}}</ref>
 
== See also ==
Line 152 ⟶ 161:
* [https://github.com/ARM-software/astc-encoder ASTC Evaluation Codec from ARM]
* [http://www.khronos.org/registry/gles/extensions/OES/OES_texture_compression_astc.txt Khronos ASTC Full Profile Extension Specification]
 
* [https://github.com/BinomialLLC/basis_universal/wiki/UASTC-Texture-Specification UASTC (Universal ASTC) Texture Specification]
{{Compression methods}}
 
[[Category:Lossy compression algorithms]]
[[Category:Texture compression]]
[[Category:Advanced Micro DevicesAMD technologies]]
[[Category:Data compression]]