システム生成値は、シェーダー操作の特定の効率を可能にするために、(ユーザー指定の入力 セマンティクスに基づいて) Input Assembler (IA) ステージ によって生成されます。 インスタンス ID (頂点シェーダー (VS) ステージに表示される)、頂点 ID (VS から参照可能)、プリミティブ ID (ジオメトリ シェーダー (GS) ステージ/ピクセル シェーダー (PS) ステージに表示) などのデータをアタッチすることで、後続のシェーダー ステージでこれらのシステム値を検索して、そのステージでの処理を最適化できます。
たとえば、VS ステージは、シェーダーの頂点ごとの追加データを取得したり、他の操作を実行したりするために、インスタンス ID を探す場合があります。GS ステージと PS ステージでは、プリミティブ ID を使用して、プリミティブごとのデータを同じ方法で取得できます。
VertexID の
頂点 ID は、各シェーダー ステージで各頂点を識別するために使用されます。 既定値が 0 の 32 ビット符号なし整数です。 これは、プリミティブが Input Assembler (IA) ステージによって処理されるときに頂点に割り当てられます。 頂点 ID セマンティックをシェーダー入力宣言にアタッチして、頂点ごとの ID を生成するように IA ステージに通知します。
IA は、シェーダー ステージで使用するために各頂点に頂点 ID を追加します。 描画呼び出しごとに、頂点 ID は 1 ずつインクリメントされます。 インデックス付き描画呼び出しの間に、カウントは開始値にリセットされます。 頂点 ID がオーバーフローした場合 (2 ² – 1 を超える)、0 に折り返されます。
すべてのプリミティブ型について、頂点には頂点 ID が関連付けられています (隣接関係なく)。
プリミティブID
プリミティブ ID は、各プリミティブを識別するために各シェーダー ステージによって使用されます。 既定値が 0 の 32 ビット符号なし整数です。 これは、プリミティブが Input Assembler (IA) ステージによって処理されるときにプリミティブに割り当てられます。 プリミティブ ID を生成するように IA ステージに通知するには、プリミティブ ID セマンティックをシェーダー入力宣言にアタッチします。
IA ステージは、ジオメトリ シェーダー (GS) ステージ または 頂点シェーダー (VS) ステージ (IA ステージの後にアクティブな最初のステージのいずれか) で使用するプリミティブ ID を各プリミティブに追加します。 インデックスが作成された描画呼び出しごとにプリミティブ ID は 1 ずつインクリメントされますが、新しいインスタンスが開始されるたびにプリミティブ ID は 0 にリセットされます。 他のすべての描画呼び出しでは、インスタンス ID の値は変更されません。 インスタンス ID がオーバーフローした場合 (2 ² – 1 を超える)、0 に折り返されます。
ピクセル シェーダー (PS) ステージ には、プリミティブ ID 用の個別の入力がありません。ただし、プリミティブ ID を指定するピクセル シェーダー入力では、定数補間モードが使用されます。
隣接するプリミティブのプリミティブ ID を自動的に生成することはできません。 隣接性を持つ三角形ストリップなどの隣接性を持つプリミティブ型の場合、プリミティブ ID は、隣接性のない三角形ストリップ内のプリミティブのセットと同様に、内部プリミティブ (隣接しないプリミティブ) に対してのみ保持されます。
インスタンスID
インスタンス ID は、現在処理されているジオメトリのインスタンスを識別するために、各シェーダー ステージで使用されます。 既定値が 0 の 32 ビット符号なし整数です。
入力アセンブラー (IA) ステージ は、頂点シェーダー入力宣言にインスタンス ID セマンティックが含まれている場合、各頂点にインスタンス ID を追加します。 インデックス付き描画呼び出しごとに、インスタンス ID は 1 ずつインクリメントされます。 他のすべての描画呼び出しでは、インスタンス ID の値は変更されません。 インスタンス ID がオーバーフローした場合 (2 ² – 1 を超える)、0 に折り返されます。
の例
次の図は、Input Assembler (IA) ステージのインスタンス化された三角形ストリップにシステム値をアタッチする方法を示しています。
のシステム値の図
これらの表は、同じ三角形ストリップの両方のインスタンスに対して生成されたシステム値を示しています。 最初のインスタンス (インスタンス U) は青で表示され、2 番目のインスタンス (インスタンス V) は緑色で表示されます。 実線はプリミティブ内の頂点を接続し、破線は隣接する頂点を接続します。
次の表は、インスタンス U のシステム生成値を示しています。
頂点データ | C、U | D、U | E、U | F、U | G、U | H、U | 私、あなた | J、U | K、U | L、U |
---|---|---|---|---|---|---|---|---|---|---|
VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
InstanceID | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
三角形ストリップ インスタンス U には、次のシステム生成値を持つ 3 つの三角形プリミティブがあります。
値 1 | 値 2 | 値 3 | |
---|---|---|---|
PrimitiveID | 0 | 1 | 2 |
InstanceID | 0 | 0 | 0 |
次の表は、インスタンス V のシステム生成値を示しています。
頂点データ | C、V | D、V | E、V | F、V | G、V | H、V | I,V | J、V | K、V | L、V |
---|---|---|---|---|---|---|---|---|---|---|
VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
InstanceID | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
三角形ストリップ インスタンス V には、次のシステム生成値を持つ 3 つの三角形プリミティブがあります。
値 1 | 値 2 | 値 3 | |
---|---|---|---|
PrimitiveID | 0 | 1 | 2 |
InstanceID | 1 | 1 | 1 |
入力アセンブラー (IA) ステージ ID (頂点、プリミティブ、インスタンス) が生成されます。各インスタンスには一意のインスタンス ID が与えられていることにも注意してください。 データは、三角形ストリップの各インスタンスを区切るストリップ カットで終わります。
関連トピック