S.F. Page

Programming,Music,etc...

DirectX12

とうとう出た。

DirectX12がとうとうアナウンスされた。DirectX Developer Blogによると主としてパフォーマンス改善のための「Pipleline State Object」「Command lists and bundles」「Descriptor heaps and tables」と、「順序に依存しない透明度」「衝突判定」「ジオメトリ・カリング」用の新しいレンダリング・パイプラインステージを用意するらしい。

Pipeline State Object(PSO)

Pipeline State Object(PSO)というのは今までの各レンダリングステージ・ステートに変わるものだそうだ。レンダリングステージ・ステートが最新のGPUの仕様にフィットしていないため、DirectX 11までは描画時までレンダリングステージ・ステートを確定することができなかった。これはステートは各パイプラインステージで独立して操作できるようなっているが、GPU内部では他のステートと相互依存しているためである。 PSOになると生成時に即時確定され、GPUネイティブのインストラクションや状態に変換する。そのため描画時に都度レンダリングステージ・ステートを確定・変換する必要がなくなり、描画パフォーマンスがアップするとのことである。

Command lists and bundles

DirectX11では描画操作はイミディエイトコンテキストを通じてGPUに送られる1つのコマンド列で表現されていた。マルチスレッド対応するためには遅延コンテキストを使用するのだが、これもPSOと同様、仕様がハードウェアにフィットしていないので、マルチスレッド上で効率的にGPUハードウェアを利用することができなかった。

DirectX12ではGPUが実行に必要な詳細な情報を含むコマンド・リストを使用する。これはPSOのようにあらかじめすべての描画操作に必要なリソース、変数の情報を含む。そのため事前にGPU命令に変換しておくことができ、マルチスレッドで変換操作を分散させることが可能である。直列操作が必要なのはコマンドキューを通じてGPUへコマンドリストを送る部分だけとなり、描画パフォーマンスが向上する。

加えてbundleという機能も提供する。これはコマンド・リストを再利用するための機能である。

Descriptor heaps and tables

Descriptor heapsで大まかにGPUリソースを確保し、Descriptor Tablesでリソースの位置を指定する。

総じて言うと

マントルっぽい。