Edit

kc3-lang/angle/extensions/EGL_ANGLE_stream_producer_d3d_texture.txt

Branch :

  • Show log

    Commit

  • Author : Jeff Gilbert
    Date : 2017-11-14 16:44:36
    Hash : 3dddccff
    Message : Support RGB gl-tex-external stream consumers for StreamProducerNV12. This makes it relatively simple to sample from a D3D11Texture of arbitrary format. From: https://bugzilla.mozilla.org/show_bug.cgi?id=1322746 BUG=angleproject:2233 TEST=angle_end2end_tests Change-Id: I10cd3043b5cb0c5d36dd613467ba6c0ceadf41af Reviewed-on: https://chromium-review.googlesource.com/758042 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • extensions/EGL_ANGLE_stream_producer_d3d_texture.txt
  • Name
    
        ANGLE_stream_producer_d3d_texture
    
    Name Strings
    
        EGL_ANGLE_stream_producer_d3d_texture
    
    Contributors
    
        Ian Ewell
        Geoff Lang
        John Bauman
        Jeff Gilbert
    
    Contacts
    
        Geoff Lang, Google (geofflang ‘at’ google.com)
    
    Status
    
        Draft
    
    Version
    
        Version 2, November 15, 2017
    
    Number
    
        EGL Extension #XXX
    
    Dependencies
    
        Requires EGL 1.4.
        Requires OpenGL ES 2.0.
    
        Requires the EGL_KHR_stream extension.
        Requires the EGL_NV_stream_consumer_gltexture_yuv extension.
        Requires the EGL_KHR_stream_consumer_gltexture extension.
        Requires the EGL_ANGLE_device_d3d extension.
    
    Overview
    
        This extension allows D3D11 textures to be inserted into an EGL stream
        with the expectation that the stream consumer will be either an RGB GL
        texture consumer, or a YUV GL texture consumer using a two plane
        configuration (i.e. a Y plane and a UV plane).
        This will act as the producer of the stream.
    
    New procedures and functions
    
        EGLBoolean eglCreateStreamProducerD3DTextureANGLE(
                    EGLDisplay dpy,
                    EGLStreamKHR stream,
                    const EGLAttrib *attrib_list)
        EGLBoolean eglStreamPostD3DTextureANGLE(EGLDisplay dpy,
                    EGLStreamKHR stream,
                    void *texture,
                    const EGLAttrib *attrib_list)
    
    New Tokens
    
        Accepted as an <attribute> in eglStreamPostD3DTextureANGLE:
    
            EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE 0x33AB
    
    Replace section "3.10.3.1 No way to connect producer to EGLStream" in the
    EGL_KHR_stream extension with this:
    
        3.10.3.1 Stream Surface Producer
    
        Call
    
            EGLBoolean eglCreateStreamProducerD3DTextureANGLE(
                        EGLDisplay dpy,
                        EGLStreamKHR stream,
                        const EGLAttrib *attrib_list)
    
        to create a producer that accepts D3D11 textures and connect it as the
        producer of <stream>. <attrib_list> is used to specify attributes for the
        stream producer. Currently there are no attributes to specify, and the
        attribute list is used as a placeholder for future additions.
    
        On failure, eglCreateStreamProducerD3DTextureANGLE returns EGL_FALSE and
        generates an error.
    
            - EGL_BAD_STATE_KHR is generated if <stream> is not in the state
              EGL_STREAM_STATE_CONNECTING_KHR.
    
            - EGL_BAD_MATCH is generated if <stream> does not have a connected GL
              texture consumer.
    
            - EGL_BAD_STREAM_KHR is generated if <stream> is not a valid EGLStream
              generated for <dpy>.
    
            - EGL_BAD_DISPLAY is generated if <dpy> is not a valid, initialized
              display.
    
    Add a section preceding "3.9.3 Posting Semantics" in the EGL specification:
    
        3.9.x Posting to a Stream
    
        To post a D3D11 texture to a stream, call
    
            EGLBoolean eglStreamPostD3DTextureANGLE(
                        EGLDisplay dpy,
                        EGLStreamKHR stream,
                        void *texture,
                        const EGLAttrib *attrib_list);
    
        If <stream> is an appropriately configured stream and <texture> points to a
        valid ID3D11Texture2D object of a supported format that is owned
        by the same ID3D11Device that is queried with the EGL_ANGLE_device_d3d
        extension, the texture will be posted to the stream and can be bound as one
        or more OpenGL texture objects.
    
        The parameter <attrib_list> allows for per-frame attributes to be specified
        along with the texture. The only parameter currently available is
        EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE, which allows the subresource id of
        the texture that will be used to be specified. If this attribute is not
        explicitly specified, it will default to the value of 0.
    
        It is the responsibility of the application to perform any synchronization
        between the insertion of the frame into the stream and the use of the
        consumer textures output by the stream. The EGL_CONSUMER_LATENCY_USEC_KHR
        attribute will have no effect on the function of the implementation of this
        extension, but can still be used for communication between components of
        the application.
    
        The implementation will hold a reference to the D3D11 texture object if the
        insertion is successful and will release the texture object when a new frame
        is inserted or when the stream is destroyed.
    
        On failure, eglStreamInsertD3DTexture returns EGL_FALSE and generates an
        error.
    
            - EGL_BAD_STATE is generated if <stream> is not in the state
              EGL_STREAM_STATE_EMPTY_KHR, EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR,
              or EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR.
    
            - EGL_BAD_MATCH is generated if the stream is not associated with a
              D3D11 texture producer.
    
            - EGL_BAD_PARAMETER is generated if <texture> is not owned by the
              queried device, is not a supported format, is not compatible with the
              implementation, or if the specified value for
              EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE is not a valid subresource id for
              the texture.
    
            - EGL_BAD_STREAM_KHR is generated if <stream> is not a valid EGLStream.
    
            - EGL_BAD_ATTRIBUTE is generated if an attribute other than
              EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE is specified in <attrib_list>.
    
    Revision History
    
        #1 (April 6, 2016) Ian Ewell
            - initial draft
    
        #2 (November 15, 2017) Jeff Gilbert
            - Rename from EGL_ANGLE_stream_producer_d3d_texture_nv12 to
              EGL_ANGLE_stream_producer_d3d_texture
            - Remove NV12 suffix from function names
            - add RGB GL texture consumer support
            - reduce required EGL version to 1.4 (from 1.5)