From 43389d8ef493faa8c44f98a962563e2bef991dc4 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sun, 16 Jun 2019 17:00:38 +0200 Subject: [PATCH] [d3d11] Implement timestamp disjoint queries --- src/d3d11/d3d11_query.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/d3d11/d3d11_query.cpp b/src/d3d11/d3d11_query.cpp index db2af627..76721721 100644 --- a/src/d3d11/d3d11_query.cpp +++ b/src/d3d11/d3d11_query.cpp @@ -33,6 +33,10 @@ namespace dxvk { break; case D3D11_QUERY_TIMESTAMP_DISJOINT: + for (uint32_t i = 0; i < 2; i++) { + m_query[i] = dxvkDevice->createGpuQuery( + VK_QUERY_TYPE_TIMESTAMP, 0, 0); + } break; case D3D11_QUERY_PIPELINE_STATISTICS: @@ -178,7 +182,10 @@ namespace dxvk { switch (m_desc.Query) { case D3D11_QUERY_EVENT: case D3D11_QUERY_TIMESTAMP: + break; + case D3D11_QUERY_TIMESTAMP_DISJOINT: + ctx->writeTimestamp(m_query[1]); break; default: @@ -196,10 +203,8 @@ namespace dxvk { break; case D3D11_QUERY_TIMESTAMP: - ctx->writeTimestamp(m_query[0]); - break; - case D3D11_QUERY_TIMESTAMP_DISJOINT: + ctx->writeTimestamp(m_query[0]); break; default: @@ -264,7 +269,7 @@ namespace dxvk { case D3D11_QUERY_TIMESTAMP_DISJOINT: { auto data = static_cast(pData); data->Frequency = GetTimestampQueryFrequency(); - data->Disjoint = FALSE; + data->Disjoint = queryData[0].timestamp.time < queryData[1].timestamp.time; } return S_OK; case D3D11_QUERY_PIPELINE_STATISTICS: {