[Mesa-dev] mesa/llvmpipe select alpha visual
Thomas Søndergaard
thomas.sondergaard at karoshealth.com
Thu Sep 29 23:49:07 UTC 2016
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:
Visual ID: 23 depth=32 class=TrueColor, type=(none)
bufferSize=32 level=0 renderType=rgba doubleBuffer=1 stereo=0
rgba: redSize=8 greenSize=8 blueSize=8 alphaSize=8 float=N sRGB=N
auxBuffers=0 depthSize=24 stencilSize=8
accum: redSize=16 greenSize=16 blueSize=16 alphaSize=0
multiSample=0 multiSampleBuffers=0
visualCaveat=None
My application uses Qt-5 and if I modify it to not set
GLX_RED_SIZE=1
GLX_GREEN_SIZE=1
GLX_BLUE_SIZE=1
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.
Visual ID: 21 depth=24 class=TrueColor, type=(none)
bufferSize=24 level=0 renderType=rgba doubleBuffer=1 stereo=0
rgba: redSize=8 greenSize=8 blueSize=8 alphaSize=8 float=N sRGB=N
auxBuffers=0 depthSize=24 stencilSize=8
accum: redSize=16 greenSize=16 blueSize=16 alphaSize=16
multiSample=0 multiSampleBuffers=0
visualCaveat=None
Opaque.
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?
Why does it do that?
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.
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?
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.
That was a long mail - if you got this far, I thank you for your patience
:-)
Thomas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160930/4601bd7a/attachment.html>
More information about the mesa-dev
mailing list