From bcb70d3b9c5a41349b449b7aaa8815d81ff865cc Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 17 Sep 2021 12:18:50 +0100 Subject: [PATCH] Fix D3D11 debug messages being off by one event --- renderdoc/driver/d3d11/d3d11_context.cpp | 13 +++++++++++++ renderdoc/driver/d3d11/d3d11_context_wrap.cpp | 11 +++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/renderdoc/driver/d3d11/d3d11_context.cpp b/renderdoc/driver/d3d11/d3d11_context.cpp index 17dc1e176..5abe1390b 100644 --- a/renderdoc/driver/d3d11/d3d11_context.cpp +++ b/renderdoc/driver/d3d11/d3d11_context.cpp @@ -1162,6 +1162,19 @@ void WrappedID3D11DeviceContext::AddEvent() apievent.chunkIndex = uint32_t(m_StructuredFile->chunks.size() - 1); + // if we're using replay-time debug messages, fetch them now since we can do better to correlate + // to events on replay + if(m_pDevice->GetReplayOptions().apiValidation) + { + rdcarray messages = m_pDevice->GetDebugMessages(); + + for(size_t i = 0; i < messages.size(); i++) + { + messages[i].eventId = apievent.eventId; + m_pDevice->AddDebugMessage(messages[i]); + } + } + m_CurEvents.push_back(apievent); if(IsLoading(m_State)) diff --git a/renderdoc/driver/d3d11/d3d11_context_wrap.cpp b/renderdoc/driver/d3d11/d3d11_context_wrap.cpp index 006a67bb3..e8f087013 100644 --- a/renderdoc/driver/d3d11/d3d11_context_wrap.cpp +++ b/renderdoc/driver/d3d11/d3d11_context_wrap.cpp @@ -3776,15 +3776,10 @@ void WrappedID3D11DeviceContext::Serialise_DebugMessages(SerialiserType &ser) SERIALISE_ELEMENT(DebugMessages); - // if we're using replay-time API validation, fetch messages at replay time and ignore any - // serialised ones + // if we're using replay-time API validation, we fetch messages at replay time in AddEvent and + // ignore any serialised ones if(ser.IsReading() && IsLoading(m_State) && m_pDevice->GetReplayOptions().apiValidation) - { - if(GetType() == D3D11_DEVICE_CONTEXT_IMMEDIATE) - DebugMessages = m_pDevice->GetDebugMessages(); - else - DebugMessages.clear(); - } + DebugMessages.clear(); // hide empty sets of messages. if(ser.IsReading() && DebugMessages.empty())