Merge remote branch 'origin/lp-binning'
[mesa.git] / src / egl / main / egldriver.h
1 #ifndef EGLDRIVER_INCLUDED
2 #define EGLDRIVER_INCLUDED
3
4
5 #include "egltypedefs.h"
6 #include "eglapi.h"
7
8
9 /**
10 * Define an inline driver typecast function.
11 *
12 * Note that this macro defines a function and should not be ended with a
13 * semicolon when used.
14 */
15 #define _EGL_DRIVER_TYPECAST(drvtype, egltype, code) \
16 static INLINE struct drvtype *drvtype(const egltype *obj) \
17 { return (struct drvtype *) code; }
18
19
20 /**
21 * Define the driver typecast functions for _EGLDriver, _EGLDisplay,
22 * _EGLContext, _EGLSurface, and _EGLConfig.
23 *
24 * Note that this macro defines several functions and should not be ended with
25 * a semicolon when used.
26 */
27 #define _EGL_DRIVER_STANDARD_TYPECASTS(drvname) \
28 _EGL_DRIVER_TYPECAST(drvname ## _driver, _EGLDriver, obj) \
29 /* note that this is not a direct cast */ \
30 _EGL_DRIVER_TYPECAST(drvname ## _display, _EGLDisplay, obj->DriverData) \
31 _EGL_DRIVER_TYPECAST(drvname ## _context, _EGLContext, obj) \
32 _EGL_DRIVER_TYPECAST(drvname ## _surface, _EGLSurface, obj) \
33 _EGL_DRIVER_TYPECAST(drvname ## _config, _EGLConfig, obj)
34
35
36 typedef _EGLDriver *(*_EGLMain_t)(const char *args);
37
38
39 /**
40 * Base class for device drivers.
41 */
42 struct _egl_driver
43 {
44 void *LibHandle; /**< dlopen handle */
45 const char *Path; /**< path to this driver */
46 const char *Args; /**< args to load this driver */
47
48 const char *Name; /**< name of this driver */
49
50 /**
51 * Probe a display and return a score.
52 *
53 * Roughly,
54 * 50 means the driver supports the display;
55 * 90 means the driver can accelerate the display;
56 * 100 means a perfect match.
57 */
58 EGLint (*Probe)(_EGLDriver *drv, _EGLDisplay *dpy);
59
60 /**
61 * Release the driver resource.
62 *
63 * It is called before dlclose().
64 */
65 void (*Unload)(_EGLDriver *drv);
66
67 _EGLAPI API; /**< EGL API dispatch table */
68 };
69
70
71 PUBLIC _EGLDriver *
72 _eglMain(const char *args);
73
74
75 extern _EGLDriver *
76 _eglMatchDriver(_EGLDisplay *dpy);
77
78
79 extern EGLBoolean
80 _eglPreloadDrivers(void);
81
82
83 extern void
84 _eglUnloadDrivers(void);
85
86
87 PUBLIC void
88 _eglInitDriverFallbacks(_EGLDriver *drv);
89
90
91 PUBLIC void
92 _eglSetProbeCache(EGLint key, const void *val);
93
94
95 PUBLIC const void *
96 _eglGetProbeCache(EGLint key);
97
98
99 #endif /* EGLDRIVER_INCLUDED */