blob: aece7748ea444fc18b0a450e6d8a6902c210755f [file] [log] [blame]
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