Free shader debugger in replay driver so it's proxied correctly

This commit is contained in:
baldurk
2020-05-15 19:03:27 +01:00
parent d332c985e0
commit 5a0134ed4b
13 changed files with 60 additions and 1 deletions
+31
View File
@@ -95,6 +95,7 @@ rdcstr DoStringise(const ReplayProxyPacket &el)
STRINGISE_ENUM_NAMED(eReplayProxy_GetDriverInfo, "GetDriverInfo");
STRINGISE_ENUM_NAMED(eReplayProxy_ContinueDebug, "ContinueDebug");
STRINGISE_ENUM_NAMED(eReplayProxy_FreeDebugger, "FreeDebugger");
}
END_ENUM_STRINGISE();
}
@@ -1601,6 +1602,35 @@ rdcarray<ShaderDebugState> ReplayProxy::ContinueDebug(ShaderDebugger *debugger)
PROXY_FUNCTION(ContinueDebug, debugger);
}
template <typename ParamSerialiser, typename ReturnSerialiser>
void ReplayProxy::Proxied_FreeDebugger(ParamSerialiser &paramser, ReturnSerialiser &retser,
ShaderDebugger *debugger)
{
const ReplayProxyPacket expectedPacket = eReplayProxy_FreeDebugger;
ReplayProxyPacket packet = eReplayProxy_FreeDebugger;
{
BEGIN_PARAMS();
uint64_t debugger_ptr = (uint64_t)(uintptr_t)debugger;
SERIALISE_ELEMENT(debugger_ptr);
debugger = (ShaderDebugger *)(uintptr_t)debugger_ptr;
END_PARAMS();
}
{
REMOTE_EXECUTION();
if(paramser.IsReading() && !paramser.IsErrored() && !m_IsErrored)
m_Remote->FreeDebugger(debugger);
}
CheckError(packet, expectedPacket);
}
void ReplayProxy::FreeDebugger(ShaderDebugger *debugger)
{
PROXY_FUNCTION(FreeDebugger, debugger);
}
template <typename ParamSerialiser, typename ReturnSerialiser>
void ReplayProxy::Proxied_SavePipelineState(ParamSerialiser &paramser, ReturnSerialiser &retser,
uint32_t eventId)
@@ -2790,6 +2820,7 @@ bool ReplayProxy::Tick(int type)
break;
}
case eReplayProxy_ContinueDebug: ContinueDebug(NULL); break;
case eReplayProxy_FreeDebugger: FreeDebugger(NULL); break;
case eReplayProxy_RenderOverlay:
RenderOverlay(ResourceId(), Subresource(), CompType::Typeless, FloatVector(),
DebugOverlay::NoOverlay, 0, rdcarray<uint32_t>());