Loading [MathJax]/extensions/tex2jax.js
  • <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • NVIDIA DRIVE OS Linux SDK API Reference

    6.0.9 Release
    All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
    EGL_KHR_image_base
    Name
    
        KHR_image_base
    
    Name Strings
    
        EGL_KHR_image_base
    
    Contributors
    
        Jeff Juliano
        Gary King
        Jon Leech
        Jonathan Grant
        Barthold Lichtenbelt
        Aaftab Munshi
        Acorn Pooley
        Chris Wynn
    
    Contacts
    
        Jon Leech (jon 'at' alumni.caltech.edu)
        Gary King, NVIDIA Corporation (gking 'at' nvidia.com)
    
    Notice
    
        Copyright (c) 2008-2013 The Khronos Group Inc. Copyright terms at
            http://www.khronos.org/registry/speccopyright.html
    
    Status
    
        Complete. Functionality approved (as part of KHR_image) by the
        Khronos Board of Promoters on February 11, 2008.
    
        Split into KHR_image_base and KHR_image_pixmap approved by the
        Khronos Technical Working Group on November 19, 2008. Update to
        version 5 approved on December 10, 2008.
    
    Version
    
        Version 8, August 27, 2014
    
    Number
    
        EGL Extension #8
    
    Dependencies
    
        EGL 1.2 is required.
    
        An EGL client API, such as OpenGL ES or OpenVG, is required.
    
        This extension is written against the wording of the EGL 1.2
        Specification.
    
    Overview
    
        This extension defines a new EGL resource type that is suitable for
        sharing 2D arrays of image data between client APIs, the EGLImage.
        Although the intended purpose is sharing 2D image data, the
        underlying interface makes no assumptions about the format or
        purpose of the resource being shared, leaving those decisions to
        the application and associated client APIs.
    
    Glossary
    
        EGLImage:  An opaque handle to a shared resource created by EGL
                   client APIs, presumably a 2D array of image data
    
        EGLImage source:  An object or sub-object originally created in
                   a client API (such as a mipmap level of a texture object
                   in OpenGL-ES, or a VGImage in OpenVG) which is used as
                   the <buffer> parameter in a call to eglCreateImageKHR.
    
        EGLImage target:  An object created in a client API (such as a
                   texture object in OpenGL-ES or a VGImage in OpenVG)
                   from a previously-created EGLImage
    
        EGLImage sibling: The set of all EGLImage targets (in all
                   client API contexts) which are created from the
                   same EGLImage object, and the EGLImage source resouce
                   which was used to create that EGLImage.
    
        Orphaning:  The process of respecifying and/or deleting an EGLImage
                   sibling resource (inside a client API context) which
                   does not result in deallocation of the memory associated
                   with the EGLImage or affect rendering results using other
                   EGLImage siblings.
    
        Referencing:  The process of creating an EGLImage target resource
                   (inside a client API context) from an EGLImage.
    
        Respecification: When the size, format, or other attributes of an
                   EGLImage sibling are changed via client API calls such as
                   gl*TexImage*. Respecification usually will result in
                   orphaning the sibling. Note that changing the pixel values of
                   the sibling (e.g. by rendering to it or by calling
                   gl*TexSubImage*) does not constitute respecification.
    
    New Types
    
        /*
         * EGLImageKHR is an object which can be used to create EGLImage
         * target resources (inside client APIs).
         */
        typedef void* EGLImageKHR;
    
    New Procedures and Functions
    
        EGLImageKHR eglCreateImageKHR(
                                EGLDisplay dpy,
                                EGLContext ctx,
                                EGLenum target,
                                EGLClientBuffer buffer,
                                const EGLint *attrib_list)
    
        EGLBoolean eglDestroyImageKHR(
                                EGLDisplay dpy,
                                EGLImageKHR image)
    
    New Tokens
    
        Returned by eglCreateImageKHR:
    
            EGL_NO_IMAGE_KHR                                     ((EGLImageKHR)0)
    
        Accepted as an attribute in the <attrib_list> parameter of
        eglCreateImageKHR:
    
            EGL_IMAGE_PRESERVED_KHR                              0x30D2
    
    Additions to Chapter 2 of the EGL 1.2 Specification (EGL Operation)
    
        Add a new section "EGLImages" after section 2.4:
    
        "2.5 EGLImages
    
        As described in section 2.4, EGL allows contexts of the same client
        API type to share significant amounts of state (such as OpenGL-ES
        texture objects and OpenVG paths); however, in some cases it may
        be desirable to share state between client APIs - an example would be
        using a previously-rendered OpenVG image as an OpenGL-ES texture
        object.
    
        In order to facilitate these more complicated use-cases, EGL is capable
        of creating EGL resources that can be shared between contexts of
        different client APIs (called "EGLImages") from client API resources
        such as texel arrays in OpenGL-ES texture objects or OpenVG VGImages
        (collectively, the resources that are used to create EGLImages are
        referred to as "EGLImage sources").
    
        The EGL client APIs each provide mechanisms for creating appropriate
        resource types (such as complete texture arrays or OpenVG VGImages) from
        EGLImages through a API-specific mechanisms.  Collectively, resources
        which are created from EGLImages within client APIs are referred to as
        "EGLImage targets."  Each EGLImage may have multiple associated EGLImage
        targets.  Collectively, the EGLImage source and EGLImage targets
        associated with an EGLImage object are referred to as "EGLImage
        siblings."
    
        2.5.1  EGLImage Specification
    
        The command
    
            EGLImageKHR eglCreateImageKHR(
                                    EGLDisplay dpy,
                                    EGLContext ctx,
                                    EGLenum target,
                                    EGLClientBuffer buffer,
                                    const EGLint *attrib_list)
    
        is used to create an EGLImage from an existing image resource <buffer>.
        <dpy> specifies the EGL display used for this operation.
        <ctx> specifies the EGL client API context
        used for this operation, or EGL_NO_CONTEXT if a client API context is not
        required.  <target> specifies the type of resource being used as the
        EGLImage source (examples include two-dimensional textures in OpenGL ES
        contexts and VGImage objects in OpenVG contexts).  <buffer> is the name
        (or handle) of a resource to be used as the EGLImage source, cast into the
        type EGLClientBuffer.  <attrib_list> is an list of attribute-value pairs
        which is used to select sub-sections of <buffer> for use as the EGLImage
        source, such as mipmap levels for OpenGL ES texture map resources, as well as
        behavioral options, such as whether to preserve pixel data during creation. If
        <attrib_list> is non-NULL, the last attribute specified in the list must
        be EGL_NONE.
    
        The resource specified by <dpy>, <ctx>, <target>, <buffer>, and
        <attrib_list> must not itself be an EGLImage sibling, or bound to an EGL
        PBuffer resource (eglBindTexImage, eglCreatePbufferFromClientBuffer).
    
        Values accepted for <target> are listed in Table aaa, below(fn1).
            (fn1) No values are defined by this extension. All functionality
            to create EGLImages from other types of resources, such as
            native pixmaps, GL textures, and VGImages, is layered in other
            extensions.
    
          +-------------------------+--------------------------------------------+
          |  <target>               |  Notes                                     |
          +-------------------------+--------------------------------------------+
          +-------------------------+--------------------------------------------+
           Table aaa.  Legal values for eglCreateImageKHR <target> parameter
    
        Attribute names accepted in <attrib_list> are shown in Table bbb,
        together with the <target> for which each attribute name is valid, and
        the default value used for each attribute if it is not included in
        <attrib_list>.
    
          +-------------------------+----------------------+-----------+---------------+
          | Attribute               | Description          | Valid     | Default Value |
          |                         |                      | <target>s |               |
          +-------------------------+----------------------+-----------+---------------+
          | EGL_NONE                | Marks the end of the | All       | N/A           |
          |                         | attribute-value list |           |               |
          | EGL_IMAGE_PRESERVED_KHR | Whether to preserve  | All       | EGL_FALSE     |
          |                         | pixel data           |           |               |
          +-------------------------+----------------------+-----------+---------------+
           Table bbb.  Legal attributes for eglCreateImageKHR <attrib_list> parameter
    
        This command returns an EGLImageKHR object corresponding to the image
        data specified by <dpy>, <ctx>, <target>, <buffer> and <attrib_list> which
        may be referenced by client API operations, or EGL_NO_IMAGE_KHR in the
        event of an error.
    
        If the value of attribute EGL_IMAGE_PRESERVED_KHR is EGL_FALSE (the
        default), then all pixel data values associated with <buffer> will be
        undefined after eglCreateImageKHR returns.
    
        If the value of attribute EGL_IMAGE_PRESERVED_KHR is EGL_TRUE, then all
        pixel data values associated with <buffer> are preserved.
    
        Errors
    
            If eglCreateImageKHR fails, EGL_NO_IMAGE_KHR will be returned, the
            contents of <buffer> will be unaffected, and one of the following
            errors will be generated:
    
           * If <dpy> is not the handle of a valid EGLDisplay object, the error
             EGL_BAD_DISPLAY is generated.
    
           * If <ctx> is neither the handle of a valid EGLContext object on
             <dpy> nor EGL_NO_CONTEXT, the error EGL_BAD_CONTEXT is
             generated.
    
           * If <target> is not one of the values in Table aaa, the error
             EGL_BAD_PARAMETER is generated.
    
           * If an attribute specified in <attrib_list> is not one of the
             attributes listed in Table bbb, the error EGL_BAD_PARAMETER is
             generated.
    
           * If an attribute specified in <attrib_list> is not a valid attribute
             for <target>, as shown in Table bbb, the error EGL_BAD_MATCH is
             generated.
    
           * If the resource specified by <dpy>, <ctx>, <target>, <buffer> and
             <attrib_list> has an off-screen buffer bound to it (e.g., by a
             previous call to eglBindTexImage), the error EGL_BAD_ACCESS is
             generated.
    
           * If the resource specified by <dpy>, <ctx>, <target>, <buffer> and
             <attrib_list> is bound to an off-screen buffer (e.g., by a previous
             call to eglCreatePbufferFromClientBuffer), the error
             EGL_BAD_ACCESS is generated.
    
           * If the resource specified by <dpy>, <ctx>, <target>, <buffer> and
             <attrib_list> is itself an EGLImage sibling, the error
             EGL_BAD_ACCESS is generated.
    
           * If insufficient memory is available to complete the specified
             operation, the error EGL_BAD_ALLOC is generated.
    
           * If the call to eglCreateImageKHR fails for multiple reasons, the
             generated error must be appropriate for one of the reasons,
             although the specific error returned is undefined.
    
           * If the value specified in <attrib_list> for EGL_IMAGE_PRESERVED_KHR
             is EGL_TRUE, and an EGLImageKHR handle cannot be created from the
             specified resource such that the pixel data values in <buffer> are
             preserved, the error EGL_BAD_ACCESS is generated.
    
        Note that the success or failure of eglCreateImageKHR should not affect
        the ability to use <buffer> in its original API context (or context
        share group) (although the pixel data values will be undefined if
        EGL_IMAGE_PRESERVED_KHR is not EGL_TRUE).
    
        2.5.2  Lifetime and Usage of EGLImages
    
        Once an EGLImage is created from an EGLImage source, the memory associated
        with the EGLImage source will remain allocated (and all EGLImage siblings
        in all client API contexts will be useable) as long as either of the
        following conditions is true:
          A)  Any EGLImage siblings exist in any client API context
          B)  The EGLImage object exists inside EGL
    
        The semantics for specifying, deleting and using EGLImage siblings are
        client API-specific, and are described in the appropriate API
        specifications.
    
        If an application specifies an EGLImage sibling as the destination for
        rendering and/or pixel download operations (e.g., as an OpenGL-ES
        framebuffer object, glTexSubImage2D, etc.), the modified image results
        will be observed by all EGLImage siblings in all client API contexts.
        If multiple client API contexts access EGLImage sibling resources
        simultaneously, with one or more context modifying the image data,
        rendering results in all contexts accessing EGLImage siblings are
        undefined.
    
        Respecification and/or deletion of any EGLImage sibling (i.e., both
        EGLImage source and EGLImage target resources) inside a client API
        context (e.g., by issuing a subsequent call to
        gl{Copy,Compressed}TexImage, glDeleteTextures, with the EGLImage
        sibling resource as the target of the operation) affects only that
        client API context and other contexts within its share group.  The
        specific semantics for this behavior are defined by each client API,
        and generally results in orphaning of the EGLImage, and may also
        include allocation of additional memory for the respecified resource
        and/or copying of the EGLImage pixel data.
    
        Operations inside EGL or any client API context which may affect the
        lifetime of an EGLImage (or the memory allocated for the EGLImage),
        such as respecifying and/or deleting an EGLImage sibling inside a
        client API context, must be atomic.
    
        Applications may create client API resources from an EGLImageKHR using
        client API extensions outside the scope of this document (such as
        GL_OES_EGL_image, which creates OpenGL ES texture and renderbuffer
        objects). If the EGLImageKHR used to create the client resource was
        created with the EGL_IMAGE_PRESERVED_KHR attribute set to EGL_TRUE, then
        the pixel data values associated with the image will be preserved after
        creating the client resource; otherwise, the pixel data values will be
        undefined. If the EGLImageKHR was created with the
        EGL_IMAGE_PRESERVED_KHR attribute set to EGL_TRUE, and EGL is unable to
        create the client resource without modifying the pixel values, then
        creation will fail and the pixel data values will be preserved.
    
        The command
    
            EGLBoolean eglDestroyImageKHR(
                                EGLDisplay dpy,
                                EGLImageKHR image)
    
        is used to destroy the specified EGLImageKHR object <image>.  Once
        destroyed, <image> may not be used to create any additional EGLImage
        target resources within any client API contexts, although existing
        EGLImage siblings may continue to be used.  EGL_TRUE is returned
        if DestroyImageKHR succeeds, EGL_FALSE indicates failure.
    
           * If <dpy> is not the handle of a valid EGLDisplay object, the error
             EGL_BAD_DISPLAY is generated.
    
           * If <image> is not a valid EGLImageKHR object created with respect
             to <dpy>, the error EGL_BAD_PARAMETER is generated."
    
        Add a new error to the list at the bottom of Section 3.5.3 (Binding
        Off-Screen Rendering Surfaces to Client Buffers):
    
           "* If the buffers contained in <buffer> consist of any EGLImage
              siblings, an EGL_BAD_ACCESS error is generated."
    
    Issues
    
        1.  What resource types should be supported by this extension?
    
            RESOLVED:  This specification is designed to support the
            sharing of two-dimensional image resources between client APIs,
            as these resources are a fundamental component of all modern
            graphics APIs.
    
            Other resources types (e.g., buffer objects) will not be directly
            supported by this specification, due to a variety of reasons:
    
                a.  An absense of use cases for this functionality
                b.  Handling the semantics for some of these resources
                    (e.g., glMapBuffer) would significantly complicate
                    and delay this specification.
                c.  A desire to address the image-sharing use cases
                    as quickly as possible.
    
            Should additional resource-sharing functionality be desired
            in the future, the framework provided by this specification
            should be extendable to handle more general resource
            sharing.
    
        2.  Should this specification address client API-specific resources
            (OpenGL texture maps, OpenVG VGImages), or should that
            functionality be provided by layered extensions?
    
            SUGGESTION: Use layered extensions, even for for sharing image
            data with native rendering APIs (the EGL_KHR_image_pixmap
            extension).
    
            There are two major arguments for using layered extensions:
    
              1.  The two client APIs which are defined at the time of this
                  specification (OpenVG, OpenGL ES) may not always be
                  deployed on a device; many devices may choose to implement
                  just one of these two APIs.  However, even single-API
                  devices may benefit from the ability to share image data
                  with native rendering APIs (provided in this specification)
                  or with the OpenMAX API.
    
              2.  OpenGL ES defines a number of optional resource types
                  (cubemaps, renderbuffers, volumetric textures) which this
                  framework should support; however, implementations may not.
                  By layering each of these resource types in individual
                  extensions, implementations which are limited to just the
                  core OpenGL ES 1.1 (or OpenGL ES 2.0) features will not
                  need to add EGLImage enumerant support for unsupported
                  resource types.
    
            The original EGL_KHR_image extension included native pixmap
            functionality. We have now split the abstract base functionality
            (the egl{Create,Destroy}ImageKHR APIs) from the native pixmap
            functionality, and redefined EGL_KHR_image as the combination of
            EGL_KHR_image_base and EGL_KHR_image_pixmap.
    
        3.  Should attributes (width, height, format, etc.) for EGLImages
            be queriable?
    
            SUGGESTION:  No.  Given the wealth of attributes that we would
            need to specify all possible EGLImages (and possible
            memory layout optimizations performed by implementations), we
            can dramatically simplify the API without loss of key
            functionality by making EGLImages opaque and allowing
            implementations to make the correct decisions internally.
    
        4.  Should this specification allow the creation of EGLImages from
            client API resources which are themselves EGLImage targets?
    
            RESOLVED:  No.  This can make memory garbage collection and
            reference counting more difficult, with no practical benefit.
            Instead, generate an error if an application attempts to
            create an EGLImage from an EGLImage target resource.
    
        5.  Should this specification allow multiple EGLImages to be created
            from the same EGLImage source resource?
    
            RESOLVED:  No.  The resource <buffer> specified to
            eglCreateImageKHR may include multiple sub-objects; examples are
            mipmapped images and cubemaps in the OpenGL-ES API.  However, the
            EGLImage source is defined as the specific sub-object that is defined
            by: <ctx>, <target>, <buffer>, and <attrib_list>.  This sub-object must
            not be an EGLImage sibling (either EGLImage source or EGLImage target)
            when eglCreateImageKHR is called; however, other sub-objects in
            <buffer> may be EGLImage siblings.  This allows applications to share
            individual cubemap faces, or individual mipmap levels of detail across
            all of the supported APIs.
    
            Note that the EGLImage source and any EGLImage target resources
            will still be EGLImage siblings, even if the EGLImage object
            is destroyed by a call to DestroyImageKHR.
    
        6.  If an EGLImage sibling is respecified (or deleted), what
            should happen to the EGLImage and any other EGLImage
            siblings?
    
            RESOLVED:  The principle of least surprise would dictate that
            respecification and/or deletion of a resource in one client API
            should not adversely affect operation in other client APIs
            (such as introducing errors).
    
            Applying this to EGLImages, respecification and/or deletion
            of one EGLImage sibling should not respecify/delete other
            EGLImage siblings.  Each client API will be responsible for
            defining appropriate semantics to meet this restriction;
            however, example behaviors may include one or more of:
            allocating additional memory for the respecified resource,
            deleting the EGLImage sibling resource without deallocating
            the associated memory ("orphaning") and/or copying the
            existing EGLImage pixel data to an alternate memory location.
    
            The memory associated with EGLImage objects should remain
            allocated as long as any EGLImage sibling resources exist
            in any client API context.
    
        7.  Should this specification address synchronization issues
            when multiple client API contexts simultaneously access EGLImage
            sibling resources?
    
            RESOLVED:  No.  Including error-producing lock and synchronization
            semantics would introduce additional (undesirable) validation
            overhead in numerous common operations (e.g., glBindTexture,
            glDrawArrays, etc.).  Rather than burdening implementations (and
            applications) with this overhead, a separate synchronization
            mechanism should be exposed to applications.
    
        8.  Should eglCreatePbufferFromClientBuffer accept buffer parameters
            which are EGLImage siblings?
    
            RESOLVED:  No.  Allowing this behavior creates very complex
            circular dependency possibilities (CreateImage / DeriveImage /
            CreatePbufferFromClientBuffer / BindTexImage /
            CreateImage / ...) with no practical benefit.  Therefore,
            attempting to create a Pbuffer from a client buffer which
            is an EGLImage sibling should generate an error.
    
        9.  Should CreateImage accept client buffers which are bound to
            Pbuffers (through eglBindTexImage)?
    
            RESOLVED:  No, for the same reasons listed in Issue 8.
    
        10. Should implementations be allowed to modify the pixel data in the
            EGLImage source buffers specified to eglCreateImageKHR?
    
            SUGGESTION:  By allowing previously-existing image data to become
            undefined after calls to eglCreateImageKHR, implementations are able
            to perform any necessary reallocations required for cross-API
            buffer compatibility (and/or performance), without requiring
            copy-aside functionality.  Because applications are able to
            respecify the pixel data through mechanisms such as vgSubImage
            and glTexSubImage, no use-cases are restricted by this.
    
            Therefore, the current suggestion is to allow implementations
            to leave pixel data undefined after calls to eglCreateImageKHR
            functions.  The current spec revision has been written in
            this way.
    
        11. What is the correct mechanism for specifying the EGLImage source
            resources used to create an EGLImage object?
    
            RESOLVED:  Three different mechanisms were discussed while
            defining this extension:
    
                A)  Providing resource-specific creation functions, such as
                    eglCreateImage2DKHR, eglCreateImage3DKHR, etc.
    
                B)  Providing a single creation function which returns a
                    "NULL" EGLImage object, and requiring client APIs to
                    define additional functions which would allow client API
                    resources to be "bound" to the EGLImage object.
    
                C)  Provide a single resource creation function, and use
                    an attribute-value list with attributes specific to the
                    "target" image resource.
    
            Initial specifications were written using Option (A); however,
            it was believed that this structure would result in an increase
            in the number of entry points over time as additional client APIs
            and client API resource targets were added.  Furthermore, reuse
            of these functions was resulting in cases where parameters were
            required to have modal behavior: a 2D image creation function
            was required to have a mipmap level of detail parameter for
            OpenGL ES texture maps, but this same parameter would need to be
            0 for OpenVG.
    
            Option (B) provided some nice characteristics: as client APIs
            continue to evolve, any extensions needed to allow EGLImage
            creation could be isolated in the individual client API, rather
            than necessitating an EGL extension.  However, the creation of
            "NULL" images created additional semantic complexity and error
            conditions (e.g., attempting to derive an EGLImage target from a
            "NULL" image), and every client API would need to provide a
            function for every unique resource type; instead of one common
            API function for pixmap, OpenGL 2D textures, and OpenVG VGImages,
            three would be required.
    
            This specification is written using Option (C).  There is a
            single CreateImage function, with a <target> parameter defining
            the EGLImage source type, and an attribute-value list allowing
            for additional selection of resource sub-sections.  This
            maximizes entry-point reuse, and minimizes the number of
            redundant parameters an application may be required to send.
            This framework allows for layered extensions to be easily
            written, so little churn is expected as client APIs evolve.
    
        12. Should a context be explicitly provided to eglCreateImageKHR,
            or should the context be deduced from the current thread's
            bound API?
    
            SUGGESTION:  For clarity (both in usage and spec language), the
            context containing the EGLImage source should be provided by the
            application, rather than inferring the context from EGL state.
    
        13. Why does this extension define a new EGL object type, rather
            than using the existing EGLSurface objects?
    
            RESOLVED:  Although controversial, the creation of a new,
            opaque image object type removes several fundamental problems
            with the EGLSurface (and Pbuffer) API:
    
                1)  The tight compatibility requirements of EGLSurfaces
                    and EGLConfigs necessitated applications creating
                    (and calling MakeCurrent) for every unique pixel
                    format used during rendering.  This has already caused
                    noticeable performance problems in OpenGL-ES (and
                    desktop OpenGL), and is the primary reason that
                    framebuffer objects were created.
    
                2)  Application use-cases are centered around sharing of
                    color image data, although unique "sundry" buffers
                    (such as depth, stencil and alpha mask) may be used
                    in each client API.
    
                3)  Extending the CreatePbuffer interface to support fully-
                    specifying all possible buffer attributes in all client
                    APIs will become unwieldy, particularly as new EGL
                    client APIs and pixel formats are introduced.
    
            The EGLImage proposal addresses all three of these restrictions:
    
            1) is addressed by placing the burden of framebuffer management
            inside the client API, and allowing EGLImages to be accessed
            inside client APIs using an appropriate resource type (such
            as OpenGL-ES renderbuffers).  This follows the example provided
            by the GL_OES_framebuffer_object specification.
    
            2) is addressed by defining EGLImages to be "trivial" two-
            dimensional arrays of pixel data.  Implementations may choose
            to support creation of EGLImages from any type of pixel data,
            and the association of multiple EGLImages and/or sundry
            buffers into a single framebuffer is the responsibility of the
            application and client API, using a mechanism such as
            GL_OES_framebuffer_object.
    
            3) is addressed by defining EGLImages as opaque and
            non-queriable.  Although this introduces potential portability
            problems (addressed separately in issue 15), it avoids the
            ever-expanding problem of defining buffer compatibility as the
            cartesian product of all possible buffer attributes.
    
        14. Since referencing EGLImages is the responsibility of the client
            API, and may fail for implementation-dependent reasons,
            doesn't this result in a potential portability problem?
    
            UNRESOLVED:  Yes, this portability problem (where referencing
            succeeds on one platform but generates errors on a different
            one) is very similar to the implementation-dependent
            failure introduced in the EXT_framebuffer_object specification,
            discussed (at length) in Issues (12), (37), (46), (48) and (61)
            of that specification.  Similar to that specification, this
            specification should include some "minimum requirements"
            language for EGLImage creation and referencing.
    
            Since there are numerous references to an upcoming
            "format restriction" API in the EXT_framebuffer_object
            specification, it may be valuable to wait until that API is
            defined before attempting to define a similar API for
            EGLImages.
    
        15. Should creation of an EGLImage from an EGLImage source
            introduce the possibility for errors in the EGLImage source's
            owning context?
    
            RESOLVED:  No; although image data may be undefined (issue 11),
            the (successful or unsuccessful) creation of an EGLImage should
            not introduce additional error conditions in the EGLImage
            source's owning context.  Text added to the end of section
            2.5.1 describing this.
    
        16. Is it reasonable to require that when a preserved EGLImage is
            used by layered extensions to create client API siblings of that
            image, pixel data values are preserved?
    
            UNRESOLVED: There are at least two extensions that reference
            EGLImages to create EGLImage targets, VG_KHR_EGL_image and
            GL_OES_EGL_image.
    
            Each of these extensions makes provision for failing the creation of
            the EGLImage target due to "an implementation-dependent reason".
            This could include that the pixel data has been marked as preserved,
            and that the implementation is not able to create the EGLImage
            target without causing the pixel data of the original EGLImage
            source <buffer> to become undefined.
    
            Issue 14 of EGL_KHR_image also discusses the consequences of failure
            for implementation-dependent reasons. This implies that all
            extensions for referencing an EGLImage need to make provision for
            implementation-dependent failure.
    
            PROPOSED: Yes, this is reasonable. We should add "EGL_KHR_image_base
            affects the behavior of this extension" sections to the ES and VG
            extensions. Implementations can continue to export EGL_KHR_image if
            they are unable to support preserved image functionality.
    
        17. Do EGLImage Target creation extensions such as VG_KHR_EGL_image and
            GL_OES_EGL_image also need to be extended?
    
            UNRESOLVED: The problem here is that both these extensions
            explicitly state that pixel data becomes undefined when they
            reference an EGLImage to create an EGLImage target.
    
            One solution would be to allow this extension to do the defining on
            behalf of these extensions. For example, the VG_KHR_EGL_image
            extension on its own leaves the status of the pixel data undefined,
            but when VG_KHR_EGL_image is combined with this extension, then the
            status becomes defined (by this extension).
    
            When combined with the reasons given in Issue 1, this means it is
            possible to leave EGLImage Target creation extensions unchanged.
    
            PROPOSED: Yes, augment these extensions as described in issue 16.
    
        18. Is it reasonable for developers to want to preserve pixel data upon
            creation of EGLImage and EGLImage targets?
    
            RESOLVED: Yes. This is necessary for composition implementations
            using EGLImages as an encapsulation mechanism for moving data
            between producer application, composition API, and composition
            implementation(s).
    
        19. Should we really change the default value of EGL_IMAGE_PRESERVED_KHR
            when EGL_KHR_image is supported?
    
            RESOLVED: No. This is a subtle and hard to diagnose source of
            errors, and the only way to write a portable app would still be
            to explicitly specify the attribute value. By making the default
            value FALSE no matter which of the two extension(s) are
            supported, compatibility with EGL_KHR_image is preserved, and
            apps must explicitly ask for preservation if they need it.
    
        20. Why is EGL_NO_DISPLAY not supported as the <dpy> argument for
            creating and destroying images, unlike the original version of the
            EGL_KHR_image specification?
    
            RESOLVED: There are no defined use cases for this at present, so
            there is no way to legally pass in EGL_NO_DISPLAY. If in the future,
            a layered extension allows creation of images not associated with
            any display, this behavior can be reintroduced.
    
    
    Revision History
    
    #8  (Jon Leech, August 27, 2014)
        - Remove leftover comment saying that inapplicable attributes are
          ignored (Bug 12585).
    
    #7  (Jon Leech, June 12, 2013)
        - Add a column to table bbb specifying which <target>s attributes are
          valid for, and a generic error if an attribute doesn't match <target>
          (Bug 10151).
    
    #6  (Jon Leech, December 1, 2010)
        - Clarify wording of EGL_BAD_CONTEXT error.
    
    #5  (Jon Leech, December 10, 2008)
        - Change definition of EGL_NO_IMAGE_KHR to 0 (appropriately cast)
          instead of a reference to an extern implementation-defined
          variable.
    
    #4  (Jon Leech, November 25, 2008)
        - Simplify error conditions for eglDestroyImage.
    
    #3  (Jon Leech, November 12, 2008)
        - Added glossary entry for Respecification, updated description of
          behavior with preserved images per suggestions from Acorn, and added
          issue 20 regarding removal of EGL_NO_DISPLAY as a valid <dpy>.
    
    #2  (Jon Leech, October 22, 2008)
        - Change default value of EGL_IMAGE_PRESERVED_KHR to EGL_FALSE.
          Update issue 19.
    
    #1  (Jon Leech, October 21, 2008)
        - Split abstract functionality from EGL_KHR_image into this extension,
          and merged preserved image functionality from
          EGL_SYMBIAN_image_preserved.
    
    人人超碰97caoporen国产