共用方式為


流程控制巢狀限制

頂點著色器流程控制指令有兩個特殊限制。 巢狀深度會限制可以在彼此內部呼叫的指令數目。 此外,每個指令都有一個指令位置計數,適用於著色器可支援的指令數目上限。

注意

當您使用 *_4_0_level_9_x HLSL 著色器配置檔時,會隱含地使用 著色器模型 2.x 配置檔來支援 Direct3D 9 支援的硬體。 著色器模型 2.x 配置檔支援比 著色器模型 4.x 和更新版本的配置檔更有限的流程控制行為。

 

每個指令的深度計數vs_2_0

每個指令都會計算一或多個巢狀深度限制。 下表顯示每個指令新增或減去現有深度的深度計數:

指令 靜態巢狀 動態巢狀 迴圈/rep 巢狀 呼叫巢狀 靜態流程計數
布爾值 - 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 - 僅 vs
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
斷層 - vs n/a n/a n/a n/a n/a
呼叫 - 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 巢狀 呼叫巢狀 靜態流程計數
布爾值 - 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
endif - vs -1(布爾 - vs -1( 如果 pred - vsif_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
斷層 - vs 0 0 0 0 0
呼叫 - 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 巢狀 呼叫巢狀 靜態流程計數
布爾值 - 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(布爾 - vs -1( 如果 pred - vsif_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
斷層 - vs 0 0 0 0 n/a
呼叫 - 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 巢狀 呼叫巢狀 靜態流程計數
布爾值 - 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(布爾 - vs -1( 如果 pred - vsif_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
斷層 - vs 0 0 0 0 n/a
呼叫 - 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 巢狀 呼叫巢狀 靜態流程計數
布爾值 - 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(布爾 - vs -1( 如果 pred - vsif_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
斷層 - vs 0 0 0 0 n/a
呼叫 - 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
靜態流程計數 沒有限制

 

頂點著色器指示