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