输出颜色寄存器

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

语法

Oc#

 

其中:

名称 说明
oC0 render target #0
oC1 render target #1
oC2 render target #2
oC3 render target #3

 

注解

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

着色器模型 2 限制

  • oCn 只能使用 mov - ps 指令编写。
  • oC0 必须始终在着色器中写入。
  • 写入任何 oCn 时,不允许 (源重排 (,但 .xyzw = 默认重排) 或源修饰符除外。
  • 写入到任何 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 和向上texldb - pstexldp - ps - ps) 流控制语句内部,其分支条件根据每个基元而有所不同, (即:动态流控制指令) 。 指令谓词不被视为动态流控制。

寄存器

多个呈现目标 (Direct3D 9)