blob: 2ba883472cac283d971ff0d6a2bae33585f4a08b [file] [log] [blame]
Name
EXT_explicit_device
Name Strings
EGL_EXT_explicit_device
Contributors
Adam Jackson
Nicolai Haehnle
Daniel Stone
Kyle Brenneman
Contacts
Adam Jackson <ajax@redhat.com>
Status
Complete
Version
Version 3, 2022-04-21
Number
EGL Extension #148
Extension Type
EGL client extension
Dependencies
Requires EGL_EXT_platform_base and EGL_EXT_device_enumeration.
EGL_EXT_platform_device trivially interacts with this extension.
This extension is written against the EGL 1.5 Specification.
Overview
A system may support rendering with multiple devices for the same
windowing system. In that case, an EGL implementation must select a
default device based on the native display.
This extension allows an application to explicitly request a device
to use for rendering instead of the implementation's default.
This differs from EGL_EXT_platform_device in that
EGL_EXT_platform_device uses an EGLDeviceEXT instead of a native
display. Thus, EGL_EXT_platform_device allows offscreen rendering
to a pbuffer or FBO, but it does not require or use a windowing
system, and thus does not allow pixmap or window surfaces.
Using EGL_EXT_explicit_device with EGL_MESA_platform_surfaceless is
functionally identical to EGL_EXT_platform_device.
New Types
None
New Procedures and Functions
None
New Tokens
None
Additions to the EGL Specification
None
New Behavior
If EGL_DEVICE_EXT is specified as an attribute for
eglGetPlatformDisplay, the value of the attribute is interpreted as
an EGLDeviceEXT as returned by eglQueryDevicesEXT.
If the EGL_DEVICE_EXT attribute is EGL_NO_DEVICE_EXT, then the
implementation will select a device automatically, as it would
normally.
If the EGL_DEVICE_EXT attribute is not EGL_NO_DEVICE_EXT, then the
implementation will use the specified device for rendering. If the
EGL_DEVICE_EXT attribute does not name a valid EGLDeviceEXT, then
EGL_BAD_DEVICE_EXT is generated.
An implementation might not support all devices for all native
displays. If the device and native display are not compatible for
any reason, then EGL_BAD_MATCH is generated.
If EGL_EXT_platform_device is supported, passing EGL_DEVICE_EXT as an
attribute to eglGetPlatformDisplay(EGL_PLATFORM_DEVICE_EXT) generates
EGL_BAD_ATTRIBUTE.
Issues
1. Should we have a separate function to query whether a device is
compatible with a native display?
RESOLVED: No. A separate query might require duplicating a lot of
the work that eglGetPlatformDisplay and eglInitialize would do,
which could be very slow.
2. If an implementation can't support a device with a particular
native display, then should it fail in eglGetPlatformDisplay, or
can it defer any compatibility checks until eglInitialize?
RESOLVED: eglGetPlatformDisplay must check for compatibility and
should fail if the device and native display are not supported.
Without a separate function to check for compatibility, the only
way for an application to know which devices can work with a
native display is to try to use each device and see if it gets an
error. If the error is in eglInitialize, then an application
would have to create (and leak) a bunch of EGLDisplay handles
that it never intends to use.
Revision History
Version 3, 2022-04-21 (Kyle Brenneman)
- Require eglGetPlatformDisplay (instead of eglInitialize) check
whether the device is supported with the native display.
Version 2, 2017-08-08 (Adam Jackson)
- Renamed from MESA_platform_device to EXT_explicit_device
- Make it an error to use this new attribute in conjunction with
EGL_EXT_platform_device
Version 1, 2017-07-14 (Adam Jackson)
- Initial version