Direct3D 12 用語集
これらの用語は Direct3D 12 に特有のものです。
-
バインディング
-
グラフィックス パイプラインにメモリをアタッチするプロセス。 たとえば、リソース バインドには、オブジェクトのレンダリングに使用する、テクスチャなどのリソースをパイプラインにバインドすることが含まれます。
-
バッファー
-
D3D リソースの種類。連続するメモリ割り当てと同義です。
-
バンドル
-
グラフィックス処理装置 (GPU) が "直接コマンド リスト" を介してのみ直接実行できるコマンド バッファー。 バンドルは、(現在設定されている "パイプライン状態オブジェクト" とプリミティブ トポロジを除く) すべての GPU 状態を継承します。
-
コマンド アロケーター
-
GPU コマンドが格納される基になるメモリ割り当て。 コマンド アロケーター オブジェクトは、"直接コマンド リスト" と "バンドル" の両方に適用されます。
-
コマンド リスト
-
コマンド リストは、GPU が実行する一連のコマンドに相当します。 これには、状態設定、描画、消去、コピーなどのコマンドが含まれます。 D3D12 のコマンド リスト インターフェイスは、D3D11 のコマンド リスト インターフェイスと大きく異なります。 D3D12 のコマンド リスト インターフェイスには、D3D11 のデバイス コンテキスト レンダリング API シリーズに似た API シリーズが含まれています。
D3D12 のコマンド リストは、リソースのマッピングまたはマッピング解除、タイル マッピングの変更、タイル プールのサイズ変更、クエリ データの取得を行うことも、実行のためにコマンドを暗黙的に GPU に送信することもありません。
D3D12 のコマンド リストでは、D3D11 の遅延コンテキストとは異なり、2 レベルの間接指定のみをサポートします。 "直接コマンド リスト" は、GPU が実行できるコマンド バッファーに対応します。 "バンドル" を直接実行できるのは、直接コマンド リストを介してのみです。
直接コマンド リストは、どのような GPU 状態も継承しません。 バンドルは、(現在設定されている "パイプライン状態オブジェクト" とプリミティブ トポロジを除く) すべての GPU 状態を継承します。
コマンド リスト用のメモリは、"コマンド アロケーター" によって設定されます。 コマンド リストの目的は、それらを 1 つのレンダリング要求として GPU に送信することです。
-
コマンド キュー
-
GPU が連続して実行する "コマンド リスト" のキュー。 アプリケーションは、実行用に "コマンド リスト" を明示的にコマンド キューに送信する必要があります。 通常、3D グラフィックス、コンピューティング、コピーの 3 つのコマンド キューがあります。これは、GPU 上の 3D グラフィックス パイプライン、コンピューティング エンジン、および 1 つ以上のコピー エンジンに対応します。
-
保守的なラスター化
-
保守的なラスター化とは、Direct3D グラフィックス パイプラインのラスタライザー ステージに対する動作モードです。 これにより、標準的なサンプルベースのラスター化が無効になり、代わりに、任意の量のプリミティブによってカバーされるピクセルがラスター化されます。 1 つの重要な違いとして、1 つでもカバレッジがあればラスター化されたピクセルが生成されますが、そのカバレッジはハードウェアによって特徴付けることができません。そのため、ピクセル シェーダーにとってカバレッジは常にバイナリ (完全にカバーされているか、カバーされていない) のように映ります。 実際のカバレッジを分析的に決定するのはピクセル シェーダー コードの役割になっています。
保守的なラスター化は、ピクセルの色がより確定的でエッジ ケースを排除できる、衝突やヒットの検出などの問題、ビン分割、オクルージョン カリングなどに役立ちます。 「保守的なラスター化」を参照してください。
-
定数バッファー ビュー (CBV)
-
定数バッファーには、カメラ ビュー、投影行列、ワールド行列などのシェーダー定数データが含まれます。 "定数バッファー ビュー" は、グラフィックス パイプラインから見た、バッファーの形式固有のビューです。
-
既定のヒープ
-
GPU で記述されたリソースを含む、永続的な GPU リソースの種類のサポートに焦点を当てたユーザーモード ヒープ。
-
記述子
-
記述子は、D3D12 の単一リソースに対するバインドの主要な単位です。 記述子は、GPU 固有の形式でオブジェクトを GPU に対して完全に記述する、比較的小さなデータのブロックです。 記述子には、シェーダー リソース ビュー (SRV)、順序なしのアクセス ビュー (UAV)、定数バッファー ビュー (CBV)、サンプラーなど、さまざまな種類があります。
-
記述子ヒープ
-
記述子ヒープは、記述子の連続した割り当てのコレクションです。記述子ごとに 1 つの割り当てがあります。 記述子ヒープの重要な点は、シェーダーが参照するオブジェクトの種類の記述子仕様を格納するために必要な大量のメモリ割り当てを、可能な限り大きなレンダリング時間枠 (理想的にはレンダリングのフレーム全体以上) で含むことです。
-
記述子テーブル
-
記述子テーブルは、論理的には記述子の配列です。 各記述子テーブルには、SRV、UAV、CBV、サンプラーなど、1 つまたは複数の種類の記述子が格納されます。 記述子テーブルは、メモリの割り当てではなく、単に記述子ヒープへのオフセットと長さです。
-
直接コマンド リスト
-
GPU が実行できるコマンド バッファー。 直接コマンド リストは、どのような GPU 状態も継承しません。
-
フェンス
-
GPU と CPU を同期するメカニズム。 GPU と CPU の両方に対して、他のプロセッサが追いつくのを待つためにフェンスで待機するように命令することができます。 「マルチエンジン同期」を参照してください。
-
ハザード、ハザード追跡
-
ハザードは、ある目的のために使用されたリソースをアプリが別の目的のために再利用しようとしたときに発生します。 リソースを再度使用するには、中間キャッシュをフラッシュするか無効にする必要があるうえに、圧縮要件が 2 回目の使用と一致する必要があります。また、リソースを必要な状態に移行することによって、リソースが書き込み後に読み取られ、意図した目的に対して無効になるのを防ぐ必要があります。
リソースを管理し、このような同期の問題を回避するプロセスは、ハザード追跡と呼ばれます。 ドライバーによるハザード追跡がない場合は、アプリがその役割を担います。 DirectX のこれまでのバージョンのほとんどでは、ハザード追跡はドライバーによって処理されていました。 DirectX 12 では、パフォーマンス向上のために、ハザード追跡を行わないメソッドを利用できます。
-
高レベルシェーダー言語 (HLSL)
-
シェーダー コードの記述に使用されるコンピューター言語。C と似ていますが、多くの点で明確な違いがあります。 頂点、ピクセル、ジオメトリ、計算、ドメイン、およびハル シェーダーはすべて、HLSL を使用して記述されます。 コンパイラにより、HLSL ソースは、GPU が使用できるようにバイナリ形式に変換されます。
-
マルチエンジン
-
単一の GPU 内のエンジンのさまざまなインスタンスと種類。 エンジンの種類には、グラフィックス、計算、コピーがあります。
-
MultiGPU
-
複数のグラフィックス アダプターがあるハードウェア構成。 個々のアダプターはノードと呼ばれる場合もあります。 複数の GPU を使用する場合は、CPU との同期タスクや相互の同期タスクが、単一の GPU を使用する場合よりもかなり複雑になる可能性があります。
-
パイプライン状態オブジェクト (PSO)
-
GPU の状態の重要な部分。 この状態には、現在設定されているすべてのシェーダーと特定の固定機能状態オブジェクトが含まれます。 パイプライン オブジェクト内に含まれる状態を変更する唯一の方法は、現在バインドされているパイプライン オブジェクトを変更することです。
-
プレディケーション
-
プレディケーションとは、CPU ではなく GPU がオブジェクトを描画、コピー、またはディスパッチしないことを決定できるようにする機能です。 たとえば、あるオブジェクトの境界ボックスが別のオブジェクトによって完全に隠されている場合、またはパースペクティブによってオブジェクトがピクセル サイズよりも小さく縮小されている場合、非表示のオブジェクトを描画しても意味がありません。 「プレディケーション」を参照してください。
-
ラスタライザー順序指定ビュー (ROV)
-
標準グラフィックス パイプラインでは、透明性を含む複数のテクスチャを正しく合成するのに問題がある可能性があります。 ワイヤー フェンス、煙、火、植物、色付きガラスなどのオブジェクトでは、目的の効果を得るために透明性が使用されます。 透明性を含む複数のテクスチャが互いに並んでいると、問題が発生します (たとえば、植物を含むガラスの建物の前のフェンスの前の煙)。 ラスタライザー順序指定ビュー (ROV) を使用すると、基になる順序非依存の透明性 (OIT) アルゴリズムにより、ハードウェアの機能を使用して透明性の順序を正しく解決しようと試みることができます。 透明性はピクセル シェーダーによって処理されます。
ラスタライザー順序指定ビュー (ROV) により、ピクセル シェーダー コードで、順序指定されていないアクセス ビュー (UAV) のバインドに対して、UAV のグラフィックス パイプライン結果の順序に関する通常の要件を変更する宣言をマークできます。
-
リードバック ヒープ
-
GPU から CPU へのデータ転送に重点を置いたユーザーモード ヒープ。
-
リソース
-
パイプラインにデータを提供し、シーン内でレンダリングされる対象を定義するエンティティ。 リソースは、ゲーム メディアから読み込むことも、実行時に動的に作成することもできます。 通常、リソースには、テクスチャ データ、頂点データ、およびシェーダー データが含まれます。 ほとんどの Direct3D アプリケーションは、その有効期間を通じて広範囲にリソースを作成および破棄します。
-
リソース バリア
-
リソース バリアは、単一のリソースへの複数のアクセスの同期が必要になる可能性があることをドライバーに通知します (たとえば、同じテクスチャの読み取りと書き込み)。
-
リソース バインド
-
リソース バインドとは、リソース (テクスチャ、頂点バッファー、インデックス バッファーなど) をグラフィックス パイプラインにリンクして、パイプラインのシェーダーが適切なリソースを処理できるようにするプロセスです。
-
リソース ヒープ
-
リソース ヒープとは、GPU との間で転送されるリソースを保持するために確保されるメモリ バッファーであるヒープの総称です。 GPU への転送にはアップロード ヒープが必要になり、GPU から CPU への転送にはリードバック ヒープが必要になります。GPU が複数のレンダリング フレームにわたって維持する持続的ヒープは、既定のヒープと呼ばれます。
-
ルート署名
-
ルート署名は、グラフィックスまたは計算パイプラインにバインドされるすべてのリソースを定義します。 ルート署名はアプリによって構成され、コマンド リストをシェーダーが必要とするリソースにリンクします。通常、アプリごとに 1 つのグラフィックスと 1 つの計算ルート署名があります。
-
サンプラー
-
サンプラーは、テクスチャから読み取るコードです。
-
シェーダー リソース ビュー (SRV)
-
テクスチャなど、シェーダー リソース内のデータを表示するための形式に固有の方法。
-
静的ヒープ
-
通常同時に使用され、頻繁には変更されない複数の GPU 読み取り専用リソースに重点を置いたユーザーモード ヒープ。
-
スワップ チェーン
-
スワップ チェーンは、バック バッファーのローテーションを制御し、グラフィックス アニメーションの基礎となります。 スワップ チェーンは、低レベル API セットの DXGI によって処理されます (「DXGI Overview (DXGI の概要)」を参照)。
-
スウィズル
-
次元の近いデータが近いアドレスを持つようにメモリ内の多次元データを配置する手法。 特に、ある行のすべてのデータがその次の行のデータの前に連続して配置されるわけではありません。 "パラメーター化されたスウィズル" は、スウィズル パターンを記述するための標準化された方法を記述します。
-
テクスチャ
-
多次元であり、GPU からの多次元アクセス用に最適化されたメモリ レイアウトを持つ D3D リソースの一種。 テクスチャには、ライティングやブレンディングが行われる前に、サーフェス上にレンダリングするために必要な生の画像が含まれることがよくありますが、色のグラデーションや基準色などの他の形式のデータを含めることもできます。 Direct3D 12 は、1 次元、2 次元、3 次元のテクスチャをサポートしています。
-
タイル
-
メモリの CPU またはシステム ページに似たビデオ メモリのページ。 タイル表記は、GPU 仮想メモリ サブシステムと CPU 仮想メモリ サブシステムを区別するのに役立ちます。 GPU は、システム仮想メモリと同様の仮想メモリ機能を提供します。 一部の GPU は、仮想メモリ サブシステムの一部のページを CPU と GPU の両方で共有することを可能にする共有仮想メモリ機能を備えます。
-
タイルリソース
-
タイル リソースは、アクセスされないことがわかっているサーフェスの領域をアプリケーションが保存することで無駄に使用される GPU メモリを少なくするため、および隣接するタイルをまたいでフィルター処理する方法をハードウェアが理解できるようにするために必要です。 タイル リソースは大きな論理リソースですが、必要な物理メモリは少量です。
-
順序なしアクセス ビュー (UAV)
-
リソース (マルチサンプリングなしのバッファー、テクスチャ、テクスチャ配列を含む) への順序指定されていないアクセス ビューは、複数のスレッドからの時間的に順序指定されていない読み取り/書き込みアクセスを可能にします。 つまり、このリソースの種類は、メモリの競合を発生させることなく、複数のスレッドによって同時に読み書きできます。
-
アップロード ヒープ
-
CPU から GPU へのデータ転送に重点を置いたユーザーモード ヒープ。
-
ユーザーモード ヒープ
-
カーネル コンポーネントが認識することなくリサイクルされる、大規模で連続したメモリ割り当てのコレクション。割り当ておよび破棄メソッドは、定常状態の間にカーネル割り当ておよび破棄メソッドを呼び出しません。 アップロード ヒープ、リードバック ヒープ、および既定のヒープは、ユーザー モード ヒープのバリアントです。
-
ボリューム タイル リソース
-
3 次元のタイル リソース。