vs_3_0

可编程顶点着色器由一组对顶点数据进行作的指令组成。 注册传入和传出 ALU 中的数据。 可以应用其他控件来修改指令、结果或写入的数据。

顶点着色器版本vs_3_0扩展vs_2_x支持的功能集。 vs_2_X中需要设置上限的每个功能都可以在vs_3_0中使用,而无需上限。

新功能

以下部分列出了顶点着色器版本vs_3_0的新功能。

索引寄存器

在前面的着色器模型中,只能对常量寄存器库编制索引。 在此模型中,可以使用循环计数器寄存器(aL)为以下寄存器编制索引:

  • 输入寄存器 (v#)
  • 输出寄存器 (o#)

顶点纹理

此着色器模型支持使用 texldl 在顶点着色器中查找纹理。 顶点引擎具有四个纹理采样器阶段(不同于像素引擎中的位移地图采样器和纹理采样器),可用于对这些阶段设置的纹理进行采样。 请参阅 vs_3_0 (DirectX HLSL) 中的顶点纹理。

顶点流频率

此功能允许以与每个顶点一次不同的速率初始化输入寄存器的子集。 请参阅 绘制非索引几何图形

着色器输出

与vs_2_0类似,着色器的输出可能因静态流控制而异。 请谨慎使用动态分支,因为这样可能会导致着色器输出因顶点而异。 这将在不同硬件上产生不可预知的结果。

动态流控制

支持所有动态流控制指令。 允许的最大嵌套深度值为 24。 (有关详细信息,请参阅 流控制嵌套限制

临时寄存器

总共支持 32 个临时寄存器(r#)。

静态流控制

循环的最大嵌套深度 - 与/rep - vs 为 4。 调用的最大嵌套深度 - vs/callnz bool - vs/callnz pred - vs 为 4。 对于 布尔值与,允许的最大嵌套深度值为 24。 (有关详细信息,请参阅 流控制嵌套限制

预测

支持指令谓词。 使用 setp_comp - 与 设置谓词寄存器。

指令计数

允许每个顶点着色器从 512 到 D3DCAPS9中 MaxVertexShader30InstructionSlots 中的槽数。 由于循环/代表支持,运行指令的数量可能要高得多;但是,这由D3DCAPS9中的 MaxVShaderInstructionsExecuted 限制,该限制至少应为0xFFFF。

设备上限

如果支持顶点着色器 3_0,则硬件支持以下上限(至少):

能力
着色器上限
  • DynamicFlowControlDepth 为 24
  • NumTemps 为 32
  • StaticFlowControlDepth 为 4
  • 支持谓词。
GuardBandLeft、GuardBandTop、GuardBandRight、GuardBandBottom 8K
VertexShaderVersion 3_0
MaxVertexShaderConst 256
MaxVertexShader30InstructionSlots 512
雾支持 D3DPRASTERCAPS_FOGVERTEX
VertexTextureFilterCaps
D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET 顶点声明中的顶点元素可以共享相同的流偏移量。
顶点格式
  • D3DDECLTYPE_UBYTE4
  • D3DDECLTYPE_UBYTE4N
  • D3DDECLTYPE_SHORT2N
  • D3DDECLTYPE_SHORT4N
  • D3DDECLTYPE_FLOAT16_2
  • D3DDECLTYPE_FLOAT16_4

 

顶点着色器