Game Porting Toolkitメモ

私のGitHub上で遊んでいるDirectX 12プログラムを、Macで動かしたくなりました。

今回動かしたのは、このシンプルなRust + DX12プログラムです
MacからVisual Studioプロジェクトをビルドするのは面倒そうなので、GitHub ActionsでArtifactsにアップロードして取り出しました。

実行エラーの類は全くありませんでした。
DX12のニッチな機能を使っていなければ、問題はなさそうです。

デバッグレイヤーは未実装でした(当然)。
なぜかGPUはAMDの振りをするようです。

インストール

同梱のRead me.rtfの通りに行えばインストールできます。
途中、Homebrewのパスが/usr/local/bin/brewになっているかどうか確認するところがありますが、Rosettaを常用しない私としては/opt/homebrew/bin/brewから変更したくありません。
そういう人のための補足も書かれているのがありがたいです。

セットアップ中にLLVMのコンパイルが始まるので、時間がかかります。
Mac Book Airの4コアで巨大リポジトリのビルドは流石に非力です。
しかも1度ビルド中にカーネルパニックしました…

実行

ビルド済みのexeを/Users/[your user name]/my-game-prefix/drive_c/にcopyします。
私のプログラムの場合、実行中にdxcompiler.dllを参照するので、それもプログラムから参照されるディレクトリにcopyします。

Read meによれば、実行時にgameportingtoolkitコマンドをそのまま実行していますが、よくわからないエラーが出ます。

Error: No available formula with the name “game-porting-toolkit”

これが解決できなかったので、別の方法としてwine64を使う方法を試したら起動できました。
こちらのサイトに記載されていたSteam起動用のコマンドのパスを変更しただけです。

MTL_HUD_ENABLED=1 WINEESYNC=1 WINEPREFIX=~/my-game-prefix  /usr/local/Cellar/game-porting-toolkit/1.0.4/bin/wine64 ‘C:\test\exe\simple_triangle.exe’

これで起動できました。

しかし、なぜかc0000135エラーで起動できなくなることがあります。
時間を空けて何度か試すと直るのですが、原因不明です。

デバッグ?

Metal APIのキャプチャをしようと試行錯誤したのですが、今のところ無理でした。
Metalには直接的には用意されていない、DX12のClearRTV/DSVがどう実装されているのか興味があったのですが…。

Xcodeでプロセス(PIDはWine起動時のログで確認できます)にアタッチすると、何度もSIGUSR1に引っかかります。
LLDBに引っかからないようにするには、以下のコマンドを叩けば良いようです。

process handle –stop false SIGUSR1

https://groups.google.com/g/capnproto/c/gXhsjsnKj88

しかし自分のexeがどのスレッドなのかは全然分かりませんでした。

まとめ

Game Porting Toolkitを使ってDX12アプリケーションが動くことを確認しました。