EXT_EGL_image_storage_compression

Name

EXT_EGL_image_storage_compression

Name Strings

GL_EXT_EGL_image_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 #337

Dependencies

Requires OpenGL ES 3.0.

Requires GL_EXT_EGL_image_storage.
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 specify a texture by taking all
properties from a fixed-rate compressed EGLImage.

Glossary

Please see the EGL_KHR_image specification for a list of terms
used by this specification.

New Types

None.

New Procedures and Functions

None.

New Tokens

New attributes accepted by the <attrib_list> argument of
EGLImageTargetTexStorageEXT:
    SURFACE_COMPRESSION_EXT                     0x96C0

Accepted as attribute values for SURFACE_COMPRESSION_EXT by
EGLImageTargetTexStorageEXT:
    SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT     0x96C1
    SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT  0x96C2

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

- (8.18, p. 210) Modify the final paragraph of the description of the
  EGLImageTargetTexStorageEXT command:

<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 whether fixed-rate compression
is enabled for <image>.
If its value is SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT, then <image>
must not use fixed-rate compression.
In this case, if <image> refers to a compressed image, the error
INVALID_OPERATION is generated.

If its value is SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT, then
<image> may use fixed-rate compression.

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;"

Issues

1. Can fixed-rate compressed images be imported using EGLImageTargetTexture2DOES?

RESOLVED. No. We only allow fixed-rate compression for immutable textures.

2. Do we need to specify compression rates in this extension?

RESOLVED. No. The source EGLImage object must have been allocated elsewhere,
and the compression ratio must have been decided at that time.

Revision History Version 1, 2021/11/15 - Internal revisions