Direct3D 11 の機能

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

計算シェーダー

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

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

コンピューティングシェーダーには、独自の状態のセットがあります。 計算シェーダーには、入力レコード (頂点シェーダーなど) または出力レコード (ピクセルシェーダーなど) に対して強制的に1-1 マッピングが適用されるとは限りません。 グラフィックスシェーダーの一部の機能はサポートされていますが、新しい計算シェーダー固有の機能を追加できるように、他の機能は削除されています。

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

詳細については、「 Compute Shader の概要 」を参照してください。

ダイナミックシェーダーのリンク

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

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

Direct3D 11 およびシェーダーモデル5では、オブジェクト指向の言語構成要素が導入されており、開発者がプログラムシェーダーをサポートするためのシェーダーリンクのランタイムサポートを提供しています。

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

マルチスレッド

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

Direct3D 11 では、マルチスレッドをサポートするために次の機能が有効になります。

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

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

テセレーション

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

Direct3D では、粗い (詳細ではない) 入力パッチから滑らかな曲線を計算するために、テセレーションが GPU に実装されています。 各 (4 つまたは三角形の) パッチフェイスは、必要なサーフェイスに近い小さな三角形の面に分割されています。

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

機能の完全な一覧

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

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

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

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

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

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

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

    • サブルーチン

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

    • ジオメトリシェーダー ( ジオメトリシェーダーの特徴を参照)

      • インスタンス化-geometry シェーダーで最大1024の頂点、またはインスタンスと頂点の任意の組み合わせを 1024 (それぞれ32頂点の最大32インスタンス) に出力できます。
    • ピクセル シェーダー

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

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

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

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

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

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

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

    • Gather4

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

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

    • テクスチャフィルターに8ビットのサブテクビットとサブ mipmap の精度が必要

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

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

  • Direct3D 11 は大容量のメモリをサポートします。

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

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

    • 2倍のデ小数点型/ミリ秒
    • Count bits set 命令
    • 最初のビットセット命令の検索
    • キャリー/オーバーフロー処理
    • FFTs のビット反転の手順
    • 条件付きスワップ組み込み
    • バッファーの resinfo
    • 低精度の逆数
    • シェーダーの変換命令-fp16 から fp32 へ、およびその逆
    • 構造化バッファー。構造化された要素を含む新しい種類のバッファーです。
  • Direct3D 11 では、読み取り専用の深度ビューまたはステンシルビューがサポートされています。

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

  • Direct3D 11 はその他の機能をサポートしています

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

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

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

Direct3D 11 の新機能