diff --git a/glx/glxcmds.c b/glx/glxcmds.c index 3c4209af5..481dfb9e3 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -1104,7 +1104,10 @@ DoGetFBConfigs(__GLXclientState * cl, unsigned screen) WRITE_PAIR(GLX_VISUAL_ID, modes->visualID); WRITE_PAIR(GLX_FBCONFIG_ID, modes->fbconfigID); - WRITE_PAIR(GLX_X_RENDERABLE, GL_TRUE); + WRITE_PAIR(GLX_X_RENDERABLE, + (modes->drawableType & (GLX_WINDOW_BIT | GLX_PIXMAP_BIT) + ? GL_TRUE + : GL_FALSE)); WRITE_PAIR(GLX_RGBA, (modes->renderType & GLX_RGBA_BIT) ? GL_TRUE : GL_FALSE); diff --git a/glx/glxdri2.c b/glx/glxdri2.c index 3a95a8f8c..c2dab90d0 100644 --- a/glx/glxdri2.c +++ b/glx/glxdri2.c @@ -994,10 +994,8 @@ __glXDRIscreenProbe(ScreenPtr pScreen) initializeExtensions(&screen->base); - screen->base.fbconfigs = glxConvertConfigs(screen->core, screen->driConfigs, - GLX_WINDOW_BIT | - GLX_PIXMAP_BIT | - GLX_PBUFFER_BIT); + screen->base.fbconfigs = glxConvertConfigs(screen->core, + screen->driConfigs); options = xnfalloc(sizeof(GLXOptions)); memcpy(options, GLXOptions, sizeof(GLXOptions)); diff --git a/glx/glxdricommon.c b/glx/glxdricommon.c index 62cce131d..f6c6fcdf2 100644 --- a/glx/glxdricommon.c +++ b/glx/glxdricommon.c @@ -122,14 +122,28 @@ setScalar(__GLXconfig * config, unsigned int attrib, unsigned int value) } } +static Bool +render_type_is_pbuffer_only(unsigned renderType) +{ + /* The GL_ARB_color_buffer_float spec says: + * + * "Note that floating point rendering is only supported for + * GLXPbuffer drawables. The GLX_DRAWABLE_TYPE attribute of the + * GLXFBConfig must have the GLX_PBUFFER_BIT bit set and the + * GLX_RENDER_TYPE attribute must have the GLX_RGBA_FLOAT_BIT set." + */ + return !!(renderType & (__DRI_ATTRIB_UNSIGNED_FLOAT_BIT + | __DRI_ATTRIB_FLOAT_BIT)); +} + static __GLXconfig * createModeFromConfig(const __DRIcoreExtension * core, const __DRIconfig * driConfig, - unsigned int visualType, unsigned int drawableType) + unsigned int visualType) { __GLXDRIconfig *config; GLint renderType = 0; - unsigned int attrib, value; + unsigned int attrib, value, drawableType = GLX_PBUFFER_BIT; int i; config = calloc(1, sizeof *config); @@ -173,8 +187,10 @@ createModeFromConfig(const __DRIcoreExtension * core, } } + if (!render_type_is_pbuffer_only(renderType)) + drawableType |= GLX_WINDOW_BIT | GLX_PIXMAP_BIT; + config->config.next = NULL; - config->config.xRenderable = GL_TRUE; config->config.visualType = visualType; config->config.renderType = renderType; config->config.drawableType = drawableType; @@ -183,23 +199,9 @@ createModeFromConfig(const __DRIcoreExtension * core, return &config->config; } -static Bool -render_type_is_pbuffer_only(unsigned renderType) -{ - /* The GL_ARB_color_buffer_float spec says: - * - * "Note that floating point rendering is only supported for - * GLXPbuffer drawables. The GLX_DRAWABLE_TYPE attribute of the - * GLXFBConfig must have the GLX_PBUFFER_BIT bit set and the - * GLX_RENDER_TYPE attribute must have the GLX_RGBA_FLOAT_BIT set." - */ - return !!(renderType & (__DRI_ATTRIB_UNSIGNED_FLOAT_BIT - | __DRI_ATTRIB_FLOAT_BIT)); -} - __GLXconfig * glxConvertConfigs(const __DRIcoreExtension * core, - const __DRIconfig ** configs, unsigned int drawableType) + const __DRIconfig ** configs) { __GLXconfig head, *tail; int i; @@ -208,17 +210,7 @@ glxConvertConfigs(const __DRIcoreExtension * core, head.next = NULL; for (i = 0; configs[i]; i++) { - unsigned renderType = 0; - if (core->getConfigAttrib(configs[i], __DRI_ATTRIB_RENDER_TYPE, - &renderType)) { - if (render_type_is_pbuffer_only(renderType) && - !(drawableType & GLX_PBUFFER_BIT)) - continue; - } - /* Add all the others */ - tail->next = createModeFromConfig(core, - configs[i], GLX_TRUE_COLOR, - drawableType); + tail->next = createModeFromConfig(core, configs[i], GLX_TRUE_COLOR); if (tail->next == NULL) break; @@ -226,17 +218,7 @@ glxConvertConfigs(const __DRIcoreExtension * core, } for (i = 0; configs[i]; i++) { - unsigned int renderType = 0; - if (core->getConfigAttrib(configs[i], __DRI_ATTRIB_RENDER_TYPE, - &renderType)) { - if (render_type_is_pbuffer_only(renderType) && - !(drawableType & GLX_PBUFFER_BIT)) - continue; - } - /* Add all the others */ - tail->next = createModeFromConfig(core, - configs[i], GLX_DIRECT_COLOR, - drawableType); + tail->next = createModeFromConfig(core, configs[i], GLX_DIRECT_COLOR); if (tail->next == NULL) break; diff --git a/glx/glxdricommon.h b/glx/glxdricommon.h index f4fcf009e..2db46dc07 100644 --- a/glx/glxdricommon.h +++ b/glx/glxdricommon.h @@ -33,8 +33,7 @@ struct __GLXDRIconfig { }; __GLXconfig *glxConvertConfigs(const __DRIcoreExtension * core, - const __DRIconfig ** configs, - unsigned int drawableType); + const __DRIconfig ** configs); extern const __DRIsystemTimeExtension systemTimeExtension; diff --git a/glx/glxdriswrast.c b/glx/glxdriswrast.c index be3252704..ac8bda869 100644 --- a/glx/glxdriswrast.c +++ b/glx/glxdriswrast.c @@ -482,10 +482,8 @@ __glXDRIscreenProbe(ScreenPtr pScreen) initializeExtensions(&screen->base); - screen->base.fbconfigs = glxConvertConfigs(screen->core, screen->driConfigs, - GLX_WINDOW_BIT | - GLX_PIXMAP_BIT | - GLX_PBUFFER_BIT); + screen->base.fbconfigs = glxConvertConfigs(screen->core, + screen->driConfigs); #if !defined(XQUARTZ) && !defined(WIN32) screen->base.glvnd = strdup("mesa"); diff --git a/glx/glxscreens.h b/glx/glxscreens.h index 15196fa43..0f9a2b9af 100644 --- a/glx/glxscreens.h +++ b/glx/glxscreens.h @@ -78,7 +78,6 @@ struct __GLXconfig { /* SGIX_fbconfig / GLX 1.3 */ GLint drawableType; GLint renderType; - GLint xRenderable; GLint fbconfigID; /* SGIX_pbuffer / GLX 1.3 */ diff --git a/hw/xquartz/GL/glcontextmodes.c b/hw/xquartz/GL/glcontextmodes.c index 1ce3570c8..17e7a5874 100644 --- a/hw/xquartz/GL/glcontextmodes.c +++ b/hw/xquartz/GL/glcontextmodes.c @@ -136,7 +136,6 @@ _gl_copy_visual_to_context_mode(__GLcontextModes * mode, mode->visualID = config->vid; mode->visualType = _gl_convert_from_x_visual_type(config->class); - mode->xRenderable = GL_TRUE; mode->fbconfigID = config->vid; mode->drawableType = GLX_WINDOW_BIT | GLX_PIXMAP_BIT; diff --git a/hw/xquartz/GL/visualConfigs.c b/hw/xquartz/GL/visualConfigs.c index 687bf80d8..ce68663cd 100644 --- a/hw/xquartz/GL/visualConfigs.c +++ b/hw/xquartz/GL/visualConfigs.c @@ -229,7 +229,6 @@ __GLXconfig *__glXAquaCreateVisualConfigs(int *numConfigsPtr, int screenNumber) /* SGIX_fbconfig / GLX 1.3 */ c->drawableType = GLX_WINDOW_BIT | GLX_PIXMAP_BIT | GLX_PBUFFER_BIT; c->renderType = GLX_RGBA_BIT; - c->xRenderable = GL_TRUE; c->fbconfigID = -1; /* SGIX_pbuffer / GLX 1.3 */ diff --git a/hw/xwin/glx/indirect.c b/hw/xwin/glx/indirect.c index 26832e6ea..918425245 100644 --- a/hw/xwin/glx/indirect.c +++ b/hw/xwin/glx/indirect.c @@ -1903,7 +1903,6 @@ glxWinCreateConfigs(HDC hdc, glxWinScreen * screen) c->base.renderType = GLX_RGBA_BIT; } - c->base.xRenderable = GL_TRUE; c->base.fbconfigID = -1; // will be set by __glXScreenInit() /* SGIX_pbuffer / GLX 1.3 */ @@ -2263,7 +2262,6 @@ glxWinCreateConfigsExt(HDC hdc, glxWinScreen * screen) c->base.renderType = GLX_RGBA_BIT; } - c->base.xRenderable = GL_TRUE; c->base.fbconfigID = -1; // will be set by __glXScreenInit() /* SGIX_pbuffer / GLX 1.3 */