Предположим, что устройство 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);
Теперь определите функцию для ожидания, когда графический процессор вернет свой запросрезультат:
void GlobalAppState::WaitForGPU()
{
DXUTGetD3D11DeviceContext()->Flush();
DXUTGetD3D11DeviceContext()->End(m_pQuery);
DXUTGetD3D11DeviceContext()->Flush();
while (S_OK != DXUTGetD3D11DeviceContext()->GetData(m_pQuery, NULL, 0, 0));
}
Мой вопрос: почему flush
вызывается дважды до и после завершения запроса?Буфер команд очищается после 1-го сброса, поэтому имеет ли смысл 2-й «сброс» или нет?
Исходный код взят из VoxelHashing / DepthSensingCUDA / Source / GlobalAppState.cpp