Xvfb DRI3 OpenGL

Henrik /KaarPoSoft henrik at kaarposoft.dk
Wed Jul 30 04:27:11 PDT 2014


Dear all,

(note: cross-posted to "xorg" and "mesa-users")

I am trying to get OpenGL to work with an Xvfb server,
but running into problems.

LIBGL_DEBUG=verbose /bin/mesa_demos/glxinfo
shows
libGL: screen 0 does not appear to be DRI3 capable
libGL error: failed to load driver: swrast
Error: couldn't find RGB GLX visual or fbconfig

However,
/bin/xdpyinfo
shows
number of extensions:    23
     [...]
     DRI3
     GLX
     [...]

So:
1) Is Xvfb supposed to be DRI3 capable?
2) How come xdpyinfo shows DRI3 extension but glxinfo barfs?
3) How to get OpenGL to work with Xvfb?

Any help would be most appreciated!

/Henrik


===== MORE INFO =====

I am developing a linux distro called KaarPux:
http://kaarpux.kaarposoft.dk/

KaarPux is usually build in a kvm.
Each package is build (make, check install) from source.

Some packages require a running X server for "make check",
so we start an Xvfb server before building.
See line 150-166 of
http://sourceforge.net/p/kaarpux/code/ci/v4.5.3/tree/master/expert/dangerous_build_rest.sh

In general this works well:
Packages needing X for "make check" work like a charm.

However, "make check" for packages needing OpenGL (such as "cogl")
are failing.

So I tried
/bin/xdpyinfo
which shows
----------------------------------------
name of display:    :42
version number:    11.0
vendor string:    KaarPux
vendor release number:    11600000
maximum request size:  16777212 bytes
motion buffer size:  256
bitmap unit, bit order, padding:    32, LSBFirst, 32
image byte order:    LSBFirst
number of supported pixmap formats:    6
supported pixmap formats:
     depth 1, bits_per_pixel 1, scanline_pad 32
     depth 4, bits_per_pixel 8, scanline_pad 32
     depth 8, bits_per_pixel 8, scanline_pad 32
     depth 16, bits_per_pixel 16, scanline_pad 32
     depth 24, bits_per_pixel 32, scanline_pad 32
     depth 32, bits_per_pixel 32, scanline_pad 32
keycode range:    minimum 8, maximum 255
focus:  PointerRoot
number of extensions:    23
     BIG-REQUESTS
     DAMAGE
     DOUBLE-BUFFER
     DPMS
     DRI3
     GLX
     Generic Event Extension
     MIT-SCREEN-SAVER
     MIT-SHM
     Present
     RECORD
     RENDER
     SECURITY
     SGI-GLX
     SHAPE
     SYNC
     X-Resource
     XC-MISC
     XFIXES
     XInputExtension
     XKEYBOARD
     XTEST
     XVideo
default screen number:    0
number of screens:    1
screen #0:
   dimensions:    1280x1024 pixels (325x260 millimeters)
   resolution:    100x100 dots per inch
   depths (6):    8, 1, 4, 16, 24, 32
   root window id:    0xfe
   depth of root window:    8 planes
   number of colormaps:    minimum 1, maximum 1
   default colormap:    0x20
   default number of colormap cells:    256
   preallocated pixels:    black 0, white 1
   options:    backing-store NO, save-unders NO
   largest cursor:    1280x1024
   current input event mask:    0x0
   number of visuals:    6
   default visual id:  0x21
   visual:
     visual id:    0x21
     class:    PseudoColor
     depth:    8 planes
     available colormap entries:    256
     red, green, blue masks:    0x0, 0x0, 0x0
     significant bits in color specification:    8 bits
[...]
----------------------------------------

However,
MESA_DEBUG=1 LIBGL_DEBUG=verbose /bin/mesa_demos/glxinfo
shows
----------------------------------------
libGL: screen 0 does not appear to be DRI3 capable
libGL: OpenDriver: trying //lib/dri/tls/swrast_dri.so
libGL: OpenDriver: trying //lib/dri/swrast_dri.so
libGL: driver does not expose __driDriverGetExtensions_swrast(): 
//lib/dri/swrast_dri.so: undefined symbol: __driDriverGetExtensions_swrast
libGL: Can't open configuration file /root/.drirc: No such file or 
directory.
libGL: Can't open configuration file /root/.drirc: No such file or 
directory.
libGL error: failed to load driver: swrast
Error: couldn't find RGB GLX visual or fbconfig
name of display: :42
180 GLXFBConfigs:
     visual  x   bf lv rg d st  colorbuffer  sr ax dp st accumbuffer ms  cav
   id dep cl sp  sz l  ci b ro  r  g  b  a F gb bf th cl  r  g  b  a ns 
b eat
----------------------------------------------------------------------------
0x049  0 tc  0  32  0 r  . .   8  8  8  8 .  .  0  0  0  0  0  0  0 0 0 None
0x04a  0 tc  0  32  0 r  . .   8  8  8  8 .  .  0  0  0 16 16 16 16 0 0 Slow
0x04b  0 tc  0  32  0 r  y .   8  8  8  8 .  .  0  0  0  0  0  0  0 0 0 None
[...]
----------------------------------------

Also,
/bin/mesa_demos/glxgears
shows
----------------------------------------
libGL error: failed to load driver: swrast
Error: couldn't get an RGB, Double-buffered visual
----------------------------------------

So far, I have nailed it down to
MesaLib src/glx/dri3_glx.c
http://cgit.freedesktop.org/mesa/mesa/tree/src/glx/dri3_glx.c?id=mesa-10.2.4
line 1742/1744 where visuals is NULL.

(by the way, IMHO, MesaLib src/glx/dri3_glx.c
function dri3_create_screen
is in dire need of better error messages,
as several paths leads to "handle_error".
I can provide a patch if so requested)

If I run a default X server (in the same kvm virtual machine),
/lib/xorg/modules/drivers/qxl_drv.so is selected as driver, and
glxinfo and glxgears works as expected.

If I copy the system to a bare metal server,
and run a default X server there,
/lib/xorg/modules/drivers/radeon_drv.so is selected as driver, and
glxinfo and glxgears works as expected.

Package versions:
linux 3.15.6
MesaLib 10.2.4
xorg-server 1.16.0

Package configs:
http://sourceforge.net/p/kaarpux/code/ci/v4.5.3/tree/master/packages/m/MesaLib.yaml
http://sourceforge.net/p/kaarpux/code/ci/v4.5.3/tree/master/packages/x/xorg-server.yaml

Any help would be most appreciated!

/Henrik



More information about the xorg mailing list