· 7 years ago · Dec 21, 2018, 06:54 PM
1diff --git a/docs/specs/EGL_MESA_query_driver.txt b/docs/specs/EGL_MESA_query_driver.txt
2new file mode 100644
3index 0000000000..bec7d4a15d
4--- /dev/null
5+++ b/docs/specs/EGL_MESA_query_driver.txt
6@@ -0,0 +1,54 @@
7+Name
8+
9+ MESA_query_driver
10+
11+Name Strings
12+
13+ EGL_MESA_query_driver
14+
15+Contact
16+
17+ Rob Clark <robdclark 'at' gmail.com>
18+ Nicolai Hähnle <Nicolai.Haehnle 'at' amd.com>
19+
20+Contibutors
21+
22+ Veluri Mithun <velurimithun38 'at' gmail.com>
23+
24+Status
25+
26+ XXX - Not complete yet!!! (draft)
27+
28+Version
29+
30+ Version 1, 2018-11-05
31+
32+Number
33+
34+ EGL Extension ###
35+
36+Dependencies
37+
38+ EGL 1.4 is required.
39+
40+Overview
41+
42+ When an application had to query the name of a DRI driver and for
43+ obtaining driver's option list (UTF-8 encoded XML) of a DRI
44+ driver the below functions are useful.
45+
46+New Procedures and Functions
47+
48+ const char* eglGetDriverConfig(EGLDisplay *disp, EGLDeviceEXT device,
49+ const char *driverName);
50+ const char* eglGetDisplayDriverName(EGLDisplay *disp);
51+
52+New Tokens
53+
54+ No new tokens
55+
56+Issues
57+
58+
59+
60+Revision History
61diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
62index 3afdfd40e4..93d69127e7 100644
63--- a/src/egl/main/eglapi.c
64+++ b/src/egl/main/eglapi.c
65@@ -2647,6 +2647,19 @@ eglQueryDisplayAttribEXT(EGLDisplay dpy,
66 RETURN_EGL_SUCCESS(disp, EGL_TRUE);
67 }
68
69+static const char * EGLAPIENTRY
70+eglGetDisplayDriverName(EGLDisplay dpy)
71+{
72+ _EGLDisplay *disp = _eglLockDisplay(dpy);
73+ _EGLDriver *drv;
74+
75+ _EGL_FUNC_START(NULL, EGL_NONE, NULL, EGL_FALSE);
76+ _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv);
77+
78+ assert(disp->Initialized);
79+ RETURN_EGL_EVAL(disp, _eglGetDriverName(disp));
80+}
81+
82 __eglMustCastToProperFunctionPointerType EGLAPIENTRY
83 eglGetProcAddress(const char *procname)
84 {
85diff --git a/src/egl/main/egldriver.c b/src/egl/main/egldriver.c
86index b20652ed8c..a8b7d7dc94 100644
87--- a/src/egl/main/egldriver.c
88+++ b/src/egl/main/egldriver.c
89@@ -45,6 +45,7 @@
90 #include "egllog.h"
91
92 #include "util/debug.h"
93+#include "egl_dri2.h"
94
95 static mtx_t _eglModuleMutex = _MTX_INITIALIZER_NP;
96 static _EGLDriver *_eglDriver;
97@@ -125,3 +126,10 @@ _eglUnloadDrivers(void)
98 free(_eglDriver);
99 _eglDriver = NULL;
100 }
101+
102+const char *
103+_eglGetDriverName(_EGLDisplay *disp)
104+{
105+ struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
106+ return dri2_dpy->driver_name;
107+}
108diff --git a/src/egl/main/egldriver.h b/src/egl/main/egldriver.h
109index 5695fc06ff..c5b330b6cb 100644
110--- a/src/egl/main/egldriver.h
111+++ b/src/egl/main/egldriver.h
112@@ -78,6 +78,9 @@ struct _egl_driver
113 _EGLAPI API; /**< EGL API dispatch table */
114 };
115
116+extern const char *
117+_eglGetDriverName(_EGLDisplay *disp);
118+
119
120 extern void
121 _eglInitDriver(_EGLDriver *driver);
122diff --git a/src/egl/main/eglentrypoint.h b/src/egl/main/eglentrypoint.h
123index 69a6c1bf4c..5621b45d91 100644
124--- a/src/egl/main/eglentrypoint.h
125+++ b/src/egl/main/eglentrypoint.h
126@@ -42,6 +42,7 @@ EGL_ENTRYPOINT(eglGetCurrentContext)
127 EGL_ENTRYPOINT(eglGetCurrentDisplay)
128 EGL_ENTRYPOINT(eglGetCurrentSurface)
129 EGL_ENTRYPOINT(eglGetDisplay)
130+EGL_ENTRYPOINT(eglGetDisplayDriverName)
131 EGL_ENTRYPOINT(eglGetError)
132 EGL_ENTRYPOINT(eglGetPlatformDisplay)
133 EGL_ENTRYPOINT(eglGetPlatformDisplayEXT)