EXT_texture_storage_compression

Name

EXT_texture_storage_compression

Name Strings

GL_EXT_texture_storage_compression

Contact

Jan-Harald Fredriksen (jan-harald.fredriksen 'at' arm.com)

Contributors

Jan-Harald Fredriksen, Arm
Lisa Wu, Arm
Anton Berko, Arm
Laurie Hedge, Imagination Technologies

Status

Complete

Version

Version 1 - November 15, 2021

Number

OpenGL ES Extension #336

Dependencies

Requires OpenGL ES 3.0.

This extension is written based on the wording of the OpenGL ES 3.2
Specification.

Overview

Applications may wish to take advantage of framebuffer compression. Some
platforms may support framebuffer compression at fixed bitrates. Such
compression algorithms generally produce results that are visually lossless,
but the results are typically not bit-exact when compared to a non-compressed
result.

This extension enables applications to opt-in to compression for
immutable textures.

New Types

None.

New Procedures and Functions

void TexStorageAttribs2DEXT(enum target, sizei levels, enum internalformat, sizei width, sizei height, const int *attrib_list);

void TexStorageAttribs3DEXT(enum target, sizei levels, enum internalformat, sizei width, sizei height, sizei depth, const int *attrib_list);

New Tokens

New attributes accepted by the <attrib_list> argument of
TexStorageAttribs2DEXT and TexStorageAttribs3DEXT, and as the <pname>
argument to GetTexParameter*:
    SURFACE_COMPRESSION_EXT                     0x96C0

New attributes accepted by the <pname> argument of
GetInternalformativ:
    NUM_SURFACE_COMPRESSION_FIXED_RATES_EXT     0x8F6E

Accepted as attribute values for SURFACE_COMPRESSION_EXT by TexStorageAttribs2DEXT
and TexStorageAttribs3DEXT:
    SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT     0x96C1
    SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT  0x96C2

    SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT     0x96C4
    SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT     0x96C5
    SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT     0x96C6
    SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT     0x96C7
    SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT     0x96C8
    SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT     0x96C9
    SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT     0x96CA
    SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT     0x96CB
    SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT     0x96CC
    SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT    0x96CD
    SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT    0x96CE
    SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT    0x96CF

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

Add to 8.11.2, "Texture Parameter Queries"

Add SURFACE_COMPRESSION_EXT to the values accepted by <pname>.

"Querying <pname> SURFACE_COMPRESSION_EXT returns the fixed-rate
compression rate that was actually applied to the texture."

Add to 8.18, "Immutable-Format Texture Images" section:

The command

void TexStorageAttribs2DEXT(enum target, sizei levels, enum internalformat,
                            sizei width, sizei height, const int *attrib_list);

behaves identically to TexStorage2D, except that additional flags can
specified in <attrib_list>.

Similarly, the command

void TexStorageAttribs3DEXT(enum target, sizei levels, enum internalformat,
                            sizei width, sizei height, sizei depth, const int *attrib_list);

behaves identically to TexStorage3D, except that additional flags can be
specified in <attrib_list>.

For TexStorageAttribs2DEXT and TexStorageAttribs3DEXT, <attrib_list>
specifies a list of attributes for the texture.

All attribute names in <attrib_list> are immediately followed by the
corresponding value. The list is terminated with GL_NONE. If an
attribute is not specified in <attrib_list>, then the default value
is used.

<attrib_list> may be NULL or empty (first attribute is GL_NONE), in which
case all attributes assume their default value as described below.

Attributes that can be specified in <attrib_list> include
SURFACE_COMPRESSION_EXT.

SURFACE_COMPRESSION_EXT specifies if fixed-rate compression can be
enabled for the texture.
If its value is SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT then fixed-rate
compression is disabled.
If its value is SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT then the
implementation may enable compression at a default, implementation-defined,
rate.
If its value is SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT, then the
implementation may enable fixed-rate compression with a bitrate of at
least 1 bit and less than 2 bits per component.
If its value is SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT, then the
implementation may enable fixed-rate compression with a bitrate of at
least 2 bits and less than 3 bits per component.
If its value is SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT, then the
implementation may enable fixed-rate compression with a bitrate of at
least 3 bits and less than 4 bits per component.
If its value is SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT, then the
implementation may enable fixed-rate compression with a bitrate of at
least 4 bits and less than 5 bit per component.
If its value is SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT, then the
implementation may enable fixed-rate compression with a bitrate of at
least 5 bits and less than 6 bits per component.
If its value is SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT, then the
implementation may enable fixed-rate compression with a bitrate of at
least 6 bits and less than 7 bits per component.
If its value is SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT, then the
implementation may enable fixed-rate compression with a bitrate of at
least 7 bits and less than 8 bits per component.
If its value is SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT, then the
implementation may enable fixed-rate compression with a bitrate of at
least 8 bits and less than 9 bits per component.
If its value is SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT, then the
implementation may enable fixed-rate compression with a bitrate of at
least 9 bits and less than 10 bits per component.
If its value is SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT, then the
implementation may enable fixed-rate compression with a bitrate of at
least 10 bits and less than 11 bits per component.
If its value is SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT, then the
implementation may enable fixed-rate compression with a bitrate of at
least 11 bits and less than 12 bits per component.
If its value is SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT, then the
implementation may enable fixed-rate compression with a bitrate of at
least 12 bits per component.

The default value of SURFACE_COMPRESSION_EXT is
SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT.

If <attrib_list> is neither NULL nor a value described above, the error
INVALID_VALUE is generated.

Fixed-rate compression is done in an implementation-defined manner and may
be applied at block granularity. In that case, a write to an individual
texel may modify the value of other texels in the same block.

Modify section 8.23, "Texture Image Loads and Stores":

Add to the list of errors for BindImageTexture:

"An INVALID_VALUE error is generated if the value of
SURFACE_COMPRESSION_EXT for <texture> is not
SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT."

Add to the bullet list of conditions for when image access is considered invalid:

" * the value of SURFACE_COMPRESSION_EXT for the texture is not
    SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT;"

Additions to Chapter 20 of the OpenGL ES 3.2 Specification (Context State Queries)

Add to the end of section 20.3.1 Internal Format Query Parameters describing supported values for , their meanings, and their possible return values for GetInternalformativ:

NUM_SURFACE_COMPRESSION_FIXED_RATES_EXT: The number of fixed-rate compression rates that would be returned by querying SURFACE_COMPRESSION_EXT is returned in . If does not support any fixed-rate compression, zero is returned.

SURFACE_COMPRESSION_EXT: The fixed-rate compression rates supported for

and are written into , in order of ascending bitrates. Issues 1. Do we need to specify compression rates in this extension? Resolved. Yes. The GL implementation allocates these resources and need to know the compression ratio. Revision History Version 1, 2021/11/15 - Internal revisions