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
