Bug 93261

Summary: GL/DRI3 over ssh broken
Product: xorg Reporter: poma <pomidorabelisima>
Component: Server/GeneralAssignee: Xorg Project Team <xorg-team>
Status: RESOLVED FIXED QA Contact: Xorg Project Team <xorg-team>
Severity: major    
Priority: high CC: rdieter, tibbs
Version: git   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
See Also: https://bugzilla.redhat.com/show_bug.cgi?id=1174257
Whiteboard:
i915 platform: i915 features:
Attachments:
Description Flags
gdb dri3 remote none

Description poma 2015-12-05 13:20:47 UTC
Created attachment 120365 [details]
gdb dri3 remote

$ cat /etc/X11/xorg.conf.d/nouveau-dri3.conf
Section "Device"
    Identifier  "nvidia0"
    Driver      "nouveau"
    Option      "DRI" "3"
EndSection

$ grep DRI /var/log/Xorg.0.log
[    45.046] (**) NOUVEAU(0): Option "DRI" "3"
[    45.046] (**) NOUVEAU(0): Allowed maximum DRI level 3.
...
[    46.363] (II) NOUVEAU(0): DRI3 on EXA enabled
...

$ ssh -Y user@hostname

$ gdb glxinfo
...
Reading symbols from glxinfo...Reading symbols from /usr/lib/debug/usr/lib64/mesa/glxinfo.debug...done.
done.
(gdb) run
Starting program: /usr/bin/glxinfo 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
name of display: localhost:10.0
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7531a40 in __poll_nocancel () at ../sysdeps/unix/syscall-template.S:84
84	T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
(gdb) backtrace full
#0  0x00007ffff7531a40 in __poll_nocancel () at ../sysdeps/unix/syscall-template.S:84
No locals.
#1  0x00007ffff4f36272 in poll (__timeout=-1, __nfds=1, __fds=0x7fffffffdd60) at /usr/include/bits/poll2.h:46
No locals.
#2  _xcb_conn_wait (c=c@entry=0x555555762ea0, cond=cond@entry=0x7fffffffde80, vector=vector@entry=0x0, count=count@entry=0x0) at xcb_conn.c:459
        ret = <optimized out>
        fd = {fd = 3, events = 1, revents = 0}
#3  0x00007ffff4f37c27 in wait_for_reply (c=c@entry=0x555555762ea0, request=23, e=e@entry=0x0) at xcb_in.c:516
        cond = {__data = {__wseq = 0, __signals_sent = 0, __confirmed = 0, __generation = 0, __mutex = 0x0, __quiescence_waiters = 0, 
            __clockid = 0}, __size = '\000' <repeats 47 times>, __align = 0}
        reader = {request = 23, data = 0x7fffffffde80, next = 0x0}
        ret = 0x0
#4  0x00007ffff4f37d31 in xcb_wait_for_reply (c=0x555555762ea0, request=23, e=0x0) at xcb_in.c:546
        ret = <optimized out>
#5  0x00007ffff7b8d225 in loader_dri3_open () from /lib64/libGL.so.1
No symbol table info available.
#6  0x00007ffff7b88018 in dri3_create_screen () from /lib64/libGL.so.1
No symbol table info available.
#7  0x00007ffff7b5c911 in __glXInitialize () from /lib64/libGL.so.1
No symbol table info available.
#8  0x00007ffff7b58ccb in GetGLXPrivScreenConfig.part.2 () from /lib64/libGL.so.1
No symbol table info available.
#9  0x00007ffff7b58e2e in glXChooseVisual () from /lib64/libGL.so.1
No symbol table info available.
#10 0x0000555555556eb3 in mesa_hack (scrnum=0, dpy=0x555555760010) at glxinfo.c:1168
        visinfo = <optimized out>
        attribs = {4, 8, 1, 9, 1, 10, 1, 12, 1, 13, 1, 14, 1, 15, 1, 16, 1, 17, 1, 5, 0}
#11 main (argc=<optimized out>, argv=<optimized out>) at glxinfo.c:1257
        dpy = <optimized out>
        numScreens = 1
        scrnum = 0
        opts = {mode = Normal, findBest = 0 '\000', limits = 0 '\000', singleLine = 0 '\000', displayName = 0x0, allowDirect = 1 '\001'}
        coreWorked = <optimized out>
(gdb) q
A debugging session is active.

	Inferior 1 [process 4281] will be killed.

Quit anyway? (y or n) y

