| 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 |