X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fegl%2Fmain%2Fegldriver.c;h=526de02e53b66dc26eff6400533ad1c84008ac8a;hb=863872e1418ec94f840ffdb5d7b5e3aaac07d8de;hp=b20652ed8c1d0182b5d5f17e96702f78b01c481e;hpb=a96749b13ca9446155964ddd32379251b822f6f8;p=mesa.git diff --git a/src/egl/main/egldriver.c b/src/egl/main/egldriver.c index b20652ed8c1..526de02e53b 100644 --- a/src/egl/main/egldriver.c +++ b/src/egl/main/egldriver.c @@ -56,9 +56,10 @@ _eglGetDriver(void) if (!_eglDriver) { _eglDriver = calloc(1, sizeof(*_eglDriver)); - if (!_eglDriver) + if (!_eglDriver) { + mtx_unlock(&_eglModuleMutex); return NULL; - _eglInitDriverFallbacks(_eglDriver); + } _eglInitDriver(_eglDriver); } @@ -68,10 +69,10 @@ _eglGetDriver(void) } static _EGLDriver * -_eglMatchAndInitialize(_EGLDisplay *dpy) +_eglMatchAndInitialize(_EGLDisplay *disp) { if (_eglGetDriver()) - if (_eglDriver->API.Initialize(_eglDriver, dpy)) + if (_eglDriver->API.Initialize(_eglDriver, disp)) return _eglDriver; return NULL; @@ -82,25 +83,27 @@ _eglMatchAndInitialize(_EGLDisplay *dpy) * driver that can initialize the display. */ _EGLDriver * -_eglMatchDriver(_EGLDisplay *dpy) +_eglMatchDriver(_EGLDisplay *disp) { _EGLDriver *best_drv; - assert(!dpy->Initialized); + assert(!disp->Initialized); /* set options */ - dpy->Options.ForceSoftware = + disp->Options.ForceSoftware = env_var_as_boolean("LIBGL_ALWAYS_SOFTWARE", false); + if (disp->Options.ForceSoftware) + _eglLog(_EGL_DEBUG, "Found 'LIBGL_ALWAYS_SOFTWARE' set, will use a CPU renderer"); - best_drv = _eglMatchAndInitialize(dpy); - if (!best_drv && !dpy->Options.ForceSoftware) { - dpy->Options.ForceSoftware = EGL_TRUE; - best_drv = _eglMatchAndInitialize(dpy); + best_drv = _eglMatchAndInitialize(disp); + if (!best_drv && !disp->Options.ForceSoftware) { + disp->Options.ForceSoftware = EGL_TRUE; + best_drv = _eglMatchAndInitialize(disp); } if (best_drv) { - dpy->Driver = best_drv; - dpy->Initialized = EGL_TRUE; + disp->Driver = best_drv; + disp->Initialized = EGL_TRUE; } return best_drv; @@ -109,7 +112,7 @@ _eglMatchDriver(_EGLDisplay *dpy) __eglMustCastToProperFunctionPointerType _eglGetDriverProc(const char *procname) { - if (_eglGetDriver()) + if (_eglGetDriver() && _eglDriver->API.GetProcAddress) return _eglDriver->API.GetProcAddress(_eglDriver, procname); return NULL;