Name

    EXT_platform_wayland

Name Strings

    EGL_EXT_platform_wayland

Contributors

    Chad Versace <chad.versace@intel.com>

Contacts

    Chad Versace <chad.versace@intel.com>

Status

    Complete

Version

    Version 4, 2014-03-10

Number

    EGL Extension #63

Extension Type

    EGL client extension

Dependencies

    Requires EGL_EXT_client_extensions to query its existence without
    a display.

    Requires EGL_EXT_platform_base.

    This extension is written against the wording of version 7 of the
    EGL_EXT_platform_base specification.

Overview

    This extension defines how to create EGL resources from native Wayland
    resources using the functions defined by EGL_EXT_platform_base.

New Types

    None

New Procedures and Functions

    None

New Tokens

    Accepted as the <platform> argument of eglGetPlatformDisplayEXT:

        EGL_PLATFORM_WAYLAND_EXT                0x31D8

Additions to the EGL Specification

    None.

New Behavior

    To determine if the EGL implementation supports this extension, clients
    should query the EGL_EXTENSIONS string of EGL_NO_DISPLAY.

    To obtain an EGLDisplay backed by a Wayland display, call
    eglGetPlatformDisplayEXT with <platform> set to EGL_PLATFORM_WAYLAND_EXT.  The
    <native_display> parameter specifies the Wayland display  to use and must
    either point to a `struct wl_display` or be EGL_DEFAULT_DISPLAY. If
    <native_display> is EGL_DEFAULT_DISPLAY, then EGL will create a new
    wl_display structure by connecting to the default Wayland socket.  The
    manual page wl_display_connect(3) defines the location of the default
    Wayland socket.

    To obtain an on-screen rendering surface from a Wayland window, call
    eglCreatePlatformWindowSurfaceEXT with a <dpy> that belongs to Wayland and
    a <native_window> that points to a `struct wl_egl_surface`.

    It is not valid to call eglCreatePlatformPixmapSurfaceEXT with a <dpy>
    that belongs to Wayland. Any such call fails and generates
    EGL_BAD_PARAMETER.

Issues

    1. Should this extension permit EGL_DEFAULT_DISPLAY as input to
       eglGetPlatformDisplayEXT()?

       RESOLUTION: Yes. When given EGL_DEFAULT_DISPLAY, eglGetPlatformDisplayEXT
       returns a display backed by the default Wayland display.

    2. Should this extension support creation EGLPixmap resources from Wayland
       pixmaps?

       RESOLVED. No. Wayland has no pixmap type.

    3. Should the extension namespace be EXT or MESA?
    
       The only shipping EGL implementation today (2013-04-26) that supports
       Wayland is Mesa. However, perhaps the extension should reside in the
       EXT namespace in expectation that other vendors will also begin
       supporting Wayland.
    
       RESOLVED. Use the EXT namespace because other vendors have expressed
       interest in Wayland.

Revision History

    Version 4, 2014-03-10(Chad Versace)
        - Change resolution of issue #1 from "no" to "yes". Now
          eglGetPlatformDisplayEXT accepts EGL_DEFAULT_DISPLAY for Wayland.
        - Explain in more detail how EGL connects to the default Wayland
          display.

    Version 3, 2013-10-16 (Chad Versace)
        - Resolve issue #3 to use EXT namespace.

    Version 2, 2013-09-12 (Chad Versace)
        - Update to wording of version 7 of EGL_EXT_platform_base spec.
        - Add section "Extension Type".
        - Rephrase the discussion of how to create a Wayland EGLDisplay
          to follow the analogous discussion in the published
          EGL_EXT_platform_x11 spec.
        - Change resolution of issue 1 from yes to no, because of likely type
          mismatch between EGL_DEFAULT_DISPLAY_TYPE and void*.

    Version 1, 2013-04-26 (Chad Versace)
        - Initial draft

# vim:ai:et:sw=4:ts=4:

