Name

    ARM_image_format

Name Strings

    EGL_ARM_image_format

Contributors

    Jan-Harald Fredriksen

Contact

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

IP Status

    No known IP claims.

Status

    Complete

Version

     Version 1 - February 18, 2020

Number

    138

Dependencies

    This extension is written against the wording of the EGL 1.4
    specification.

    This extension reuses tokens from EGL_EXT_pixel_format_float.

Overview

    When an EGLImage is created from an existing image resource the
    implementation will deduce the format of the image data from that
    resource. In some cases, however, the implementation may not know how to
    map the existing image resource to a known format. This extension extends
    the list of attributes accepted by eglCreateImageKHR such that applications
    can tell the implementation how to interpret the data.

New Procedures and Functions

    None.

New Tokens

   Accepted as an attribute name in the <attrib_list> argument of
   eglCreateImageKHR:
        EGL_COLOR_COMPONENT_TYPE_EXT                   0x3339

   Accepted as attribute values for the EGL_COLOR_COMPONENT_TYPE_EXT attribute
   of eglCreateImageKHR:

        EGL_COLOR_COMPONENT_TYPE_FIXED_EXT              0x333A
        EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT              0x333B
        EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM   0x3287
        EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM            0x3288
        EGL_RED_SIZE                                    0x3024
        EGL_GREEN_SIZE                                  0x3023
        EGL_BLUE_SIZE                                   0x3022
        EGL_ALPHA_SIZE                                  0x3021

Modifications to the EGL 1.4 Specification

   Add the following rows to Table 3.xx: Legal attributes for
   eglCreateImageKHR <attrib_list> parameter:

      +------------------------------+------------------------------+-----------+---------------+
      | Attribute                    | Description                  | Valid     | Default Value |
      |                              |                              | <target>s |               |
      +------------------------------+------------------------------+-----------+---------------+
      | EGL_COLOR_COMPONENT_TYPE_EXT | Specifies the component      | All       | NA            |
      |                              | type the EGLImage source     |           |               |
      |                              | is interpreted as            |           |               |
      | EGL_RED_SIZE                 | Specifies the red component  | All       | NA            |
      |                              | size the EGLImage source     |           |               |
      |                              | is interpreted as            |           |               |
      | EGL_GREEN_SIZE               | Specifies the green component| All       | NA            |
      |                              | size the EGLImage source     |           |               |
      |                              | is interpreted as            |           |               |
      | EGL_BLUE_SIZE                | Specifies the blue component | All       | NA            |
      |                              | size the EGLImage source     |           |               |
      |                              | is interpreted as            |           |               |
      | EGL_ALPHA_SIZE               | Specifies the alpha component| All       | NA            |
      |                              | size the EGLImage source     |           |               |
      |                              | is interpreted as            |           |               |
      +------------------------------+------------------------------+-----------+---------------+

    If <attrib_list> specifies values for EGL_COLOR_COMPONENT_TYPE_EXT,
    EGL_RED_SIZE, EGL_GREEN_SIZE, EGL_BLUE_SIZE, or EGL_ALPHA_SIZE, the
    implementation will treat these as hints for how to interpret the contents
    of <buffer>.

    EGL_COLOR_COMPONENT_TYPE_EXT indicates the component type of <buffer> and
    must be either EGL_COLOR_COMPONENT_TYPE_FIXED_EXT for fixed-point,
    EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT for floating-point,
    EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM for unsigned integer, or
    EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM for integer components.

Add to the list of error conditions for eglCreateImageKHR:

    * If the implementation is unable to interpret the contents <buffer>
      according to the component types and sizes in <attrib_list>, then a
      EGL_BAD_MATCH error is generated.

Issues

    1. Should there be a way to specify the component order?

       Resolved. No, the component order is interpreted to be R, G, B, A,
       with R mapping to component 0. If the application needs a different
       component order it can use swizzle in the client API side or in the
       shader.

Revision History

    Version 1, 2020/02/18
      - Internal revisions
