diff options
author | Chia-I Wu <olv@lunarg.com> | 2011-01-13 04:40:38 +0800 |
---|---|---|
committer | Chia-I Wu <olv@lunarg.com> | 2011-01-13 18:15:45 +0800 |
commit | a22a332fc7cc54d4d0973dcd21a90159cc51de1a (patch) | |
tree | b27bd01fcc099bfb7623e3fd1e1ef3016b3ef399 /src/egl/main | |
parent | 655e4598927728a663f4cfcd6babdf7e5ad83f77 (diff) | |
download | external_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.h | 1 | ||||
-rw-r--r-- | src/egl/main/egldriver.c | 5 |
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); |