On Fri, Nov 25, 2011 at 6:58 PM, Beren Minor <beren.mi...@gmail.com> wrote: > GLX functions are sometimes directly available in the current binary. In such > cases, we do not need any alternate library loaded using dlopen. Otherwise, > dlopen may find the wrong libGL library and get functions that conflicts with > the current loaded ones. > > For example, on Debian Sid with nvidia binary drivers, using mesa's libEGL > with > GLX driver leads to wrong glXGetFBConfigs symbol loaded (or loaded twice?), > which leads to "GLX: failed to create any config" error message as the > glXGetFBConfigs symbol seems to return garbage. If the binary is linked with > nvidia's libGL, the GLX symbols are already available. > Without this patch, convert_fbconfig (src/egl/drivers/glx/egl_glx.c:233) fails > for every config found, after glXGetFBConfigAttrib(... GLX_RENDER_TYPE, ...) > call, as the value returned has GLX_COLOR_INDEX_BIT and not GLX_RGBA_BIT. Committed, thanks. I made one change to make sure "handle" is initialized.
> --- > src/egl/drivers/glx/egl_glx.c | 21 +++++++++++++-------- > 1 files changed, 13 insertions(+), 8 deletions(-) > > diff --git a/src/egl/drivers/glx/egl_glx.c b/src/egl/drivers/glx/egl_glx.c > index 9082fb3..4836895 100644 > --- a/src/egl/drivers/glx/egl_glx.c > +++ b/src/egl/drivers/glx/egl_glx.c > @@ -1071,15 +1071,20 @@ GLX_Load(_EGLDriver *drv) > struct GLX_egl_driver *GLX_drv = GLX_egl_driver(drv); > void *handle; > > - handle = dlopen("libGL.so", RTLD_LAZY | RTLD_LOCAL); > - if (!handle) > - goto fail; > - > - GLX_drv->glXGetProcAddress = dlsym(handle, "glXGetProcAddress"); > - if (!GLX_drv->glXGetProcAddress) > - GLX_drv->glXGetProcAddress = dlsym(handle, "glXGetProcAddressARB"); > + GLX_drv->glXGetProcAddress = dlsym(RTLD_DEFAULT, "glXGetProcAddress"); > if (!GLX_drv->glXGetProcAddress) > - goto fail; > + GLX_drv->glXGetProcAddress = dlsym(RTLD_DEFAULT, > "glXGetProcAddressARB"); > + if (!GLX_drv->glXGetProcAddress) { > + handle = dlopen("libGL.so", RTLD_LAZY | RTLD_LOCAL); > + if (!handle) > + goto fail; > + > + GLX_drv->glXGetProcAddress = dlsym(handle, "glXGetProcAddress"); > + if (!GLX_drv->glXGetProcAddress) > + GLX_drv->glXGetProcAddress = dlsym(handle, "glXGetProcAddressARB"); > + if (!GLX_drv->glXGetProcAddress) > + goto fail; > + } > > #define GET_PROC(proc_type, proc_name, check) \ > do { \ > -- > 1.7.7.1 > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > -- o...@lunarg.com _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev