如何等待 GPU 在 DirectX9 中完成它的工作?

How to wait for the GPU to finish its work in DirectX9?

我正在寻找一种方法来等待 GPU 在 DirectX9 中完成其工作。相当于 OpenGL 中的 glFinish 命令...

我已经知道这不是我应该做的事,但我必须这样做!我正在编写一个集成在 WPF 中的线程图形引擎,我需要进行某种离屏渲染,以便为 D3DImage 提供有效的表面。计算帧的时间非常长(超过 100 毫秒),并且即使我以正确的方式锁定所有内容,有时也会在我的引擎未完全计算帧时渲染 WPF 图像。我几乎可以肯定这只是一个 Finish 问题,但我不知道如何做到这一点。

到目前为止,我尝试像这样启动 DX9 查询:

using namespace SlimDX.Direct3D9;

public class GraphicsDevice: Device
{
    ...

    public void Finish()
    {
        var query = new Query(this, QueryType.Event);
        EndScene();
        while (!query.CheckStatus(true)) ;
    }
}

但是好像不行...

所以,第一个问题不谈 WPF,你知道如何等待 GPU 完成发送给驱动程序的内容吗?

谢谢!

这就是解决方案。 我不知道它真的有效!

我使用 EventQuery 'mark' 我最后一次调用 GPU。 然后我使用 GetData/CheckStatus 方法使用某种无限循环刷新 GPU 指令并等待 GPU 最终触发 EventQuery。