フロー制御の入れ子の制限
頂点シェーダー フロー制御命令には、2 つの特別な制限があります。 入れ子の深さは、相互に呼び出すことができる命令の数を制限します。 さらに、各命令には、シェーダーがサポートできる命令の最大数に対して適用される命令スロット数があります。
Note
*_4_0_level_9_x HLSL シェーダー プロファイルを使用する場合は、 シェーダー モデル 2.x プロファイルを暗黙的に使用して Direct3D 9 対応ハードウェアをサポートします。 シェーダー モデル 2.x プロファイルでは、 シェーダー モデル 4.x 以降のプロファイルよりも制限されたフロー制御動作がサポートされています。
vs_2_0の命令あたりの深度数
各命令は、1 つ以上の入れ子の深さの制限に対してカウントされます。 次の表は、各命令が既存の深さから加算または減算する深度数を示しています。
命令 | 静的な入れ子 | 動的な入れ子 | loop/rep の入れ子 | 呼び出しの入れ子 | 静的フロー数 |
---|---|---|---|---|---|
if bool - vs | 0 | 0 | 0 | 0 | 1 |
if_comp - vs | 該当なし | 該当なし | 該当なし | 該当なし | 該当なし |
pred の場合 - vs | 該当なし | 該当なし | 該当なし | 該当なし | 該当なし |
else - vs | 0 | 0 | 0 | 0 | 1(bool - vs only の場合) |
endif - vs | -1 | 0 | 0 | 0 | 0 |
rep - vs | 0 | 0 | 1 | 0 | 1 |
endrep - vs | 0 | 0 | -1 | 0 | 0 |
loop - vs | 0 | 0 | 1 | 0 | 1 |
endloop - vs | 0 | 0 | -1 | 0 | 0 |
break - vs | 該当なし | 該当なし | 該当なし | 該当なし | 該当なし |
break_comp - vs | 該当なし | 該当なし | 該当なし | 該当なし | 該当なし |
breakp - vs | 該当なし | 該当なし | 該当なし | 該当なし | 該当なし |
call - vs | 0 | 0 | 0 | 1 | 1 |
callnz bool - vs | 0 | 0 | 0 | 1 | 1 |
callnz pred - vs | 該当なし | 該当なし | 該当なし | 該当なし | 該当なし |
ret - vs | 0 | 0 | 0 | -1 | 0 |
setp_comp - vs | N/A | 該当なし | 該当なし | 該当なし | 該当なし |
入れ子の深さ
入れ子の深さは、相互に呼び出すことができる命令の数を定義します。 各種類の命令には、1 つ以上の入れ子の制限があります。
指示の種類 | 最大値 |
---|---|
静的な入れ子 | 静的フロー数によってのみ制限されます |
動的な入れ子 | N/A |
loop/rep の入れ子 | 1 |
呼び出しの入れ子 | 1 |
静的フロー数 | 16 |
vs_2_xの命令あたりの深度数
各命令は、1 つ以上の入れ子の深さの制限に対してカウントされます。 次の表は、各命令が既存の深さから加算または減算する深度数を示しています。
命令 | 静的な入れ子 | 動的な入れ子 | loop/rep の入れ子 | 呼び出しの入れ子 | 静的フロー数 |
---|---|---|---|---|---|
if 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 - vs only の場合) |
endif - vs | -1(if bool - vs) | -1(pred - vs または if_comp - vs) | 0 | 0 | 0 |
rep - vs | 0 | 0 | 1 | 0 | 1 |
endrep - vs | 0 | 0 | -1 | 0 | 0 |
loop - vs | 0 | 0 | 1 | 0 | 1 |
endloop - vs | 0 | 0 | -1 | 0 | 0 |
break - vs | 0 | 0 | 0 | 0 | 0 |
break_comp - vs | 0 | 1, -1 | 0 | 0 | 0 |
breakp - vs | 0 | 0 | 0 | 0 | 0 |
call - vs | 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 | 呼び出しの入れ子 | 静的フロー数 |
---|---|---|---|---|---|
if bool - vs | 1 | 0 | 0 | 0 | 該当なし |
if_comp - vs | 0 | 1 | 0 | 0 | 該当なし |
pred の場合 - vs | 0 | 1 | 0 | 0 | 該当なし |
else - vs | 0 | 0 | 0 | 0 | 該当なし |
endif - vs | -1(bool の場合 - vs) | -1(pred - vs または if_comp - vs) | 0 | 0 | 該当なし |
rep - vs | 0 | 0 | 1 | 0 | 該当なし |
endrep - vs | 0 | 0 | -1 | 0 | 該当なし |
loop - vs | 0 | 0 | 1 | 0 | 該当なし |
endloop - vs | 0 | 0 | -1 | 0 | 該当なし |
break - vs | 0 | 0 | 0 | 0 | 該当なし |
break_comp - vs | 0 | 1, -1 | 0 | 0 | 該当なし |
breakp - vs | 0 | 0 | 0 | 0 | 該当なし |
call - vs | 0 | 0 | 0 | 1 | 該当なし |
callnz bool - vs | 0 | 0 | 0 | 1 | 該当なし |
callnz pred - vs | 0 | 1 | 0 | 1 | 該当なし |
ret - vs | 0 | -1 (callnz pred - vs) | 0 | -1 | 該当なし |
setp_comp - vs | 0 | 0 | 0 | 0 | 該当なし |
入れ子の深さ
入れ子の深さは、相互に呼び出すことができる命令の数を定義します。 各種類の命令には、1 つ以上の入れ子の制限があります。
指示の種類 | 最大値 |
---|---|
静的な入れ子 | 24 |
動的な入れ子 | 24 |
loop/rep の入れ子 | 4 |
呼び出しの入れ子 | 4 |
静的フロー数 | 制限なし |
vs_3_0の命令あたりの深度数
各命令は、1 つ以上の入れ子の深さの制限に対してカウントされます。 次の表は、各命令が既存の深さから加算または減算する深度数を示しています。
命令 | 静的な入れ子 | 動的な入れ子 | loop/rep の入れ子 | 呼び出しの入れ子 | 静的フロー数 |
---|---|---|---|---|---|
if 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 - vs または if_comp - vs) | 0 | 0 | N/A |
rep - vs | 0 | 0 | 1 | 0 | N/A |
endrep - vs | 0 | 0 | -1 | 0 | N/A |
loop - vs | 0 | 0 | 1 | 0 | N/A |
endloop - vs | 0 | 0 | -1 | 0 | N/A |
break - 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 |
call - vs | 0 | 0 | 0 | 1 | 該当なし |
callnz bool - vs | 0 | 0 | 0 | 1 | 該当なし |
callnz pred - vs | 0 | 1 | 0 | 1 | 該当なし |
ret - vs | 0 | -1 (callnz pred - vs) | 0 | -1 | 該当なし |
setp_comp - vs | 0 | 0 | 0 | 0 | N/A |
入れ子の深さ
入れ子の深さは、相互に呼び出すことができる命令の数を定義します。 各種類の命令には、1 つ以上の入れ子の制限があります。
指示の種類 | 最大値 |
---|---|
静的な入れ子 | 24 |
動的な入れ子 | 24 |
loop/rep の入れ子 | 4 |
呼び出しの入れ子 | 4 |
静的フロー数 | 制限なし |
vs_3_swの命令あたりの深度数
各命令は、1 つ以上の入れ子の深さの制限に対してカウントされます。 次の表は、各命令が既存の深さから加算または減算する深度数を示しています。
命令 | 静的な入れ子 | 動的な入れ子 | loop/rep の入れ子 | 呼び出しの入れ子 | 静的フロー数 |
---|---|---|---|---|---|
if bool - vs | 1 | 0 | 0 | 0 | 該当なし |
if_comp - vs | 0 | 1 | 0 | 0 | 該当なし |
pred の場合 - vs | 0 | 1 | 0 | 0 | N/A |
else - vs | 0 | 0 | 0 | 0 | N/A |
endif - vs | -1(if bool - vs) | -1(pred - vs または if_comp - vs) | 0 | 0 | N/A |
rep - vs | 0 | 0 | 1 | 0 | N/A |
endrep - vs | 0 | 0 | -1 | 0 | 該当なし |
loop - vs | 0 | 0 | 1 | 0 | N/A |
endloop - vs | 0 | 0 | -1 | 0 | N/A |
break - 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 |
call - vs | 0 | 0 | 0 | 1 | 該当なし |
callnz bool - vs | 0 | 0 | 0 | 1 | 該当なし |
callnz pred - vs | 0 | 1 | 0 | 1 | 該当なし |
ret - vs | 0 | -1 (callnz pred - vs) | 0 | -1 | 該当なし |
setp_comp - vs | 0 | 0 | 0 | 0 | 該当なし |
入れ子の深さ
入れ子の深さは、相互に呼び出すことができる命令の数を定義します。 各種類の命令には、1 つ以上の入れ子の制限があります。
指示の種類 | 最大値 |
---|---|
静的な入れ子 | 24 |
動的な入れ子 | 24 |
loop/rep の入れ子 | 4 |
呼び出しの入れ子 | 4 |
静的フロー数 | 制限なし |
関連トピック