From 3ebafcc281f0aba69b6653ab5e2fbe70822a6ecd Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 26 Feb 2018 14:33:27 +0100 Subject: [PATCH] Revert "[d3d11] Remvoed query support" This reverts commit 3d17eb68b9423213b8b345c6bc14209a06c1bde5. --- src/d3d11/d3d11_query.cpp | 56 +++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/src/d3d11/d3d11_query.cpp b/src/d3d11/d3d11_query.cpp index 288a757d..998311ec 100644 --- a/src/d3d11/d3d11_query.cpp +++ b/src/d3d11/d3d11_query.cpp @@ -168,40 +168,33 @@ namespace dxvk { HRESULT STDMETHODCALLTYPE D3D11Query::GetData( void* pData, UINT GetDataFlags) { - // FIXME returning query data seems to lock up some - // games for some reason, so we have to disable it. if (m_desc.Query == D3D11_QUERY_EVENT) { - return S_OK; -// const bool signaled = m_event->getStatus() == DxvkEventStatus::Signaled; -// if (pData != nullptr) -// *static_cast(pData) = signaled; -// -// return signaled ? S_OK : S_FALSE; + const bool signaled = m_event->getStatus() == DxvkEventStatus::Signaled; + if (pData != nullptr) + *static_cast(pData) = signaled; + + return signaled ? S_OK : S_FALSE; } else { -// DxvkQueryData queryData = {}; -// -// if (m_query != nullptr -// && m_query->getData(queryData) != DxvkQueryStatus::Available) -// return S_FALSE; + DxvkQueryData queryData = {}; + + if (m_query != nullptr + && m_query->getData(queryData) != DxvkQueryStatus::Available) + return S_FALSE; if (pData == nullptr) return S_OK; switch (m_desc.Query) { case D3D11_QUERY_OCCLUSION: - *static_cast(pData) = 1; -// *static_cast(pData) = queryData.occlusion.samplesPassed; + *static_cast(pData) = queryData.occlusion.samplesPassed; return S_OK; case D3D11_QUERY_OCCLUSION_PREDICATE: - *static_cast(pData) = TRUE; -// *static_cast(pData) = queryData.occlusion.samplesPassed != 0; + *static_cast(pData) = queryData.occlusion.samplesPassed != 0; return S_OK; case D3D11_QUERY_TIMESTAMP: - static UINT64 fakeTime = 0; - *static_cast(pData) = fakeTime++; -// *static_cast(pData) = queryData.timestamp.time; + *static_cast(pData) = queryData.timestamp.time; return S_OK; case D3D11_QUERY_TIMESTAMP_DISJOINT: { @@ -213,18 +206,17 @@ namespace dxvk { case D3D11_QUERY_PIPELINE_STATISTICS: { auto data = static_cast(pData); - *data = D3D11_QUERY_DATA_PIPELINE_STATISTICS(); -// data->IAVertices = queryData.statistic.iaVertices; -// data->IAPrimitives = queryData.statistic.iaPrimitives; -// data->VSInvocations = queryData.statistic.vsInvocations; -// data->GSInvocations = queryData.statistic.gsInvocations; -// data->GSPrimitives = queryData.statistic.gsPrimitives; -// data->CInvocations = queryData.statistic.clipInvocations; -// data->CPrimitives = queryData.statistic.clipPrimitives; -// data->PSInvocations = queryData.statistic.fsInvocations; -// data->HSInvocations = queryData.statistic.tcsPatches; -// data->DSInvocations = queryData.statistic.tesInvocations; -// data->CSInvocations = queryData.statistic.csInvocations; + data->IAVertices = queryData.statistic.iaVertices; + data->IAPrimitives = queryData.statistic.iaPrimitives; + data->VSInvocations = queryData.statistic.vsInvocations; + data->GSInvocations = queryData.statistic.gsInvocations; + data->GSPrimitives = queryData.statistic.gsPrimitives; + data->CInvocations = queryData.statistic.clipInvocations; + data->CPrimitives = queryData.statistic.clipPrimitives; + data->PSInvocations = queryData.statistic.fsInvocations; + data->HSInvocations = queryData.statistic.tcsPatches; + data->DSInvocations = queryData.statistic.tesInvocations; + data->CSInvocations = queryData.statistic.csInvocations; } return S_OK; default: