summaryrefslogtreecommitdiffstats
path: root/src/egl/main
diff options
context:
space:
mode:
authorChia-I Wu <olv@lunarg.com>2011-01-13 04:40:38 +0800
committerChia-I Wu <olv@lunarg.com>2011-01-13 18:15:45 +0800
commita22a332fc7cc54d4d0973dcd21a90159cc51de1a (patch)
treeb27bd01fcc099bfb7623e3fd1e1ef3016b3ef399 /src/egl/main
parent655e4598927728a663f4cfcd6babdf7e5ad83f77 (diff)
downloadexternal_mesa3d-a22a332fc7cc54d4d0973dcd21a90159cc51de1a.zip
external_mesa3d-a22a332fc7cc54d4d0973dcd21a90159cc51de1a.tar.gz
external_mesa3d-a22a332fc7cc54d4d0973dcd21a90159cc51de1a.tar.bz2
egl: Improve driver selection.
The idea is to be able to match a driver using the following order try egl_gallium with hw renderer try egl_dri2 try egl_gallium with sw renderer try egl_glx given the module list egl_gallium egl_dri2 egl_glx For that, UseFallback initialization option is added. The module list is matched twice: with the option unset and with the option set. In the first pass, egl_gallium skips its sw renderer and egl_glx rejects to initialize since UseFallback is not set. In the second pass, egl_gallium skips its hw renderer and egl_dri2 rejects to initialize since UseFallback is set. The process stops at the first driver that initializes the display.
Diffstat (limited to 'src/egl/main')
-rw-r--r--src/egl/main/egldisplay.h1
-rw-r--r--src/egl/main/egldriver.c5
2 files changed, 6 insertions, 0 deletions
diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h
index b42760b..dbc5d32 100644
--- a/src/egl/main/egldisplay.h
+++ b/src/egl/main/egldisplay.h
@@ -93,6 +93,7 @@ struct _egl_display
/* options that affect how the driver initializes the display */
struct {
EGLBoolean TestOnly; /**< Driver should not set fields when true */
+ EGLBoolean UseFallback; /**< Use fallback driver (sw or less features) */
} Options;
/* these fields are set by the driver during init */
diff --git a/src/egl/main/egldriver.c b/src/egl/main/egldriver.c
index 7baa24f..e133c22 100644
--- a/src/egl/main/egldriver.c
+++ b/src/egl/main/egldriver.c
@@ -585,8 +585,13 @@ _eglMatchDriver(_EGLDisplay *dpy, EGLBoolean test_only)
/* set options */
dpy->Options.TestOnly = test_only;
+ dpy->Options.UseFallback = EGL_FALSE;
best_drv = _eglMatchAndInitialize(dpy);
+ if (!best_drv) {
+ dpy->Options.UseFallback = EGL_TRUE;
+ best_drv = _eglMatchAndInitialize(dpy);
+ }
_eglUnlockMutex(&_eglModuleMutex);