summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChia-I Wu <olvaffe@gmail.com>2010-01-20 14:35:50 +0800
committerChia-I Wu <olvaffe@gmail.com>2010-01-20 17:44:12 +0800
commitc5766c4ae39b4190965abd65eaf67b478a9ad028 (patch)
treeee259fc4fff9b8462aa586cea85ccf08d57e1114 /src
parentcf22fd5e5b13ccdb02ba0368ea722ede3bbc6de0 (diff)
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.
Diffstat (limited to 'src')
-rw-r--r--src/egl/main/egldriver.c48
-rw-r--r--src/egl/main/egldriver.h8
2 files changed, 56 insertions, 0 deletions
diff --git a/src/egl/main/egldriver.c b/src/egl/main/egldriver.c
index ef1c366b30..0574f83f45 100644
--- a/src/egl/main/egldriver.c
+++ b/src/egl/main/egldriver.c
@@ -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;
+}
diff --git a/src/egl/main/egldriver.h b/src/egl/main/egldriver.h
index 808b1c3fb7..d9d61297c1 100644
--- a/src/egl/main/egldriver.h
+++ b/src/egl/main/egldriver.h
@@ -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 */