流控制嵌套限制

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

注意

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

 

每个指令vs_2_0的深度计数

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

指令 静态嵌套 动态嵌套 循环/代表嵌套 调用嵌套 静态流计数
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
其他 - vs 0 0 0 0 1(如果布尔 - 仅与
endif - vs -1 0 0 0 0
代表 - 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
重试 - vs 0 0 0 -1 0
setp_comp - vs n/a n/a n/a n/a n/a

 

嵌套深度

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

指令类型 最大
静态嵌套 仅受静态流计数的限制
动态嵌套 n/a
循环/代表嵌套 1
调用嵌套 1
静态流计数 16

 

vs_2_x每个指令的深度计数

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

指令 静态嵌套 动态嵌套 循环/代表嵌套 调用嵌套 静态流计数
bool - vs 1 0 0 0 1
if_comp - vs 0 1 0 0 0
pred - vs 0 1 0 0 0
其他 - vs 0 0 0 0 1(如果布尔 - 仅与
endif - vs -1(布尔 - vs -1(如果 pred - vsif_comp - vs 0 0 0
代表 - 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
重试 - vs 0 -1 (callnz pred - vs 0 -1 0
setp_comp - vs 0 0 0 0 0

 

嵌套深度

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

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

 

每个指令的深度计数,用于vs_2_sw

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

指令 静态嵌套 动态嵌套 循环/代表嵌套 调用嵌套 静态流计数
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
其他 - vs 0 0 0 0 n/a
endif - vs -1(布尔 - vs -1(如果 pred - vsif_comp - vs 0 0 n/a
代表 - 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
重试 - vs 0 -1 (callnz pred - vs 0 -1 n/a
setp_comp - vs 0 0 0 0 n/a

 

嵌套深度

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

指令类型 最大
静态嵌套 24
动态嵌套 24
循环/代表嵌套 4
调用嵌套 4
静态流计数 无限制

 

vs_3_0的每个指令的深度计数

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

指令 静态嵌套 动态嵌套 循环/代表嵌套 调用嵌套 静态流计数
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
其他 - vs 0 0 0 0 n/a
endif - vs -1(布尔 - vs -1(如果 pred - vsif_comp - vs 0 0 n/a
代表 - 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
重试 - vs 0 -1 (callnz pred - vs 0 -1 n/a
setp_comp - vs 0 0 0 0 n/a

 

嵌套深度

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

指令类型 最大
静态嵌套 24
动态嵌套 24
循环/代表嵌套 4
调用嵌套 4
静态流计数 无限制

 

vs_3_sw每个指令的深度计数

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

指令 静态嵌套 动态嵌套 循环/代表嵌套 调用嵌套 静态流计数
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
其他 - vs 0 0 0 0 n/a
endif - vs -1(布尔 - vs -1(如果 pred - vsif_comp - vs 0 0 n/a
代表 - 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
重试 - vs 0 -1 (callnz pred - vs 0 -1 n/a
setp_comp - vs 0 0 0 0 n/a

 

嵌套深度

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

指令类型 最大
静态嵌套 24
动态嵌套 24
循环/代表嵌套 4
调用嵌套 4
静态流计数 无限制

 

顶点着色器指令