输出颜色寄存器

像素着色器颜色输出寄存器(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 的哪些组件最终会写入呈现目标(如果适用)。 如果着色器为给定的 oCn 寄存器写入由 D3DRS_COLORWRITEENABLE* 呈现状态定义的部分组件,则未写入的通道将在相应的呈现目标中生成未定义的值。 如果未写入 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# 写入作正常)。
  • 不能执行任何渐变计算(或隐式调用渐变计算的作,如 纹素 - ps_2_0和向上texldb - pstexldp - ps) 的流控制语句内,其分支条件因基元而异(即:动态流控制指令)。 指令谓词不被视为动态流控制。

注册

多个呈现目标(Direct3D 9)