<div dir="ltr"><div><div><div><div>My application window becomes transparent when I run my application with llvmpipe by setting LD_LIBRARY_PATH instead of the proprietary NVIDIA driver that I otherwise use. I've come to the understanding, after digging into the code for a few hours, that mesa selects this Visual even though my application hasn't asked for an alpha channel:<br><br>Visual ID: 23  depth=32  class=TrueColor, type=(none)<br>    bufferSize=32 level=0 renderType=rgba doubleBuffer=1 stereo=0<br>    rgba: redSize=8 greenSize=8 blueSize=8 alphaSize=8 float=N sRGB=N<br>    auxBuffers=0 depthSize=24 stencilSize=8<br>    accum: redSize=16 greenSize=16 blueSize=16 alphaSize=0<br>    multiSample=0  multiSampleBuffers=0<br>    visualCaveat=None<br><br></div>My application uses Qt-5 and if I modify it to not set<br><br></div>GLX_RED_SIZE=1<br></div>GLX_GREEN_SIZE=1<br></div>GLX_BLUE_SIZE=1<br><br clear="all"><div><div><div><div><div><div><div><div><div><div>Then I get the following visual instead and my window is no longer blended with the background based on the alpha values in the framebuffer.<br><br>Visual ID: 21  depth=24  class=TrueColor, type=(none)<br>    bufferSize=24 level=0 renderType=rgba doubleBuffer=1 stereo=0<br>    rgba: redSize=8 greenSize=8 blueSize=8 alphaSize=8 float=N sRGB=N<br>    auxBuffers=0 depthSize=24 stencilSize=8<br>    accum: redSize=16 greenSize=16 blueSize=16 alphaSize=16<br>    multiSample=0  multiSampleBuffers=0<br>    visualCaveat=None<br>    Opaque.<br><br></div><div>I've digged a little in the mesa code and I can see that if either of GLX_RED_SIZE, GLX_GREEN_SIZE and GLX_BLUE_SIZE is set then choose_x_visual() in mesa/src/gallium/state_trackers/glx/xlib/glx_api.c starts the search for a visual from the deep end, where-as if none of them are set it starts from the shallow end when searching for visuals?<br><br></div><div>Why does it do that?<br><br></div><div>The consequence is that I get a 32-bit visual visual with an alpha channel, even though I haven't asked for an alpha channel.<br><br></div><div>I've found out that I can set XLIB_SKIP_ARGB_VISUALS=1 as a workaround, but it would be nice with a real fix. Is there anything I can do to help?<br><br></div><div>Would it make sense to simply always search from the shallow end? Or to only search from 24-bit and down if GLX_ALPHA_SIZE is 0? I saw a comment in rc/gallium/state_trackers/glx/xlib/glx_api.cc that mesa is limited to 8-bit per channel, so there doesn't seem to be any point in looking for a visual with higher depth if we don't want alpha.<br><br></div><div>That was a long mail - if you got this far, I thank you for your patience :-)<br><br></div><div>Thomas<br></div></div></div></div></div></div></div></div></div></div></div>