输出深度寄存器

像素着色器输出深度寄存器(oDepth)是一个仅写标量寄存器,其范围 [0..1] 返回针对深度模具缓冲区的深度测试的新深度值。

语法

oDepth

 

哪里:

名字 描述
oDepth 针对深度模具缓冲区的深度测试的新深度值

 

请务必注意,写入 oDepth 会导致任何特定于硬件的深度缓冲区优化算法(即分层 Z)的丢失,从而加速深度测试性能。

写入 oDepth 时,需要复制源重排 (.x | .y | .z | .w)。 不允许显式写入掩码。

写入 oDepth 寄存器会替换内插深度值(并忽略任何深度偏差/斜率刻度呈现统计信息)。 如果没有创建或附加到设备的深度缓冲区,则忽略写入 oDepth。

如果要对 oDepth 进行多重采样和写入,因为像素着色器每像素仅运行一次,因此将针对所有覆盖的子样本位置复制深度值。 深度测试仍按样本进行,但如果没有写入 oDepth,则不会从像素着色器进行比较。

如果应用程序将 w-buffer 设置为其深度缓冲区,则在写入 oDepth 时需要考虑到这一点。 它可能需要将 w 范围信息发送到像素着色器,并计算 w 范围以缩放写入 oDepth 的 w 值。

ps_2_0和ps_2_x限制

  • oDepth 只能使用 mov - ps 指令编写,并且只能执行一次。
  • 写入 oDepth 时不允许使用源修饰符。
  • 写入 oDepth 时不允许使用指令修饰符。
  • 在流控制构造中或使用谓词时,不会从流控制构造中写入 oDepth。

ps_3_0限制

  • 对于ps_3_0,输出寄存器 oC# 和 oD# 可以写入任意次数。 像素着色器的输出来自着色器执行结束时输出寄存器的内容。 如果对输出寄存器的写入未发生,可能是由于流控制或着色器刚刚未写入,则相应的呈现目标也不会更新。 如果写入输出寄存器中的通道的子集,则未定义的值将写入剩余通道。
  • 只要所有可能的路径最终写入寄存器,就可以在流控制或谓词中写入 oDepth。
  • 不能执行任何渐变计算(或隐式调用渐变计算的作,如 纹素 - ps_2_0和向上texldb - pstexldp - ps) 的流控制语句内,其分支条件因基元而异(即:动态流控制指令)。 指令谓词不被视为动态流控制。

注册