c++ - 为什么 ID3D11DeviceContext::Flush() 方法在查询 GPU 状态期间被调用两次
问题描述
假设已经创建了一个 d3d 11 设备,然后创建一个查询:
ID3D11Query* m_pQuery
...
HRESULT hr = S_OK;
D3D11_QUERY_DESC queryDesc;
queryDesc.Query = D3D11_QUERY_EVENT;
queryDesc.MiscFlags = 0;
//pd3dDevice has been created beforehand.
hr = pd3dDevice->CreateQuery(&queryDesc, &m_pQuery);
现在,定义一个函数来等待 GPU 返回它的查询结果:
void GlobalAppState::WaitForGPU()
{
DXUTGetD3D11DeviceContext()->Flush();
DXUTGetD3D11DeviceContext()->End(m_pQuery);
DXUTGetD3D11DeviceContext()->Flush();
while (S_OK != DXUTGetD3D11DeviceContext()->GetData(m_pQuery, NULL, 0, 0));
}
我的问题是为什么flush
在查询结束之前和之后调用两次?第一次刷新后命令缓冲区被清除,那么第二次“刷新”是否有意义?
原始代码来自VoxelHashing/DepthSensingCUDA/Source/GlobalAppState.cpp
解决方案
推荐阅读
- java - 努力创建新的 HashMap 函数
- amazon-sns - 使用 AWS 的自定义电子邮件地址
- python - 如何使用 Python Selenium 在网站上查找特定文本?
- webstorm - 我可以隐藏 WebStorm 生成的 .idea 文件夹吗?
- javascript - 在 Bootstrap 选项卡中显示来自 2 个表的数据
- python - Python:使`input`读写自定义文件描述符
- python - 直接搜索文件和搜索使用“read()”函数获得的字符串有什么区别
- python - 导入包时文件名只能是一个单词吗?
- apache - htaccess - remove index.php and keep a variable without key
- java - 更改对象的特定注释字段的值,该对象用作某个对象中多个字段的类型 - Jackson Object Mapper Serialize