Compressing textures can significantly improve the performance and load time for graphics applications, since it reduces texture memory and bus bandwidth use. Unlike desktop OpenGL, Vulkan does not provide the necessary infrastructure for the application to compress textures at runtime, so texture data needs to be authored off-line.
Significant texture compression formats supported by Adreno GPUs are:
ATC – Proprietary Adreno texture compression format supporting RGB and RGBA component layouts
ETC – Standard OpenGL ES 2.0 texture compression format supporting the RGB component layout only
ETC2 – Standard OpenGL ES 3.0 texture compression format supporting R, RG, RGB, and RGBA component layouts, as well as sRGB texture data
ASTC – Texture compression format supported in OpenGL ES (3.0 and later) and Vulkan that allows the compression use a variable block size, offering remarkably low levels of image degradation given the compression ratios achieved
The following strategy is recommended for selecting a texture compression format:
Use ASTC compression if it is available.
Otherwise, use ETC2 compression if available.
- Otherwise, select the compression format as follows:
ATC if using alpha
ETC if not using alpha
ASTC is a newer format and may not be supported or optimized on all content creation pipelines. Also, the sRGB formats for ASTC are more efficiently handled on Adreno hardware than the RGBA formats.
The following are popular methods for converting textures to Adreno hardware:
On-device conversion involves a time-consuming one-time conversion of texture assets that occurs when the game starts up. Prepackaging the correct textures results in the most optimized solution but requires alternative versions of the APK for each GPU. Downloading requires GPU detection and an internet connection but allows for even more control on the exact texture format for each GPU. In either case, the first step is to create the compressed textures.
Texture data can be compressed to any of these texture compression formats using the Adreno Texture Compression and Visualization Tool or Adreno Texture Converter Tool, both included in the Adreno SDK for OpenGL. There is a Compressed Texture tutorial in the SDK, which presents how to use compressed textures in OpenGL ES applications.
The effectiveness of these compression formats is described below, consisting of one diffuse and one object-space normal RGB texture, compressed using the Adreno Texture Tool. The figures show the original textures and the compressed versions using each of the compression formats. For each example, there is a difference image showing the absolute difference between the original and the compressed version.
Diffuse texture test¶
The diffuse texture used for this test is shown below:
Normal texture test¶
Texture data can be compressed to any of these texture compression formats using the Adreno Texture Tool (QCompress.exe) included in the Adreno SDK for Vulkan. There is a Textures tutorial in the SDK, which demonstrates how to use compressed textures in Vulkan applications. The normal texture used for this test is shown below.