Name

    EXT_EGL_image_storage

Name Strings

    GL_EXT_EGL_image_storage

Contact

    Krzysztof Kosinski (krzysio 'at' google.com)

Contributors

    Krzysztof Kosinski, Google
    Craig Donner, Google
    Jesse Hall, Google
    Jan-Harald Fredriksen, ARM
    Daniel Koch, Nvidia

Status

    Complete

Version

    February 7, 2018 (version 7)

Number

    #522
    OpenGL ES Extension #301

Dependencies

    Requires OpenGL 4.2, OpenGL ES 3.0, or ARB_texture_storage.

    Requires EGL 1.4 and either the EGL_KHR_image or EGL_KHR_image_base
    extensions.

    The EGL_KHR_gl_texture_2D_image, EGL_KHR_gl_texture_cubemap_image,
    EGL_KHR_gl_texture_3D_image, EGL_KHR_gl_renderbuffer_image,
    EGL_KHR_vg_parent_image, and EGL_ANDROID_get_native_client_buffer
    extensions provide additional functionality layered on EGL_KHR_image_base
    and related to this extension.

    EXT_direct_state_access, ARB_direct_state_access, and OpenGL 4.5 affect
    the definition of this extension.

    This extension interacts with GL_OES_EGL_image, GL_OES_EGL_image_external,
    GL_OES_EGL_image_external_essl3, and GL_EXT_EGL_image_array.

    This extension is written based on the wording of the OpenGL ES 3.2
    Specification.

Overview

    The OpenGL ES extension OES_EGL_image provides a mechanism for creating
    GL textures sharing storage with EGLImage objects (in other words, creating
    GL texture EGLImage targets).  The extension was written against the
    OpenGL ES 2.0 specification, which does not have the concept of immutable
    textures.  As a result, it specifies that respecification of a texture by
    calling TexImage* on a texture that is an EGLImage target causes it to be
    implicitly orphaned.  In most cases, this is not the desired behavior, but
    rather a result of an application error.

    This extension provides a mechanism for creating texture objects that are
    both EGLImage targets and immutable.  Since immutable textures cannot be
    respecified, they also cannot accidentally be orphaned, and attempts to do
    so generate errors instead of resulting in well-defined, but often
    undesirable and surprising behavior.  It provides a strong guarantee that
    texture data that is intended to be shared will remain shared.

    EGL extension specifications are located in the EGL Registry at

        http://www.khronos.org/registry/egl/

Glossary

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

New Types

    /*
     * GLeglImageOES is an opaque handle to an EGLImage
     * Note: GLeglImageOES is also defined in GL_OES_EGL_image
     */
    typedef void* GLeglImageOES;

New Procedures and Functions

    void EGLImageTargetTexStorageEXT(enum target, eglImageOES image,
                                     const int* attrib_list)

    <If EXT_direct_state_access or an equivalent mechanism is supported:>

    void EGLImageTargetTextureStorageEXT(uint texture, eglImageOES image,
                                         const int* attrib_list)

New Tokens

     None.

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

    - (8.18, p. 210)  Insert the following text before the paragraph starting
    with "After a successful call to any TexStorage* command":

    The command

        void EGLImageTargetTexStorageEXT(enum target, eglImageOES image,
                                         const int* attrib_list);

    specifies all levels and properties of a texture (including dimensionality,
    width, height, format, mipmap levels of detail, and image data) by taking
    them from the specified eglImageOES <image>.  Images specified this way
    will be EGLImage siblings with the original EGLImage source and any other
    EGLImage targets.

    <target> must be one of GL_TEXTURE_2D, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D,
    GL_TEXTURE_CUBE_MAP, GL_TEXTURE_CUBE_MAP_ARRAY.  On OpenGL implementations
    (non-ES), <target> can also be GL_TEXTURE_1D or GL_TEXTURE_1D_ARRAY.
    If the implementation supports OES_EGL_image_external, <target> can be
    GL_TEXTURE_EXTERNAL_OES.  <target> must match the type of image data stored
    in <image>.  For instance, if the <image> was created from a GL texture,
    <target> must match the texture target of the source texture. <image> must
    be the handle of a valid EGLImage resource, cast into the type eglImageOES.
    Assuming no errors are generated in EGLImageTargetTexStorageEXT, the newly
    specified texture object will be an EGLImage target of the specified
    eglImageOES. <attrib_list> must be NULL or a pointer to the value GL_NONE.

    If <image> is NULL, the error INVALID_VALUE is generated.  If <image> is
    neither NULL nor a valid value, the behavior is undefined, up to and
    including program termination.

    If the GL is unable to specify a texture object using the supplied
    eglImageOES <image> (if, for example, <image> refers to a multisampled
    eglImageOES, or <target> is GL_TEXTURE_2D but <image> contains a cube map),
    the error INVALID_OPERATION is generated.

    If <attrib_list> is neither NULL nor a pointer to the value GL_NONE, the
    error INVALID_VALUE is generated.

    <If EXT_direct_state_access or an equivalent mechanism is supported:>

    The command

        void EGLImageTargetTextureStorageEXT(uint texture, eglImageOES image,
                                             const int* attrib_list);

    is equivalent to EGLImageTargetTexStorageEXT, but the target texture object
    is directly specified using the <texture> parameter instead of being taken
    from the active texture unit.

    - (8.18, p. 210)  Replace "After a successful call to any TexStorage*
    command" with "After a successful call to any TexStorage* or
    EGLImageTarget*StorageEXT command"

    - (8.18, p. 210)  Add the following to the list following the sentence
    "Using any of the following commands with the same texture will result in
    an INVALID_OPERATION error being generated, even if it does not affect the
    dimensions or format:"

    EGLImageTarget*StorageEXT

Issues

    1.  Should this extension provide support for renderbuffers?

        RESOLVED:  This seems of limited use, and renderbuffer support specified
        by OES_EGL_image already uses the immutable storage model, so that would
        be redundant.

    2.  Should OES_EGL_image be a prerequisite?

        RESOLVED:  Supporting both OES_EGL_image and this extension requires
        more complexity than supporting only this extension and we did not want
        to rule out such implementations.  Therefore, this extension does not
        require OES_EGL_image.

    3.  Should multisampled texture targets be supported?

        RESOLVED:  We are not aware of any EGLImage implementations that support
        multisampling, so this is omitted.

    4.  What is the interaction with GenerateMipmap?

        RESOLVED:  Since immutable textures do not allow respecification,
        calling GenerateMipmap on a texture created with
        EGLImageTarget*StorageEXT never causes orphaning.

    5.  What is the purpose of the attrib_list parameter?

        RESOLVED:  It allows layered extensions to pass additional data.  It is
        intended to be used similarly to the attrib_list parameter on the
        EGL functions eglCreateContext and eglCreateImageKHR.  Since the new
        entry points define immutable textures, setting additional values
        through texture parameters would require more complex validation.

Revision History

    #7 (February 7, 2018) - Amend the explanation of the attrib_list parameter.

    #6 (February 2, 2018) - Add attrib_list parameter to both entry points.

    #5 (January 10, 2018) - Minor wording changes and clean-ups.  Moved the
        discussion of interaction with GenerateMipmap to an issue.

    #4 (December 6, 2017) - Rewritten against the OpenGL ES 3.2 specification.
        Renamed from KHR to EXT.

    #3 (November 20, 2017) - Added direct state access entry point and corrected
        references to the OpenGL ES 3.0 specification.

    #2 (November 13, 2017) - Specified the allowed texture targets.  Clarified
        requirements.  Clarified interactions with mipmaps.

    #1 (November 1, 2017) - Initial version.

