レジスタ - hs_5_0
ハル シェーダーは、コントロール ポイント フェーズ、フォーク フェーズ、結合フェーズの 3 つの異なるフェーズで構成されます。 各フェーズには、独自の入力レジスタと出力レジスタのセットがあります。
hs_control_point_phaseは、次のレジスタ モデルを持つシェーダー プログラムです。
レジスタの種類 | Count | R/W | Dimension | r でインデックス可能# | デフォルト | DCL が必要 |
---|---|---|---|---|---|---|
32 ビット Temp (r#) | 4096(r#+x#[n]) | R/W | 4 | いいえ | なし | はい |
32 ビットインデックス可能な一時配列 (x#[n]) | 4096(r#+x#[n]) | R/W | 4 | はい | なし | はい |
32 ビット入力 (v[vertex][element]) | 32(要素)*32(vert) | R | 4 | はい | なし | はい |
32 ビット UINT 入力 vOutputControlPointID(23.7) | 1 | R | 1 | いいえ | なし | はい |
32 ビット UINT 入力 PrimitiveID (vPrim) | 1 | R | 1 | いいえ | 該当なし | はい |
入力リソース内の要素 (t#) | 128 | R | 128 | はい | なし | はい |
サンプラー (s#) | 16 | R | 1 | はい | なし | はい |
ConstantBuffer 参照 (cb#[index]) | 15 | R | 4 | はい | なし | はい |
イミディエイト ConstantBuffer 参照 (icb[index]) | 1 | R | 4 | はい (内容) | なし | はい |
レジスタの種類 | Count | R/W | Dimension | r でインデックス可能# | デフォルト | DCL が必要 |
---|---|---|---|---|---|---|
32 ビット出力頂点データ要素 (o#) | 32 | W | 4 | はい | なし | はい |
各ハル シェーダー制御ポイントのフェーズ出力レジスタは最大 4 ベクターで、最大 32 個のレジスタを宣言できます。 また、1 ~ 32 個の出力制御ポイントが宣言されており、必要なストレージの量がスケーリングされます。 すべてのハル シェーダー制御ポイントフェーズ出力で許容されるスカラーの最大数を #cp_output_max と参照してみましょう。
#cp_output_max = 3968 スカラー。
この制限は、4096*32 ビット ストレージの特定のハードウェアの設計ポイントに基づいています。 制御ポイント出力の量は 3968=4096-128 で、32(制御点)*4(コンポーネント)*32(要素) - 4(コンポーネント)*32(要素) です。 減算では、ハル シェーダー フェーズ 2 と 3 専用の 128 個のスカラー (1 つのコントロール ポイント) 分のスペースが予約されます。 パッチ定数に 128 個のスカラーを予約する選択は、4096 スカラーのストレージが出力制御ポイントで使用されないだけのものではなく、別の特定のハードウェア設計の制限に対応します。 制御ポイント フェーズでは 32 個の出力制御ポイントを宣言できますが、記憶域の合計が高すぎるため、それぞれ 4 つのコンポーネントを持つ 32 個の要素を完全に宣言することはできません。
hs_fork_phase モデルでは、次のレジスタが表示されます。
以下の入力リソース (t#)、サンプラー (s#)、定数バッファー (cb#)、およびイミディエイト定数バッファー (icb) はすべて、他のすべてのハル シェーダー フェーズと共有状態です。 つまり、API/DDI の観点からは、ハル シェーダーには、すべてのフェーズに対して 1 つの入力リソース状態のセットがあります。 これは、API/DDI の観点から、ハル シェーダーは 1 つのアトミック シェーダーであるという事実に伴います。内のフェーズは実装の詳細です。
レジスタの種類 | Count | R/W | Dimension | r でインデックスを付け可能# | デフォルト | DCL が必要 |
---|---|---|---|---|---|---|
32 ビット Temp (r#) | 4096(r#+x#[n]) | R/W | 4 | いいえ | なし | はい |
32 ビットインデックス可能な一時配列 (x#[n]) | 4096(r#+x#[n]) | R/W | 4 | はい | なし | はい |
32 ビット入力コントロール ポイント (vicp[vertex][element]) (プレコントロール ポイント フェーズ) | 32 以下の注意事項を参照してください | R | 4(component)*32(element)*32(vert) | はい | なし | はい |
32 ビット出力制御ポイント (vocp[vertex][element]]) (ポスト コントロール ポイント フェーズ) | 32 以下の注意事項を参照してください | R | 4(component)*32(element)*32(vert) | はい | なし | はい |
32 ビット UINT 入力プリミティブ ID (vPrim) | 1 | R | 1 | いいえ | 該当なし | はい |
32 ビット UINT 入力 ForkInstanceID(23.8) (vForkInstanceID) | 1 | R | 1 | いいえ | 該当なし | はい |
入力リソース内の要素 (t#) | 128 | R | 128 | はい | なし | はい |
サンプラー (s#) | 16 | R | 1 | はい | なし | はい |
ConstantBuffer 参照 (cb#[index]) | 15 | R | 4 | はい | なし | はい |
Immediate ConstantBuffer 参照 (icb[index]) | 1 | R | 4 | はい (内容) | なし | はい |
注意
ハル シェーダー フォーク フェーズの入力制御ポイント レジスタ (vicp) 宣言は、ハル シェーダー制御ポイント入力 (プレコントロール ポイント フェーズ) の [要素] 軸に沿った任意のサブセットである必要があります。 同様に、出力制御ポイント (vocp) を入力するための宣言は、ハル シェーダー出力制御ポイント (制御後ポイント フェーズ) の [要素] 軸に沿った任意のサブセットである必要があります。
[頂点] 軸に沿って、vicp と vocp のそれぞれに対して読み取られる制御ポイントの数は、同様に、ハル シェーダー入力制御ポイント数とハル シェーダー出力制御ポイント数のサブセットである必要があります。 たとえば、vocp レジスタの頂点軸が n 個の頂点で宣言されている場合、コントロール ポイント フェーズの出力制御ポイント [0..n-1] をフォーク フェーズへの読み取り専用入力として使用できるようになります。
登録 | Count | R/W | Dimension | r でインデックスを付け可能# | デフォルト | DCL が必要 |
---|---|---|---|---|---|---|
32 ビット出力パッチ定数データ要素 (o#) | 32 以下の注 1 を参照してください | W | 4 | はい | なし | はい |
注意
ハル シェーダー フォークと結合フェーズの出力は、4 つの 4 ベクター レジスタの共有セットです。 各フォークまたは結合フェーズ・プログラムの出力が互いに重複することはできません。 TessFactors などのシステム解釈値は、この領域から出ます。
hs_join_phase モデルでは、次のレジスタが表示されます。 入力レジスタには、制御ポイントの位相入力制御ポイント (vicp)、vocp 制御ポイントのフェーズ出力制御ポイント (vocp)、パッチ定数 (vcp) の 3 つのセットがあります。 vpc は、すべてのハル シェーダー フォーク フェーズ プログラムの集計出力です。 ハル シェーダー結合フェーズ出力 o# レジスタは、ハル シェーダー フォーク フェーズ出力と同じレジスタ空間にあります。
以下の入力リソース (t#)、サンプラー (s#)、定数バッファー (cb#)、および即時定数バッファー (icb) はすべて、他のすべてのハル シェーダー フェーズと共有状態です。 つまり、API/DDI の観点からは、ハル シェーダーには、すべてのフェーズに対して 1 つの入力リソース状態セットがあります。 これは、API/DDI の観点から、ハル シェーダーは 1 つのアトミック シェーダーであるという事実に伴います。その中のフェーズは実装の詳細です。
レジスタの種類 | Count | R/W | Dimension | r でインデックス可能# | デフォルト | DCL が必要 |
---|---|---|---|---|---|---|
32 ビット Temp (r#) | 4096(r#+x#[n]) | R/W | 4 | いいえ | なし | はい |
32 ビットインデックス可能な一時配列 (x#[n]) | 4096(r#+x#[n]) | R/W | 4 | はい | なし | はい |
32 ビット入力コントロール ポイント (vicp[vertex][element]) (プレコントロール ポイント フェーズ) | 32 下記の注1を参照 | R | 4(component)*32(element)*32(vert) | はい | なし | はい |
32 ビット出力制御ポイント (vocp[vertex][element]) (ポストコントロール ポイント フェーズ) | 32 下記の注1を参照 | R | 4(component)*32(element)*32(vert) | はい | なし | はい |
32 ビット入力 (vpc[element]) (パッチ定数データ) | 32 下記の注2を参照 | R | 4 | はい | なし | はい |
32 ビット UINT 入力 PrimitiveID (vPrim) | 1 | R | 1 | いいえ | 該当なし | はい |
32 ビット UINT 入力 JoinInstanceID (vJoinInstanceID) | 1 | R | 1 | いいえ | 該当なし | はい |
入力リソース内の要素 (t#) | 128 | R | 128 | はい | なし | はい |
サンプラー (s#) | 16 | R | 1 | はい | なし | はい |
ConstantBuffer 参照 (cb#[index]) | 15 | R | 4 | はい | なし | はい |
イミディエイト ConstantBuffer 参照 (icb[index]) | 1 | R | 4 | はい (内容) | なし | はい |
注 1: ハル シェーダー結合フェーズの入力コントロール ポイント レジスタ (vicp) 宣言は、ハル シェーダーコントロール ポイント入力 (プレコントロール ポイント フェーズ) の [要素] 軸に沿った任意のサブセットである必要があります。 同様に、出力制御ポイント (vocp) を入力するための宣言は、ハル シェーダー出力制御ポイント (制御後ポイント フェーズ) の [要素] 軸に沿った任意のサブセットである必要があります。
[頂点] 軸に沿って、vicp と vocp のそれぞれに対して読み取られる制御ポイントの数は、同様に、ハル シェーダー入力制御ポイント数とハル シェーダー出力制御ポイント数のサブセットである必要があります。 たとえば、vocp レジスタの頂点軸が n 個の頂点で宣言されている場合、コントロール ポイント フェーズの出力制御ポイント [0..n-1] が結合フェーズへの読み取り専用入力として使用できるようになります。
注 2: ハル シェーダー結合フェーズでは、コントロール ポイント入力に加えて、ハル シェーダーフォーク フェーズ プログラムによって計算されたパッチ定数データも入力と見なされます。 これは、vpc# レジスタとしてハル シェーダーフォーク フェーズに表示されます。 ハル シェーダー参加フェーズの入力 vpc# レジスタは、ハル シェーダーフォーク フェーズ出力 o# レジスタと同じレジスタ空間を共有します。 o# レジスタの宣言は、ハル シェーダー フォーク フェーズ プログラム o# 出力宣言と重複してはなりません。ハル シェーダー結合フェーズは、ハル シェーダーの集計パッチ定数データ出力に追加されます。
レジスタの種類 | Count | R/W | Dimension | r でインデックスを付け可能# | デフォルト | DCL が必要 |
---|---|---|---|---|---|---|
32 ビット出力パッチ定数データ要素 (o#) | 32 以下の注意事項を参照してください | W | 4 | はい | なし | はい |
注意
ハル シェーダーフォークと結合フェーズ出力は、4 つの 4 ベクター レジスタの共有セットです。 各フォークまたは結合フェーズ・プログラムの出力が互いに重複することはできません。 TessFactors などのシステム解釈値は、この領域から出てきます。