Open2

素のWSL2 UbuntuでWSLgを使いたい

okuokuokuoku

xeyes とかは普通に動くけど、 mesa-utilseglinfo を見ると llvmpipe になっている。これはソフトウェアレンダラなので何とかホスト側のDirectX12を使って欲しい。

okuokuokuoku

GALLIUM_DRIVER=d3d12 を指定してみる

okuoku@stripe:/mnt/c/Users/oku$ eglinfo
EGL client extensions string:
    EGL_EXT_client_extensions, EGL_EXT_device_base,
    EGL_EXT_device_enumeration, EGL_EXT_device_query, EGL_EXT_explicit_device,
    EGL_EXT_platform_base, EGL_EXT_platform_device, EGL_EXT_platform_wayland,
    EGL_EXT_platform_x11, EGL_EXT_platform_xcb,
    EGL_KHR_client_get_all_proc_addresses, EGL_KHR_debug,
    EGL_KHR_platform_gbm, EGL_KHR_platform_wayland, EGL_KHR_platform_x11,
    EGL_MESA_platform_gbm, EGL_MESA_platform_surfaceless

GBM platform:
MESA-LOADER: failed to open vgem: /usr/lib/dri/vgem_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
MESA-LOADER: failed to open vgem: /usr/lib/dri/vgem_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
eglinfo: eglInitialize failed

Wayland platform:
eglinfo: eglInitialize failed

X11 platform:
libEGL warning: egl: failed to create dri2 screen
eglinfo: eglInitialize failed

Surfaceless platform:
libEGL warning: failed to open /dev/dri/renderD128: Permission denied

libEGL warning: egl: failed to create dri2 screen
eglinfo: eglInitialize failed

Device platform:
Device #0:

EGL device extensions string:
    EGL_EXT_device_drm, EGL_EXT_device_drm_render_node
Platform Device platform:
libEGL warning: failed to open /dev/dri/renderD128: Permission denied

libEGL warning: NEEDS EXTENSION: falling back to kms_swrast
libEGL warning: egl: failed to create dri2 screen
eglinfo: eglInitialize failed

Device #1:

EGL device extensions string:
    EGL_EXT_device_drm_render_node, EGL_MESA_device_software
Platform Device platform:
libEGL warning: egl: failed to create dri2 screen
libEGL warning: egl: failed to create dri2 screen
eglinfo: eglInitialize failed

warning: failed to open /dev/dri/renderD128: Permission denied は通常のユーザーが render グループに居ないのが原因のようだ。足せばOK。

okuoku@stripe:/mnt/c/Users/oku$ ls -al /dev/dri/
total 0
drwxr-xr-x  3 root root        100 Dec 26 17:10 .
drwxr-xr-x 16 root root       3540 Dec 26 17:10 ..
drwxr-xr-x  2 root root         80 Dec 26 17:10 by-path
crw-rw----  1 root video  226,   0 Dec 26 17:10 card0
crw-rw----  1 root render 226, 128 Dec 26 17:10 renderD128

ただ strace で確認してみると、そもそも /dev/dxg がopenできていない:

openat(AT_FDCWD, "/dev/dxg", O_RDONLY|O_CLOEXEC) = -1 EBADF (Bad file descriptor)

https://devblogs.microsoft.com/directx/directx-heart-linux/

GPUドライバが古すぎるというオチのようだ。。(WDDM2.9以降が必要)