输出颜色寄存器
像素着色器颜色输出寄存器(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 - ps、texldp - ps) 的流控制语句内,其分支条件因基元而异(即:动态流控制指令)。 指令谓词不被视为动态流控制。
相关主题