流控制嵌套限制
顶点着色器流控制指令有两个特殊限制。 嵌套深度限制可以相互调用的指令数。 此外,每个指令都有一个指令槽计数,该计数适用于着色器可以支持的最大指令数。
注意
使用 *_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 - vs 或 if_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 - vs 或 if_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 - vs 或 if_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 - vs 或 if_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 |
静态流计数 | 无限制 |
相关主题