X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Fegl%2Fmain%2Fegldriver.h;h=d61775791939ea4c07210776074e4908ab112b84;hp=6c848eb35eab5f2fe72d7bd08c936ff5c68c8861;hb=a8b6b6555c7d6a02a3d095c72ebbdc218bc45cd3;hpb=0c309bb494b6ee1c403442d1207743f749f95b6e diff --git a/src/egl/main/egldriver.h b/src/egl/main/egldriver.h index 6c848eb35ea..d6177579193 100644 --- a/src/egl/main/egldriver.h +++ b/src/egl/main/egldriver.h @@ -4,6 +4,36 @@ #include "egltypedefs.h" #include "eglapi.h" +#include + +/** + * Define an inline driver typecast function. + * + * Note that this macro defines a function and should not be ended with a + * semicolon when used. + */ +#define _EGL_DRIVER_TYPECAST(drvtype, egltype, code) \ + static INLINE struct drvtype *drvtype(const egltype *obj) \ + { return (struct drvtype *) code; } + + +/** + * Define the driver typecast functions for _EGLDriver, _EGLDisplay, + * _EGLContext, _EGLSurface, and _EGLConfig. + * + * Note that this macro defines several functions and should not be ended with + * a semicolon when used. + */ +#define _EGL_DRIVER_STANDARD_TYPECASTS(drvname) \ + _EGL_DRIVER_TYPECAST(drvname ## _driver, _EGLDriver, obj) \ + /* note that this is not a direct cast */ \ + _EGL_DRIVER_TYPECAST(drvname ## _display, _EGLDisplay, obj->DriverData) \ + _EGL_DRIVER_TYPECAST(drvname ## _context, _EGLContext, obj) \ + _EGL_DRIVER_TYPECAST(drvname ## _surface, _EGLSurface, obj) \ + _EGL_DRIVER_TYPECAST(drvname ## _config, _EGLConfig, obj) + + +typedef _EGLDriver *(*_EGLMain_t)(const char *args); /** @@ -11,49 +41,65 @@ */ struct _egl_driver { - void *LibHandle; /**< dlopen handle */ - const char *Path; /**< path to this driver */ - const char *Args; /**< args to load this driver */ - const char *Name; /**< name of this driver */ - /**< probe a display to see if it is supported */ - EGLBoolean (*Probe)(_EGLDriver *drv, _EGLDisplay *dpy); - /**< called before dlclose to release this driver */ + + /** + * Probe a display and return a score. + * + * Roughly, + * 50 means the driver supports the display; + * 90 means the driver can accelerate the display; + * 100 means a perfect match. + */ + EGLint (*Probe)(_EGLDriver *drv, _EGLDisplay *dpy); + + /** + * Release the driver resource. + * + * It is called before dlclose(). + */ void (*Unload)(_EGLDriver *drv); _EGLAPI API; /**< EGL API dispatch table */ }; -extern _EGLDriver *_eglMain(const char *args); +extern _EGLDriver * +_eglBuiltInDriverGALLIUM(const char *args); -extern const char * -_eglPreloadDriver(_EGLDisplay *dpy); +extern _EGLDriver * +_eglBuiltInDriverDRI2(const char *args); extern _EGLDriver * -_eglOpenDriver(_EGLDisplay *dpy); +_eglBuiltInDriverGLX(const char *args); -extern EGLBoolean -_eglCloseDriver(_EGLDriver *drv, _EGLDisplay *dpy); +PUBLIC _EGLDriver * +_eglMain(const char *args); -void -_eglUnloadDrivers(void); +extern _EGLDriver * +_eglMatchDriver(_EGLDisplay *dpy, EGLBoolean probe_only); -extern _EGLDriver * -_eglLookupDriver(EGLDisplay d); +extern __eglMustCastToProperFunctionPointerType +_eglGetDriverProc(const char *procname); extern void +_eglUnloadDrivers(void); + + +/* defined in eglfallbacks.c */ +PUBLIC void _eglInitDriverFallbacks(_EGLDriver *drv); -extern EGLint -_eglFindAPIs(void); +PUBLIC void +_eglSearchPathForEach(EGLBoolean (*callback)(const char *, size_t, void *), + void *callback_data); #endif /* EGLDRIVER_INCLUDED */