$ LIBGL_DEBUG=verbose LIBGL_DRI3_DISABLE=1 glxinfo
name of display: localhost:10.0
libGL error: failed to authenticate magic 1
libGL error: failed to load driver: nouveau
libGL: OpenDriver: trying /usr/lib64/dri/tls/swrast_dri.so
libGL: OpenDriver: trying /usr/lib64/dri/swrast_dri.so
libGL: Can't open configuration file /home/test/.drirc: No such file or directory.
libGL: Can't open configuration file /home/test/.drirc: No such file or directory.
display: localhost:10  screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
...
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
...
GLX version: 1.4
GLX extensions:
...
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: VMware, Inc. (0xffffffff)
    Device: llvmpipe (LLVM 3.7, 128 bits) (0xffffffff)
    Version: 11.2.0
    Accelerated: no
    Video memory: 1754MB
    Unified memory: no
    Preferred profile: compat (0x2)
    Max core profile version: 0.0
    Max compat profile version: 2.1
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 2.0
OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 3.7, 128 bits)
OpenGL version string: 2.1 Mesa 11.2.0-devel (git-56aff6b)
OpenGL shading language version string: 1.30
OpenGL extensions:
...
OpenGL ES profile version string: OpenGL ES 2.0 Mesa 11.2.0-devel (git-56aff6b)
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 1.0.16
OpenGL ES profile extensions:
...
Comment 1 Martin Peres 2015-12-08 13:06:18 UTC
I can reproduce the issue, I will investigate this issue this week!
Comment 2 Michel Dänzer 2015-12-11 03:12:07 UTC
This can be solved in xserver with these two patches:

https://patchwork.freedesktop.org/patch/67759/
https://patchwork.freedesktop.org/patch/67337/
Comment 3 poma 2015-12-11 12:32:58 UTC
(In reply to Michel Dänzer from comment #2)
> This can be solved in xserver with these two patches:
> 
> https://patchwork.freedesktop.org/patch/67759/
> https://patchwork.freedesktop.org/patch/67337/


$ LIBGL_DEBUG=verbose vblank_mode=0 glxgears
libGL: screen 0 does not appear to be DRI2 capable
libGL: OpenDriver: trying /usr/lib64/dri/tls/swrast_dri.so
libGL: OpenDriver: trying /usr/lib64/dri/swrast_dri.so
libGL: Can't open configuration file /home/test/.drirc: No such file or directory.
ATTENTION: default value of option vblank_mode overridden by environment.
libGL: Can't open configuration file /home/test/.drirc: No such file or directory.
100 frames in 5.0 seconds = 19.937 FPS
112 frames in 5.0 seconds = 22.251 FPS
105 frames in 5.0 seconds = 20.843 FPS
105 frames in 5.0 seconds = 20.835 FPS
100 frames in 5.0 seconds = 19.870 FPS
^C

Uber slow, but works,
thanks.

Tested with:
xorg-x11-server-Xorg-1.17.4-3.fc22.x86_64
xorg-x11-server-Xorg-1.18.0-4.fc24.x86_64

Tested-by: poma <pomidorabelisima@gmail.com>
Comment 4 poma 2016-03-15 10:53:05 UTC
https://patchwork.freedesktop.org/patch/67759
still ain't in down/up/stream.
Comment 5 Michel Dänzer 2016-03-29 01:11:50 UTC
commit adefbaee499b9679c6cac21f52ec6545af2b36b5
Author: Adam Jackson <ajax@redhat.com>
Date:   Mon Mar 28 18:11:09 2016 +0900

    os: Treat ssh as a non-local client (v4)
Comment 6 skodde 2016-04-06 03:15:22 UTC
With this patch DRI/DRI2 over ssh is now broken.
There are legitimate and perfectly working scenarios where one would want DRI/DRI2 over ssh (e.g. containers running players/browsers with accelerated video support or opengl applications, etc.).
If I'm not missing any obvious solution, you should revert this patch or allow non local clients to use DRI/DRI2.

$ vainfo 
error: XDG_RUNTIME_DIR not set in the environment.
libva info: VA-API version 0.36.0
X Error of failed request:  BadRequest (invalid request code or no such operation)
  Major opcode of failed request:  153 (DRI2)
  Minor opcode of failed request:  1 (DRI2Connect)
  Serial number of failed request:  11
  Current serial number in output stream:  11

$ LIBGL_DEBUG=verbose glxgears 
libGL: screen 0 does not appear to be DRI2 capable

Thanks.
Comment 7 Michel Dänzer 2016-04-06 03:30:05 UTC
(In reply to skodde from comment #6)
> With this patch DRI/DRI2 over ssh is now broken.

That's a different issue from what this report is about. Please file your own report for it.
Comment 8 skodde 2016-04-06 04:49:14 UTC
(In reply to Michel Dänzer from comment #7)
> That's a different issue from what this report is about. Please file your
> own report for it.

For reference: bug #94834

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.