Name

    EXT_device_base

Name Strings

    EGL_EXT_device_base

Contributors

    James Jones
    Daniel Kartch
    Jamie Madill

Contacts

    James Jones, NVIDIA  (jajones 'at' nvidia.com)

Status

    Complete
    
    Rewritten in terms of split functionality in EXT_dispay_device and
    EXT_device_enumeration.

Version

    Version 9 - March 24th, 2015

Number

    EGL Extension #72

Extension Type

    EGL client extension

Dependencies

    Written against the wording of EGL 1.5.

    The specifications of EGL_EXT_device_query and
    EGL_EXT_device_enumeration are required to determine the
    specification of this extension, although those extensions may not
    be supported.

Overview

    Increasingly, EGL and its client APIs are being used in place of
    "native" rendering APIs to implement the basic graphics
    functionality of native windowing systems.  This creates demand
    for a method to initialize EGL displays and surfaces directly on
    top of native GPU or device objects rather than native window
    system objects.  The mechanics of enumerating the underlying
    native devices and constructing EGL displays and surfaces from
    them have been solved in various platform and implementation-
    specific ways.  The EGL device family of extensions offers a
    standardized framework for bootstrapping EGL without the use of
    any underlying "native" APIs or functionality.

    This extension defines the first step of this bootstrapping
    process: Device enumeration.

New Types

    As defined by EGL_EXT_device_query.

New Functions

    As defined by EGL_EXT_device_query and EGL_EXT_device_enumeration.

New Tokens

    As defined by EGL_EXT_device_query.

Add to section "3.2 Devices"

    "EGL_EXT_device_base is equivalent to the combination of the
    functionality defined by EGL_EXT_device_query and
    EGL_EXT_device_enumeration."

Issues

    1.  Should there be a mechanism (such as an attribute list) to
        filter devices in eglQueryDevicesEXT()?

        RESOLVED: No.  This could develop too much complexity, like
        the EGLConfig mechanism.  Instead, force applications to query
        all devices and implement any desired filtering themselves.

    2.  Should there be an eglSetDeviceAttribEXT()?

        RESOLVED: No.  Device properties are immutable.

    3.  Should a device file descriptor attribute be included in the
        base specification?

        RESOLVED: No.  It seems like an arbitrary attribute to include
        in the base extension.  Other extensions can easily be added
        if this or other device attributes are needed.

    4.  Should EGLDeviceEXT handles be opaque pointers or 32-bit
        values?

        RESOLVED: Opaque pointers.  The trend seems to be to use
        opaque pointers for object handles, and opaque pointers allow
        more implementation flexibility than 32-bit values.
        Additionally, the introduction of the EGLAttrib type allows
        inclusion of pointer-sized types in attribute lists, which was
        the only major advantage of 32-bit types.

    5.  Should eglQueryDisplayAttribEXT be defined as part of this
        extension?

        RESOLVED: Yes.  There are no other known uses for this
        function, so it should be defined here.  If other uses are
        found, future extension specifications can reference this
        extension or retroactively move it to a separate extension.

    6.  How should bonded GPU configurations, such as SLI or Crossfire
        be enumerated?  What about other hybrid rendering solutions?

        RESOLVED: Bonded GPUs should appear as one device in this API,
        since the client APIs generally treat them as one device.
        Further queries can be added to distinguish the lower-level
        hardware within these bonded devices.

        Hybrid GPUs, which behave independently but are switched
        between in a manner transparent to the user, should be
        enumerated separately.  This extension is intended to be used
        at a level of the software stack below this type of automatic
        switching or output sharing.

    7.  Should this extension require all displays to have an
        associated, queryable device handle?

        RESOLVED: Yes.  This allows creating new namespace containers
        that all displays can be grouped in to and allows existing
        applications with display-based initialization code to easily
        add device-level functionality.  Future extensions are
        expected to expose methods to correlate EGL devices and native
        devices, and to use devices as namespaces for future objects
        and operations, such as cross-display EGL streams.

    8.  Are device handles returned by EGL valid in other processes?

        RESOLVED: No.  Another level of indirection is required to
        correlate two EGL devices in separate processes.

    9.  Is a general display pointer query mechanism needed, or should
        an eglGetDevice call be added to query a display's associated
        device?

        RESOLVED: A general mechanism is better.  It may have other
        uses in the future.

    10. Should a new type of extension be introduced to query device-
        specific extensions?

        RESOLVED: Yes.  Without this mechanism, it is likely that most
        device extensions would require a separate mechanism to
        determine which devices actually support them.  Further,
        requiring all device-level extensions to be listed as client
        extensions forces them to be implemented in the EGL client
        library, or "ICD".  This is unfortunate since vendors will
        likely wish to expose vendor-specific device extensions.

        These advantages were weighed against the one known
        disadvantage of a separate extension type: Increasing the
        complexity of this extension and the EGL extension mechanism
        in general.

    11. Is eglQueryDeviceStringEXT necessary, or should the device
        extension string be queried using eglQueryDeviceAttribEXT?

        RESOLVED: Using a separate query seems more consistent with
        how the current extension strings are queried.
        
    12. Should this extension contain both device enumeration and
        the ability to query the device backing an EGLDisplay?
        
        RESOLVED: This extension initially included both of these
        abilities.  To allow simpler implementations to add only the
        ability to query the device of an existing EGLDisplay, this
        extension was split into two separate extensions:
        
           EGL_EXT_device_query
           EGL_EXT_device_enumeration
           
        The presence of this extension now only indicates support
        for both of the above extensions.

Revision History:

    #9  (March 24th, 2015) James Jones
        - Split the extension into two child extensions:
           EGL_EXT_device_query
           EGL_EXT_device_enumeration

    #8  (May 16th, 2014) James Jones
        - Marked the extension complete.
        - Marked all issues resolved.

    #7  (April 8th, 2014) James Jones
        - Renamed eglGetDisplayAttribEXT back to
          eglQueryDisplayAttribEXT.
        - Update wording based on the EGL 1.5 specification.
        - Use EGLAttrib instead of EGLAttribEXT.
        - Assigned values to tokens.

    #6  (November 6th, 2013) James Jones
        - Added EGL_BAD_DEVICE_EXT error code.
        - Renamed some functions for consistency with the core spec

    #5  (November 6th, 2013) James Jones
        - Specified this is a client extension
        - Renamed eglQueryDisplayPointerEXT eglGetDisplayAttribEXT
          and modified it to use the new EGLAttribEXT type rather than
          a void pointer
        - Introduced the "device" extension type.
        - Added eglQueryDeviceStringEXT to query device extension
          strings
        - Removed issues 5, 10, and 12 as they are no longer relevant
        - Added issues 10 and 11.

    #4  (May 14th, 2013) James Jones
        - Merged in EGL_EXT_display_attributes
        - Changed eglGetDisplayPointerEXT to eglQueryDisplayPointerEXT
        - Remove eglGetDisplayAttribEXT since it has no known use case

    #3  (April 23rd, 2013) James Jones
        - Include EGL_NO_DEVICE_EXT
        - Added issues 8 and 9

    #2  (April 18th, 2013) James Jones
        - Reworded issue 3 and flipped the resolution
        - Added issues 5, 6, and 7
        - Filled in the actual spec language modifications
        - Renamed from EGL_EXT_device to EGL_EXT_device_base
        - Fixed some typos

    #1  (April 16th, 2013) James Jones
        - Initial Draft
