Name

    KHR_texture_compression_astc_sliced_3d

Name Strings

    GL_KHR_texture_compression_astc_sliced_3d

Contact

    Eric Werness (ewerness 'at' nvidia.com)

Contributors

    Sean Ellis, ARM
    Jorn Nystad, ARM
    Tom Olson, ARM
    Andy Pomianowski, AMD
    Cass Everitt, NVIDIA
    Walter Donovan, NVIDIA
    Robert Simpson, Qualcomm
    Maurice Ribble, Qualcomm
    Larry Seiler, Intel
    Daniel Koch, NVIDIA
    Anthony Wood, Imagination Technologies
    Jon Leech

IP Status

    No known issues.

Notice

    Copyright (c) 2015 The Khronos Group Inc. Copyright terms at
        http://www.khronos.org/registry/speccopyright.html

Status

    Complete.
    Approved by the OpenGL ES Working Group on 2015/07/22
    Approved by the OpenGL ARB Working Group on 2015/07/31
    Ratified by the Khronos Board of Promoters on 2015/10/09.

Version

    Version 2, September 15, 2015

Number

    ARB Extension #189
    OpenGL ES Extension #249

Dependencies

    Written based on the wording of the OpenGL ES 3.1 (April 29, 2015)
    Specification

    Requires GL_KHR_texture_compression_astc_ldr

Overview

    Adaptive Scalable Texture Compression (ASTC) is a new texture
    compression technology that offers unprecendented flexibility, while
    producing better or comparable results than existing texture
    compressions at all bit rates. It includes support for 2D and
    slice-based 3D textures, with low and high dynamic range, at bitrates
    from below 1 bit/pixel up to 8 bits/pixel in fine steps.

    This extension extends the functionality of
    GL_KHR_texture_compression_astc_ldr to include slice-based 3D textures
    for textures using the LDR profile in the same way as the HDR profile
    allows slice-based 3D textures.

Interactions

    None

New Procedures and Functions

    None

New Tokens

    None

Additions to Chapter 8 of the OpenGL ES 3.1 Specification (Textures and Samplers)

    Modify table 8.19 (Compressed internal formats), as modified by
    GL_KHR_texture_compression_astc_ldr

    Modify the "3D Tex." column to be checked for all ASTC formats.

Additions to Appendix C of the OpenGL ES 3.1 Specification (Compressed
Texture Image Formats

    Modify the sub-section on ASTC image formats, C.2.25 LDR PROFILE SUPPORT

    Change the first bullet on the feature subset list to read.

    * 2D and slice-based 3D textures only, including 2D, 2D array, cube map
        face, cube map array, and 3D texture targets.

Revision History

    Revision 2, September 15, 2015 (Jon Leech) - correct typo from
    "GL_KHR_texture_compression_ldr" to
    "GL_KHR_texture_compression_astc_ldr"

    Revision 1, June 18, 2015 - initial revision.
