This patch sets the correct values of renderType and drawableType in glXCreateContext and init_fbconfig_for_chooser routines. --- src/glx/glxcmds.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-)
diff --git a/src/glx/glxcmds.c b/src/glx/glxcmds.c index 51b2237..967dab3 100644 --- a/src/glx/glxcmds.c +++ b/src/glx/glxcmds.c @@ -373,7 +373,25 @@ glXCreateContext(Display * dpy, XVisualInfo * vis, return None; } - renderType = config->rgbMode ? GLX_RGBA_TYPE : GLX_COLOR_INDEX_TYPE; + /* Choose the context render type based on DRI config values. + * It is unusual to set this type from config, but we have no other choice, + * as this old API does not provide renderType parameter. */ + if (config->renderType & GLX_RGBA_FLOAT_BIT_ARB) { + renderType = GLX_RGBA_FLOAT_TYPE_ARB; + } else if (config->renderType & GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT) { + renderType = GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT; + } else if (config->renderType & GLX_RGBA_BIT) { + renderType = GLX_RGBA_TYPE; + } else if (config->renderType & GLX_COLOR_INDEX_BIT) { + renderType = GLX_COLOR_INDEX_TYPE; + } else if (config->rgbMode == GL_TRUE) { + /* If we're here, then renderType is not set correctly. + * Let's use a safeguard - any TrueColor or DirectColor mode is RGB mode */ + renderType = GLX_RGBA_TYPE; + } else { + /* Safeguard - only one option left, all non-RGB modes are indexed modes */ + renderType = GLX_COLOR_INDEX_TYPE; + } #endif return CreateContext(dpy, vis->visualid, config, shareList, allowDirect, @@ -860,12 +878,17 @@ init_fbconfig_for_chooser(struct glx_config * config, config->visualID = (XID) GLX_DONT_CARE; config->visualType = GLX_DONT_CARE; - /* glXChooseFBConfig specifies different defaults for these two than + /* glXChooseFBConfig specifies different defaults for these properties than * glXChooseVisual. */ if (fbconfig_style_tags) { config->rgbMode = GL_TRUE; config->doubleBufferMode = GLX_DONT_CARE; + /* allow any kind of drawable, including those for off-screen buffers */ + config->drawableType = 0; + } else { + /* allow configs which support on-screen drawing */ + config->drawableType = GLX_WINDOW_BIT; } config->visualRating = GLX_DONT_CARE; @@ -876,9 +899,8 @@ init_fbconfig_for_chooser(struct glx_config * config, config->transparentAlpha = GLX_DONT_CARE; config->transparentIndex = GLX_DONT_CARE; - config->drawableType = GLX_WINDOW_BIT; - config->renderType = - (config->rgbMode) ? GLX_RGBA_BIT : GLX_COLOR_INDEX_BIT; + /* Set GLX_RENDER_TYPE property to not expect any flags by default. */ + config->renderType = 0; config->xRenderable = GLX_DONT_CARE; config->fbconfigID = (GLXFBConfigID) (GLX_DONT_CARE); -- 1.7.9.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev