Direct3D 11 の機能

プログラミング ガイドには、Direct3D 11 プログラミング可能なパイプラインを使用して、ゲームや科学およびデスクトップ アプリケーション用のリアルタイム 3D グラフィックスを作成する方法に関する情報が含まれています。

計算シェーダー

コンピューティング シェーダーは、汎用データ並列処理用に設計されたプログラミング可能なシェーダーです。 つまり、コンピューティング シェーダーを使用すると、GPU を汎用並列プロセッサとして使用できます。 コンピューティング シェーダーは、入力と出力にアクセスする方法で、他のプログラミング可能なパイプライン シェーダー (頂点、ピクセル、ジオメトリなど) と似ています。 コンピューティング シェーダー テクノロジは、DirectCompute テクノロジとも呼ばれます。 コンピューティング シェーダーは Direct3D に統合され、Direct3D デバイスを介してアクセスできます。 Direct3D デバイスを使用して、メモリ リソースをグラフィックス シェーダーと直接共有できます。 ただし、他のシェーダー ステージには直接接続されません。

コンピューティング シェーダーは、API (および関連するソフトウェア スタック) と CPU の間の移行コストが多すぎるオーバーヘッドを消費する場合に、対話型のレートで計算を実行するマスマーケット アプリケーション向けに設計されています。

コンピューティング シェーダーには、独自の状態のセットがあります。 コンピューティング シェーダーには、必ずしも、入力レコード (頂点シェーダーのように) または出力レコード (ピクセル シェーダーのように) への強制的な 1 から 1 のマッピングが含まれているわけではありません。 グラフィックス シェーダーの一部の機能はサポートされていますが、新しいコンピューティング シェーダー固有の機能を追加できるように削除された機能もあります。

コンピューティング シェーダー固有の機能をサポートするために、読み取り/書き込みバッファー、テクスチャ、構造化バッファーなど、いくつかの新しいリソースの種類を使用できるようになりました。

詳細については、「 コンピューティング シェーダーの概要 」を参照してください。

動的シェーダー リンク

レンダリング システムは、シェーダーを管理するときに大幅な複雑さに対処する必要があり、シェーダー コードを最適化する機会を提供します。 シェーダーは、さまざまなハードウェア構成でレンダリングされたシーンのさまざまなマテリアルをサポートする必要があるため、これはさらに大きな課題になります。 この課題に対処するために、シェーダー開発者は多くの場合、2 つの一般的なアプローチのいずれかに頼っています。 さまざまなシーン アイテムで使用できる、完全に機能する大規模な汎用シェーダーを作成し、柔軟性のためにパフォーマンスをトレードオフするか、必要なジオメトリ ストリーム、マテリアル タイプ、またはライト タイプの組み合わせごとに個別のシェーダーを作成しました。

これらの大規模な汎用シェーダーは、異なるプリプロセッサ定義で同じシェーダーを再コンパイルすることでこの課題を処理します。後者の方法では、ブルート フォース開発者の能力を使用して同じ結果を実現します。 シェーダーの順列の展開は、多くの場合、ゲームおよびアセット パイプライン内で何千もの異なるシェーダー順列を管理する必要がある開発者にとって問題でした。

Direct3D 11 とシェーダー モデル 5 では、オブジェクト指向言語コンストラクトが導入され、開発者がシェーダーをプログラムするのに役立つシェーダー リンクのランタイム サポートが提供されます。

詳細については、「 動的リンク」 を参照してください。

マルチスレッド

多くのグラフィックス アプリケーションは、シーン グラフトラバーサル、オブジェクトの並べ替え、物理シミュレーションなどのコストのかかるアクティビティにより、CPU にバインドされています。 マルチコア システムの利用が増えているため、Direct3D 11 では、複数の CPU スレッドと D3D11 グラフィックス API 間の効率的な対話を可能にするために、マルチスレッドのサポートが強化されています。

Direct3D 11 では、次の機能でマルチスレッドをサポートできます。

  • 同時実行オブジェクトが個別のスレッドで作成されるようになりました。オブジェクトを作成するエントリ ポイント関数をフリー スレッドにすると、多くのスレッドで同時にオブジェクトを作成できます。 たとえば、アプリケーションでシェーダーをコンパイルしたり、別のスレッドでレンダリングしながらテクスチャを読み込んだりできるようになりました。
  • コマンド リストは、複数のスレッドで作成できます。コマンド リストは、記録されたグラフィックス コマンドのシーケンスです。 Direct3D 11 では、複数の CPU スレッドにコマンド リストを作成できます。これにより、シーン データベースの並列トラバーサルや、複数のスレッドでの物理処理が可能になります。 これにより、メインレンダリング スレッドが解放され、コマンド バッファーがハードウェアにディスパッチされます。

詳細については 、「マルチスレッド 」を参照してください。

テセレーション

テセレーションは、さまざまな詳細レベルを持つ単一のモデルをレンダリングするために使用できます。 この方法では、シーンに必要な詳細レベルに応じて、より幾何学的に正確なモデルが生成されます。 詳細レベルが低いジオメトリ モデルを可能にするシーンでテセレーションを使用すると、レンダリング中に消費されるメモリ帯域幅の需要が減少します。

Direct3D では、GPU にテセレーションが実装され、粗い (詳細でない) 入力パッチからより滑らかな曲面が計算されます。 各 (四角形または三角形) パッチ面は、目的のサーフェスに適した小さな三角形の面に分割されます。

グラフィックス パイプラインでのテセレーションの実装の詳細については、「 テセレーションの概要」を参照してください。

機能の完全な一覧

