Name

    ANGLE_iosurface_client_buffer

Name Strings

    EGL_ANGLE_iosurface_client_buffer

Contributors

    Corentin Wallez
    Geoff Lang
    James Darpinian

Contacts

    Corentin Wallez, Google Inc. (cwallez 'at' google.com)

Status

    Draft

Version
    Version 3, Aug 13, 2019

Number

    EGL Extension #??

Dependencies

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

Overview

    This extension allows creating EGL surfaces from IOSurface objects.

New Types

    None

New Procedures and Functions

    None

New Tokens

    Accepted in the <buftype> parameter of eglCreatePbufferFromClientBuffer:

        EGL_IOSURFACE_ANGLE            0x3454
        EGL_IOSURFACE_PLANE_ANGLE      0x345A
        EGL_TEXTURE_RECTANGLE_ANGLE    0x345B
        EGL_TEXTURE_TYPE_ANGLE         0x345C
        EGL_TEXTURE_INTERNAL_FORMAT_ANGLE 0x345D

Additions to Chapter 3 of the EGL 1.4 Specification (EGL Functions and Errors)

    Replace the last sentence of paragraph 1 of Section 3.5.3 with the
    following text.
    "Currently, the only client API resources which may be bound in this
    fashion are OpenVG VGImage objects and IOSurface objects."

    Replace the third paragraph of Section 3.5.3 with the following text.
    "<buftype> specifies the type of buffer to be bound. The only allowed values
    of <buftype> are EGL_OPENVG_IMAGE and EGL_IOSURFACE_ANGLE".

    Append the following text to the fourth paragraph of Section 3.5.3.
    "When <buftype> is EGL_IOSURFACE_ANGLE, <buffer> must be a valid IOSurface
    object case into the type EGLClientBuffer."

    Append to the end of Section 3.5.3.
    "When <buftype> is EGL_IOSURFACE_ANGLE, <attrib_list> must contain all the
    following attributes otherwise EGL_BAD_PARAMETER is generated. The
    attributes must satisfy the following constraints otherwise
    EGL_BAD_ATTRIBUTE is generated:
      - EGL_TEXTURE_TYPE_ANGLE, and EGL_TEXTURE_INTERNAL_FORMAT_ANGLE followed
    by OpenGL enums for texture types, and texture internal format
    respectively.
      - EGL_TEXTURE_FORMAT with a value of EGL_TEXTURE_RGBA
      - EGL_WIDTH with a value between 1 and the width of <buffer>.
      - EGL_HEIGHT with a value between 1 and the height of <buffer>.
      - EGL_TEXTURE_TARGET with a value of EGL_TEXTURE_RECTANGLE_ANGLE
      - EGL_IOSURFACE_PLANE_ANGLE with a value between 0 and the number of
    planes of <buffer> (exclusive).

    In addition the EGL_TEXTURE_TYPE_ANGLE and
    EGL_TEXTURE_INTERNAL_FORMAT_ANGLE attributes must be one of the
    combinations listed in table egl.iosurface.formats or an
    EGL_BAD_PARAMETER is generated. The combination must also be a valid
    combinations for glTexImage2D or EGL_BAD_PARAMETER is generated."

    ---------------------------------------------------------------------------
    Texture Type               Texture Internal Format
    ---------------------------------------------------------------------------
    GL_UNSIGNED_BYTE           GL_RED
    GL_UNSIGNED_SHORT          GL_R16UI
    GL_UNSIGNED_BYTE           GL_RG
    GL_UNSIGNED_BYTE           GL_RGB
    GL_UNSIGNED_BYTE           GL_BGRA_EXT
    GL_HALF_FLOAT              GL_RGBA
    ---------------------------------------------------------------------------
    Table egl.iosurface.formats - Valid combinations of format, type and
    internal format for IOSurface-backed pbuffers.
    ---------------------------------------------------------------------------

    Append to the end of Section 3.5.3.
    "When a pbuffer is created with type EGL_IOSURFACE_ANGLE, the contents
    of the associcated IOSurface object are undefined while the pbuffer is
    bound to a client texture."

Issues

    1. Can RGB formats be supported?

    RESOLVED: Support for RGB internal formats is added in version 3. Surfaces
    with an RGB format will ensure that the alpha channel of the IOSurface is
    reset to 1.0 when it is used.

Revision History

    Version 1, 2017/12/06 - first draft.
    Version 2, 2019/04/01 - Allow MakeCurrent.
    Version 3, 2019/08/13 - Allow RGB internal formats
