mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-16 06:51:09 +00:00
Add support for BeginEvent/SetMarker/EndEvent markers
This commit is contained in:
@@ -1684,19 +1684,160 @@ void WrappedID3D12GraphicsCommandList::SetPredication(ID3D12Resource *pBuffer,
|
||||
m_pReal->SetPredication(Unwrap(pBuffer), AlignedBufferOffset, Operation);
|
||||
}
|
||||
|
||||
bool WrappedID3D12GraphicsCommandList::Serialise_SetMarker(UINT Metadata, const void *pData, UINT Size)
|
||||
{
|
||||
string markerText = "";
|
||||
|
||||
if(m_State >= WRITING && pData && Size)
|
||||
{
|
||||
static const UINT PIX_EVENT_UNICODE_VERSION = 0;
|
||||
static const UINT PIX_EVENT_ANSI_VERSION = 1;
|
||||
|
||||
if(Metadata == PIX_EVENT_UNICODE_VERSION)
|
||||
{
|
||||
const wchar_t *w = (const wchar_t *)pData;
|
||||
markerText = StringFormat::Wide2UTF8(std::wstring(w, w + Size));
|
||||
}
|
||||
else if(Metadata == PIX_EVENT_ANSI_VERSION)
|
||||
{
|
||||
const char *c = (const char *)pData;
|
||||
markerText = string(c, c + Size);
|
||||
}
|
||||
else
|
||||
{
|
||||
RDCERR("Unexpected/unsupported Metadata value %u in SetMarker", Metadata);
|
||||
}
|
||||
}
|
||||
|
||||
SERIALISE_ELEMENT(ResourceId, CommandList, GetResourceID());
|
||||
m_pSerialiser->Serialise("MarkerText", markerText);
|
||||
|
||||
if(m_State < WRITING)
|
||||
m_Cmd->m_LastCmdListID = CommandList;
|
||||
|
||||
if(m_State == READING)
|
||||
{
|
||||
FetchDrawcall draw;
|
||||
draw.name = markerText;
|
||||
draw.flags |= eDraw_SetMarker;
|
||||
|
||||
m_Cmd->AddDrawcall(draw, false);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedID3D12GraphicsCommandList::SetMarker(UINT Metadata, const void *pData, UINT Size)
|
||||
{
|
||||
m_pReal->SetMarker(Metadata, pData, Size);
|
||||
|
||||
if(m_State >= WRITING)
|
||||
{
|
||||
SCOPED_SERIALISE_CONTEXT(SET_MARKER);
|
||||
Serialise_SetMarker(Metadata, pData, Size);
|
||||
|
||||
m_ListRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedID3D12GraphicsCommandList::Serialise_BeginEvent(UINT Metadata, const void *pData,
|
||||
UINT Size)
|
||||
{
|
||||
string markerText = "";
|
||||
|
||||
if(m_State >= WRITING && pData && Size)
|
||||
{
|
||||
static const UINT PIX_EVENT_UNICODE_VERSION = 0;
|
||||
static const UINT PIX_EVENT_ANSI_VERSION = 1;
|
||||
|
||||
if(Metadata == PIX_EVENT_UNICODE_VERSION)
|
||||
{
|
||||
const wchar_t *w = (const wchar_t *)pData;
|
||||
markerText = StringFormat::Wide2UTF8(std::wstring(w, w + Size));
|
||||
}
|
||||
else if(Metadata == PIX_EVENT_ANSI_VERSION)
|
||||
{
|
||||
const char *c = (const char *)pData;
|
||||
markerText = string(c, c + Size);
|
||||
}
|
||||
else
|
||||
{
|
||||
RDCERR("Unexpected/unsupported Metadata value %u in BeginEvent", Metadata);
|
||||
}
|
||||
}
|
||||
|
||||
SERIALISE_ELEMENT(ResourceId, CommandList, GetResourceID());
|
||||
m_pSerialiser->Serialise("MarkerText", markerText);
|
||||
|
||||
if(m_State < WRITING)
|
||||
m_Cmd->m_LastCmdListID = CommandList;
|
||||
|
||||
if(m_State == READING)
|
||||
{
|
||||
FetchDrawcall draw;
|
||||
draw.name = markerText;
|
||||
draw.flags |= eDraw_PushMarker;
|
||||
|
||||
m_Cmd->AddDrawcall(draw, false);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedID3D12GraphicsCommandList::BeginEvent(UINT Metadata, const void *pData, UINT Size)
|
||||
{
|
||||
m_pReal->BeginEvent(Metadata, pData, Size);
|
||||
|
||||
if(m_State >= WRITING)
|
||||
{
|
||||
SCOPED_SERIALISE_CONTEXT(BEGIN_EVENT);
|
||||
Serialise_BeginEvent(Metadata, pData, Size);
|
||||
|
||||
m_ListRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedID3D12GraphicsCommandList::Serialise_EndEvent()
|
||||
{
|
||||
SERIALISE_ELEMENT(ResourceId, CommandList, GetResourceID());
|
||||
|
||||
if(m_State < WRITING)
|
||||
m_Cmd->m_LastCmdListID = CommandList;
|
||||
|
||||
if(m_State == READING && !m_Cmd->m_BakedCmdListInfo[CommandList].curEvents.empty())
|
||||
{
|
||||
FetchDrawcall draw;
|
||||
draw.name = "API Calls";
|
||||
draw.flags = eDraw_SetMarker;
|
||||
|
||||
m_Cmd->AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
if(m_State == READING)
|
||||
{
|
||||
// dummy draw that is consumed when this command buffer
|
||||
// is being in-lined into the call stream
|
||||
FetchDrawcall draw;
|
||||
draw.name = "Pop()";
|
||||
draw.flags = eDraw_PopMarker;
|
||||
|
||||
m_Cmd->AddDrawcall(draw, false);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedID3D12GraphicsCommandList::EndEvent()
|
||||
{
|
||||
m_pReal->EndEvent();
|
||||
|
||||
if(m_State >= WRITING)
|
||||
{
|
||||
SCOPED_SERIALISE_CONTEXT(END_EVENT);
|
||||
Serialise_EndEvent();
|
||||
|
||||
m_ListRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
|
||||
void WrappedID3D12GraphicsCommandList::ExecuteIndirect(ID3D12CommandSignature *pCommandSignature,
|
||||
|
||||
@@ -264,6 +264,10 @@ void WrappedID3D12CommandQueue::ProcessChunk(uint64_t offset, D3D12ChunkType chu
|
||||
|
||||
case RESOURCE_BARRIER: m_ReplayList->Serialise_ResourceBarrier(0, NULL); break;
|
||||
|
||||
case BEGIN_EVENT: m_ReplayList->Serialise_BeginEvent(0, NULL, 0); break;
|
||||
case SET_MARKER: m_ReplayList->Serialise_SetMarker(0, NULL, 0); break;
|
||||
case END_EVENT: m_ReplayList->Serialise_EndEvent(); break;
|
||||
|
||||
case DRAW_INST: m_ReplayList->Serialise_DrawInstanced(0, 0, 0, 0); break;
|
||||
case DRAW_INDEXED_INST: m_ReplayList->Serialise_DrawIndexedInstanced(0, 0, 0, 0, 0); break;
|
||||
case COPY_BUFFER: m_ReplayList->Serialise_CopyBufferRegion(NULL, 0, NULL, 0, 0); break;
|
||||
@@ -345,7 +349,7 @@ void WrappedID3D12CommandQueue::ProcessChunk(uint64_t offset, D3D12ChunkType chu
|
||||
{
|
||||
// no push/pop necessary
|
||||
}
|
||||
else if(m_State == READING && (chunk == PUSH_EVENT || chunk == POP_EVENT))
|
||||
else if(m_State == READING && (chunk == BEGIN_EVENT || chunk == END_EVENT))
|
||||
{
|
||||
// don't add these events - they will be handled when inserted in-line into queue submit
|
||||
}
|
||||
|
||||
@@ -207,9 +207,9 @@ void Serialiser::Serialise(const char *name, D3D12Descriptor &el);
|
||||
\
|
||||
D3D12_CHUNK_MACRO(CAPTURE_SCOPE, "Capture") \
|
||||
\
|
||||
D3D12_CHUNK_MACRO(PUSH_EVENT, "BeginEvent") \
|
||||
D3D12_CHUNK_MACRO(BEGIN_EVENT, "BeginEvent") \
|
||||
D3D12_CHUNK_MACRO(SET_MARKER, "SetMarker") \
|
||||
D3D12_CHUNK_MACRO(POP_EVENT, "EndEvent") \
|
||||
D3D12_CHUNK_MACRO(END_EVENT, "EndEvent") \
|
||||
\
|
||||
D3D12_CHUNK_MACRO(DEBUG_MESSAGES, "DebugMessageList") \
|
||||
\
|
||||
|
||||
Reference in New Issue
Block a user