void WrappedID3D11DeviceContext::AddEvent(D3D11ChunkType type, string description, ResourceId ctx) { if(ctx == ResourceId()) ctx = m_pDevice->GetResourceManager()->GetOriginalID(m_ResourceID); if(GetType() == D3D11_DEVICE_CONTEXT_DEFERRED) { m_pDevice->GetImmediateContext()->AddEvent(type, description, ctx); return; } FetchAPIEvent apievent; apievent.context = ctx; apievent.fileOffset = m_CurChunkOffset; apievent.eventID = m_CurEventID; apievent.eventDesc = description; Callstack::Stackwalk *stack = m_pSerialiser->GetLastCallstack(); if(stack) { create_array(apievent.callstack, stack->NumLevels()); memcpy(apievent.callstack.elems, stack->GetAddrs(), sizeof(uint64_t)*stack->NumLevels()); } m_CurEvents.push_back(apievent); if(m_State == READING) m_Events.push_back(apievent); }
void D3D12CommandData::AddEvent(D3D12ChunkType type, string description) { FetchAPIEvent apievent; apievent.context = ResourceId(); apievent.fileOffset = m_CurChunkOffset; apievent.eventID = m_LastCmdListID != ResourceId() ? m_BakedCmdListInfo[m_LastCmdListID].curEventID : m_RootEventID; apievent.eventDesc = description; Callstack::Stackwalk *stack = m_pSerialiser->GetLastCallstack(); if(stack) { create_array(apievent.callstack, stack->NumLevels()); memcpy(apievent.callstack.elems, stack->GetAddrs(), sizeof(uint64_t) * stack->NumLevels()); } D3D12NOTIMP("debug messages"); vector<DebugMessage> m_EventMessages; for(size_t i = 0; i < m_EventMessages.size(); i++) m_EventMessages[i].eventID = apievent.eventID; if(m_LastCmdListID != ResourceId()) { m_BakedCmdListInfo[m_LastCmdListID].curEvents.push_back(apievent); vector<DebugMessage> &msgs = m_BakedCmdListInfo[m_LastCmdListID].debugMessages; msgs.insert(msgs.end(), m_EventMessages.begin(), m_EventMessages.end()); } else { m_RootEvents.push_back(apievent); m_Events.push_back(apievent); D3D12NOTIMP("debug messages"); // m_DebugMessages.insert(m_DebugMessages.end(), m_EventMessages.begin(), // m_EventMessages.end()); } m_EventMessages.clear(); }
void WrappedID3D11DeviceContext::EndCaptureFrame() { SCOPED_SERIALISE_CONTEXT(CONTEXT_CAPTURE_FOOTER); m_pSerialiser->Serialise("context", m_ResourceID); bool HasCallstack = RenderDoc::Inst().GetCaptureOptions().CaptureCallstacks != 0; m_pSerialiser->Serialise("HasCallstack", HasCallstack); if(HasCallstack) { Callstack::Stackwalk *call = Callstack::Collect(); RDCASSERT(call->NumLevels() < 0xff); size_t numLevels = call->NumLevels(); uint64_t *stack = (uint64_t *)call->GetAddrs(); m_pSerialiser->SerialisePODArray("callstack", stack, numLevels); delete call; } m_ContextRecord->AddChunk(scope.Get()); }