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
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
SURFACE_COMPRESSION_EXT: The fixed-rate compression rates supported for