diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index e7f04411f..7cfb9e476 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -2066,6 +2066,12 @@ ReplayCreateStatus D3D11_CreateReplayDevice(const char *logfile, IReplayDriver * wrappedDev->SetLogFile(logfile); wrappedDev->SetLogVersion(initParams.SerialiseVersion); + if(wrappedDev->GetSerialiser()->HasError()) + { + SAFE_RELEASE(wrappedDev); + return eReplayCreate_FileIOFailed; + } + RDCLOG("Created device."); D3D11Replay *replay = wrappedDev->GetReplay(); diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index c2a1506e0..7022f7e1b 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -1538,6 +1538,12 @@ ReplayCreateStatus D3D12_CreateReplayDevice(const char *logfile, IReplayDriver * wrappedDev->SetLogFile(logfile); wrappedDev->SetLogVersion(initParams.SerialiseVersion); + if(wrappedDev->GetSerialiser()->HasError()) + { + SAFE_RELEASE(wrappedDev); + return eReplayCreate_FileIOFailed; + } + RDCLOG("Created device."); D3D12Replay *replay = wrappedDev->GetReplay(); diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index 907081308..724c9ec0b 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -330,7 +330,6 @@ private: ResourceId m_FakeVAOID; - Serialiser *GetSerialiser() { return m_pSerialiser; } uint32_t GetLogVersion() { return m_InitParams.SerialiseVersion; } void ProcessChunk(uint64_t offset, GLChunkType context); void ContextReplayLog(LogState readType, uint32_t startEventID, uint32_t endEventID, bool partial); @@ -504,6 +503,7 @@ public: void ReplayLog(uint32_t startEventID, uint32_t endEventID, ReplayLogType replayType); void ReadLogInitialisation(); + Serialiser *GetSerialiser() { return m_pSerialiser; } GLuint GetFakeBBFBO() { return m_FakeBB_FBO; } GLuint GetFakeVAO() { return m_FakeVAO; } FetchFrameRecord &GetFrameRecord() { return m_FrameRecord; } diff --git a/renderdoc/driver/gl/gl_replay_linux.cpp b/renderdoc/driver/gl/gl_replay_linux.cpp index d5ff5b55b..bb2761c37 100644 --- a/renderdoc/driver/gl/gl_replay_linux.cpp +++ b/renderdoc/driver/gl/gl_replay_linux.cpp @@ -433,6 +433,12 @@ ReplayCreateStatus GL_CreateReplayDevice(const char *logfile, IReplayDriver **dr WrappedOpenGL *gl = new WrappedOpenGL(logfile, GetRealGLFunctions()); gl->Initialise(initParams); + if(gl->GetSerialiser()->HasError()) + { + delete gl; + return eReplayCreate_FileIOFailed; + } + RDCLOG("Created device."); GLReplay *replay = gl->GetReplay(); replay->SetProxy(logfile == NULL); diff --git a/renderdoc/driver/gl/gl_replay_win32.cpp b/renderdoc/driver/gl/gl_replay_win32.cpp index a06835c05..e422134fb 100644 --- a/renderdoc/driver/gl/gl_replay_win32.cpp +++ b/renderdoc/driver/gl/gl_replay_win32.cpp @@ -805,6 +805,12 @@ ReplayCreateStatus GL_CreateReplayDevice(const char *logfile, IReplayDriver **dr WrappedOpenGL *gl = new WrappedOpenGL(logfile, real); gl->Initialise(initParams); + if(gl->GetSerialiser()->HasError()) + { + delete gl; + return eReplayCreate_FileIOFailed; + } + RDCLOG("Created device."); GLReplay *replay = gl->GetReplay(); replay->SetProxy(logfile == NULL); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 6bd6b4963..f12a803dc 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -84,6 +84,9 @@ static void StripUnwantedLayers(vector &Layers) ReplayCreateStatus WrappedVulkan::Initialise(VkInitParams ¶ms) { + if(m_pSerialiser->HasError()) + return eReplayCreate_FileIOFailed; + m_InitParams = params; params.AppName = string("RenderDoc @ ") + params.AppName;