私の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アプリケーションが動くことを確認しました。