复制深度模具值

Microsoft Direct3D 运行时调用用户模式显示驱动程序的 Blt 函数,将深度模具值从视频内存复制到系统内存,反之亦然。 驱动程序和硬件必须从或转换到驱动程序支持的所有不透明深度模具格式 (,即 D3DDDIFORMAT 枚举类型定义的所有格式(D3DDDIFMT_D*_LOCKABLE) 以下任何格式除外)执行格式转换:

  • D3DDDIFMT_D16_LOCKABLE

  • D3DDDIFMT_D32_LOCKABLE

  • D3DDDIFMT_D32F_LOCKABLE

  • D3DDDIFMT_S8_LOCKABLE

驱动程序放弃任何通道 (深度或模具) 以源格式存在,但不存在于目标格式。 运行时不允许在不共享任何常见通道类型的深度模具图面之间进行复制。

驱动程序首先将源深度值转换为 32 位无符号整数值,然后从 32 位无符号整数值转换为目标表示形式。 以下规则适用于这两种转换:

  • 如果源深度值为浮点值,则会应用 [0,1] 的固定值,并将结果乘以_MAX_UINT。

  • 如果源为整型,而目标为精度较低的整数,则会删除最右侧的额外位。

  • 如果源为整型,目标为更高精度整数,则会从最左侧有效位复制最右侧的额外位。

  • 如果源为整型,目标为浮点值,则将 32 位整数转换为浮点值,结果将除以_MAX_UINT。

驱动程序不需要为非均匀分布深度值提供特殊处理。

驱动程序将源模具值扩展到 8 位整数 (即,驱动程序将源模具值填充在左侧) 零。 如果目标表示形式使用较低的精度,则驱动程序应放弃最重要的位来执行转换。

用户模式显示驱动程序必须支持任意子实体的深度模具副本。 但是,在深度模具复制期间,驱动程序不需要执行镜像、拉伸或颜色键操作。 深度模具复制期间隐式需要点采样。