From e22e81304935db0b6a06225a92f7065bb0c9d464 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 23 Sep 2016 16:33:44 +0200 Subject: [PATCH] 32-bit compile fixes with 64-bit buffer lengths and offsets --- renderdoc/driver/d3d12/d3d12_debug.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_debug.cpp b/renderdoc/driver/d3d12/d3d12_debug.cpp index 82e960079..747571713 100644 --- a/renderdoc/driver/d3d12/d3d12_debug.cpp +++ b/renderdoc/driver/d3d12/d3d12_debug.cpp @@ -1793,14 +1793,20 @@ void D3D12DebugManager::GetBufferData(ID3D12Resource *buffer, uint64_t offset, u length = RDCMIN(length, desc.Width - offset); } + if(sizeof(size_t) == sizeof(uint32_t) && offset + length > 0xfffffff) + { + RDCERR("Trying to read back too much data on 32-bit build. Try running on 64-bit."); + return; + } + uint64_t outOffs = 0; - ret.resize(length); + ret.resize((size_t)length); // directly CPU mappable (and possibly invalid to transition and copy from), so just memcpy if(heapProps.Type == D3D12_HEAP_TYPE_UPLOAD || heapProps.Type == D3D12_HEAP_TYPE_READBACK) { - D3D12_RANGE range = {offset, offset + length}; + D3D12_RANGE range = {(size_t)offset, size_t(offset + length)}; byte *data = NULL; HRESULT hr = buffer->Map(0, &range, (void **)&data); @@ -1841,7 +1847,7 @@ void D3D12DebugManager::GetBufferData(ID3D12Resource *buffer, uint64_t offset, u m_WrappedDevice->ExecuteLists(); m_WrappedDevice->FlushLists(); - D3D12_RANGE range = {0, chunkSize}; + D3D12_RANGE range = {0, (size_t)chunkSize}; void *data = NULL; HRESULT hr = m_ReadbackBuffer->Map(0, &range, &data); @@ -1853,7 +1859,7 @@ void D3D12DebugManager::GetBufferData(ID3D12Resource *buffer, uint64_t offset, u } else { - memcpy(&ret[outOffs], data, chunkSize); + memcpy(&ret[outOffs], data, (size_t)chunkSize); range.End = 0;