为什么Microsoft在DirectX9运行时中限制使用D16_Lockable和D32_Lockable以外的格式锁定深度缓冲区?

时间:2014-04-26 21:22:22

标签: directx directx-9

例如,我们无法使用DX9 API LockRect()锁定格式为D24S8的深度缓冲区,但是使用相同的API我们可以使用格式D16_Lockable和D32_Lockable锁定深度缓冲区。

1 个答案:

答案 0 :(得分:0)

许多GPU都不会保留内存线性深度缓冲区以获得最佳性能。它可能只是一个span缓冲区,一个优化的混合缓冲区或某种树。这对GPU有很大帮助。但是如果要锁定这样的缓冲区,GPU必须将其转换为线性缓冲区,这可能是昂贵的。因此,通过开始获取可锁定缓冲区,您可以告诉GPU跳过所有这些技巧并从头开始构建线性缓冲区。

实现可能仍然不同,但这是在可锁定和非锁定之间选择API的想法。它允许驱动程序针对每种情况进行优化。

通过说“D24S8”,您可以告诉驱动器您希望缓冲区在精度,功能和渲染方面做些什么。然后可以以任何奇怪的方式自由地实现它。 通过说“可锁定”,你告诉它跳过优化,这会在以后损害内存映射回读。