Name

    WL_bind_wayland_display

Name Strings

    EGL_WL_bind_wayland_display

Contact

    Kristian Høgsberg <krh@bitplanet.net>
    Benjamin Franzke <benjaminfranzke@googlemail.com>

Status

    Complete

Version

    Version 6, July 14, 2017

Number

    EGL Extension #136

Dependencies

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

    EGL_KHR_image_base is required.

Overview

    This extension provides entry points for binding and unbinding the
    wl_display of a Wayland compositor to an EGLDisplay.  Binding a
    wl_display means that the EGL implementation should provide one or
    more interfaces in the Wayland protocol to allow clients to create
    wl_buffer objects.  On the server side, this extension also
    provides a new target for eglCreateImageKHR, to create an EGLImage
    from a wl_buffer.

    Adding an implementation-specific Wayland interface, allows the
    EGL implementation to define specific wayland requests and events,
    needed for buffer sharing in an EGL Wayland platform.

IP Status

    Open-source; freely implementable.

New Procedures and Functions

    EGLBoolean eglBindWaylandDisplayWL(EGLDisplay dpy,
                                       struct wl_display *display);

    EGLBoolean eglUnbindWaylandDisplayWL(EGLDisplay dpy,
                                         struct wl_display *display);

    EGLBoolean eglQueryWaylandBufferWL(EGLDisplay dpy,
                                       struct wl_resource *buffer,
                                       EGLint attribute, EGLint *value);

New Tokens

    Accepted as <target> in eglCreateImageKHR

        EGL_WAYLAND_BUFFER_WL                   0x31D5

    Accepted in the <attrib_list> parameter of eglCreateImageKHR:

        EGL_WAYLAND_PLANE_WL                    0x31D6

    Possible values for EGL_TEXTURE_FORMAT:

        EGL_TEXTURE_Y_U_V_WL                    0x31D7
        EGL_TEXTURE_Y_UV_WL                     0x31D8
        EGL_TEXTURE_Y_XUXV_WL                   0x31D9
        EGL_TEXTURE_EXTERNAL_WL                 0x31DA

    Accepted in the <attribute> parameter of eglQueryWaylandBufferWL:

        EGL_TEXTURE_FORMAT                      0x3080
        EGL_WAYLAND_Y_INVERTED_WL               0x31DB


Additions to the EGL 1.4 Specification:

    To bind a server-side wl_display to an EGLDisplay, call

        EGLBoolean eglBindWaylandDisplayWL(EGLDisplay dpy,
                                           struct wl_display *display);

    To unbind a server-side wl_display from an EGLDisplay, call
    
        EGLBoolean eglUnbindWaylandDisplayWL(EGLDisplay dpy,
                                             struct wl_display *display);

    eglBindWaylandDisplayWL returns EGL_FALSE when there is already a
    wl_display bound to EGLDisplay otherwise EGL_TRUE.

    eglUnbindWaylandDisplayWL returns EGL_FALSE when there is no
    wl_display bound to the EGLDisplay currently otherwise EGL_TRUE.

    XXXXXXXX 
    EGL_WAYLAND_BUFFER_WL


    To query attributes of a wl_buffer created by the EGL
    implementation installed by eglBindWaylandDisplayWL, call:

        EGLBoolean eglQueryWaylandBufferWL(EGLDisplay dpy,
                                           struct wl_resource *buffer,
                                           EGLint attribute,
					   EGLint *value);

    A wl_buffer can have several planes, typically in case of planar
    YUV formats.  Depending on the exact YUV format in use, the
    compositor will have to create one or more EGLImages for the
    various planes.  The eglQueryWaylandBufferWL function should be
    used to first query the wl_buffer texture format using
    EGL_TEXTURE_FORMAT as the attribute.  If the wl_buffer object is
    not an EGL wl_buffer (wl_shm and other wayland extensions can
    create wl_buffer objects of different types), this query will
    return EGL_FALSE.  In that case the wl_buffer can not be used with
    EGL and the compositor should have another way to get the buffer
    contents.

    If eglQueryWaylandBufferWL succeeds, the returned value will be
    one of EGL_TEXTURE_RGB, EGL_TEXTURE_RGBA, EGL_TEXTURE_Y_U_V_WL,
    EGL_TEXTURE_Y_UV_WL, EGL_TEXTURE_Y_XUXV_WL.  The value returned
    describes how many EGLImages must be used, which components will
    be sampled from each EGLImage and how they map to rgba components
    in the shader.  The naming conventions separates planes by _ and
    within each plane, the order or R, G, B, A, Y, U, and V indicates
    how those components map to the rgba value returned by the
    sampler.  X indicates that the corresponding component in the rgba
    value isn't used.

    RGB and RGBA buffer types:

        EGL_TEXTURE_RGB
                One plane, samples RGB from the texture to rgb in the
                shader.  Alpha channel is not valid.

        EGL_TEXTURE_RGBA
                One plane, samples RGBA from the texture to rgba in the
                shader.

    YUV buffer types:

        EGL_TEXTURE_Y_U_V_WL
                Three planes, samples Y from the first plane to r in
                the shader, U from the second plane to r, and V from
                the third plane to r.

        EGL_TEXTURE_Y_UV_WL
                Two planes, samples Y from the first plane to r in
                the shader, U and V from the second plane to rg.

        EGL_TEXTURE_Y_XUXV_WL
                Two planes, samples Y from the first plane to r in
                the shader, U and V from the second plane to g and a.

        EGL_TEXTURE_EXTERNAL_WL
                Treated as a single plane texture, but sampled with
                samplerExternalOES according to OES_EGL_image_external

    After querying the wl_buffer layout, create EGLImages for the
    planes by calling eglCreateImageKHR with wl_buffer as
    EGLClientBuffer, EGL_WAYLAND_BUFFER_WL as the target, NULL
    context.  If no attributes are given, an EGLImage will be created
    for the first plane.  For multi-planar buffers, specify the plane
    to create the EGLImage for by using the EGL_WAYLAND_PLANE_WL
    attribute.  The value of the attribute is the index of the plane,
    as defined by the buffer format.  Writing to an EGLImage created
    from a wl_buffer in any way (such as glTexImage2D, binding the
    EGLImage as a renderbuffer etc) will result in undefined behavior.

    Further, eglQueryWaylandBufferWL accepts attributes EGL_WIDTH and
    EGL_HEIGHT to query the width and height of the wl_buffer.

    Also, eglQueryWaylandBufferWL may accept
    EGL_WAYLAND_Y_INVERTED_WL attribute to query orientation of
    wl_buffer. If EGL_WAYLAND_Y_INVERTED_WL is supported
    eglQueryWaylandBufferWL returns EGL_TRUE and value is a boolean
    that tells if wl_buffer is y-inverted or not. If
    EGL_WAYLAND_Y_INVERTED_WL is not supported
    eglQueryWaylandBufferWL returns EGL_FALSE, in that case
    wl_buffer should be treated as if value of
    EGL_WAYLAND_Y_INVERTED_WL was EGL_TRUE.

Issues

Revision History

    Version 1, March 1, 2011
        Initial draft (Benjamin Franzke)
    Version 2, July 5, 2012
        Add EGL_WAYLAND_PLANE_WL attribute to allow creating an EGLImage
        for different planes of planar buffer. (Kristian Høgsberg)
    Version 3, July 10, 2012
        Add eglQueryWaylandBufferWL and the various buffer
        formats. (Kristian Høgsberg)
    Version 4, July 19, 2012
        Use EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGB, and EGL_TEXTURE_RGBA,
        and just define the new YUV texture formats.  Add support for
        EGL_WIDTH and EGL_HEIGHT in the query attributes (Kristian Høgsberg)
    Version 5, July 16, 2013
        Change eglQueryWaylandBufferWL to take a resource pointer to the
        buffer instead of a pointer to a struct wl_buffer, as the latter has
        been deprecated. (Ander Conselvan de Oliveira)
    Version 6, September 16, 2013
        Add EGL_WAYLAND_Y_INVERTED_WL attribute to allow specifying
        wl_buffer's orientation.
    Version 7, July 14, 2017
        Add EGL_WAYLAND_BUFFER_WL EGLImage target. Reword for inclusion in
	Khronos registry.
