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