わずか1か月でM1がVulkan 1.3をサポート
(rosenzweig.io)- Honeykrispはまだエンドユーザー向けには未リリースで、開発者向けのsource codeのみが公開されている状態
- M1向けHoneykrispはAppleハードウェアで初のconformant Vulkan実装であり、
portabilitywaiverなしでVulkan 1.3の全仕様を実装している - Honeykrispは既存のM1 Vulkan作業ではなく、NVIDIA GPU向けオープンソースNVK driverをベースとしており、M1コードを追加しNVIDIA関連部分を削除する形で始まった
- Vulkan 1.3 conformance test suiteの最終結果はPass 686930, Fail 0と記録された
- すべての状態を動的状態として扱い、prologとepilogをビルド・コンパイル・キャッシュするコードを追加して、full dynamic stateと
EXT_shader_objectの方向で実装している - zero-copy renderingのために
EXT_image_drm_format_modifierを実装 - Direct3D互換性のため、DXVKとvkd3d-protonが要求する
EXT_custom_border_colorをサポートし、border colour補正はshaderにコードを注入する方式でエミュレーションしている - custom border colourエミュレーションは「simple, correct, and slow」と明記されており、今後driver tricksで高速化する計画
- 次の作業は、DXVKとvkd3d-protonがDirect3Dレイヤー化に必要とする項目の実装で、例としてtransform feedbackが挙げられている
1件のコメント
Hacker Newsの意見
本当に印象的な仕事で、共有され反復的に改善されるオープンなコンポーネントの価値がよく表れている
Protonが移植されるまでどれくらいかかるのか気になるが、Vulkan実装が最適でもGPUアーキテクチャの違い、ARM変換のオーバーヘッド、Proton自体のコストのため、多くのゲームは性能が悪そうだと思う
それでもSnapdragonのようなSoCがデスクトップでより一般的になれば、今後はより多くのゲームがユニファイドメモリとARMをターゲットにすると楽観している
この10年間AppleがVulkanを無視してきたことがどれほど大きな失敗だったかを示しているが、手遅れになるまでは絶対に認めない気がする
Alyssaは最近FEXの性能改善も進めている
LinuxにVulkanを追加し、Asahi LinuxでDirectXを変換するこの取り組みが、Apple SiliconにAAAゲームを呼び込みたいAppleの夢に影響するのか気になる
AppleはAAA開発会社がゲームをMetalに移植し、iPhone、iPad、Mac、Vision Proで単一のコードベースで動くことを望んでいるはずだ
もしかするとMacゲーマーがAAA PCタイトルを遊ぶためにAsahi Linuxをインストールするようになるかもしれない
本当に望んでいるのはSteamやEpic Games Storeではなく、App StoreにAAAゲームが入ることであり、だからGPTKは中途半端で、ライセンスもValveがSteamに直接統合できないようにしているのだと思う
M1でWhiskeyを使ってDiablo II Resurrectedを試したが、Windowsネイティブのゲームがあれほどそのまま動くのはかなり印象的だった。今は愚かなBlizzardランチャーのアップデートがクラッシュを起こしてゲームの起動を妨げているだけだ
古いDX9ゲームではあるが、EverQuest IIもM1 Mac miniで1440pで非常によく動き、Asahi LinuxはGuild Warsのような古い32ビットタイトルにも役立つかもしれない
Vulkan 1.3をよく知らないが、低レベルのグラフィックスAPI作業に興味があるならぜひ見てみる価値がある。Vulkan 1.0とはまったく別次元で、状況を一変させる
最初の障壁さえ越えれば作業は楽しく、すべての動的状態と事前レンダーパス設定の削除のおかげで、はるかに扱いやすい。20年間使ってきたOpenGLよりも簡単になり、グラフィックスプログラミングが再び楽しくなる
最新ドライバさえあれば、およそ10年以内のGPUを持つすべてのデスクトッププラットフォームで大半の機能を使える
残念ながら、すぐに始められるような「合理的なデフォルト」フレームワークはないが、各種言語向けの便利なヘルパーライブラリは多い
Vulkanに移る時間がなかったが、結局は初期化と設定の壁さえ越えればよさそうだ。その後はOpenGLには戻らない気がする
この記事が少し刺激になって、実際にやってみようという気になった
OpenGLももともとそうだったので大差ないのかもしれないが、Khronosは本当にうまくやったものだという感じがする
ES 3.2対応のためにさっき更新したばかりなのに、もう驚かされている。自分のM1はAsahiのために作られたかのように感じる
正直、macOSはインストール時か、誤って一度起動しただけかもしれない。こういう詳細なアップデートがあるのはうれしい
ブラウザでゼロコピー・レンダリングをサポートしているものがあるのか、それともまだコンポジタ層が何重にも挟まっているのか気になる。WebGL2のtransform feedbackがreadbackを引き起こして塞がれていた記憶もある
何かクラッシュしてもコンパイラバグのはずがないと思っていたが、4月16日は実際にコンパイラバグだった
キャリアの中でそんなことを経験したことはないと自信を持って言えるが、抽象化レベルが低くなるほど珍しくなくなるのかもしれない
ただし、低レベルのカーネル開発者ならどちらも当てはまることがある
冗談はさておき、実際にはそうでない場合のほうがずっと多いが、確かに起こりはする
テスト中の自作物である開発中コンパイラなら、「コンパイラバグのはずがない」という格言はあまり当てはまらない
シェーダーに変わった構造が入っている:
if (condition) { while (true) { } }conditionは常に偽だが、コンパイラはそれを知らない標準準拠のシェーダーコンパイラ作者を苦しめる毒薬のようなものはさておき、この構造の目的が何なのか気になる
このコード自体が実務で有用というより、シェーダーの一部が特定の状況で機能的にこの形へ単純化されうるなら、コンパイラは正しく処理できなければならない
概念に馴染みがなければ、C++、LLVM、Rust のこうした機能を見るとよい:
https://en.cppreference.com/w/cpp/utility/unreachable
https://en.cppreference.com/w/cpp/language/attributes/assume
https://en.cppreference.com/w/cpp/memory/assume_aligned
https://llvm.org/docs/LangRef.html#unreachable-instruction
https://llvm.org/docs/LangRef.html#llvm-assume-intrinsic
https://doc.rust-lang.org/std/hint/fn.unreachable_unchecked....
https://doc.rust-lang.org/std/hint/fn.assert_unchecked.html
無限ループは事実上到達不能命令であり、分岐の後ろにある到達不能命令は事実上 assume 命令になる
これを VM の中で使えるのか気になる。macOS で開発していておおむね満足しているが、テスト用に VMware の Ubuntu イメージを動かしている
3D グラフィックアプリを作っているので、VMware のパススルーがどの程度なのかよく分からない。VM で Apple Silicon GPU が仮想化されるのか、このディストリビューションを動かせばグラフィック性能がもっと良くなるのか気になる
これが MoltenVK とどういう関係なのか説明してもらえる? ネイティブドライバなので MoltenVK は不要になるのか?
Asahi Linux は Apple M シリーズプロセッサで Linux を互換動作させることを目指した開発中のディストリビューションで、この記事は Asahi 上で GPU アクセラレーション付き Vulkan を動作させる内容だ
記事にもそう書かれている。これは OS X 上で直接動かせるものではないので、MoltenVK の必要性がなくなるわけではない