目标寄存器写入掩码
写入掩码控制在指令完成后写入目标寄存器的哪些组件。 只要组件的顺序为 .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 - ps 和 texld - 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 (这是默认) |
相关主题