フロー制御のネスト制限
頂点シェーダーのフロー制御命令には、2 つの特殊な制限があります。ネストの深さによって、互いの中から呼び出せる命令の数が制限されます。さらに、各命令には、シェーダーがサポートできる命令の最大数に対して適用される命令スロット カウントがあります。
vs_2_0 の命令ごとの深さのカウント
各命令が、1 つ以上のネストの深さの制限に対してカウントします。次の表は、各命令が現在の深さに対して加算または減算する深さのカウントを示しています。
命令 | 静的なネスト | 動的なネスト | loop/rep のネスト | call のネスト | 静的フロー カウント |
---|---|---|---|---|---|
if bool - vs | 0 | 0 | 0 | 0 | 1 |
if_comp - vs | N/A | N/A | N/A | N/A | N/A |
if pred - vs | N/A | N/A | N/A | N/A | N/A |
else - vs | 0 | 0 | 0 | 0 | 1(if bool - vs のみ) |
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 | 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 |
call - vs | 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 のネスト | 1 |
call のネスト | 1 |
静的フロー カウント | 16 |
vs_2_x の命令ごとの深さのカウント
各命令が、1 つ以上のネストの深さの制限に対してカウントします。次の表は、各命令が現在の深さに対して加算または減算する深さのカウントを示しています。
命令 | 静的なネスト | 動的なネスト | loop/rep のネスト | call のネスト | 静的フロー カウント |
---|---|---|---|---|---|
if bool - vs | 1 | 0 | 0 | 0 | 1 |
if_comp - vs | 0 | 1 | 0 | 0 | 0 |
if pred - vs | 0 | 1 | 0 | 0 | 0 |
else - vs | 0 | 0 | 0 | 0 | 1(if bool - vs のみ) |
endif - vs | -1(if bool - vs) | -1(if 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 のネスト | 1 ~ 4。D3DCAPS9.VS20Caps.StaticFlowControlDepth を参照 |
call のネスト | 1 ~ 4。D3DCAPS9.VS20Caps.StaticFlowControlDepth を参照 (loop/rep の制限とは別) |
静的フロー カウント | 16 |
vs_2_sw の命令ごとの深さのカウント
各命令が、1 つ以上のネストの深さの制限に対してカウントします。次の表は、各命令が現在の深さに対して加算または減算する深さのカウントを示しています。
命令 | 静的なネスト | 動的なネスト | loop/rep のネスト | call のネスト | 静的フロー カウント |
---|---|---|---|---|---|
if bool - vs | 1 | 0 | 0 | 0 | N/A |
if_comp - vs | 0 | 1 | 0 | 0 | N/A |
if pred - vs | 0 | 1 | 0 | 0 | N/A |
else - vs | 0 | 0 | 0 | 0 | N/A |
endif - vs | -1(if bool - vs) | -1(if 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 | 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 のネスト | 4 |
call のネスト | 4 |
静的フロー カウント | 無制限 |
vs_3_0 の命令ごとの深さのカウント
各命令が、1 つ以上のネストの深さの制限に対してカウントします。次の表は、各命令が現在の深さに対して加算または減算する深さのカウントを示しています。
命令 | 静的なネスト | 動的なネスト | loop/rep のネスト | call のネスト | 静的フロー カウント |
---|---|---|---|---|---|
if bool - vs | 1 | 0 | 0 | 0 | N/A |
if_comp - vs | 0 | 1 | 0 | 0 | N/A |
if pred - vs | 0 | 1 | 0 | 0 | N/A |
else - vs | 0 | 0 | 0 | 0 | N/A |
endif - vs | -1(if bool - vs) | -1(if 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 | 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 のネスト | 4 |
call のネスト | 4 |
静的フロー カウント | 無制限 |
vs_3_sw の命令ごとの深さのカウント
各命令が、1 つ以上のネストの深さの制限に対してカウントします。次の表は、各命令が現在の深さに対して加算または減算する深さのカウントを示しています。
命令 | 静的なネスト | 動的なネスト | loop/rep のネスト | call のネスト | 静的フロー カウント |
---|---|---|---|---|---|
if bool - vs | 1 | 0 | 0 | 0 | N/A |
if_comp - vs | 0 | 1 | 0 | 0 | N/A |
if pred - vs | 0 | 1 | 0 | 0 | N/A |
else - vs | 0 | 0 | 0 | 0 | N/A |
endif - vs | -1(if bool - vs) | -1(if 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 | 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 のネスト | 4 |
call のネスト | 4 |
静的フロー カウント | 無制限 |