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())