これは、Direct3D 11 の機能の完全な一覧です。

  • デバイスの作成時に機能レベルを指定することで、ダウンレベル ハードウェアで Direct3D 11 を実行できます。

  • 次のシェーダーの種類を使用して、テセレーションを実行できます ( 「テセレーションの概要」を参照)。

    • ハル シェーダー
    • ドメイン シェーダー
  • Direct3D 11 ではマルチスレッドがサポートされています (「 マルチスレッド」を参照)

    • マルチスレッド リソース/シェーダー/オブジェクトの作成
    • マルチスレッド表示リストの作成
  • Direct3D 11 では、次の機能を使用してシェーダーを拡張します ( シェーダー モデル 5 を参照)

    • アドレス指定可能なリソース - テクスチャ、定数バッファー、サンプラー

    • 読み取り/書き込みバッファーやテクスチャなどのその他のリソースの 種類 (「新しいリソースの種類」を参照)。

    • サブルーチン

    • コンピューティング シェーダー ( 「コンピューティング シェーダーの概要」を参照) - 複数のソフトウェア スレッドまたはスレッド のグループ間で問題領域を分割し、シェーダー レジスタ間でデータを共有してシェーダーへの入力に必要なデータ量を大幅に削減することで、計算を高速化するシェーダー。 コンピューティング シェーダーが大幅に改善できるアルゴリズムには、後処理、アニメーション、物理学、人工知能が含まれます。

    • ジオメトリ シェーダー (「 ジオメトリ シェーダー機能」を参照)

      • インスタンス化 - ジオメトリ シェーダーが最大 1024 個の頂点、または最大 1024 個のインスタンスと頂点の任意の組み合わせを出力できるようにします (各頂点の最大 32 インスタンス)。
    • ピクセル シェーダー

      • PS 入力としてのカバレッジ

      • 入力のプログラミング可能な補間 - ピクセル シェーダーは、マルチサンプル グリッド上の任意の場所で、ピクセル内の属性を評価できます

      • 属性の重心サンプリングは、次の規則に従う必要があります。

        • プリミティブ内のすべてのサンプルがカバーされている場合、サンプル パターンがピクセル中心にサンプル位置を持っているかどうかに関係なく、属性はピクセル中心で評価されます。

        • それ以外の場合、属性は最初にカバーされたサンプル、つまりすべてのサンプル インデックスの中で最も低いインデックスを持つサンプルで評価されます。 この状況では、サンプル カバレッジは、カバレッジとサンプル マスク ラスタライザーの状態に論理 AND 演算を適用した後に決定されます。

        • サンプルがカバーされていない場合 (2x2 ピクセル スタンプを入力するためにプリミティブの境界から実行されるヘルパー ピクセルなど)、属性は次のいずれかの方法で評価されます。

          • サンプル マスク ラスタライザーの状態がピクセル内のサンプルのサブセットである場合、サンプル マスク ラスタライザーの状態でカバーされる最初のサンプルが評価ポイントになります。
          • それ以外の場合、完全なサンプル マスク条件では、ピクセルの中心が評価ポイントになります。
  • Direct3D 11 では、次の機能を使用してテクスチャを拡張します ( 「テクスチャの概要」を参照)。

    • Gather4

      • マルチコンポーネント テクスチャのサポート - 読み込み元のチャネルを指定する
      • プログラム可能なオフセットのサポート
    • ストリーム

      • WDDM プリロードを制限するテクスチャ クランプ
    • 16K テクスチャの制限

    • テクスチャ フィルタリングに 8 ビットのサブテキセルとサブミップ精度が必要

    • 新しいテクスチャ圧縮形式 (1 つの新しい LDR 形式と 1 つの新しい HDR 形式)

  • Direct3D 11 では保守的な oDepth がサポートされています。このアルゴリズムにより、ピクセル シェーダーは、ピクセル シェーダーのピクセルごとの深度値とラスタライザー内のピクセルごとの深度値を比較できます。 これにより、ピクセル シェーダーから oDepth を出力する機能を維持しながら、早期深度カリング操作が可能になります。

  • Direct3D 11 では、大容量メモリがサポートされます

    • 4 GB のリソース > を許可する
    • リソースのインデックスを 32 ビットに維持しますが、リソースは大きくします
  • Direct3D 11 では、ストリーム出力の機能強化がサポートされています

    • アドレス指定可能なストリーム出力
    • ストリーム出力数を 4 に増やす
    • すべてのストリーム出力バッファーを複数要素に変更する
  • Direct3D 11 ではシェーダー モデル 5 がサポートされています ( シェーダー モデル 5 を参照)

    • デナーム付きダブル
    • Count bits set 命令
    • 最初のビット セット命令を検索する
    • キャリー/オーバーフロー処理
    • FFT のビット反転命令
    • 条件付きスワップの組み込み
    • バッファー上の Resinfo
    • 精度の逆数の削減
    • シェーダー変換命令 - fp16 から fp32 、またはその逆
    • 構造化バッファー。構造化要素を含む新しい種類のバッファーです。
  • Direct3D 11 では、読み取り専用の深度ビューまたはステンシル ビューがサポートされています

    • 読み取り専用の部分への書き込みを無効にし、テクスチャを入力として使用したり、深度カリングを行うことができます
  • Direct3D 11 では、間接描画がサポートされています。Direct3D 10 では DrawAuto が実装されています。これは、(GPU によって生成された) コンテンツを受け取り、それを (GPU 上で) レンダリングします。 Direct3D 11 は DrawAuto を一般化し、DrawInstanced と DrawIndexedInstanced を使用してコンピューティング シェーダーによって呼び出すことができるようにします。

  • Direct3D 11 では、その他の機能がサポートされています

    • 浮動小数点ビューポート
    • リソースごとのミップマップクランプ
    • 深度バイアス - このアルゴリズムは、ラスタライザーの状態を使用して深度バイアスの動作を更新します。 その結果、計算されたバイアスが NaN になる可能性があるシナリオはなくなります。
    • リソースの制限 - リソース インデックスは引き続き = 32 ビットである <必要がありますが、リソースは 4 GB を超える可能性があります。
    • ラスタライザーの精度
    • MSAA の要件
    • カウンターの削減
    • 1 ビット形式とテキスト フィルターが削除されました

以前のリリースで追加された機能

以前のリリースで追加された機能の一覧については、次のトピックを参照してください。

Direct3D 11 の新機能