Name

    EXT_surface_compression

Name Strings

    EGL_EXT_surface_compression

Contributors

    Jan-Harald Fredriksen, Arm
    Lisa Wu, Arm
    George Liu, Arm
    Laurie Hedge, Imagination Technologies

Contact

    Jan-Harald Fredriksen (jan-harald.fredriksen 'at' arm.com)

IP Status

    No known IP claims.

Status

    Complete

Version

    Version 1 - November 15, 2021

Number

    EGL Extension #147

Dependencies

    These extensions are written against the wording of the EGL 1.5
    specification (August 27, 2014).

    This extension interacts with EGL_EXT_yuv_surface.

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 fixed-rate compression
    for EGL window surfaces.

    Compression may not be supported for all framebuffer formats. It can still
    be requested for all formats and applications can query what level of compression
    was actually enabled. 

New Procedures and Functions

    EGLBoolean eglQuerySupportedCompressionRatesEXT(
           EGLDisplay dpy, EGLConfig config, const EGLAttrib *attrib_list,
           EGLint *rates, EGLint rate_size, EGLint *num_rates);

New Tokens

    New attributes accepted by the <attrib_list> argument of
    eglCreatePlatformWindowSurface and eglCreateWindowSurface:
        EGL_SURFACE_COMPRESSION_EXT                     0x34B0

    [Only if EGL_EXT_yuv_surface is supported]
        EGL_SURFACE_COMPRESSION_PLANE1_EXT              0x328E
        EGL_SURFACE_COMPRESSION_PLANE2_EXT              0x328F

    Accepted as attribute values for EGL_SURFACE_COMPRESSION_EXT by
    eglCreatePlatformWindowSurface and eglCreateWindowSurface:
        EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT     0x34B1
        EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT  0x34B2

        EGL_SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT     0x34B4
        EGL_SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT     0x34B5
        EGL_SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT     0x34B6
        EGL_SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT     0x34B7
        EGL_SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT     0x34B8
        EGL_SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT     0x34B9
        EGL_SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT     0x34BA
        EGL_SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT     0x34BB
        EGL_SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT     0x34BC
        EGL_SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT    0x34BD
        EGL_SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT    0x34BE
        EGL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT    0x34BF

