почему метод ID3D11DeviceContext :: Flush () вызывается дважды при запросе состояния графического процессора - PullRequest
0 голосов
/ 22 октября 2018

Предположим, что устройство 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...