Wayland on FreeBSD

Jan Beich jbeich at FreeBSD.org
Mon Apr 20 18:54:13 UTC 2020


Frederic Chardon <chardon.frederic at gmail.com> writes:

> Le lun. 20 avr. 2020 à 15:20, Jan Beich <jbeich at freebsd.org> a écrit :
>
>>
>> Frederic Chardon <chardon.frederic at gmail.com> writes:
>>
>> > Le lun. 20 avr. 2020 à 12:20, Niclas Zeising
>> > <zeising+freebsd at daemonic.se> a écrit :
>> >
>> >>
>> >> On 2020-04-20 12:07, Greg V wrote:
>> >> > Apr 20, 2020 12:56:35 PM Frederic Chardon <chardon.frederic at gmail.com>:
>> >> >
>> >> >> Le dim. 19 avr. 2020 à 13:50, Jan Beich <jbeich at freebsd.org> a écrit :
>> >> >>
>> >> >>>
>> >> >>>
>> >> >>> I'm using Sway myself primarily with X11 applications. For example,
>> >> >>> "vblank_mode=0 glxgears" shows 3x more FPS than on real Xorg server. ;)
>> >> >>>
>> >> >>
>> >> >> I decided to give it a try, is hardware acceleration supposed to work?
>> >> >> glxgears gives 10x less fps than with X, and 3D is incredibly
>> >> >> sluggish.
>> >> >> eglinfo output that leads me to believe it is not:
>> >> >> GBM platform:
>> >> >> i965_dri.so does not support the 0xffffffff PCI ID.
>> >> >>
>> >> >> It is with sway, -current from yesterday, intel HD4000 iGPU (Ivybridge i5-3320M)
>> >> >> no difference between drm-devel-kmod or drm-current-kmod.
>> >> >
>> >> > Sway itself wouldn't even start without hardware rendering, it doesn't *have* a software renderer.
>> >> >
>> >> > For the X applications like glxgears, I guess with the mesa build
>> >> > that's in official ports currently you still need that DRI3
>> >> > something environment variable..
>> >>
>> >> You shouldn't need that one.  We switched the default to use DRI3 not
>> >> long after xorg-server was updated to 1.20.
>> >> https://svnweb.freebsd.org/ports?view=revision&revision=528071
>> >> It should also be in the latest quarterly branch.
>> >> Regards
>> >> --
>> >> Niclas
>> >
>> > With or without LIBGL_DRI3_ENABLE=1 in the environment the result is
>> > the same. I use official packages, updated yesterday.
>> >
>> > The problem I face might be due to permission issue. ktrace shows this:
>> > 28047 eglinfo  CALL  openat(AT_FDCWD,0x7fffffffc820,0x100002<O_RDWR|O_CLOEXEC>)
>> > 28047 eglinfo  NAMI  "/dev/dri/card0"
>> > 28047 eglinfo  RET   openat 3
>> > /..../
>> > 28047 eglinfo  CALL  ioctl(0x3,0xc0106446,0x7fffffffbc70)
>> > 28047 eglinfo  RET   ioctl -1 errno 13 Permission denied
>>
>> What initializes DRI3 is Xwayland which is started by Sway. DRI3 can
>> fail for weird reasons (e.g., bug 241821), so make sure you have
>>
>> https://reviews.freebsd.org/D23846
>>
>> As graphics/mesa-demos doesn't install eglgears_wayland to check OpenGL
>> acceleration in native Wayland clients try multimedia/mpv instead e.g.,
>>
>>   $ pkg install mpv
>>   $ mpv --no-config --msg-level=vo/gpu=v --gpu-api=opengl --gpu-context=wayland /path/to/foo.mp4
>
> Thanks, I'm at r360105 so this fix is included. mpv doesn't output any error.

What does mpv show as GL_RENDERER? If not llvmpipe (or swrast) then
hardware acceleration in native Wayland clients works fine for you.

> I installed benchmarks/glmark2, it scores an average of 8 times less
> fps under wayland than X11. So wayland in general works, but OpenGL is
> slow. Is it expected?

glmark2 doesn't seem to support Wayland natively, so like glxgears it
tests Xwayland support. If Xwayland failed to initialize DRI3 then
all X11 clients would use slow software rendering.

  $ printenv | fgrep -i display
  DISPLAY=:0
  WAYLAND_DISPLAY=wayland-0

  $ env -u DISPLAY glmark2
  Error: main: Could not initialize canvas

  $ env -u DISPLAY glmark2-es2
  Error: main: Could not initialize canvas

Try starting Sway via "ktrace -i" or replace Xwayland binary with a
wrapper (see below) that starts it via ktrace. Tracing glxgears is too
late as Mesa will simply give up if DRI3 is not initialized.

# Make sure Xwayland on restart prints "i965_dri.so does not support the 0xffffffff PCI ID."
$ pkill Xwayland
$ PATH=$HOME/.local/bin:$PATH
$ cat ~/.local/bin/Xwayland
#! /bin/sh

# Exclude current directory from PATH
PATH=$(IFS=:; for p in $PATH; do case $p in (${0%/*});; (*) echo -n "$p:" ;; esac; done)

# Run the actual app
exec ktrace -f /tmp/xwayland.$(id -u).ktrace ${0##*/} "$@"


More information about the freebsd-x11 mailing list