目标寄存器掩码

掩码指定将使用指令的结果更新目标寄存器的哪些组件。 纹理寄存器有一组规则,非文本寄存器有另一组规则。

  • dx9_graphics_reference_asm_vs_registers_modifiers_masking - 此部分包含用于将掩码应用于目标寄存器的规则。
  • Texture_Register_Masks - 纹理寄存器具有一些唯一的规则。

目标寄存器掩码

如下表所示,掩码 (where 是有效的顶点着色器 顶点着色器寄存器 之一,) 可应用于矢量数据的单个组件。

组件修饰符 说明
r.{x}{y}{z}{w} 目标掩码

 

  • 通常,指定目标寄存器写入掩码是很好的编码风格。 它使代码更易于阅读和维护。
  • 只要 x 先于 y,y 先于 z,z 先于 w,就可以指定任何组件组合, (包括无组件) 。
  • oPts 和 oFog 输出寄存器只能使用一个掩码。
  • 某些指令要求目标寄存器使用单个写入掩码:exp、expp、logp、pow、rcp 和 rsq。
  • 在版本 1.0 中,frc 指令需要以下掩码组合之一:.x、.y 或 .xy。 版本 2.0 没有掩码限制。
  • sincos 需要以下掩码组合之一:.x、.y 或 .xyz。
  • m3x2 需要 .xy 写入掩码。
  • m3x3 和 m4x3 需要 .xyz 写入掩码。
  • m3x4 和 m4x4 需要 .xyz 写入掩码或默认写入掩码 (xyzw) 。

纹理寄存器掩码

在纹理坐标寄存器上使用修饰符的验证规则比其他寄存器的验证规则更严格。

  • 如果写入 oTn,则之前的所有寄存器 (oTn-1 ~ oT0) 也都必须写入。
  • 任何 oT# 寄存器的“组合”写入掩码必须恰好是以下项之一:
    • .x
    • 。Xy
    • 。Xyz
    • .xyzw (这相当于不使用任何组件修饰符)

例如,顶点着色器可以通过单独的指令输出到纹理寄存器。

    oT1.y  
    oT0.y  
    oT2  
    oT0.xz  
    oT1.x

或者,这些说明可以组合在一起。

    oT0.xyz  
    oT1.xy  
    oT2.xyzw    

这些限制仅适用于纹理坐标寄存器。

顶点着色器寄存器修饰符