在 GPU 上测量时间

Measuring time on GPU

我目前正在调查一些抗锯齿方法所花费的时间。我不完全确定如何准确计算着色器计算时间。我是否正确地假设如果我进行绘图调用,数据将发送到 GPU。 CPU 继续到 运行,然后等待 GPU 在交换链上完成。因此准确计算时间将是 RenderAntialiasing() 之前的 "StartTimer" 和 swapChain->Present(0, 0) 之后的 "StopTimer"; ?

否则我的结果会很奇怪。

This 相当过时的文章让您对图形性能时序的一些挑战有所了解。

所有基于 CPU 的计时器可以告诉您的是操作所需的 CPU 时间,但由于批处理,它可能与您的 API 函数几乎没有关联正在包围。因此,您不应该尝试 'micro-benchmark' 渲染的 CPU 成本,而是用 QueryPerformanceCounter.

将大部分帧括起来

要获得 GPU 时序,您可以使用 Direct3D 时间戳查询。对于 Direct3D 11,请参阅 D3D11_QUERY_TIMESTAMP_DISJOINTD3D11_QUERY_TIMESTAMP