Coelacanth's Dream

【XDC2020】 ACOバックエンドの今後の計画 ―― RDNA 2, RT, Mesh Shader

先日より XDC 2020 が開催され、オープンソース・グラフィックに関する発表が数々行なわれている。
今回は A year of ACO: from prototype to deafault と題された発表の中で語られた、ACOバックエンド の今後の計画とサポートする機能について紹介したい。

Index

今後の計画と機能

RDNA 2/GFX10.3 サポート

RDNA 2 /GFX10.3 のサポートは進行中だが、次世代 GPU であるためまだ公式のISAドキュメントがリリースされておらず、AMD の開発者が公式にパッチを投稿する RadeonSI (OpenGL) ドライバーや LLVM の変更に追従する形を取っているとのこと。(Page51)

RadeonSI(OpenGL) でも ACOバックエンドをサポート

現在 ACOバックエンドRADV(Vulkan) ドライバーのみをサポートしているが、RadeonSI(OpenGL) のサポートも計画されている。(Page52)
それに向けたコードのシェーダーの引数部の統合、I/O操作部の統合作業は始まっているが、元は RADV(Vulkan) への実装だったこともあり、サポートまで長い道のりであると述べている。

レイトレーシング

Vulkan API でレイトレーシングをサポートする拡張仕様はドラフト(草稿)の段階にあり、先日には、RDNA 2 /GFX10.3 がサポートするレイトレーシング関連の命令が LLVM に追加されているため、ACO でもサポートされる日はそう遠くない……が肝心のハードウェア、RDNA 2 /GFX10.3 GPU そのものがまだリリースされていない。

Mesh Shader は NGG で実行可能か

NVIDIA が Turing 世代で新設したプログラムシェーダー、Mesh Shader だが、スライド内にて RDNA /GFX10 からハードウェア側でサポートされている NGG(Next Generation Geometry) で実行できる 可能性 があると述べている。(Page54)
まだ Vulkan API での拡張機能がリリースされていないため実装、テストは行なわれていないが、
もし実行可能であるならば、次世代コンソール機でサポートが分かれていた、PS5 のプリミティブシェーダー、Xbox Series X/S でサポートされている Mesh Shader が、ハードウェア側としてはどちらも NGG によって実行されている可能性が考えられる。

NGG 自体は Vega /GFX9 から始まったものだが、RDNA /GFX10 で設計が変更され、Vega /GFX9 でのサポートは廃止された1という背景がある。
これはあくまでも個人の推測であるが、RDNA /GFX10 で NGG の設計変更を行なった理由の1つに、Mesh Shader のサポートが含まれていたのかもしれない。

さらなる最適化

ACOバックエンド のさらなる性能向上を実現する手立てに、Rapid-packed math(FP16をFP32の倍のレートで実行する機能、GFX9からサポートされている)、NGG GS への最適化、さらに進んだレジスタ割り付けスケジューラーの実装をあげている。

参考リンク