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 スレッドにコマンド リストを作成できます。これにより、シーン データベースの並列トラバーサルや、複数のスレッドでの物理処理が可能になります。 これにより、メイン レンダリング スレッドが解放され、コマンド バッファーがハードウェアにディスパッチされます。
詳細については、マルチスレッド の を参照してください。
テセレーション
テッセレーションを使用すると、さまざまな詳細レベルで 1 つのモデルをレンダリングできます。 この方法では、シーンに必要な詳細レベルに応じて、より幾何学的に正確なモデルが生成されます。 詳細レベルが低いジオメトリ モデルが可能なシーンでテッセレーションを使用すると、レンダリング中に消費されるメモリ帯域幅に対する需要が減少します。
Direct3D では、GPU にテッセレーションが実装され、粗い (詳細ではない) 入力パッチからより滑らかな曲面が計算されます。 各 (クワッドまたは三角形) パッチ面は、必要なサーフェスをより適切に近似する小さな三角形の面に分割されます。
グラフィックス パイプラインでのテッセレーションの実装の詳細については、「テッセレーションの概要」を参照してください。
機能の完全な一覧
Direct3D 11 の機能の完全な一覧です。
Direct3D 11 は、デバイスの作成時に 機能レベルを指定することで、ダウンレベルのハードウェア で実行できます。
次のシェーダー タイプを使用して、テッセレーションを実行できます (テセレーションの概要を参照)。
- ハル シェーダー
- ドメイン シェーダー
Direct3D 11 ではマルチスレッドがサポートされています (マルチスレッド 参照)
- マルチスレッド リソース/シェーダー/オブジェクトの作成
- マルチスレッド表示リストの作成
Direct3D 11 では、次の機能を使用してシェーダーを拡張します (シェーダー モデル 5 参照)
アドレス指定可能なリソース - テクスチャ、定数バッファー、サンプラー
サブルーチン
コンピューティング シェーダー (コンピューティング シェーダーの概要を参照) - 複数のソフトウェア スレッドまたはスレッド のグループ間で問題領域を分割し、シェーダー レジスタ間でデータを共有することで計算を高速化するシェーダーで、シェーダーへの入力に必要なデータ量を大幅に削減します。 計算シェーダーが大幅に改善できるアルゴリズムには、後処理、アニメーション、物理、人工知能などがあります。
ジオメトリ シェーダー (「ジオメトリ シェーダー機能」を参照)
- インスタンス化 - ジオメトリ シェーダーは、最大 1024 個の頂点、またはインスタンスと頂点の任意の組み合わせを最大 1024 個 (最大 32 個の頂点の最大 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 参照)
- 二重と非正規化
- カウント ビット セット命令
- 最初のビット セット命令を検索する
- 持ち運び/オーバーフロー処理
- FFT のビット反転命令
- 条件付きスワップ組み込み関数
- バッファー上の Resinfo
- 精度の逆数を減らしました
- シェーダー変換命令 - fp16 から fp32、その逆
- 構造化バッファー。構造化要素を含む新しい種類のバッファーです。
Direct3D 11 では、読み取り専用の深度ビューまたはステンシル ビューがサポートされます
- 読み取り専用のパーツへの書き込みを無効にし、入力としてテクスチャを使用したり、深度カリングを実行したりできます。
Direct3D 11 では、間接的な描画がサポートされています。Direct3D 10 は DrawAuto を実装します。DrawAuto は、(GPU によって生成された) コンテンツを受け取り、(GPU 上で) レンダリングします。 Direct3D 11 は DrawAuto を一般化し、DrawInstanced と DrawIndexedInstanced を使用して計算シェーダーから呼び出すことができるようにします。
Direct3D 11 では、その他の機能がサポートされています
- 浮動小数点ビューポート
- リソースごとのミップマップクランプ
- 深度バイアス - このアルゴリズムは、ラスタライザー状態を使用して深度バイアスの動作を更新します。 その結果、計算されたバイアスが NaN になる可能性があるシナリオが排除されます。
- リソースの制限 - リソース インデックスは引き続き <= 32 ビットである必要がありますが、リソースは 4 GB を超える可能性があります。
- ラスタライザーの精度
- MSAA の要件
- カウンターの削減
- 1 ビット形式とテキスト フィルターが削除されました
以前のリリースで追加された機能
以前のリリースで追加された機能の一覧については、次のトピックを参照してください。
関連トピック
-
Direct3D 11 の新機能