Skip to content

[ARM64 / Qualcomm Adreno 680] GPU acceleration unavailable in WSL2 — /dev/dri/renderD128 not created by dxgkrnl, Mesa falls back to llvmpipe #1470

Description

@dorepi

Windows build number:

10.0.26220.8680

Your Distribution version:

26.04

Your WSL versions:

GPU acceleration is not available in WSL2 on an ARM64 host with a Qualcomm Adreno 680 GPU. Mesa consistently falls back to llvmpipe (software rendering) regardless of configuration. The WSL bridge libraries are correctly in place: /usr/lib/wsl/lib/ contains libd3d12.so, libd3d12core.so and libdxcore.so, and /dev/dxg is present and accessible (crw-rw-rw-). The Mesa d3d12 Gallium driver (d3d12_dri.so) is also installed. However, /dev/dri/renderD128 is never created by dxgkrnl, which prevents Mesa from initializing the D3D12 backend. Neither OpenGL (glxinfo), Vulkan (vulkaninfo) nor EGL (eglinfo) can access the physical GPU.

Steps to reproduce:

  1. Run WSL2 on a Windows ARM64 machine with Qualcomm Adreno 680 GPU
  2. Install mesa-utils and mesa-vulkan-drivers in the WSL2 distro
  3. Run: glxinfo | grep "OpenGL renderer"
    → llvmpipe (LLVM 21.1.8, 128 bits)
  4. Run: GALLIUM_DRIVER=d3d12 glxinfo | grep "OpenGL renderer"
    → glx: failed to create drisw screen
  5. Run: vulkaninfo 2>&1 | grep deviceName
    → llvmpipe (LLVM 21.1.8, 128 bits)
  6. Run: ls /dev/dri/
    → empty or directory does not exist

WSL logs:

No response

WSL dumps:

No response

Expected behavior:

/dev/dri/renderD128 should be created by dxgkrnl so that Mesa can initialize the D3D12 Gallium backend and route OpenGL/Vulkan/EGL through the Qualcomm Adreno 680 GPU, as already works on x86-64 with NVIDIA, AMD and Intel GPUs.

Actual behavior:

$ ls /usr/lib/wsl/lib/
libd3d12.so libd3d12core.so libdxcore.so

$ ls -la /dev/dxg
crw-rw-rw- 1 root root 10, 259 Jun 13 19:07 /dev/dxg

$ ls /dev/dri/
(empty — /dev/dri/renderD128 never created)

$ ldconfig -p | grep -E "dxcore|d3d12"
libd3d12core.so (libc6,AArch64) => /usr/lib/wsl/lib/libd3d12core.so
libd3d12.so (libc6,AArch64) => /usr/lib/wsl/lib/libd3d12.so
libdxcore.so (libc6,AArch64) => /usr/lib/wsl/lib/libdxcore.so

$ ls /usr/lib/aarch64-linux-gnu/dri/d3d12_dri.so
/usr/lib/aarch64-linux-gnu/dri/d3d12_dri.so ← driver present

$ GALLIUM_DRIVER=d3d12 eglinfo 2>&1 | grep warning
libEGL warning: failed to get driver name for fd -1
libEGL warning: MESA-LOADER: failed to retrieve device information
libEGL warning: egl: failed to create dri2 screen

$ glxinfo | grep "OpenGL renderer"
OpenGL renderer string: llvmpipe (LLVM 21.1.8, 128 bits)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions