
メッシュ シェーダー
メッシュ シェーダー (MS) は、本質的にはコンピュート シェーダーであり、頂点、インデックス、プリミティブ データをプリミティブ アセンブラーにエクスポートするためのステージ固有の組み込み関数を備えています。すべてのデータは、シェーダー コード内で定数バッファー ビュー (CBV) およびシェーダー リソース ビュー (SRV) から明示的にフェッチする必要があります。 つまり、開発者はドロー コールの捉え方を、コンピュート シェーダーのワークフローに沿ったものへと再調整する必要があります。シェーダーの作成者は、スレッドグループ サイズを決定し、各スレッドをどのように使ってワークロードを完成させるかを決めます。シェーダー ウェーブ組み込み関数とグループ共有メモリを利用して、データを共有し、ラスタライズ対象のプリミティブ リストを効率的に構築できます。 図 2. メッシュ シェーダーのみのパイプラインをバインドした状態で DispatchMesh(4, 1, 1) 呼び出しからディスパッチされる GPU 作業の可視化。コンピュート シェーダーと同様に、DispatchMesh は x、y、z の各次元におけるスレッドグループ数を必要とします。指定した数のメッシュ シェーダー スレッドグループが実行のためにディスパッチされます。
増幅シェーダー
増幅シェーダー (AS) は、メッシュ シェーダー ステージの前に位置するオプションのステージです。このステージもコンピュートに近く、メッシュ シェーダー スレッドグループのクラスターを動的にディスパッチする機能を持ちます。各スレッドグループは、ディスパッチするメッシュ シェーダー スレッドグループの数を自身で計算します。各スレッドグループはまた、生成する各メッシュ シェーダー スレッドグループに渡すために、最大 16 KB の共有カスタム ペイロード データを保持します。このデータはグループ共有メモリから直接エクスポートできます。 増幅シェーダーの機能により、シェーダー プログラムはカスタム条件に基づいてワークロードを動的に減少または増加させることができます。これにより、粒度の低い効率的なカリングやカスタム テセレーションが可能になります。 図 3. AS-MS パイプライン ステート (PS) オブジェクトのディスパッチの可視化。一部の AS スレッドグループは MS スレッドグループのディスパッチを選択します。他はまったくディスパッチしない場合もあります。
