流程式控制制巢狀限制
頂點著色器流程式控制制指令有兩個特殊限制。 巢狀深度會限制可以彼此內呼叫的指令數目。 此外,每個指令都有一個指令位置計數,適用于著色器可支援的指令數目上限。
注意
當您使用 *_4_0_level_9_x HLSL 著色器設定檔時,您會隱含地使用 著色器模型 2.x 設定檔來支援 Direct3D 9 支援的硬體。 著色器模型 2.x 設定檔支援比 著色器模型 4.x 和更新版本的設定檔更有限的流程式控制制行為。
每個指令的深度計數vs_2_0
每個指令都會計算一或多個巢狀深度限制。 下表顯示每個指令從現有深度新增或減去的深度計數:
指令 | 靜態巢狀 | 動態巢狀 | 迴圈/rep 巢狀 | 呼叫巢狀 | 靜態流程計數 |
---|---|---|---|---|---|
if 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 |
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 |
巢狀深度
巢狀深度會定義彼此內可以呼叫多少指令。 每種指令類型都有一或多個巢狀限制:
指令類型 | 最大值 |
---|---|
靜態巢狀 | 僅受限於靜態流程計數 |
動態巢狀 | n/a |
迴圈/rep 巢狀 | 1 |
呼叫巢狀 | 1 |
靜態流程計數 | 16 |
每個指令的深度計數vs_2_x
每個指令都會計算一或多個巢狀深度限制。 下表顯示每個指令從現有深度新增或減去的深度計數:
指令 | 靜態巢狀 | 動態巢狀 | 迴圈/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 - 僅限) |
endif - vs | -1 (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 |
迴圈 - 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 |
巢狀深度
巢狀深度會定義彼此內可以呼叫多少指令。 每種指令類型都有一或多個巢狀限制:
指令類型 | 最大值 |
---|---|
靜態巢狀 | 僅受限於靜態流程計數 |
動態巢狀 | 0 或 24,請參閱 D3DCAPS9。VS20Caps.DynamicFlowControlDepth |
迴圈/rep 巢狀 | 1 到 4,請參閱 D3DCAPS9。VS20Caps.StaticFlowControlDepth |
呼叫巢狀 | 1 到 4,請參閱 D3DCAPS9。VS20Caps.StaticFlowControlDepth (與迴圈/rep 限制無關) |
靜態流程計數 | 16 |
每個指令的深度計數vs_2_sw
每個指令都會計算一或多個巢狀深度限制。 下表顯示每個指令從現有深度新增或減去的深度計數:
指令 | 靜態巢狀 | 動態巢狀 | 迴圈/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 |
迴圈 - 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 |
巢狀深度
巢狀深度會定義彼此內可以呼叫多少指令。 每種指令類型都有一或多個巢狀限制:
指令類型 | 最大值 |
---|---|
靜態巢狀 | 24 |
動態巢狀 | 24 |
迴圈/rep 巢狀 | 4 |
呼叫巢狀 | 4 |
靜態流程計數 | 沒有限制 |
每個指令的深度計數vs_3_0
每個指令都會計算一或多個巢狀深度限制。 下表顯示每個指令從現有深度新增或減去的深度計數:
指令 | 靜態巢狀 | 動態巢狀 | 迴圈/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 |
迴圈 - 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 |
巢狀深度
巢狀深度會定義彼此內可以呼叫多少指令。 每種指令類型都有一或多個巢狀限制:
指令類型 | 最大值 |
---|---|
靜態巢狀 | 24 |
動態巢狀 | 24 |
迴圈/rep 巢狀 | 4 |
呼叫巢狀 | 4 |
靜態流程計數 | 沒有限制 |
每個指令的深度計數vs_3_sw
每個指令都會計算一或多個巢狀深度限制。 下表顯示每個指令從現有深度新增或減去的深度計數:
指令 | 靜態巢狀 | 動態巢狀 | 迴圈/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 |
迴圈 - 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 |
巢狀深度
巢狀深度會定義彼此內可以呼叫多少指令。 每種指令類型都有一或多個巢狀限制:
指令類型 | 最大值 |
---|---|
靜態巢狀 | 24 |
動態巢狀 | 24 |
迴圈/rep 巢狀 | 4 |
呼叫巢狀 | 4 |
靜態流程計數 | 沒有限制 |
相關主題