Coelacanth's Dream

RadeonSIドライバー + RDNA 2 では NGGカリング/プリミティブシェーダー がデフォルトで有効に

AMD GPU のオープンソースドライバー RadeonSI (OpenGL) に、RDNA 2 /GFX10.3 世代の dGPU にて NGGカリングをデフォルトで有効にするパッチが投稿、メインラインに組み込まれた。
radeonsi: enable NGG culling by default on gfx10.3 dGPUs (7648060d) · Commits · Mesa / mesa · GitLab 他にも性能最適化のため、LDS のバンクコンフリクト (同一バンクにアクセスが集中してしまうこと) を解消するパッチも組み込まれている。

また、Navi1x ベースの Radeon Pro カードでもデフォルトで NGGカリングが有効化されるようになった。1
Proカードのみの理由は恐らく、非同期コンピュートでのカリング処理が実装された時もそうだったが2、ゲーム等ではまだ効果が小さく、Radeon Pro がターゲットとするワークステーション用途におけるソフトウェアでは効果が大きいからと思われる。

NGGカリング / プリミティブシェーダー

以前 NGG(Next Genaration Geometry) の機能を紹介した時に、ハードウェア側のシェーダーステージ統合とそれによる効率化が NGG の全てではないと断ったが、その時触れなかった NGG の目玉機能がこの NGGカリングである。

NGGカリングは、結局その世代で有効化されることは無かったが Vega /GFX9 の新機能として実装され、PS5 でも採用が発表された プリミティブシェーダー/Primitive Shader の名でも呼べるだろう。
GPUOpen Drivers を構成するソフトウェアにはそのように記述されている。

  "Description": "Enable NGG mode, use an implicit primitive shader on a per-pipeline type basis. Use this instead of PAL setting, NggEnableMode.",
  // Represents configuration of static registers relevant to hardware primitive shader (NGG).

NGGカリング/プリミティブシェーダーは、レンダリングパイプラインにおいて、後に描画されずに破棄される対象を、計算する前に破棄する早期カリング機能の 1つ。従来のレンダリングパイプラインでは、頂点処理を行なった後に破棄するため、演算リソースが無駄となりやすい。

今回のパッチでは 「for better performance」 とあるだけで具体的な性能向上の度合いには触れられていないが、
Vega /GFX9 の資料には、従来のパイプラインと比較して、カリング処理の速度をサイクルあたり 4倍以上に引き上げられたとある。3

最終的な性能への影響、ゲームにおける効果等はまだ不明だが、Vega /GFX9 から約 3年越しで RDNA /GFX10RDNA 2 /GFX10.3 世代でついにデフォルトで有効化されるというのは感慨深いものがある。

参考リンク