Save machine ident in captures and compare to machine ident on open

* If the machine idents differ in significant ways that we'd consider
  it to be a different platform (currently just OS), and if so mark it
  as supported but suggested to be replayed remotely.
This commit is contained in:
baldurk
2016-08-19 17:26:36 +02:00
parent 52a754d4c1
commit d2faf76356
19 changed files with 155 additions and 28 deletions
+23 -5
View File
@@ -315,20 +315,38 @@ extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_TriggerExceptionHandler(voi
}
}
extern "C" RENDERDOC_API bool32 RENDERDOC_CC RENDERDOC_SupportLocalReplay(const char *logfile,
rdctype::str *driver)
extern "C" RENDERDOC_API ReplaySupport RENDERDOC_CC RENDERDOC_SupportLocalReplay(
const char *logfile, rdctype::str *driver, rdctype::str *recordMachineIdent)
{
if(logfile == NULL)
return false;
return eReplaySupport_Unsupported;
RDCDriver driverType = RDC_Unknown;
string driverName = "";
RenderDoc::Inst().FillInitParams(logfile, driverType, driverName, NULL);
uint64_t fileMachineIdent = 0;
RenderDoc::Inst().FillInitParams(logfile, driverType, driverName, fileMachineIdent, NULL);
if(driver)
*driver = driverName;
return RenderDoc::Inst().HasReplayDriver(driverType);
bool supported = RenderDoc::Inst().HasReplayDriver(driverType);
if(!supported)
return eReplaySupport_Unsupported;
if(fileMachineIdent != 0)
{
uint64_t machineIdent = OSUtility::GetMachineIdent();
if(recordMachineIdent)
*recordMachineIdent = OSUtility::MakeMachineIdentString(fileMachineIdent);
if((machineIdent & OSUtility::MachineIdent_OS_Mask) !=
(fileMachineIdent & OSUtility::MachineIdent_OS_Mask))
return eReplaySupport_SuggestRemote;
}
return eReplaySupport_Supported;
}
extern "C" RENDERDOC_API ReplayCreateStatus RENDERDOC_CC
+3 -1
View File
@@ -1552,7 +1552,9 @@ ReplayCreateStatus ReplayRenderer::CreateDevice(const char *logfile)
RDCDriver driverType = RDC_Unknown;
string driverName = "";
auto status = RenderDoc::Inst().FillInitParams(logfile, driverType, driverName, NULL);
uint64_t fileMachineIdent = 0;
auto status =
RenderDoc::Inst().FillInitParams(logfile, driverType, driverName, fileMachineIdent, NULL);
if(driverType == RDC_Unknown || driverName == "" || status != eReplayCreate_Success)
{