-
-
Notifications
You must be signed in to change notification settings - Fork 154
Description
Bug description
At this time, the WSL2/WSLg D3D12 hardware acceleration does not work out of the box due to library problems, even though the mesa.drivers package does have D3D12 support enabled by default.
I do not understand exactly what is going on. but there are a few ways to set LD_LIBRARY_PATH as a hack to fix it:
LD_LIBRARY_PATH=/run/opengl-driver/libworks withMESA_D3D12_DEFAULT_ADAPTER_NAME=Nvidiabut notIntel(My laptop has two GPUs)LD_LIBRARY_PATH=ub:/run/opengl-driver/libworks with bothIntelandNvidiafrom above, where theubfolder has some basic library files copied from the WSL2 Ubuntu system - see below for contents
In both examples above, /run/opengl-driver/lib can be swapped with /usr/lib/wsl/lib. I'm not sure what the difference is here, other than that /usr/lib/wsl/lib has many more files.
I believe this could be two problems:
- the mesa.drivers files are not able to dlopen the WSLg files, since it has no way to know where they are.
- The Intel version of the D3D12 sub-driver-??? seems to need some additional libraries to link to that are not currently available.
To Reproduce
With the following config:
programs.nix-ld = {
enable = true;
# I am using this nix-ld-rs too:
# package = nix-ld-rs.packages."${pkgs.system}".nix-ld-rs;
};
wsl = {
enable = true;
defaultUser = "${username}";
nativeSystemd = true;
useWindowsDriver = true;
startMenuLaunchers = true;
};
hardware.opengl = {
enable = true;
driSupport = true;
extraPackages = with pkgs; [
mesa.drivers
libvdpau-va-gl
vaapiVdpau
];
};
Then run any of the following commands:
glxinfo -B
MESA_D3D12_DEFAULT_ADAPTER_NAME=Intel LD_LIBRARY_PATH=ub:/run/opengl-driver/lib glxinfo -B
MESA_D3D12_DEFAULT_ADAPTER_NAME=Nvidia LD_LIBRARY_PATH=/run/opengl-driver/lib glxinfo -B
MESA_D3D12_DEFAULT_ADAPTER_NAME=Intel LD_LIBRARY_PATH=/usr/lib/wsl/lib glxinfo -B
MESA_D3D12_DEFAULT_ADAPTER_NAME=Nvidia LD_LIBRARY_PATH=ub:/usr/lib/wsl/lib glxinfo -B
The ub folder I am using is: ub.tar.gz
Logs
Example of hardware acceleration working:
> LD_LIBRARY_PATH=ub:/usr/lib/wsl/lib glxinfo -B
name of display: :0
WARNING: dzn is not a conformant Vulkan implementation, testing use only.
WARNING: dzn is not a conformant Vulkan implementation, testing use only.
WARNING: Some incorrect rendering might occur because the selected Vulkan device (Microsoft Direct3D12 (NVIDIA RTX A500 Laptop GPU)) doesn't support base Zink requirements: feats.features.logicOp have_EXT_custom_border_color have_EXT_line_rasterization
glx: failed to create drisw screen
failed to load driver: zink
display: :0 screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
Vendor: Microsoft Corporation (0xffffffff)
Device: D3D12 (Intel(R) Iris(R) Xe Graphics) (0xffffffff)
Version: 24.0.3
Accelerated: yes
Video memory: 8146MB
Unified memory: yes
Preferred profile: core (0x1)
Max core profile version: 4.1
Max compat profile version: 4.1
Max GLES1 profile version: 1.1
Max GLES[23] profile version: 3.0
< snip >
What happens without the LD_LIBRARY_PATH hack:
> glxinfo -B
name of display: :0
MESA: error: ZINK: failed to choose pdev
glx: failed to create drisw screen
failed to load driver: zink
display: :0 screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
Vendor: Mesa (0xffffffff)
Device: llvmpipe (LLVM 17.0.6, 256 bits) (0xffffffff)
Version: 24.0.3
Accelerated: no
Video memory: 7770MB
Unified memory: yes
Preferred profile: core (0x1)
Max core profile version: 4.5
Max compat profile version: 4.5
Max GLES1 profile version: 1.1
Max GLES[23] profile version: 3.2
< snip >
Where the ub folder has the following files:
> ls ub
libbsd.so.0
libedit.so.2
libmd.so.0
libstdc++.so.6
libtinfo.so.6
libz.so.1
WSL version
WSL version: 2.2.2.0
Kernel version: 5.15.150.1-2
WSLg version: 1.0.61
MSRDC version: 1.2.5105
Direct3D version: 1.611.1-81528511
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22631.3296