diff options
-rw-r--r-- | src/egl/drivers/dri2/egl_dri2.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index ae842d7a1bb..b7749196c5d 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -195,7 +195,14 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id, for (i = 0; attr_list[i] != EGL_NONE; i += 2) _eglSetConfigKey(&base, attr_list[i], attr_list[i+1]); - if (depth > 0 && depth != base.BufferSize) + /* Allow a 24-bit RGB visual to match a 32-bit RGBA EGLConfig. Otherwise + * it will only match a 32-bit RGBA visual. On a composited window manager + * on X11, this will make all of the EGLConfigs with destination alpha get + * blended by the compositor. This is probably not what the application + * wants... especially on drivers that only have 32-bit RGBA EGLConfigs! + */ + if (depth > 0 && depth != base.BufferSize + && !(depth == 24 && base.BufferSize == 32)) return NULL; if (rgba_masks && memcmp(rgba_masks, dri_masks, sizeof(dri_masks))) |