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