Edit

kc3-lang/angle/extensions/EGL_EXT_device_query.txt

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2015-03-25 13:31:32
    Hash : 33d12cb9
    Message : Add drafts for device query extensions. These extensions give power apps the ability to query raw device pointers from the EGL layer. EGL_EXT_device_query is based on EGL_EXT_device_base, which is being split into device_query and device_enumerate. We remove the device enumeration logic, and only allow the app to query the current device from a display, which matches how ANGLE works internally. EGL_ANGLE_device_d3d gives the app the ability to query D3D devices associated with a display. BUG=angleproject:935 Change-Id: I8079661f00d11717ed0e792c9fe8dc5c26f67dcc Reviewed-on: https://chromium-review.googlesource.com/252110 Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Jamie Madill <jmadill@chromium.org>

  • extensions/EGL_EXT_device_query.txt
  • 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 <attribute> 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 <value>.  Currently there are no valid values of
        <attribute> defined.
    
        On failure, EGL_FALSE is returned.  An EGL_BAD_ATTRIBUTE error is
        generated if <attribute> is not a valid attribute.  An
        EGL_BAD_DEVICE_EXT error is generated if <device> 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.  <name> must be
        EGL_EXTENSIONS.
    
        The EGL_EXTENSIONS string describes which device extensions are
        supported by <device>.  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 <device> is not a valid EGLDeviceEXT.  An
        EGL_BAD_PARAMETER error is generated if <name> 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 <name> is EGL_DEVICE_EXT,
        the EGLDeviceEXT associated with <dpy> is returned in <value>.
        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 <dpy>.  An
        EGL_BAD_ATTRIBUTE error is generated if <name> is not a valid
        value.
    
        Because the EGLDeviceEXT is a property of <dpy>, any use of an
        associated EGLDeviceEXT after <dpy> has been terminated gives
        undefined results. Querying an EGL_DEVICE_EXT from <dpy> 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