💻

WSL2 Ubuntu でVulkanをGPUで動かす

に公開

mesaにWSL2用の実験的なコードがあるので、それを有効化すればよいらしい。

mesaのソース準備

deb-srcを準備しておいて以下で依存を取得。

$ apt-get source mesa
$ sudo apt-get install build-essential
$ sudo apt-get build-dep mesa

WSL2サポートを追加

debian/rules を以下のように変更して、フラグを有効化

 VULKAN_DRIVERS =
+VULKAN_DRIVERS += microsoft-experimental

新たに spirv2dxil が生成されるようになるので、これを mesa-vulkan-drivers パッケージの所属とするために debian/mesa-vulkan-drivers.install を以下のように変更

 usr/bin/mesa-overlay-control.py
+usr/bin/spirv2dxil
 usr/share/drirc.d/00-radv-defaults.conf
 usr/share/vulkan/explicit_layer.d/*.json
 usr/share/vulkan/icd.d/*.json
 usr/share/vulkan/implicit_layer.d/*.json
+usr/lib/*/libspirv_to_dxil.a
+usr/lib/*/libspirv_to_dxil.so
 usr/lib/*/libvulkan_*.so
 usr/lib/*/libVkLayer_*.so

バージョンを独自のものに変えるために、こんな感じで debian/changelog をいじる (ポイントはバージョン部分に適当な名前を足してる点)

+mesa (24.2.8-1ubuntu1wsl~24.04.1) noble; urgency=medium
+
+  * Enable WSL2 support
+
+ -- Masaki Hara <ackie.h.gmai@gmail.com>  Sat, 24 May 2025 16:23:36 +0900
+
 mesa (24.2.8-1ubuntu1~24.04.1) noble; urgency=medium
 
   * Backport to noble. (LP: #2083020)
     - build with meson-1.5
     - lower librust-syn-dev dependency
 
  -- Timo Aaltonen <tjaalton@debian.org>  Mon, 16 Dec 2024 12:17:11 +0200

ビルド

$ debuild -uc -us

インストール

上位ディレクトリに *.deb が生成されるので入れる。

# 今何入ってるか確認
$ dpkg -l | grep -E 'mesa|xatracker|libgbm'

# 手元のバージョンで入れ直す
$ sudo dpkg -i ./libegl-mesa0_24.2.8-1ubuntu1wsl\~24.04.1_amd64.deb ./libegl1-mesa-dev_24.2.8-1ubuntu1wsl\~24.04.1_amd64.deb ...

確認

vulkaninfo --summary

PHYSICAL_DEVICE_TYPE_CPU 以外のデバイスが認識されてたらOK。

オチ

最終的には Dawn (WebGPU) に認識させたかったのだが、 Warning: Vulkan fullDrawIndexUint32 feature required. と言われてしまった。

元ネタ

Discussion