From f2d8c8d2a8cad108425e297d65a9b0902b3d0c9c Mon Sep 17 00:00:00 2001 From: Stenzek Date: Mon, 1 Apr 2019 20:49:24 +1000 Subject: D3D12: Fix rare case where command list was executed with open queries --- Source/Core/VideoBackends/D3D12/PerfQuery.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'Source/Core/VideoBackends/D3D12/PerfQuery.cpp') diff --git a/Source/Core/VideoBackends/D3D12/PerfQuery.cpp b/Source/Core/VideoBackends/D3D12/PerfQuery.cpp index f5231aad76..4b2ec079ee 100644 --- a/Source/Core/VideoBackends/D3D12/PerfQuery.cpp +++ b/Source/Core/VideoBackends/D3D12/PerfQuery.cpp @@ -57,6 +57,12 @@ void PerfQuery::EnableQuery(PerfQueryGroup type) PartialFlush(do_resolve, blocking); } + // Ensure all state is applied before beginning the query. + // This is because we can't leave a query open when submitting a command list, and the draw + // call itself may need to execute a command list if we run out of descriptors. Note that + // this assumes that the caller has bound all required state prior to enabling the query. + Renderer::GetInstance()->ApplyState(); + if (type == PQG_ZCOMP_ZCOMPLOC || type == PQG_ZCOMP) { ActiveQuery& entry = m_query_buffer[m_query_next_pos]; -- cgit v1.2.3