libGL tries using direct mode when it should use indirect (only tries indirect if forced)
Submitted by Jeremy Huddleston Sequoia
Assigned to mes..@..op.org
Description
If I ssh to a remote box, and I try to run 'glxinfo' on the remote system, it fails unless I explicitly force indirect mode via LIBGL_ALWAYS_INDIRECT.
The problem is that without LIBGL_ALWAYS_INDIRECT set, glx_direct gets set to true in glxext.c:
glx_direct = (getenv("LIBGL_ALWAYS_INDIRECT") == NULL); glx_accel = (getenv("LIBGL_ALWAYS_SOFTWARE") == NULL);
/* ** Initialize the direct rendering per display data and functions. ** Note: This must be done before calling any other DRI routines ** (e.g., those called in AllocAndFetchScreenConfigs). */ if (glx_direct && glx_accel) { dpyPriv->dri2Display = dri2CreateDisplay(dpy); dpyPriv->driDisplay = driCreateDisplay(dpy); } if (glx_direct) dpyPriv->driswDisplay = driswCreateDisplay(dpy);
Then in AllocAndFetchScreenConfigs(), we get our visuals and fbconfigs via: getVisualConfigs(dpy, priv, i); getFBConfigs(dpy, priv, i);
but then they get thrashed by: if (psc->driScreen == NULL && priv->driswDisplay) psc->driScreen = (*priv->driswDisplay->createScreen) (psc, i, priv);
which is driCreateScreen in drisw_glx.c and ends up doing: psc->configs = driConvertConfigs(psc->core, psc->configs, driver_configs);
which results in psc->configs being set to NULL which is causing GetGLXPrivScreenConfig to return GLX_BAD_VISUAL and thus causing glxinfo to bail.
Version: 7.5