blob: c1e6fa28209a617f823c99f0896bb47f7afc8d17 [file] [log] [blame]
Brian Pauladbff7e2005-04-22 21:09:39 +00001#ifndef EGLDRIVER_INCLUDED
2#define EGLDRIVER_INCLUDED
3
4
5#include "egltypedefs.h"
Brian Pauldaf585d2005-11-24 04:02:16 +00006#include "eglapi.h"
Brian Paul5285c322005-11-29 04:43:37 +00007
8
Chia-I Wubdb9e202010-02-04 12:52:15 +08009/**
10 * Define an inline driver typecast function.
11 */
12#define _EGL_DRIVER_TYPECAST(drvtype, egltype, code) \
13 static INLINE struct drvtype *drvtype(const egltype *obj) \
14 { return (struct drvtype *) code; }
15
16
17/**
18 * Define the driver typecast functions for _EGLDriver, _EGLDisplay,
19 * _EGLContext, _EGLSurface, and _EGLConfig.
20 */
21#define _EGL_DRIVER_STANDARD_TYPECASTS(drvname) \
22 _EGL_DRIVER_TYPECAST(drvname ## _driver, _EGLDriver, obj) \
23 /* note that this is not a direct cast */ \
24 _EGL_DRIVER_TYPECAST(drvname ## _display, _EGLDisplay, obj->DriverData) \
25 _EGL_DRIVER_TYPECAST(drvname ## _context, _EGLContext, obj) \
26 _EGL_DRIVER_TYPECAST(drvname ## _surface, _EGLSurface, obj) \
27 _EGL_DRIVER_TYPECAST(drvname ## _config, _EGLConfig, obj)
28
29
Chia-I Wu94cb3212010-01-29 09:00:30 +080030typedef _EGLDriver *(*_EGLMain_t)(const char *args);
31
32
Brian Paul5285c322005-11-29 04:43:37 +000033/**
Brian Pauladbff7e2005-04-22 21:09:39 +000034 * Base class for device drivers.
35 */
36struct _egl_driver
37{
Brian Paulc56e15b2008-05-28 15:43:41 -060038 void *LibHandle; /**< dlopen handle */
Chia-I Wu0eaa02c2009-08-13 13:01:48 +080039 const char *Path; /**< path to this driver */
40 const char *Args; /**< args to load this driver */
Brian Pauladbff7e2005-04-22 21:09:39 +000041
Brian Paul1c73b4b2008-05-29 17:02:31 -060042 const char *Name; /**< name of this driver */
Chia-I Wucf22fd52010-01-19 18:39:59 +080043
44 /**
45 * Probe a display and return a score.
46 *
47 * Roughly,
48 * 50 means the driver supports the display;
49 * 90 means the driver can accelerate the display;
50 * 100 means a perfect match.
51 */
52 EGLint (*Probe)(_EGLDriver *drv, _EGLDisplay *dpy);
53
54 /**
55 * Release the driver resource.
56 *
57 * It is called before dlclose().
58 */
Chia-I Wu0eaa02c2009-08-13 13:01:48 +080059 void (*Unload)(_EGLDriver *drv);
Brian Paul1c73b4b2008-05-29 17:02:31 -060060
Brian Paulc56e15b2008-05-28 15:43:41 -060061 _EGLAPI API; /**< EGL API dispatch table */
Brian Pauladbff7e2005-04-22 21:09:39 +000062};
63
64
Chia-I Wu897cb892010-01-05 21:39:15 +080065PUBLIC _EGLDriver *
66_eglMain(const char *args);
Brian Pauladbff7e2005-04-22 21:09:39 +000067
68
Brian Pauladbff7e2005-04-22 21:09:39 +000069extern _EGLDriver *
Chia-I Wu092b1ca2010-01-26 18:41:15 +080070_eglMatchDriver(_EGLDisplay *dpy);
Brian Pauladbff7e2005-04-22 21:09:39 +000071
72
Chia-I Wub3bcd332010-01-19 18:13:50 +080073extern EGLBoolean
74_eglPreloadDrivers(void);
75
76
77extern void
Chia-I Wu0eaa02c2009-08-13 13:01:48 +080078_eglUnloadDrivers(void);
Brian Paule3805ca2008-05-30 14:50:33 -060079
80
Chia-I Wu897cb892010-01-05 21:39:15 +080081PUBLIC void
Brian Pauladbff7e2005-04-22 21:09:39 +000082_eglInitDriverFallbacks(_EGLDriver *drv);
83
84
Chia-I Wuc5766c42010-01-20 14:35:50 +080085PUBLIC void
86_eglSetProbeCache(EGLint key, const void *val);
87
88
89PUBLIC const void *
90_eglGetProbeCache(EGLint key);
91
92
Brian Pauladbff7e2005-04-22 21:09:39 +000093#endif /* EGLDRIVER_INCLUDED */