egl: Add a simple cache for driver probe.

In current design, multiple drivers will probe the same display and the
best driver is determined.  The cache can be used by the drivers to
store and share the probed data.
This commit is contained in:
Chia-I Wu 2010-01-20 14:35:50 +08:00
parent cf22fd5e5b
commit c5766c4ae3
2 changed files with 56 additions and 0 deletions

View File

@ -113,6 +113,13 @@ library_suffix(void)
#endif
#define NUM_PROBE_CACHE_SLOTS 8
static struct {
EGLint keys[NUM_PROBE_CACHE_SLOTS];
const void *values[NUM_PROBE_CACHE_SLOTS];
} _eglProbeCache;
/**
* Open the named driver and find its bootstrap function: _eglMain().
*/
@ -569,3 +576,44 @@ _eglFindAPIs(void)
return mask;
}
/**
* Set the probe cache at the given key.
*
* A key, instead of a _EGLDriver, is used to allow the probe cache to be share
* by multiple drivers.
*/
void
_eglSetProbeCache(EGLint key, const void *val)
{
EGLint idx;
for (idx = 0; idx < NUM_PROBE_CACHE_SLOTS; idx++) {
if (!_eglProbeCache.keys[idx] || _eglProbeCache.keys[idx] == key)
break;
}
assert(key > 0);
assert(idx < NUM_PROBE_CACHE_SLOTS);
_eglProbeCache.keys[idx] = key;
_eglProbeCache.values[idx] = val;
}
/**
* Return the probe cache at the given key.
*/
const void *
_eglGetProbeCache(EGLint key)
{
EGLint idx;
for (idx = 0; idx < NUM_PROBE_CACHE_SLOTS; idx++) {
if (!_eglProbeCache.keys[idx] || _eglProbeCache.keys[idx] == key)
break;
}
return (idx < NUM_PROBE_CACHE_SLOTS && _eglProbeCache.keys[idx] == key) ?
_eglProbeCache.values[idx] : NULL;
}

View File

@ -66,4 +66,12 @@ PUBLIC EGLint
_eglFindAPIs(void);
PUBLIC void
_eglSetProbeCache(EGLint key, const void *val);
PUBLIC const void *
_eglGetProbeCache(EGLint key);
#endif /* EGLDRIVER_INCLUDED */