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