Name

    MESA_query_driver

Name Strings

    EGL_MESA_query_driver

Contact

    Rob Clark      <robdclark 'at' gmail.com>
    Nicolai Hähnle <Nicolai.Haehnle 'at' amd.com>

Contibutors

    Veluri Mithun <velurimithun38 'at' gmail.com>

Status

    Completed

Version

    Version 1, 2018-11-05

Number

    EGL Extension #131

Dependencies

    EGL 1.4 is required.

Overview

    When an application has to query the name of a DRI driver and for
    obtaining driver's option list (UTF-8 encoded XML) of a DRI
    driver the below functions are useful.

New Procedures and Functions

    const char* eglGetDisplayDriverConfig(EGLDisplay disp, const char *driverName);
    const char* eglGetDisplayDriverName(EGLDisplay disp);

Description

    First, create an EGLDisplay, EGLContext, EGLSurface then `eglMakeCurrent()` and
    pass this EGLDisplay as parameter to `eglGetDisplayDriverName`

    After we get the driverName to obtain configs pass it to `eglGetDisplayDriverConfig`

    If the EGLDisplay is not queryable like on haiku systems these new functions will
    return NULL

New Tokens

    No new tokens

Issues



Revision History

    Version 1, 2018-11-05
