フロー制御の入れ子の制限
頂点シェーダー フロー制御命令には、2 つの特別な制限があります。 入れ子の深さは、相互に呼び出すことができる命令の数を制限します。 さらに、各命令には、シェーダーがサポートできる命令の最大数に対して適用される命令スロット数があります。
手記
*_4_0_level_9_x HLSL シェーダー プロファイルを使用する場合は、Direct3D 9 対応ハードウェアをサポートするために、シェーダー モデル 2.x プロファイルを暗黙的に使用します。 シェーダー モデル 2.x プロファイルでは、シェーダー モデル 4.x 以降のプロファイルよりも制限されたフロー制御動作がサポートされます。
vs_2_0の命令あたりの深度数
各命令は、1 つ以上の入れ子の深さの制限に対してカウントされます。 次の表は、各命令が既存の深さから加算または減算する深度数を示しています。
命令 | 静的な入れ子 | 動的な入れ子 | loop/rep nesting | 呼び出しの入れ子 | 静的フロー数 |
---|---|---|---|---|---|
bool - vs の場合の | 0 | 0 | 0 | 0 | 1 |
if_comp - vs | n/a | n/a | n/a | n/a | n/a |
pred - vs の場合の | n/a | n/a | n/a | n/a | n/a |
else - vs | 0 | 0 | 0 | 0 | 1( bool の場合- のみ) |
endif - vs の | -1 | 0 | 0 | 0 | 0 |
rep - vs | 0 | 0 | 1 | 0 | 1 |
endrep - vs | 0 | 0 | -1 | 0 | 0 |
ループ - vs | 0 | 0 | 1 | 0 | 1 |
endloop - vs | 0 | 0 | -1 | 0 | 0 |
中断 - vs | n/a | n/a | n/a | n/a | n/a |
break_comp - vs | n/a | n/a | n/a | n/a | n/a |
breakp - vs | n/a | n/a | n/a | n/a | n/a |
呼び出し - | 0 | 0 | 0 | 1 | 1 |
callnz bool - vs | 0 | 0 | 0 | 1 | 1 |
callnz pred - vs | n/a | n/a | n/a | n/a | n/a |
ret - vs | 0 | 0 | 0 | -1 | 0 |
setp_comp - vs | n/a | n/a | n/a | n/a | n/a |
入れ子の深さ
入れ子の深さは、相互に呼び出すことができる命令の数を定義します。 各種類の命令には、1 つ以上の入れ子の制限があります。
命令の種類 | 最大 |
---|---|
静的な入れ子 | 静的フロー数によってのみ制限されます |
動的な入れ子 | n/a |
loop/rep nesting | 1 |
呼び出しの入れ子 | 1 |
静的フロー数 | 16 |
vs_2_xの命令あたりの深度数
各命令は、1 つ以上の入れ子の深さの制限に対してカウントされます。 次の表は、各命令が既存の深さから加算または減算する深度数を示しています。
命令 | 静的な入れ子 | 動的な入れ子 | loop/rep nesting | 呼び出しの入れ子 | 静的フロー数 |
---|---|---|---|---|---|
bool - vs の場合の | 1 | 0 | 0 | 0 | 1 |
if_comp - vs | 0 | 1 | 0 | 0 | 0 |
pred - vs の場合の | 0 | 1 | 0 | 0 | 0 |
else - vs | 0 | 0 | 0 | 0 | 1( bool の場合- のみ) |
endif - vs の | -1( bool の場合- vs) | -1( pred - vsor if_comp - vsの場合 ) | 0 | 0 | 0 |
rep - vs | 0 | 0 | 1 | 0 | 1 |
endrep - vs | 0 | 0 | -1 | 0 | 0 |
ループ - vs | 0 | 0 | 1 | 0 | 1 |
endloop - vs | 0 | 0 | -1 | 0 | 0 |
中断 - vs | 0 | 0 | 0 | 0 | 0 |
break_comp - vs | 0 | 1、-1 | 0 | 0 | 0 |
breakp - vs | 0 | 0 | 0 | 0 | 0 |
呼び出し - | 0 | 0 | 0 | 1 | 1 |
callnz bool - vs | 0 | 0 | 0 | 1 | 1 |
callnz pred - vs | 0 | 1 | 0 | 1 | 0 |
ret - vs | 0 | -1 (callnz pred - vs) | 0 | -1 | 0 |
setp_comp - vs | 0 | 0 | 0 | 0 | 0 |
入れ子の深さ
入れ子の深さは、相互に呼び出すことができる命令の数を定義します。 各種類の命令には、1 つ以上の入れ子の制限があります。
命令の種類 | 最大 |
---|---|
静的な入れ子 | 静的フロー数によってのみ制限されます |
動的な入れ子 | 0 または 24 については、D3DCAPS9を参照してください。VS20Caps.DynamicFlowControlDepth |
loop/rep nesting | 1 から 4、D3DCAPS9を参照してください。VS20Caps.StaticFlowControlDepth |
呼び出しの入れ子 | 1 から 4、D3DCAPS9を参照してください。VS20Caps.StaticFlowControlDepth (ループ/担当者の制限に依存しません) |
静的フロー数 | 16 |
vs_2_swの命令あたりの深度数
各命令は、1 つ以上の入れ子の深さの制限に対してカウントされます。 次の表は、各命令が既存の深さから加算または減算する深度数を示しています。
命令 | 静的な入れ子 | 動的な入れ子 | loop/rep nesting | 呼び出しの入れ子 | 静的フロー数 |
---|---|---|---|---|---|
bool - vs の場合の | 1 | 0 | 0 | 0 | n/a |
if_comp - vs | 0 | 1 | 0 | 0 | n/a |
pred - vs の場合の | 0 | 1 | 0 | 0 | n/a |
else - vs | 0 | 0 | 0 | 0 | n/a |
endif - vs の | -1( bool の場合- vs) | -1( pred - vsor if_comp - vsの場合 ) | 0 | 0 | n/a |
rep - vs | 0 | 0 | 1 | 0 | n/a |
endrep - vs | 0 | 0 | -1 | 0 | n/a |
ループ - vs | 0 | 0 | 1 | 0 | n/a |
endloop - vs | 0 | 0 | -1 | 0 | n/a |
中断 - vs | 0 | 0 | 0 | 0 | n/a |
break_comp - vs | 0 | 1、-1 | 0 | 0 | n/a |
breakp - vs | 0 | 0 | 0 | 0 | n/a |
呼び出し - | 0 | 0 | 0 | 1 | n/a |
callnz bool - vs | 0 | 0 | 0 | 1 | n/a |
callnz pred - vs | 0 | 1 | 0 | 1 | n/a |
ret - vs | 0 | -1 (callnz pred - vs) | 0 | -1 | n/a |
setp_comp - vs | 0 | 0 | 0 | 0 | n/a |
入れ子の深さ
入れ子の深さは、相互に呼び出すことができる命令の数を定義します。 各種類の命令には、1 つ以上の入れ子の制限があります。
命令の種類 | 最大 |
---|---|
静的な入れ子 | 24 |
動的な入れ子 | 24 |
loop/rep nesting | 4 |
呼び出しの入れ子 | 4 |
静的フロー数 | 制限なし |
vs_3_0の命令あたりの深度数
各命令は、1 つ以上の入れ子の深さの制限に対してカウントされます。 次の表は、各命令が既存の深さから加算または減算する深度数を示しています。
命令 | 静的な入れ子 | 動的な入れ子 | loop/rep nesting | 呼び出しの入れ子 | 静的フロー数 |
---|---|---|---|---|---|
bool - vs の場合の | 1 | 0 | 0 | 0 | n/a |
if_comp - vs | 0 | 1 | 0 | 0 | n/a |
pred - vs の場合の | 0 | 1 | 0 | 0 | n/a |
else - vs | 0 | 0 | 0 | 0 | n/a |
endif - vs の | -1( bool の場合- vs) | -1( pred - vsor if_comp - vsの場合 ) | 0 | 0 | n/a |
rep - vs | 0 | 0 | 1 | 0 | n/a |
endrep - vs | 0 | 0 | -1 | 0 | n/a |
ループ - vs | 0 | 0 | 1 | 0 | n/a |
endloop - vs | 0 | 0 | -1 | 0 | n/a |
中断 - vs | 0 | 0 | 0 | 0 | n/a |
break_comp - vs | 0 | 1、-1 | 0 | 0 | n/a |
breakp - vs | 0 | 0 | 0 | 0 | n/a |
呼び出し - | 0 | 0 | 0 | 1 | n/a |
callnz bool - vs | 0 | 0 | 0 | 1 | n/a |
callnz pred - vs | 0 | 1 | 0 | 1 | n/a |
ret - vs | 0 | -1 (callnz pred - vs) | 0 | -1 | n/a |
setp_comp - vs | 0 | 0 | 0 | 0 | n/a |
入れ子の深さ
入れ子の深さは、相互に呼び出すことができる命令の数を定義します。 各種類の命令には、1 つ以上の入れ子の制限があります。
命令の種類 | 最大 |
---|---|
静的な入れ子 | 24 |
動的な入れ子 | 24 |
loop/rep nesting | 4 |
呼び出しの入れ子 | 4 |
静的フロー数 | 制限なし |
vs_3_swの命令あたりの深度数
各命令は、1 つ以上の入れ子の深さの制限に対してカウントされます。 次の表は、各命令が既存の深さから加算または減算する深度数を示しています。
命令 | 静的な入れ子 | 動的な入れ子 | loop/rep nesting | 呼び出しの入れ子 | 静的フロー数 |
---|---|---|---|---|---|
bool - vs の場合の | 1 | 0 | 0 | 0 | n/a |
if_comp - vs | 0 | 1 | 0 | 0 | n/a |
pred - vs の場合の | 0 | 1 | 0 | 0 | n/a |
else - vs | 0 | 0 | 0 | 0 | n/a |
endif - vs の | -1( bool の場合- vs) | -1( pred - vsor if_comp - vsの場合 ) | 0 | 0 | n/a |
rep - vs | 0 | 0 | 1 | 0 | n/a |
endrep - vs | 0 | 0 | -1 | 0 | n/a |
ループ - vs | 0 | 0 | 1 | 0 | n/a |
endloop - vs | 0 | 0 | -1 | 0 | n/a |
中断 - vs | 0 | 0 | 0 | 0 | n/a |
break_comp - vs | 0 | 1、-1 | 0 | 0 | n/a |
breakp - vs | 0 | 0 | 0 | 0 | n/a |
呼び出し - | 0 | 0 | 0 | 1 | n/a |
callnz bool - vs | 0 | 0 | 0 | 1 | n/a |
callnz pred - vs | 0 | 1 | 0 | 1 | n/a |
ret - vs | 0 | -1 (callnz pred - vs) | 0 | -1 | n/a |
setp_comp - vs | 0 | 0 | 0 | 0 | n/a |
入れ子の深さ
入れ子の深さは、相互に呼び出すことができる命令の数を定義します。 各種類の命令には、1 つ以上の入れ子の制限があります。
命令の種類 | 最大 |
---|---|
静的な入れ子 | 24 |
動的な入れ子 | 24 |
loop/rep nesting | 4 |
呼び出しの入れ子 | 4 |
静的フロー数 | 制限なし |
関連トピック
-
頂点シェーダー命令 を する