Modifications to the EGL 1.5 Specification

    Modify section 3.5.1 "Creating On-Screen Rendering Surfaces:

    Add EGL_SURFACE_COMPRESSION_EXT to the list of attributes that can
    be specified in <attrib_list> for eglCreatePlatformWindowSurface.

    Add the following paragraph:

    EGL_SURFACE_COMPRESSION_EXT specifies the fixed-rate compression that may
    be enabled for rendering to the window.
    If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT, then fixed-rate
    compression is disabled.
    If its value is EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT,
    then the implementation may enable compression at a default,
    implementation-defined, rate.
    If its value is EGL_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 EGL_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 EGL_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 EGL_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 bits per component.
    If its value is EGL_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 EGL_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 EGL_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 EGL_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 EGL_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 EGL_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 EGL_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 EGL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT, then the
    implementation may enable fixed-rate compression with a bitrate of at
    least 12 bits per component.

    For pixel formats with different number of bits per component, the
    specified fixed-rate compression rate applies to the component with
    the highest number of bits.

    The default value of EGL_SURFACE_COMPRESSION_EXT is
    EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT.

   [Only if EGL_EXT_yuv_surface is supported]

    If _config_ describes a surface with multiple planes (the
    value of the EGL_YUV_NUMBER_OF_PLANES_EXT attribute is larger than one),
    then the fixed-rate compression rate can be specified independently for
    the each plane.
    In this case, EGL_SURFACE_COMPRESSION_EXT specifies the fixed-rate
    compression that may be enabled for rendering to plane 0,
    EGL_SURFACE_COMPRESSION_PLANE1_EXT specifies the fixed-rate
    compression that may be enabled for rendering to plane 1, and
    EGL_SURFACE_COMPRESSION_PLANE2_EXT specifies the fixed-rate compression
    that may be enabled for rendering to plane 2.
    The supported values of EGL_SURFACE_COMPRESSION_PLANE1_EXT and
    EGL_SURFACE_COMPRESSION_PLANE2_EXT are the same as for
    EGL_SURFACE_COMPRESSION_EXT.

    If _config_ has more than one plane and the
    EGL_SURFACE_COMPRESSION_PLANE1_EXT attribute is not specified,
    then the value of EGL_SURFACE_COMPRESSION_EXT is used for all planes.
    If _config_ has more than two planes and the
    EGL_SURFACE_COMPRESSION_PLANE2_EXT attribute is not specified,
    then the value of EGL_SURFACE_COMPRESSION_PLANE1_EXT is also used
    for plane 2.

    The default value of EGL_SURFACE_COMPRESSION_PLANE1_EXT and
    EGL_SURFACE_COMPRESSION_PLANE2_EXT is EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT.

    Modify section 3.5.6 "Surface Attributes"

    Add entries to Table 3.5 "Queryable surface attributes and types":
         
        EGL_SURFACE_COMPRESSION_EXT            enum    Fixed-rate compression

   [Only if EGL_EXT_yuv_surface is supported]
        EGL_SURFACE_COMPRESSION_PLANE1_EXT     enum    Fixed-rate compression for plane 1
        EGL_SURFACE_COMPRESSION_PLANE2_EXT     enum    Fixed-rate compression for plane 2

    Add the following paragraph:

    Querying EGL_SURFACE_COMPRESSION_EXT returns the actual fixed-rate
    compression applied to a surface. For YUV surfaces, the value applied to
    the luma plane is returned. This value may be different to the one
    requested when the surface was created.
    For pbuffer and pixmap surfaces, the contents of <value> are not modified."

    [Only if EGL_EXT_yuv_surface is supported]
    Querying EGL_SURFACE_COMPRESSION_PLANE1_EXT returns the actual
    fixed-rate compression applied to plane 1 of a YUV surface.
    Querying EGL_SURFACE_COMPRESSION_PLANE2_EXT returns the actual
    fixed-rate compression applied to plane 2 of a YUV surface.
    These values may be different to the one requested when the surface was created.
    For pbuffer and pixmap surfaces, the contents of <value> are not modified."

    To get the list of all fixed-rate compression rates that are available on
    a specified display and EGLConfig, call

       EGLBoolean eglQuerySupportedCompressionRatesEXT(
           EGLDisplay dpy, EGLConfig config, const EGLAttrib *attrib_list,
           EGLint *rates, EGLint rate_size, EGLint *num_rates);

    <attrib_list> specifies a list of attributes that will be provided when a surface is created with
    this combination of display and EGLConfig. The accepted attributes are the same as for
    eglCreatePlatformWindowSurface.
    <rates> is a pointer to a buffer containing <rate_size> elements. On success, EGL_TRUE is
    returned. The number of rates is returned in <num_rates>, and elements 0 through <num_rates>-1 of
    <rates> are filled in with the available compression rates.
    No more than <rate_size> compression rates will be returned even if more are available
    on the specified display and config. However, if eglQuerySupportedCompressionRatesEXT is called with
    <rates> = NULL, then no rates are returned, but the total number of rates available will be returned
    in <num_rates>.
    The possible values returned in <rates> are the attribute values accepted for
    EGL_SURFACE_COMPRESSION_EXT by eglCreatePlatformWindowSurface and eglCreateWindowSurface, except
    EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT and EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT.

Errors

    [Only if EGL_EXT_yuv_surface is supported]
    Add to the error section of eglCreatePlatformWindowSurface:

    If the EGL_SURFACE_COMPRESSION_PLANE1_EXT attribute is specified and
    _config_ does not describe a surface with at least 2 planes (the
    EGL_YUV_NUMBER_OF_PLANES_EXT attribute is not greater than or
    equal to 2), an EGL_BAD_MATCH error is generated.

    If the EGL_SURFACE_COMPRESSION_PLANE2_EXT attribute is specified and
    _config_ does not describe a surface with at least 3 planes (the
    EGL_YUV_NUMBER_OF_PLANES_EXT attribute is not greater than or
    equal to 3), an EGL_BAD_MATCH error is generated.

    Add to the section describing eglQuerySupportedCompressionRatesEXT:

       * On failure, EGL_FALSE is returned.
       * An EGL_NOT_INITIALIZED error is generated if EGL is not initialized on <dpy>.
       * An EGL_BAD_PARAMETER error is generated if <num_rates> is NULL.

Issues

    1. Should fixed-rate compression be supported for pixmap or pbuffer
       surfaces?

       No, no use-cases have been identified for this.

    2. What is the result of querying EGL_SURFACE_COMPRESSION_EXT if
       EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT was requested?

       Resolved.
       The result will be the specific compression ratio chosen by the
       implementation, or EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT if
       no fixed-rate compression was applied.

    3. Should we expose different compressions rates per plane in this extension?

       Yes.

    4. How can an application query the set of supported compression rates?

       Resolved. Option B.

       Two options were considered.

       Option A:
       Reuse eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);

       This is not ideal because:
        - the compression modes are currently tied to the surface, not the EGLConfig
        - we don't want this to affect EGLConfig selection etc.
        - this query can only return a single value, so you'd need to query each of the
          12 bit rates separately.

       Option B:
       Add a new query, specifically for the compression rates. This addresses the concerns
       with Option A, and is very similar to the mechanism used for the OpenGL ES API. Main
       downside is that it adds additional functions to the API. 

Revision History

    Version 1, 2021/11/15
      - Internal revisions
