流控制嵌套限制

顶点着色器流控制指令有两个特殊限制。 嵌套深度限制可在彼此内部调用的指令数。 此外,每个指令都有一个指令槽计数,该计数适用于着色器可以支持的最大指令数。

注意

使用 *_4_0_level_9_x HLSL 着色器配置文件时,隐式使用 着色器模型 2.x 配置文件来支持支持 Direct3D 9 的硬件。 与着色器模型 4.x 及更高版本的配置文件相比 ,着色器模型 2.x 配置文件支持更有限的流控制行为。

 

vs_2_0每个指令的深度计数

每个指令都计入一个或多个嵌套深度限制。 下表显示了每个指令从现有深度中添加或减去的深度计数:

指令 静态嵌套 动态嵌套 loop/rep 嵌套 调用嵌套 静态流计数
如果 bool - vs 0 0 0 0 1
if_comp - vs 不适用 不适用 不适用 不适用 不适用
如果 pred - vs 不适用 不适用 不适用 不适用 不适用
else - vs 0 0 0 0 如果 bool 为 1 个 (- 与仅)
endif - vs -1 0 0 0 0
代表 - 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 不适用 不适用 不适用 不适用 不适用

 

嵌套深度

嵌套深度定义可在彼此内部调用的指令数。 每种类型的指令都有一个或多个嵌套限制:

指令类型 最大值
静态嵌套 仅受静态流计数限制
动态嵌套 不适用
loop/rep 嵌套 1
调用嵌套 1
静态流计数 16

 

vs_2_x每个指令的深度计数

每个指令都计入一个或多个嵌套深度限制。 下表显示了每个指令从现有深度中添加或减去的深度计数:

指令 静态嵌套 动态嵌套 loop/rep 嵌套 调用嵌套 静态流计数
如果 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 如果 bool 为 1 个 (- 与仅)
endif - vs -1 (如果 bool - vs) -1 ((如果预先) - vsif_comp - vs) 0 0 0
代表 - 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

 

嵌套深度

嵌套深度定义相互之间可以调用的指令数。 每种类型的指令都有一个或多个嵌套限制:

指令类型 最大值
静态嵌套 仅受静态流计数的限制
动态嵌套 0 或 24,请参阅 D3DCAPS9。VS20Caps.DynamicFlowControlDepth
loop/rep 嵌套 1 到 4,请参阅 D3DCAPS9。VS20Caps.StaticFlowControlDepth
调用嵌套 1 到 4,请参阅 D3DCAPS9。VS20Caps.StaticFlowControlDepth (独立于循环/代表限制)
静态流计数 16

 

vs_2_sw每个指令的深度计数

每个指令都计入一个或多个嵌套深度限制。 下表显示每个指令从现有深度中添加或减去的深度计数:

指令 静态嵌套 动态嵌套 loop/rep 嵌套 调用嵌套 静态流计数
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 (如果预先 - vsif_comp - vs) 0 0 不适用
代表 - 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 不适用

 

嵌套深度

嵌套深度定义可在彼此内部调用的指令数。 每种类型的指令都有一个或多个嵌套限制:

指令类型 最大值
静态嵌套 24
动态嵌套 24
loop/rep 嵌套 4
调用嵌套 4
静态流计数 无限制

 

vs_3_0每个指令的深度计数

每个指令都计入一个或多个嵌套深度限制。 下表显示了每个指令从现有深度中添加或减去的深度计数:

指令 静态嵌套 动态嵌套 loop/rep 嵌套 调用嵌套 静态流计数
如果 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 ((如果预先) - vsif_comp - vs) 0 0 不适用
代表 - 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 不适用

 

嵌套深度

嵌套深度定义可在彼此内部调用的指令数。 每种类型的指令都有一个或多个嵌套限制:

指令类型 最大值
静态嵌套 24
动态嵌套 24
loop/rep 嵌套 4
调用嵌套 4
静态流计数 无限制

 

vs_3_sw每个指令的深度计数

每个指令都计入一个或多个嵌套深度限制。 下表显示每个指令从现有深度中添加或减去的深度计数:

指令 静态嵌套 动态嵌套 loop/rep 嵌套 调用嵌套 静态流计数
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 (如果预先 - vsif_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 不适用

 

嵌套深度

嵌套深度定义相互之间可以调用的指令数。 每种类型的指令都有一个或多个嵌套限制:

指令类型 最大值
静态嵌套 24
动态嵌套 24
loop/rep 嵌套 4
调用嵌套 4
静态流计数 无限制

 

顶点着色器说明