egldriver.h revision bdb9e202de2524821bec1a136d48af70df8fb60e
1adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#ifndef EGLDRIVER_INCLUDED 2adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#define EGLDRIVER_INCLUDED 3adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egltypedefs.h" 6daf585d0f00df1d4d2e8dc5b465dad60a4bf0122Brian Paul#include "eglapi.h" 75285c32a17a8ec260dcb5d412d862e50bced0ce9Brian Paul 85285c32a17a8ec260dcb5d412d862e50bced0ce9Brian Paul 9bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu/** 10bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu * Define an inline driver typecast function. 11bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu */ 12bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu#define _EGL_DRIVER_TYPECAST(drvtype, egltype, code) \ 13bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu static INLINE struct drvtype *drvtype(const egltype *obj) \ 14bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu { return (struct drvtype *) code; } 15bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu 16bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu 17bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu/** 18bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu * Define the driver typecast functions for _EGLDriver, _EGLDisplay, 19bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu * _EGLContext, _EGLSurface, and _EGLConfig. 20bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu */ 21bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu#define _EGL_DRIVER_STANDARD_TYPECASTS(drvname) \ 22bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu _EGL_DRIVER_TYPECAST(drvname ## _driver, _EGLDriver, obj) \ 23bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu /* note that this is not a direct cast */ \ 24bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu _EGL_DRIVER_TYPECAST(drvname ## _display, _EGLDisplay, obj->DriverData) \ 25bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu _EGL_DRIVER_TYPECAST(drvname ## _context, _EGLContext, obj) \ 26bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu _EGL_DRIVER_TYPECAST(drvname ## _surface, _EGLSurface, obj) \ 27bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu _EGL_DRIVER_TYPECAST(drvname ## _config, _EGLConfig, obj) 28bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu 29bdb9e202de2524821bec1a136d48af70df8fb60eChia-I Wu 3094cb321b5d246185abf71d89968d472a626f1a23Chia-I Wutypedef _EGLDriver *(*_EGLMain_t)(const char *args); 3194cb321b5d246185abf71d89968d472a626f1a23Chia-I Wu 3294cb321b5d246185abf71d89968d472a626f1a23Chia-I Wu 335285c32a17a8ec260dcb5d412d862e50bced0ce9Brian Paul/** 34adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Base class for device drivers. 35adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 36adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulstruct _egl_driver 37adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 38c56e15b093c367e7e17ebd2e153baab8cafd213aBrian Paul void *LibHandle; /**< dlopen handle */ 390eaa02c836821556c1e8d0141f49f57e23f2548dChia-I Wu const char *Path; /**< path to this driver */ 400eaa02c836821556c1e8d0141f49f57e23f2548dChia-I Wu const char *Args; /**< args to load this driver */ 41adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 421c73b4ba86b424ba66a16c4006a57db505bd3ca3Brian Paul const char *Name; /**< name of this driver */ 43cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu 44cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu /** 45cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu * Probe a display and return a score. 46cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu * 47cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu * Roughly, 48cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu * 50 means the driver supports the display; 49cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu * 90 means the driver can accelerate the display; 50cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu * 100 means a perfect match. 51cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu */ 52cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu EGLint (*Probe)(_EGLDriver *drv, _EGLDisplay *dpy); 53cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu 54cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu /** 55cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu * Release the driver resource. 56cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu * 57cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu * It is called before dlclose(). 58cf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0Chia-I Wu */ 590eaa02c836821556c1e8d0141f49f57e23f2548dChia-I Wu void (*Unload)(_EGLDriver *drv); 601c73b4ba86b424ba66a16c4006a57db505bd3ca3Brian Paul 61c56e15b093c367e7e17ebd2e153baab8cafd213aBrian Paul _EGLAPI API; /**< EGL API dispatch table */ 62adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}; 63adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 64adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 65897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC _EGLDriver * 66897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I Wu_eglMain(const char *args); 67adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 68adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 69adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern _EGLDriver * 70092b1ca989ba3bdc3f4d421b83b3943af260b7dbChia-I Wu_eglMatchDriver(_EGLDisplay *dpy); 71adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 72adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 73b3bcd33f7a8b32ce4ea6e979e9cc764d0f903ae9Chia-I Wuextern EGLBoolean 74b3bcd33f7a8b32ce4ea6e979e9cc764d0f903ae9Chia-I Wu_eglPreloadDrivers(void); 75b3bcd33f7a8b32ce4ea6e979e9cc764d0f903ae9Chia-I Wu 76b3bcd33f7a8b32ce4ea6e979e9cc764d0f903ae9Chia-I Wu 77b3bcd33f7a8b32ce4ea6e979e9cc764d0f903ae9Chia-I Wuextern void 780eaa02c836821556c1e8d0141f49f57e23f2548dChia-I Wu_eglUnloadDrivers(void); 79e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul 80e3805cad0d15ed25ce8f6c5a1f1ea913e5d0986aBrian Paul 81897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC void 82adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul_eglInitDriverFallbacks(_EGLDriver *drv); 83adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 84adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 85c5766c4ae39b4190965abd65eaf67b478a9ad028Chia-I WuPUBLIC void 86c5766c4ae39b4190965abd65eaf67b478a9ad028Chia-I Wu_eglSetProbeCache(EGLint key, const void *val); 87c5766c4ae39b4190965abd65eaf67b478a9ad028Chia-I Wu 88c5766c4ae39b4190965abd65eaf67b478a9ad028Chia-I Wu 89c5766c4ae39b4190965abd65eaf67b478a9ad028Chia-I WuPUBLIC const void * 90c5766c4ae39b4190965abd65eaf67b478a9ad028Chia-I Wu_eglGetProbeCache(EGLint key); 91c5766c4ae39b4190965abd65eaf67b478a9ad028Chia-I Wu 92c5766c4ae39b4190965abd65eaf67b478a9ad028Chia-I Wu 93adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif /* EGLDRIVER_INCLUDED */ 94