例如,我们无法使用DX9 API LockRect()锁定格式为D24S8的深度缓冲区,但是使用相同的API我们可以使用格式D16_Lockable和D32_Lockable锁定深度缓冲区。
答案 0 :(得分:0)
许多GPU都不会保留内存线性深度缓冲区以获得最佳性能。它可能只是一个span缓冲区,一个优化的混合缓冲区或某种树。这对GPU有很大帮助。但是如果要锁定这样的缓冲区,GPU必须将其转换为线性缓冲区,这可能是昂贵的。因此,通过开始获取可锁定缓冲区,您可以告诉GPU跳过所有这些技巧并从头开始构建线性缓冲区。
实现可能仍然不同,但这是在可锁定和非锁定之间选择API的想法。它允许驱动程序针对每种情况进行优化。
通过说“D24S8”,您可以告诉驱动器您希望缓冲区在精度,功能和渲染方面做些什么。然后可以以任何奇怪的方式自由地实现它。 通过说“可锁定”,你告诉它跳过优化,这会在以后损害内存映射回读。