レジスタ - 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 などのシステム解釈値は、この領域から出てきます。

シェーダー モデル 5