输出颜色寄存器

像素着色器颜色输出寄存器 (oC#) 是将结果输出到多个呈现目标的只写寄存器。

语法

Oc#

 

其中:

名称 说明
oC0 render 目标 #0
oC1 呈现目标 #1
oC2 呈现目标 #2
oC3 呈现目标 #3

 

备注

  • 如果 oCn 已写入,但没有相应的呈现目标,则忽略对 oCn 的此写入。
  • 呈现状态D3DRS_COLORWRITEENABLE、D3DRS_COLORWRITEENABLE1、D3DRS_COLORWRITEENABLE2和D3DRS_COLORWRITEENABLE3确定 oCn 的哪些组件最终在混合后 (写入呈现器目标(如果适用) )。 如果着色器为给定的 oCn 寄存器写入D3DRS_COLORWRITEENABLE* 呈现状态定义的部分但不是全部组件,则未写入的通道在相应的呈现目标中生成未定义的值。 如果没有写入 oCn 的组件,则完全不能更新相应的呈现目标 (如上述) ,因此D3DRS_COLORWRITEENABLE* 呈现状态不适用。

着色器模型 2 限制

  • oCn 只能使用 mov - ps 指令编写。
  • oC0 必须始终写入着色器中。
  • 除了 .xyzw = 默认重排) 之外,没有源重排 (,或者在写入任何 oCn 时允许使用源修饰符。
  • 写入任何 oCn 时,不允许目标写入掩码 (,但 .xyzw = 默认掩码) 或指令修饰符除外。
  • 如果写入 oCn,则 oC0 - oCn-1 也必须写入。 例如,若要写入 oC2,还必须写入 oC0 和 oC1。
  • 每个着色器最多允许对任何 oC# 进行一次写入。
  • 对于ps_2_x和ps_3_0,不能写入动态流控制中的 oC# 和 oD# 寄存器, (静态流控制内写入 oC# 的预测) 。

着色器模型 3 限制

  • 对于ps_3_0,输出寄存器 oC# 和 oD# 可以写入任意次数。 像素着色器的输出来自着色器执行结束时输出寄存器的内容。 如果写入输出寄存器未发生(可能是由于流控制或着色器未写入),则相应的呈现目标也不会更新。 如果写入了输出寄存器中的通道子集,则将未定义的值写入剩余的通道。
  • 对于ps_3_0,可以使用任何写入掩码编写 oC# 寄存器。
  • 对于ps_2_x和ps_3_0,不能写入动态流控制中的 oC# 和 oD# 寄存器, (静态流控制内写入 oC# 的预测) 。
  • 不得 (或隐式调用渐变计算的操作执行任何梯度计算,例如 texld - ps_2_0 和 uptexldb - pstexldp - ps) ,流控制语句内的分支条件因基元而异, (即:动态流控制指令) 。 指令预测不被视为动态流控制。

寄存器

(Direct3D 9) 的多个呈现目标