diff options
Diffstat (limited to 'src/gallium/state_trackers/glx/xlib')
-rw-r--r-- | src/gallium/state_trackers/glx/xlib/glx_api.c | 21 | ||||
-rw-r--r-- | src/gallium/state_trackers/glx/xlib/xm_api.c | 54 |
2 files changed, 28 insertions, 47 deletions
diff --git a/src/gallium/state_trackers/glx/xlib/glx_api.c b/src/gallium/state_trackers/glx/xlib/glx_api.c index 748efea8649..b9ad7bebe30 100644 --- a/src/gallium/state_trackers/glx/xlib/glx_api.c +++ b/src/gallium/state_trackers/glx/xlib/glx_api.c @@ -191,6 +191,9 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo, GLint i; GLboolean comparePointers; + if (!rgbFlag) + return NULL; + if (dbFlag) { /* Check if the MESA_BACK_BUFFER env var is set */ char *backbuffer = getenv("MESA_BACK_BUFFER"); @@ -234,7 +237,6 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo, && v->mesa_visual.numAuxBuffers == numAuxBuffers && v->mesa_visual.samples == num_samples && v->ximage_flag == ximageFlag - && v->mesa_visual.rgbMode == rgbFlag && v->mesa_visual.doubleBufferMode == dbFlag && v->mesa_visual.stereoMode == stereoFlag && (v->mesa_visual.alphaBits > 0) == alphaFlag @@ -1522,12 +1524,7 @@ get_config( XMesaVisual xmvis, int attrib, int *value, GLboolean fbconfig ) case GLX_RGBA: if (fbconfig) return GLX_BAD_ATTRIBUTE; - if (xmvis->mesa_visual.rgbMode) { - *value = True; - } - else { - *value = False; - } + *value = True; return 0; case GLX_DOUBLEBUFFER: *value = (int) xmvis->mesa_visual.doubleBufferMode; @@ -1639,10 +1636,7 @@ get_config( XMesaVisual xmvis, int attrib, int *value, GLboolean fbconfig ) case GLX_RENDER_TYPE_SGIX: if (!fbconfig) return GLX_BAD_ATTRIBUTE; - if (xmvis->mesa_visual.rgbMode) - *value = GLX_RGBA_BIT; - else - *value = GLX_COLOR_INDEX_BIT; + *value = GLX_RGBA_BIT; break; case GLX_X_RENDERABLE_SGIX: if (!fbconfig) @@ -2222,10 +2216,7 @@ glXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value ) *value = xmctx->xm_visual->visinfo->visualid; break; case GLX_RENDER_TYPE: - if (xmctx->xm_visual->mesa_visual.rgbMode) - *value = GLX_RGBA_TYPE; - else - *value = GLX_COLOR_INDEX_TYPE; + *value = GLX_RGBA_TYPE; break; case GLX_SCREEN: *value = 0; diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c b/src/gallium/state_trackers/glx/xlib/xm_api.c index 3e01922c982..4351cd6e622 100644 --- a/src/gallium/state_trackers/glx/xlib/xm_api.c +++ b/src/gallium/state_trackers/glx/xlib/xm_api.c @@ -636,15 +636,13 @@ xmesa_free_buffer(XMesaBuffer buffer) * initializing the context's visual and buffer information. * \param v the XMesaVisual to initialize * \param b the XMesaBuffer to initialize (may be NULL) - * \param rgb_flag TRUE = RGBA mode, FALSE = color index mode * \param window the window/pixmap we're rendering into * \param cmap the colormap associated with the window/pixmap * \return GL_TRUE=success, GL_FALSE=failure */ static GLboolean initialize_visual_and_buffer(XMesaVisual v, XMesaBuffer b, - GLboolean rgb_flag, Drawable window, - Colormap cmap) + Drawable window, Colormap cmap) { assert(!b || b->xm_visual == v); @@ -652,28 +650,22 @@ initialize_visual_and_buffer(XMesaVisual v, XMesaBuffer b, v->BitsPerPixel = bits_per_pixel(v); assert(v->BitsPerPixel > 0); - if (rgb_flag == GL_FALSE) { - /* COLOR-INDEXED WINDOW: not supported*/ + /* RGB WINDOW: + * We support RGB rendering into almost any kind of visual. + */ + const int xclass = v->visualType; + if (xclass != GLX_TRUE_COLOR && xclass != GLX_DIRECT_COLOR) { + _mesa_warning(NULL, + "XMesa: RGB mode rendering not supported in given visual.\n"); return GL_FALSE; } - else { - /* RGB WINDOW: - * We support RGB rendering into almost any kind of visual. - */ - const int xclass = v->visualType; - if (xclass != GLX_TRUE_COLOR && xclass != GLX_DIRECT_COLOR) { - _mesa_warning(NULL, - "XMesa: RGB mode rendering not supported in given visual.\n"); - return GL_FALSE; - } - if (v->BitsPerPixel == 32) { - /* We use XImages for all front/back buffers. If an X Window or - * X Pixmap is 32bpp, there's no guarantee that the alpha channel - * will be preserved. For XImages we're in luck. - */ - v->mesa_visual.alphaBits = 8; - } + if (v->BitsPerPixel == 32) { + /* We use XImages for all front/back buffers. If an X Window or + * X Pixmap is 32bpp, there's no guarantee that the alpha channel + * will be preserved. For XImages we're in luck. + */ + v->mesa_visual.alphaBits = 8; } /* @@ -774,6 +766,9 @@ XMesaVisual XMesaCreateVisual( Display *display, if (!xmdpy) return NULL; + if (!rgb_flag) + return NULL; + /* For debugging only */ if (getenv("MESA_XSYNC")) { /* This makes debugging X easier. @@ -820,7 +815,7 @@ XMesaVisual XMesaCreateVisual( Display *display, if (alpha_flag) v->mesa_visual.alphaBits = 8; - (void) initialize_visual_and_buffer( v, NULL, rgb_flag, 0, 0 ); + (void) initialize_visual_and_buffer( v, NULL, 0, 0 ); { const int xclass = v->visualType; @@ -848,7 +843,6 @@ XMesaVisual XMesaCreateVisual( Display *display, { struct gl_config *vis = &v->mesa_visual; - vis->rgbMode = GL_TRUE; vis->doubleBufferMode = db_flag; vis->stereoMode = stereo_flag; @@ -1109,8 +1103,7 @@ XMesaCreateWindowBuffer(XMesaVisual v, Window w) if (!b) return NULL; - if (!initialize_visual_and_buffer( v, b, v->mesa_visual.rgbMode, - (Drawable) w, cmap )) { + if (!initialize_visual_and_buffer( v, b, (Drawable) w, cmap )) { xmesa_free_buffer(b); return NULL; } @@ -1140,8 +1133,7 @@ XMesaCreatePixmapBuffer(XMesaVisual v, Pixmap p, Colormap cmap) if (!b) return NULL; - if (!initialize_visual_and_buffer(v, b, v->mesa_visual.rgbMode, - (Drawable) p, cmap)) { + if (!initialize_visual_and_buffer(v, b, (Drawable) p, cmap)) { xmesa_free_buffer(b); return NULL; } @@ -1199,8 +1191,7 @@ XMesaCreatePixmapTextureBuffer(XMesaVisual v, Pixmap p, b->TextureFormat = format; b->TextureMipmap = mipmap; - if (!initialize_visual_and_buffer(v, b, v->mesa_visual.rgbMode, - (Drawable) p, cmap)) { + if (!initialize_visual_and_buffer(v, b, (Drawable) p, cmap)) { xmesa_free_buffer(b); return NULL; } @@ -1229,8 +1220,7 @@ XMesaCreatePBuffer(XMesaVisual v, Colormap cmap, if (!b) return NULL; - if (!initialize_visual_and_buffer(v, b, v->mesa_visual.rgbMode, - drawable, cmap)) { + if (!initialize_visual_and_buffer(v, b, drawable, cmap)) { xmesa_free_buffer(b); return NULL; } |