目标寄存器写入掩码

写入掩码控制在指令完成后写入目标寄存器的哪些组件。 只要组件的顺序为 .rgba 或 .xyzw,就允许输出写入掩码。 也就是说,.rba 和 .xw 是有效的掩码。 纹理寄存器有一组规则,非纹理寄存器有另一组规则。

语法

dst.writemask

 

其中

  • dst 是目标寄存器。
  • writemask 是 (x,y,z,w) 或 (红色、绿色、蓝色、alpha) 中的掩码序列。

备注

以下目标写入掩码可用。

像素着色器版本 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
.xyzw (默认) x x x x x x x x x
。Xyz x x x x x x x x x
.w x x x x x x x x x
任意掩码 x x x x x x

 

任意掩码允许组合任意一组通道以生成掩码。 通道必须按顺序 r、g、b、a 列出,例如 register.rba,这会更新目标的红色、蓝色和 alpha 通道。 任意掩码在版本 1_4 或更高版本中可用。

如果未指定目标写入掩码,则目标写入掩码默认为 rgba 大小写。 换句话说,目标寄存器中的所有通道都会更新。

对于版本 1_0 到 1_3, dp3 - ps dp3 算术指令只能使用 .rgb 或 .rgba 输出写入掩码。

仅算术运算支持目标寄存器写入掩码。 它们不能用于纹理寻址指令,版本 1_4 指令除外, texcrd - pstexld - ps_2_0及更新

默认写入所有四个颜色通道。

// All four color channels can be written by explicitly listing them.
mul r0.rgba, t0, v0

// Or, the default mask can be used to write all four channels.
mul r0, t0, v0

alpha 写入掩码也称为标量写入掩码,因为它使用标量管道。

add r0.a, t1, v1

因此,此指令有效地将 t1 的 alpha 分量和 v1 的 alpha 分量的总和放入 r0.a 中。

颜色写入掩码用于控制对颜色通道的写入。

// The color write mask is also referred to as the vector write mask, 
//   because it uses the vector pipeline.
mul r0.rgb, t0, v0

对于版本 1_4,只要掩码排序为 r,g,b,a,目标写入掩码就可以在任意组合中使用。

// This example updates the red, blue, and alpha channels.
mov r0.rba, r1

共同发出的指令允许同时发出两个可能不同的指令。 这是通过执行 alpha 管道和 RGB 管道中的指令来实现的。

  mul r0.rgb, t0, v0
+ add r1.a,   t1, c1

以这种方式配对指令的优点是,它允许在矢量和标量管道中并行执行不同的操作。

这些顶点着色器输出寄存器仅限于以下写入掩码:

寄存器类型 所需的写入掩码
oFog 此标量寄存器上不允许使用显式写入掩码
选择 此标量寄存器上不允许使用显式写入掩码
oPos .xyzw (默认)
oT# 组合掩码:.x | .xy | .xyz | .xyzw (这是默认)

 

像素着色器寄存器修饰符