ps_1_X的修饰符

指令修饰符在将指令写入目标寄存器之前影响该指令的结果。 例如,使用它们将结果乘以或除以 2,或将结果固定在 0 和 1 之间。 指令修饰符在指令运行之后、将结果写入目标寄存器之前应用。

修饰符的列表如下所示。

修饰符 说明 语法 版本 1_1 版本 1_2 版本 1_3 版本 1_4
_x2 乘以 2 instruction_x2 X x X x
_x4 乘以 4 instruction_x4 x X x x
_x8 乘以 8 instruction_x8 x
_d2 除以 2 instruction_d2 x x x x
_d4 除以 4 instruction_d4 X
_d8 除以 8 instruction_d8 x
_坐 饱和 (夹从 0 到 1) instruction_sat x x x x

 

  • 乘法修饰符在读取寄存器数据后乘以 2 的幂。 这与左移相同。
  • 除法修饰符在读取寄存器数据后将寄存器数据除以 2 的幂。 这与右移相同。
  • 饱和修饰符将寄存器值的范围从零固定到 1。

指令修饰符可用于算术指令。 它们不能用于纹理地址指令。

乘法修饰符

此示例将目标寄存器 (dest) 与源操作数中的两种颜色之和 (src0 和 src1) ,并将结果乘以 2。

add_x2 dest, src0, src1

此示例合并了两个指令修饰符。 首先,在源操作数中添加两种颜色, (src0 和 src1) 。 然后,结果乘以 2,并针对每个分量限制在 0.0 到 1.0 之间。 结果保存在目标寄存器中。

add_x2_sat dest, src0, src1

除号修饰符

此示例使用源操作数 (src0 和 src1) 中两种颜色之和加载目标寄存器 (dest) ,并将结果除以 2。

add_d2 dest, src0, src1

饱和修饰符

对于算术指令,饱和度修饰符将每个分量将此指令的结果固定到 0.0 到 1.0 的范围内。 以下示例演示如何使用此指令修饰符。

dp3_sat r0, t0_bx2, v0_bx2    ; t0 is bump, v0 is light direction

此操作在任何乘法或除指令修饰符之后发生。 _sat最常用于固定点积结果。 但是,它还支持多通道方法的一致仿真,其中帧缓冲区始终在 0 到 1 范围内,以及 DirectX 6 和 7.0 多文本语法,其中饱和定义为在每个阶段发生。

此示例将目标寄存器 (dest) 与源操作数 (src0 和 src1) 中的两种颜色之和加载,并将每个分量的结果限制在 0.0 到 1.0 的范围内。

add_sat dest, src0, src1

此示例合并了两个指令修饰符。 首先,在源操作数中添加两种颜色, (src0 和 src1) 。 结果乘以 2,并针对每个分量限制在 0.0 到 1.0 之间。 结果保存在目标寄存器中。

add_x2_sat dest, src0, src1

像素着色器说明