我强烈建议您查看Microsoft的GPUView。以下是介绍该工具的one of the authors webpage。
- D3D通常会缓冲一帧以上的渲染命令(包括礼物)。有关示例,请参见幻灯片25,我们可以在BumpEarth设备队列中看到~3帧被缓冲。这解释了3-4个呼叫立即返回(当前数据包是交叉数据包)。他们只是排队等候。
- 除非您正在进行全屏渲染,否则操作系统需要进行一些合成(相同的幻灯片显示在vsync上发生的合成 - 蓝色垂直线)
一些后果:
- 当您刚刚发送的渲染命令将在屏幕上更新时,现在返回将完全不保证。
- 您的命令渲染帧所需的持续时间并不容易理解。我已经看到应用程序依赖于先前渲染的时序,平滑(以防止乒乓渲染更改)。
作为补充评论:
- 我目睹了现实生活中工作负载中约1.5帧的命令缓冲。
- 即使vsync发生并且视频卡更新前缓冲区,监视器仍然可以在内部进行一些缓冲(更多因为我们将CRT放在后面)。
我必须问,为什么你需要准确控制画面在画面上显示的时间?