メインコンテンツへスキップ
  1. Posts/

drm-xe-nextで遊ぶ

·5 分·
Linux Intel GPU Mesa
なね
著者
なね
目次

前置き
#

メイン環境をUbuntuにした際にdrm-xe-nextの話を耳にしたので使ってみたい!となって入れてみたメイン環境で遊ぶな

大まかな流れ
#

  1. drm-xe-nextカーネルをビルド
  2. Mesaドライバをビルド
  3. 自ビルドドライバ向けに環境変数を定義

環境
#

CPU:Intel Core i5 12600k
GPU:Intel ARC A770 16GB
OS:kubuntu 22.04LTS

drm-xe-nextカーネルをビルド
#

カーネルをビルドするにあたって必要な依存関係をセットアップしておきましょう。

セットアップが終わったらカーネルソースをローカルに落とします。

$ git clone https://gitlab.freedesktop.org/drm/xe/kernel/ -b drm-xe-next

カーネルソースのディレクトリを開いたらrootに切り替えてからmake menuconfigでコンフィグを生成。
このときに、現在使っているカーネルコンフィグを引き継ぎたい場合は事前にcp /boot/config-* .configでカーネルソースにコピーしておきましょう
また、他に必要なカーネルモジュール等がある場合は設定することを忘れずに。
そしてmenuconfigのDevice Drivers>Graphics supportから<M>Intel Xe Graphics[*]Enable display supportをすること。
可能であればIntel 8xx/9xx/G3x/G4x/HD Graphicsを無効にしておくこと。(カーネル適応後にXeより優先して読み込まれたりすることがあって面倒だから)
他にはKEYS関連の項目が原因でビルドが止まることがあるので随時無効にしておくこと。
↓面倒くさがり屋向けの一発ですべてが終わるコマンド

make -j$(nproc --all) && make modules_install INSTALL_MOD_STRIP=1 -j$(nproc --all) && make bindeb-pkg -j$(nproc --all) && dpkg -i ../*.deb

ビルドとインストールが終わったら次のステップに進む。
再起動はお好みでというところだが、デフォで入っているMesaがllvmpipe等のソフトウェアレンダリングに対応していなかった場合が面倒なのでしないことを推奨。

Mesaドライバをビルド
#

2023/07/01現在、XeKMD対応のMesa Irisドライバはメインブランチにマージされたばかりなので自分でビルドする必要がある。
Mesaのビルドに必要な依存関係を揃えていく。
32bitアプリも使いたい場合はi386向けの依存関係も後々揃えるがまずは基本的なツールとx86_64の依存関係から。

$ sudo apt build-dep libdrm
$ sudo apt build-dep mesa
$ sudo apt install meson llvm-15
$ pip3 install mako

ついでに vulkan sdkもインストールしておくと今後が楽

したらばmesaのソースを落としてからビルドしていく。

$ git clone https://gitlab.freedesktop.org/mesa/mesa -b main
$ cd mesa 
$ mkdir build
$ sudo meson setup build/ -Dintel-xe-kmd=enabled -Dvideo-codecs="vc1dec, h264dec, h264enc,h265dec,h265enc" -Dintel-clc=enabled
$ sudo meson install -C build/

これでx86_64のMesaドライバ一式がビルドできるはず。
meson setupの段階で必要なライブラリに抜けがあってエラーが出たらapt install ~~で随時インストールしていく。
また、-Dintel-clc=enabledはvulkanでIntel GPUのレイトレを使えるようにするよう指定する感じだが、必要に感じなければdisabledにしても問題ない。

次にi386向けのドライバをビルドする。 必要なツールチェーンをインストールする

$ sudo apt install gcc-11-i686-linux-gnu g++-11-i686-linux-gnu

また、mesaソースに以下の内容を書き込んだファイルを作っておく。
ここではi386.txtとする。

[binaries]
c = '/usr/bin/i686-linux-gnu-gcc-11'
cpp = '/usr/bin/i686-linux-gnu-g++-11'
ar = '/usr/bin/i686-linux-gnu-gcc-ar-11'
strip = '/usr/bin/i686-linux-gnu-strip'
pkgconfig = '/usr/bin/i686-linux-gnu-pkg-config'
llvm-config = '/usr/bin/llvm-config-15'

[built-in options]
c_args = ['-m32']
c_link_args = ['-m32']
cpp_args = ['-m32']
cpp_link_args = ['-m32']

[paths]
prefix = '/usr'
libdir = 'lib32'
bindir = 'bin'

[host_machine]
system = 'linux'
cpu_family = 'x86'
cpu = 'i686'
endian = 'little'

また、i386用のライブラリが必要になるのでsetup時に警告が出たら随時インストールすること。
基本的にlib(ライブラリ名)-dev:i386のような形になる。 見つからなかったりしたら Ubuntu パッケージ検索で探すと楽だと思う。

$ mkdir build32
$ sudo meson setup build32/ --cross-file i386.txt -Dintel-xe-kmd=enabled -Dgallium-drivers=iris -Dvulkan-drivers=intel
$ sudo meson install -C build32

setup時に敢えてiris(intel)と指定しているのは単に依存関係が面倒だからである(特にllvmpipeお前)
zinkとかなんとか欲しかったりする人はその都度指定されたし。

環境変数を定義
#

自分がKDE環境なのでKDEのやり方だけメモります。
その他デスクトップ環境の人たちはデフォルトの環境変数の定義については各自でググってね。
KDEの場合は~/.config/plasma-workspace/env/にシェルスクリプトを入れてそれを使って定義する感じになる。
サンプル↓

export MESA_LOADER_DRIVER_OVERRIDE=iris
export LIBGL_DRIVERS_PATH=/usr/local/lib/x86_64-linux-gnu/dri:/usr/lib32/dri
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json:/usr/share/vulkan/icd.d/intel_icd.i686.json 
export LD_LIBRARY_PATH=/usr/lib32/:/usr/local/lib/x86_64-linux-gnu/

軽く説明すると

  • MESA_LOADER_DRIVER_OVERRIDE
    mesaは基本的にカーネルモジュールの名前を参照してドライバを定義するがもちろんxe_dri.soなんてファイルは生成されていないので自分でirisと定義する必要がある。
  • LIBGL_DRIVERS_PATH
    OpenGLで使用するドライバのおいてあるパスを定義。
  • VK_ICD_FILENAMES
    vulkanのドライバを指定する変数。自ビルドのドライバを参照できるようにする。
    場合によっては各jsonの内容を修正しないといけない場合がある(自分がそうだった)
  • LD_LIBRARY_PATH
    steam等のアプリが自ビルドのドライバを参照できるようにする。自分は一応x86_64とi386の両方を定義している。

多分これで再起動したらカーネルモジュールがxeになっていてグラフィックプロセッサがちゃんとMesa Intelになっているはず。
ちなみにXeKMDだとIntel ARCではハードウェアエンコードが 使えないらしい、うんち!w

Related

PC用アバターをQuest GoodにしてFallback Avatarにする
·4 分
Unity Blender Unity VRChat Blender
EMUI11からダウングレードした端末が認識されなくなる問題
·3 分
Android Android
ダンスする時のシャオンちゃんを表情豊かにしてみた。
·2 分
Unity Unity VRChat
Huawei P30にlineageOS 18.1をインストールした話
·4 分
Android Android カスタムROM