返回 登录
0

Direct3D 12 翻转模型交换链示例应用

相比于 D3D11,在 D3D12 中使用交换链会增加复杂性。 可能仅翻转模型 [1] 交换链适用于 D3D12。 它会涉及到许多必选参数,比如缓冲器数量、动态帧数量、显示 SyncInterval,以及是否使用 WaitableObject。 我们内部开发了这款应用,以帮助了解不同参数之间的交互,发现最实用的参数组合。

该应用包含渲染帧通过显示列队从 CPU 到 GPU 再到显示屏这一过程的交互可视化。 所有参数都可以实时调整。 通过屏幕统计数据显示器可以观察调整后对帧速率和延迟产生的影响。

图片描述
图 1:含有注释的示例应用截屏

交换链参数

这些参数用于调查 D3D12 交换链。

图片描述
其他参数

这些参数也纳入至了交换链调查。 不过它们的值是固定的。 下面我们通过列表来解释这些值为何固定不变。

图片描述

了解 BufferCount 和 FrameCount

BufferCount 指交换链中缓冲区的数量。 借助翻转模型交换链,操作系统可能针对显示时的整个同步间隔锁定 1 个缓冲区,因此,供应用写入的缓冲区数量实际上是 BufferCount-1。 如果 BufferCount = 2,表示操作系统在下一个同步期间发布第 2 个缓冲区之前,只有 1 个供写入的缓冲区。 这样会导致一种后果,即帧速率无法超越刷新率。

当 BufferCount >= 3,表示至少有 2 个供应用写入的缓冲区,相互之间可以循环(假设 SyncInterval=0),这样帧速率将是无限的。

FrameCount 指动态 “渲染帧” 的最大数量,其中渲染帧指 GPU 必须执行渲染的资源和缓冲区的集。 如果 FrameCount = 1,表示 CPU 不会构建下一个渲染帧,直到前一个彻底处理完。 这意味着,FrameCount 必须至少是 2,这样 CPU 和 GPU 才能并行运行。

最长帧延迟,以及 “Waitable Object” 如何降低延迟

延迟指帧从生成到显示于屏幕期间所消耗的时间。 因此,为了将间隔固定(同步)的显示系统中的延迟降到最低,帧生成后必须尽快显示。

排队显示操作的最大数称为“最长帧延迟”。 如果…阅读全文


了解更多相关内容,请关注CSDN英特尔开发专区

Intel技术双周刊已全面开启:订阅请点击这里

评论