次の方法で共有


Direct3D 12 を使用したパイプラインとシェーダー

Direct3D 12 プログラミング可能なパイプラインは、前世代のグラフィックス プログラミング インターフェイスと比較してレンダリング パフォーマンスを大幅に向上させます。

Direct3D 12 グラフィックス パイプライン

次の図は、Direct3D 12 グラフィックス パイプラインと状態を示しています。

direct3d 12 パイプラインと状態図

グラフィックス パイプラインは、GPU がフレームをレンダリングする場合のデータ入力と出力のシーケンシャル フローです。 パイプラインの状態と入力を考えると、GPU は一連の操作を実行して結果のイメージを作成します。 グラフィックス パイプラインには、プログラム可能なレンダリング効果と計算を実行するシェーダーと、固定関数操作が含まれています。

パイプライン状態図を参照する場合は、次の点に注意してください。

  • 記述子テーブルとヒープは任意に配置できます。SRV、CBV、UAV は任意の順序で参照および割り当てることができます。
  • パイプラインの一部の操作は構成可能です。 たとえば、出力マージャーは通常、レンダー ターゲットおよび深度ステンシル ビューを使用して、読み取り/変更/書き込みベースで動作します。 ただし、これらのビューのいずれかが読み取り専用または書き込み専用になるようにパイプラインを構成できます。
  • 静的サンプラーは静的であるため、ルート引数の一部ではありません。

パイプライン状態オブジェクト

Direct3D 12 では、パイプライン状態オブジェクト (PSO) が導入されています。 多数の高レベル オブジェクトにわたってパイプラインの状態を格納して表すのではなく、入力アセンブラー、ラスタライザー、ピクセル シェーダー、出力マージャーなどのパイプライン コンポーネントの状態が PSO に格納されます。 PSO は、作成後に変更できない統合パイプライン状態オブジェクトです。 現在選択されている PSO は迅速かつ動的に変更でき、ハードウェアとドライバーは PSO をネイティブのハードウェア命令と状態に直接変換して、グラフィックス処理用の GPU を準備できます。 PSO を適用するために、ハードウェアは最小限の事前計算済み状態をハードウェア レジスタに直接コピーします。 これにより、グラフィックス ドライバーによって引き起こされるオーバーヘッドが、現在適用されているすべてのレンダリングとパイプラインの設定に基づいてハードウェアの状態を継続的に再計算する必要がなくなります。 その結果、描画呼び出しのオーバーヘッドが大幅に削減され、パフォーマンスが向上し、フレームあたりの描画呼び出しが増えます。

現在適用されている PSO は、レンダリング パイプラインで使用されているすべてのシェーダーを定義して接続します。 Microsoft High Level Shader Language (HLSL) はシェーダー オブジェクトに事前コンパイルされ、実行時にパイプライン状態オブジェクトの入力として使用されます。 グラフィックス パイプライン内での PSO の機能の詳細については、「Direct3D 12でのグラフィックス パイプラインの状態の管理」を参照してください。

Direct3D 12 コンピューティング パイプライン

次の図は、Direct3D 12 コンピューティング パイプラインと状態を示しています。

Direct3D 12 コンピューティング パイプラインを示す図。

このパイプラインには固定関数ユニットはありませんが、記述子ヒープ、サンプラー ヒープ、静的サンプラーは引き続きコンピューティングで使用できます。

Direct3D 12 での作業の送信を する