ps_1_X的修饰符

指令修饰符在写入目标寄存器之前影响指令的结果。 例如,使用它们将结果乘以或除以两个因子,或将结果固定在零和 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。

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

乘法修饰符

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

add_x2 dest, src0, src1

此示例合并了两个指令修饰符。 首先,将添加源作数(src0 和 src1)中的两种颜色。 然后,结果乘以 2,并为每个组件固定在 0.0 到 1.0 之间。 结果保存在目标寄存器中。

add_x2_sat dest, src0, src1

除法修饰符

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

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 多文本语法的一致仿真,其中定义饱和度在每个阶段发生。

此示例使用源作数(src0 和 src1)中的两种颜色的总和加载目标寄存器(dest),并将结果固定到每个组件的 0.0 到 1.0 范围内。

add_sat dest, src0, src1

此示例合并了两个指令修饰符。 首先,将添加源作数(src0 和 src1)中的两种颜色。 结果乘以 2,每个组件的 0.0 到 1.0 之间固定。 结果保存在目标寄存器中。

add_x2_sat dest, src0, src1

像素着色器说明