Vulkan APIでDirect3D 11を実装しているDXVKがバージョン0.60でVulkanのVK_EXT_vertex_attribute_divisor
という拡張を要求するようになり、Mesaの開発版のソースでは2018年7月に実装が取り込まれているのだが、これが含まれるリリース版は本記事の公開時点ではまだ公開されていない。
本記事公開の数時間前に、DXVKの開発版において再度この拡張は(NVIDIAの最新のプロプライエタリドライバでもまだサポートされていない関係で)必須ではなくなったのだが、バージョン18.1系のMesaのソースにパッチを適用してバージョン0.60から0.62をIntel GPUで動かせるようにできないかを最近試してみたので、その記録をここで公開しておくことにする(近い将来また必須になる可能性があるため)。
必要なパッチ
この拡張を実装する修正単位(コミット)は1つだが、Mesaのパッチを提出するメーリングリストでこれと一緒に送信された別の2つのコミットに依存しており、実装の本体部分のパッチを単独で適用することはできない。
適用順は上に並べたのと逆の順番となる。
パッチの適用とビルド
上記のパッチ群を18.1系のソースにそのままpatch
コマンドで適用することはできない。幾つか18.1系のソースに合わせた修正が必要となる。
- 本体のパッチ: Pythonスクリプトの中に1行のコードを挿入する部分のみ手動で行う(元のパッチと追加内容が同じなので
EXTENSIONS
というリストの末尾にそれを挿入する形で貼り付ける) - 一番最後に挙げたパッチ: 周辺のコードの内容が少し変わっている関係で
.BufferPitch =
の行の修正を手動で行う
以下はビルド作業例。ビルドに必要なパッケージ群(開発パッケージ)はインストール済みであるものとする。
[mesa-18.1.x]$ rm src/intel/vulkan/anv_extensions.[ch] [mesa-18.1.x]$ ./configure --disable-gbm --disable-shared-glapi --disable-dri --enable-dri3 --disable-egl --disable-glx --disable-opengl --disable-gles1 --disable-gles2 --with-gallium-drivers=no --with-dri-drivers=no --with-vulkan-drivers=intel [mesa-18.1.x]$ make
x86_64版のOSではVulkanのドライバは32bit版と64bit版があるため、それぞれのビルド環境でビルドを行って既存のlibvulkan_intel.so
をそれぞれsrc/intel/vulkan/.libs/libvulkan_intel.so
で置き換える。
また、必要に応じてsrc/intel/vulkan/intel_icd.[i686 もしくは x86_64].json
も/usr/share/vulkan/icd.d/
内のファイルに対して上書きする。
Ubuntu 18.04用の自作パッケージ (PPA)
Ubuntuの次期バージョン用のMesaのソースパッケージをもとにして上記のパッチをいじったものを適用したUbuntu 18.04向けのパッケージを作成し、ppa:kakurasan/backport-anv-vertex-attribute-divisor
のPPAリポジトリで公開した。
パッチの影響を受けるのはmesa-vulkan-drivers
パッケージのみで、それ以外は単純にバージョンの上がったMesaのパッケージとして使うこともできる(18.04のMesaは古い18.0系のため)。
元のバージョンに戻したくなったらppa-purge
をインストールして同名のコマンドに先述のPPAリポジトリ文字列を指定する。
使用結果
修正の適用により、バージョン0.6x系のDXVKがIntel GPUで使えなくなった問題への対処には成功し、WOLF RPGエディターのサンプルゲームやUnigine Heaven 4.0でのDirect3D 11を用いたベンチマークが動作したのを確認したが、パッチにより追加された拡張が実際に使われて正常に動作していることを確認することまではできなかった。
下はWOLF RPGエディターのサンプルゲームの画像。
下はUnigine Heaven 4.0をDirect3D 11で動かした画像。実行を手動(wine
コマンド)で行う場合はインストール先のbin
ディレクトリに移動してからwine browser_x86.exe -config ../data/launcher/launcher.xml
のようにして行う。
- Wine 3.12
- Mesa 18.1.4
- DXVK 0.62
- WOLF RPGエディター 2.24
- Unigine Heaven 4.0