From e472536c5abe13b32dc0d8f9cbec40eeac7f216f Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 29 May 2020 17:49:57 +0100 Subject: [PATCH] Don't read off end of capture if CaptureEnd chunk is missing --- renderdoc/driver/d3d11/d3d11_context.cpp | 2 +- renderdoc/driver/d3d12/d3d12_commands.cpp | 2 +- renderdoc/driver/gl/gl_driver.cpp | 2 +- renderdoc/driver/vulkan/vk_core.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/d3d11/d3d11_context.cpp b/renderdoc/driver/d3d11/d3d11_context.cpp index df762ba96..c13365338 100644 --- a/renderdoc/driver/d3d11/d3d11_context.cpp +++ b/renderdoc/driver/d3d11/d3d11_context.cpp @@ -1290,7 +1290,7 @@ ReplayStatus WrappedID3D11DeviceContext::ReplayLog(CaptureState readType, uint32 LoadProgress::FrameEventsRead, float(m_CurChunkOffset - startOffset) / float(ser.GetReader()->GetSize())); - if((SystemChunk)chunktype == SystemChunk::CaptureEnd) + if((SystemChunk)chunktype == SystemChunk::CaptureEnd || ser.GetReader()->AtEnd()) break; m_LastChunk = chunktype; diff --git a/renderdoc/driver/d3d12/d3d12_commands.cpp b/renderdoc/driver/d3d12/d3d12_commands.cpp index bdf27a33a..c04d2c0d3 100644 --- a/renderdoc/driver/d3d12/d3d12_commands.cpp +++ b/renderdoc/driver/d3d12/d3d12_commands.cpp @@ -945,7 +945,7 @@ ReplayStatus WrappedID3D12CommandQueue::ReplayLog(CaptureState readType, uint32_ LoadProgress::FrameEventsRead, float(m_Cmd.m_CurChunkOffset - startOffset) / float(ser.GetReader()->GetSize())); - if((SystemChunk)context == SystemChunk::CaptureEnd) + if((SystemChunk)context == SystemChunk::CaptureEnd || ser.GetReader()->AtEnd()) break; // break out if we were only executing one event diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index 8aa8165c3..74dc92840 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -5113,7 +5113,7 @@ ReplayStatus WrappedOpenGL::ContextReplayLog(CaptureState readType, uint32_t sta LoadProgress::FrameEventsRead, float(m_CurChunkOffset - startOffset) / float(ser.GetReader()->GetSize())); - if((SystemChunk)chunktype == SystemChunk::CaptureEnd) + if((SystemChunk)chunktype == SystemChunk::CaptureEnd || ser.GetReader()->AtEnd()) break; m_LastChunk = chunktype; diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 3b62482d8..6fd1ce94f 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -2492,7 +2492,7 @@ ReplayStatus WrappedVulkan::ContextReplayLog(CaptureState readType, uint32_t sta LoadProgress::FrameEventsRead, float(m_CurChunkOffset - startOffset) / float(ser.GetReader()->GetSize())); - if((SystemChunk)chunktype == SystemChunk::CaptureEnd) + if((SystemChunk)chunktype == SystemChunk::CaptureEnd || ser.GetReader()->AtEnd()) break; // break out if we were only executing one event