次の方法で共有


Direct3D バージョン 11 のパイプライン

このセクションは、Windows 7 以降、および Windows Server 2008 R2 以降のバージョンの Windows オペレーティング システムにのみ適用されます。

Direct3D バージョン 11 のグラフィックス レンダリング パイプラインは、Direct3D バージョン 10 のグラフィックス レンダリング パイプラインから拡張されています。 Direct3D バージョン 10 でサポートされている共有のプログラミング可能なシェーダー コアに加えて、Direct3D バージョン 11 では、ハル、ドメイン、計算の各シェーダー コアもサポートされています。

Direct3D バージョン 11 では実際に、描画パイプライン (グラフィックス レンダリング パイプライン) とディスパッチ パイプライン (計算シェーダー パイプライン) という 2 つの別個のパイプラインがサポートされています。 描画パイプラインとディスパッチ パイプラインは、両方のパイプラインで同時に書き込むためにバインドされたか、あるいは一方のパイプラインで書き込みながら他方のパイプラインで読み取るためにバインドされた同じサブリソースを持つことができないという意味では、技術的に疎結合されています。

次の図は、Direct3D バージョン 11 の描画パイプラインの機能ブロックを示しています。

Diagram illustrating the functional blocks of the Direct3D version 11 draw pipeline.

次の図は、Direct3D バージョン 11 のディスパッチ パイプラインの機能ブロックを示しています。

Diagram illustrating the functional blocks of the Direct3D version 11 dispatch pipeline.

以降のセクションでは、これまでの図に示した new-for-Direct3D 11 ブロックについて説明していきます。

ハル シェーダー

ハル シェーダーはパッチごとに 1 回動作します。 ハル シェーダーは、入力アセンブラーからのパッチで使用できます。 ハル シェーダーは、パッチを構成する入力コントロール ポイントを出力コントロール ポイントに変換できます。 ハル シェーダーは、固定関数テッセレータ ステージに対して他の設定を実行できます。 たとえば、ハル シェーダーは、テッセレーションする量を示す数値である tess 係数を出力できます。

Direct3D ランタイムは、次のドライバー関数を呼び出して、ハル シェーダーの作成、設定、および破棄を行います。

Tessellator

テッセレータは固定関数ユニットであり、その操作はハル シェーダーの宣言によって定義されます。 テッセレータは、ハル シェーダーによって出力されるパッチごとに 1 回動作します。 ハル シェーダーは tess 係数を生成します。これは、パッチのドメイン全体でテッセレーション (ジオメトリと接続性を生成すること) する量をテッセレータに通知する数値です。

Direct3D ランタイムは、ドライバーの CalcPrivateTessellationShaderSize 関数を呼び出して、ハル シェーダーまたはドメイン シェーダーのメモリ領域のサイズを計算します。

ドメイン シェーダー

ドメイン シェーダーは、テッセレータによって生成される頂点ごとに 1 回呼び出されます。 各呼び出しは、汎用ドメイン上の座標によって識別されます。 ドメイン シェーダーの役割は、その座標を有形のもの (3-D 空間内のポイントなど) に変換して、ドメイン シェーダーのダウン ストリームで使用できるようにすることです。 パッチの各ドメイン シェーダー呼び出しは、すべてのハル シェーダー出力 (出力コントロール ポイントなど) の共有入力にもアクセスします。

Direct3D ランタイムは、次のドライバー関数を呼び出して、ドメイン シェーダーの作成、設定、および破棄を行います。

計算シェーダー

計算シェーダーを使用すると、GPU をデータ並列プロセッサの汎用グリッドとして表示でき、描画パイプラインからのグラフィックスの障害はありません。 計算シェーダーは、高速共有メモリに明示的にアクセスして、シェーダー呼び出しのグループ間の通信を容易にすることができます。 計算シェーダーには、メモリの読み取りと書き込みの分散を実行する機能もあります。 アトミック操作を実行できるので、共有メモリ アドレスへの一意のアクセスが可能になります。 計算シェーダーは、描画パイプラインの一部ではありません。 計算シェーダーは、単独で存在します。 ただし、計算シェーダーが存在するのは、他のすべてのシェーダー ステージと同じデバイス上です。 Direct3D ランタイムは、ドライバーの DrawXxx 関数ではなく、ドライバーの DispatchXxx 関数を呼び出して、計算シェーダーを呼び出します。

Direct3D ランタイムは、次のドライバー関数を呼び出して、計算シェーダーの作成、設定、および破棄を行います。

順序指定されていないアクセス リソース ビュー

順序指定されていないアクセス リソース ビューは、計算シェーダーまたはピクセル シェーダーにバインドできる読み取り/書き込みリソースです。 順序指定されていないアクセス リソース ビューをバインドすることは、読み取り専用リソースであるシェーダー リソース ビューを任意のシェーダー ステージにバインドする方法と似ています。

Direct3D ランタイムは、次のドライバー関数を呼び出して、順序指定されていないアクセス リソース ビューの作成、設定、および破棄を行います。