Name EXT_device_query Name Strings EGL_EXT_device_query Contributors James Jones, NVIDIA (jajones 'at' nvidia.com) Jamie Madill, Google (jmadill 'at' google.com) Contacts Jamie Madill, Google (jmadill 'at' google.com) Status Draft Version Version 1 - Mar 25rd, 2015 Number EGL Extension #XXX Extension Type EGL client extension Dependencies Written against the wording of EGL 1.5. Requires EGL 1.5 or an earlier verison of EGL with the EGL_EXT_client_extensions extension. 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 access native GPU or device objects directly rather than calling EGL or GL entry points. This extension defines the method for an application to query native device objects from an EGL Display. New Types This is the type of a handle that represents an EGLDeviceEXT object. typedef void* EGLDeviceEXT; If EGL 1.5 is not supported, the following type is added, as defined in the EGL 1.5 specification: typedef intptr_t EGLAttrib; New Functions EGLBoolean eglQueryDeviceAttribEXT(EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); const char *eglQueryDeviceStringEXT(EGLDeviceEXT device, EGLint name); EGLBoolean eglQueryDisplayAttribEXT(EGLDisplay dpy, EGLint attribute, EGLAttrib *value); New Tokens Functions with a return type of EGLDeviceEXT will return this value on failure: EGL_NO_DEVICE_EXT ((EGLDeviceEXT)0) This error value will be generated by functions that take an EGLDeviceEXT object as a parameter: EGL_BAD_DEVICE_EXT 0x322B Accepted by the parameter of eglQueryDisplayAttribEXT: EGL_DEVICE_EXT 0x322C Add a new section "2.1.2 Devices" after "2.1.1 Scalar Types" All EGL operations occur on an EGLDeviceEXT. However, devices themselves expose no functionality. They are simple abstract objects that exist only for the sake of enumeration and defining a namespace. Modify the last sentence of section "2.1.3" Displays" to read: Besides devices, objects are always specified by the combination of an EGLDisplay parameter with a parameter representing the handle of the object. Add a new extension type to the list in section "2.8 Extensions" Device Extensions A *device extension* adds functionality to an individual EGLDeviceEXT. Different instances of EGLDeviceEXT may support different sets of device extensions Add a new error to section "3.1 Errors" EGL_BAD_DEVICE_EXT An EGLDeviceEXT argument does not refer to a valid EGLDeviceEXT. Any command taking an EGLDeviceEXT parameter may generate this error. Add a section "3.2 Devices" after "3.1 Errors" To query the properties of a device, use: EGLBoolean eglQueryDeviceAttribEXT(EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); On success, EGL_TRUE is returned and the requested attribute value is returned in . Currently there are no valid values of defined. On failure, EGL_FALSE is returned. An EGL_BAD_ATTRIBUTE error is generated if is not a valid attribute. An EGL_BAD_DEVICE_EXT error is generated if is not a valid EGLDeviceEXT. const char *eglQueryDeviceStringEXT(EGLDeviceEXT device, EGLint name); returns a pointer to a static, zero-terminated string describing some aspect of the specified EGLDeviceEXT. must be EGL_EXTENSIONS. The EGL_EXTENSIONS string describes which device extensions are supported by . The string is of the same format specified for display and client extension strings in section 3.4. Note that device extensions are properties of the device, and are distinct from other extension strings. On failure, NULL is returned. An EGL_BAD_DEVICE_EXT error is generated if is not a valid EGLDeviceEXT. An EGL_BAD_PARAMETER error is generated if is not one of the values described above. Add a section "3.4 Display Attributes" after "3.3 EGL Versioning" To query attributes of an initialized display, use: EGLBoolean eglQueryDisplayAttribEXT(EGLDisplay dpy, EGLint name, EGLAttrib *value); On success, EGL_TRUE is returned. If is EGL_DEVICE_EXT, the EGLDeviceEXT associated with is returned in . All displays have an associated EGLDeviceEXT, regardless of how they were created. A successful query of EGL_DEVICE_EXT will never return EGL_NO_DEVICE_EXT. On failure, EGL_FALSE is returned. An EGL_NOT_INITIALIZED error is generated if EGL is not initialized for . An EGL_BAD_ATTRIBUTE error is generated if is not a valid value. Because the EGLDeviceEXT is a property of , any use of an associated EGLDeviceEXT after has been terminated gives undefined results. Querying an EGL_DEVICE_EXT from after a call to eglTerminate() (and subsequent re-initialization) may return a different value. Issues None. Revision History: #1 (Mar 25rd, 2015) Jamie Madill - Initial Draft based on EGL_EXT_device_base