Hello all, I'm attempting to port our GLX based code to EGL/X11, as a first step towards being ready for Wayland, and I've hit a snag. We use an X11 compositor to get translucent windows blending one atop the other, and I carefully select a 32 bit RGBA visual (ID 0x64 on my system) instead of a 24 bit RGB visual (IDs 0x21 and 0x22 on my system) to make this work.
I've got the code working on EGL/X11, but I can't find an EGLConfig that's based on visual 0x64 - they're all based on 0x21 (TrueColor) and 0x22 (DirectColor). Looking at http://cgit.freedesktop.org/mesa/mesa/tree/src/egl/drivers/dri2/platform_x11.c#n671 suggests this is deliberate. I've tried the stupid patch below, but that makes all the TrueColor EGLConfigs into the RGBA visual 0x64, which is clearly not wanted based on the comment. How should I proceed here? I can obviously go back to GLX, and migrate to EGL when I migrate to Wayland, but I'd prefer to move to EGL now while I'm still X11 based. diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c index a518db1..18fb81d 100644 --- a/src/egl/drivers/dri2/platform_x11.c +++ b/src/egl/drivers/dri2/platform_x11.c @@ -649,6 +649,37 @@ dri2_add_configs_for_visuals(struct dri2_egl_display *dri2_dpy, EGL_SWAP_BEHAVIOR_PRESERVED_BIT; while (d.rem > 0) { + if (d.data->depth != 32) { + xcb_depth_next(&d); + continue; + } + EGLBoolean class_added[6] = { 0, }; + + visuals = xcb_depth_visuals(d.data); + for (i = 0; i < xcb_depth_visuals_length(d.data); i++) { + if (class_added[visuals[i]._class]) + continue; + + class_added[visuals[i]._class] = EGL_TRUE; + for (j = 0; dri2_dpy->driver_configs[j]; j++) { + config_attrs[1] = visuals[i].visual_id; + config_attrs[3] = visuals[i]._class; + + rgba_masks[0] = visuals[i].red_mask; + rgba_masks[1] = visuals[i].green_mask; + rgba_masks[2] = visuals[i].blue_mask; + rgba_masks[3] = + ~(rgba_masks[0] | rgba_masks[1] | rgba_masks[2]); + dri2_add_config(disp, dri2_dpy->driver_configs[j], id++, + surface_type, config_attrs, rgba_masks); + } + } + + xcb_depth_next(&d); + } + + d = xcb_screen_allowed_depths_iterator(s.data); + while (d.rem > 0) { EGLBoolean class_added[6] = { 0, }; visuals = xcb_depth_visuals(d.data); -- Simon Farnsworth Software Engineer ONELAN Ltd http://www.onelan.com
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
