我有一个调用ID3D11DeviceContext :: CopySubresourceRegion的循环。我怎么能强迫等待呢?

时间:2017-08-30 00:59:15

标签: c++ shader directx-11

正如标题所说,我在一个循环中做了一个CopySubresourceRegion,在那里我需要强制等待直到它完成。在MSDN的文档中,我可以在ID3D11DeviceContext::Flush创建的ID3D11DeviceContext::GetData的事件查询中调用ID3D11Device::CreateQuery,然后调用D3D11_QUERY_EVENT

我已经尝试过了,到目前为止看起来正在进行我的测试,但有一些我不确定的事情。

  1. 如果我在循环开始之前只调用一次CreateQuery并在每次GetData调用时重复使用该查询,它是否会正常工作?

  2. 我应该在创建查询后销毁查询以防止泄漏查询吗?似乎不是DestroyQuery方法,所以也许可以免费拨打ID3D11Query*

  3. 如果我需要在副本完成之前调用ID3D11DeviceContext::Map或Unmap,我还需要Flush吗?

1 个答案:

答案 0 :(得分:0)

为什么需要明确等待完成? D3D11已在内部屏蔽,并且已经在飞行中使用。如果您致电Map,系统会确保等待您完成。

通常,我们希望能够以非阻塞的方式查询完成情况,以便通过使用查询来了解何时可以安全地调用Map

对于2.查询与D3D11中的任何其他资源一样,您可以通过调用Release来销毁它们,并且可以重复使用它们,创建查询池,在使用时标记它们,然后在您使用后再次标记它们能够使用GetData

收集数据