次の方法で共有


レジスタ - hs_5_0

ハル シェーダーは、コントロール ポイント フェーズ、フォーク フェーズ、結合フェーズの 3 つの異なるフェーズで構成されます。 各フェーズには、独自の入力レジスタと出力レジスタのセットがあります。

制御点フェーズ

hs_control_point_phaseは、次のレジスタ モデルを持つシェーダー プログラムです。

入力レジスタ

レジスタの種類 数える R/W 次元 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 入力プリミティブ ID (vPrim) 1 R 1 いいえ N/A はい
入力リソース内の要素 (t#) 128 R 128 はい 何一つ はい
サンプラー (s#) 16 R 1 はい 何一つ はい
ConstantBuffer 参照 (cb#[index]) 15 R 4 はい 何一つ はい
イミディエイト ConstantBuffer 参照 (icb[index]) 1 R 4 はい (内容) 何一つ はい

 

出力レジスタ

レジスタの種類 数える R/W 次元 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 の観点からは、ハル シェーダーには、すべてのフェーズに対して単一の入力リソース状態のセットがあります。 これは、API/DDI の観点から、ハル シェーダーが単一のアトミック シェーダーであるという事実に伴います。内のフェーズは実装の詳細です。

入力レジスタ

レジスタの種類 数える R/W 次元 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(コンポーネント)*32(要素)*32(vert) はい 何一つ はい
32 ビット出力制御ポイント (vocp[vertex][element]]) (ポストコントロール ポイント フェーズ) 32 以下の注意事項を参照してください R 4(コンポーネント)*32(要素)*32(vert) はい 何一つ はい
32 ビット UINT 入力プリミティブ ID (vPrim) 1 R 1 いいえ N/A はい
32 ビット UINT 入力 ForkInstanceID(23.8) (vForkInstanceID) 1 R 1 いいえ N/A はい
入力リソース内の要素 (t#) 128 R 128 はい 何一つ はい
サンプラー (s#) 16 R 1 はい 何一つ はい
ConstantBuffer 参照 (cb#[index]) 15 R 4 はい 何一つ はい
イミディエイト ConstantBuffer 参照 (icb[index]) 1 R 4 はい (内容) 何一つ はい

 

手記

ハル シェーダー フォーク フェーズの入力制御ポイント レジスタ (vicp) 宣言は、ハル シェーダー制御ポイント入力 (事前制御ポイント フェーズ) の [要素] 軸に沿った任意のサブセットである必要があります。 同様に、出力制御ポイント (vocp) を入力するための宣言は、ハル シェーダー出力制御ポイント (ポストコントロール ポイント フェーズ) の [要素] 軸に沿った任意のサブセットである必要があります。

[頂点] 軸に沿って、各 vicp と vocp に対して読み取られる制御ポイントの数は、同様に、ハル シェーダー入力制御ポイント数とハル シェーダー出力制御ポイント数のサブセットである必要があります。 たとえば、vocp レジスタの頂点軸が n 個の頂点で宣言されている場合、コントロール ポイント フェーズの出力制御ポイント [0..n-1] をフォーク フェーズへの読み取り専用入力として使用できるようになります。

出力レジスタ

登録する 数える R/W 次元 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 の観点からは、ハル シェーダーには、すべてのフェーズに対して単一の入力リソース状態のセットがあります。 これは、API/DDI の観点から、ハル シェーダーが単一のアトミック シェーダーであるという事実に伴います。内のフェーズは実装の詳細です。

入力レジスタ

レジスタの種類 数える R/W 次元 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(コンポーネント)*32(要素)*32(vert) はい 何一つ はい
32 ビット出力制御ポイント (vocp[vertex][element]) (ポストコントロール ポイント フェーズ) 32 下記の注1を参照 R 4(コンポーネント)*32(要素)*32(vert) はい 何一つ はい
32 ビット入力 (vpc[element]) (パッチ定数データ) 32 下記の注2を参照 R 4 はい 何一つ はい
32 ビット UINT 入力プリミティブ ID (vPrim) 1 R 1 いいえ N/A はい
32 ビット UINT 入力 JoinInstanceID (vJoinInstanceID) 1 R 1 いいえ N/A はい
入力リソース内の要素 (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# 出力宣言と重複してはなりません。ハル シェーダー結合フェーズは、ハル シェーダーの集計パッチ定数データ出力に追加されます。

出力レジスタ

レジスタの種類 数える R/W 次元 r でインデックス可能# デフォルト DCL が必要
32 ビット出力パッチ定数データ要素 (o#) 32 以下の注意事項を参照してください W 4 はい 何一つ はい

 

手記

ハル シェーダーフォークと結合フェーズ出力は、4 つの 4 ベクター レジスタの共有セットです。 各フォークまたは結合フェーズ・プログラムの出力が互いに重複することはできません。 TessFactors などのシステム解釈値は、この領域から取得されます。

シェーダー モデル 5