diff --git a/renderdoc/core/resource_manager.cpp b/renderdoc/core/resource_manager.cpp index e934c307e..83a3638ce 100644 --- a/renderdoc/core/resource_manager.cpp +++ b/renderdoc/core/resource_manager.cpp @@ -70,7 +70,7 @@ void ResourceRecord::Delete(ResourceRecordHandler *mgr) (*it)->Delete(mgr); Parents.clear(); - Length = -1; + Length = 0; DataPtr = NULL; for(auto it=m_FrameRefs.begin(); it != m_FrameRefs.end(); ++it) diff --git a/renderdoc/core/resource_manager.h b/renderdoc/core/resource_manager.h index 9a2f9ad41..7d1be9df4 100644 --- a/renderdoc/core/resource_manager.h +++ b/renderdoc/core/resource_manager.h @@ -89,7 +89,7 @@ struct ResourceRecord ResourceRecord(ResourceId id, bool lock) : RefCount(1), ResID(id), UpdateCount(0), DataInSerialiser(false), DataPtr(NULL), DataOffset(0), - Length(-1), DataWritten(false), SpecialResource(false) + Length(0), DataWritten(false), SpecialResource(false) { m_ChunkLock = NULL; @@ -259,7 +259,7 @@ struct ResourceRecord ids.insert(it->first); } - int32_t Length; + uint64_t Length; int UpdateCount; bool DataInSerialiser; diff --git a/renderdoc/driver/d3d11/d3d11_context1_wrap.cpp b/renderdoc/driver/d3d11/d3d11_context1_wrap.cpp index b44f83796..c15798b0b 100644 --- a/renderdoc/driver/d3d11/d3d11_context1_wrap.cpp +++ b/renderdoc/driver/d3d11/d3d11_context1_wrap.cpp @@ -169,7 +169,8 @@ bool WrappedID3D11DeviceContext::Serialise_UpdateSubresource1(ID3D11Resource *pD } else { - SERIALISE_ELEMENT(uint32_t, ResourceBufLen, record->Length); + // fine to truncate the length, D3D11 resource sizes are uint32s + SERIALISE_ELEMENT(uint32_t, ResourceBufLen, (uint32_t)record->Length); byte *padding = m_State >= WRITING ? new byte[ResourceBufLen] : NULL; diff --git a/renderdoc/driver/d3d11/d3d11_context_wrap.cpp b/renderdoc/driver/d3d11/d3d11_context_wrap.cpp index 9d15fd87f..f5b5c242e 100644 --- a/renderdoc/driver/d3d11/d3d11_context_wrap.cpp +++ b/renderdoc/driver/d3d11/d3d11_context_wrap.cpp @@ -4928,7 +4928,7 @@ void WrappedID3D11DeviceContext::CopySubresourceRegion( ID3D11Resource *pDstReso to += DstX; - size_t length = srcRecord->Length; + size_t length = (size_t)srcRecord->Length; if(pSrcBox) { @@ -5056,7 +5056,7 @@ void WrappedID3D11DeviceContext::CopyResource(ID3D11Resource *pDstResource, ID3D byte *from = srcRecord->GetDataPtr(); byte *to = record->GetDataPtr(); - memcpy(to, from, record->Length); + memcpy(to, from, (size_t)record->Length); } else if( (WrappedID3D11Texture1D::IsAlloc(pDstResource) && WrappedID3D11Texture1D::IsAlloc(pSrcResource)) || @@ -5108,7 +5108,7 @@ void WrappedID3D11DeviceContext::CopyResource(ID3D11Resource *pDstResource, ID3D byte *from = srcRecord->SubResources[i]->GetDataPtr(); byte *to = record->SubResources[i]->GetDataPtr(); - memcpy(to, from, record->SubResources[i]->Length); + memcpy(to, from, (size_t)record->SubResources[i]->Length); } } } @@ -5158,7 +5158,7 @@ void WrappedID3D11DeviceContext::UpdateSubresource(ID3D11Resource *pDstResource, RDCASSERT(record->NumSubResources == 0); size_t offs = 0; - size_t length = record->Length; + size_t length = (size_t)record->Length; if(pDstBox) { offs += pDstBox->left; @@ -5293,7 +5293,7 @@ void WrappedID3D11DeviceContext::UpdateSubresource(ID3D11Resource *pDstResource, ) ) { - memcpy(ptr, pSrcData, record->SubResources[DstSubresource]->Length); + memcpy(ptr, pSrcData, (size_t)record->SubResources[DstSubresource]->Length); } else { @@ -6590,7 +6590,7 @@ bool WrappedID3D11DeviceContext::Serialise_Map(ID3D11Resource *pResource, UINT S MapIntercept intercept; - size_t mapLength = record->Length; + size_t mapLength = (size_t)record->Length; if(m_State == WRITING_CAPFRAME || (record && !record->DataInSerialiser)) { @@ -6696,7 +6696,7 @@ bool WrappedID3D11DeviceContext::Serialise_Map(ID3D11Resource *pResource, UINT S { RDCASSERT(record->DataInSerialiser); - mapLength = record->Length; + mapLength = (size_t)record->Length; intercept = MapIntercept(); intercept.verifyWrite = (RenderDoc::Inst().GetCaptureOptions().VerifyMapWrites != 0); @@ -6922,7 +6922,7 @@ bool WrappedID3D11DeviceContext::Serialise_Unmap(ID3D11Resource *pResource, UINT if(m_State < WRITING || m_State == WRITING_CAPFRAME) { - size_t len = record ? record->Length : 0; + size_t len = record ? (size_t)record->Length : 0; byte *appWritePtr = NULL; @@ -7049,7 +7049,7 @@ bool WrappedID3D11DeviceContext::Serialise_Unmap(ID3D11Resource *pResource, UINT } else if(m_State == WRITING_IDLE) { - size_t len = record->Length; + size_t len = (size_t)record->Length; intercept.CopyToD3D(); diff --git a/renderdoc/driver/d3d11/d3d11_device.cpp b/renderdoc/driver/d3d11/d3d11_device.cpp index c92e9a02f..8df72a72c 100644 --- a/renderdoc/driver/d3d11/d3d11_device.cpp +++ b/renderdoc/driver/d3d11/d3d11_device.cpp @@ -1157,7 +1157,7 @@ bool WrappedID3D11Device::Prepare_InitialState(ID3D11DeviceChild *res) D3D11_BUFFER_DESC desc; desc.BindFlags = 0; - desc.ByteWidth = record->Length; + desc.ByteWidth = (UINT)record->Length; desc.MiscFlags = 0; desc.StructureByteStride = 0; desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; @@ -1429,7 +1429,7 @@ bool WrappedID3D11Device::Serialise_InitialState(ID3D11DeviceChild *res) D3D11_BUFFER_DESC desc; desc.BindFlags = 0; - desc.ByteWidth = record->Length; + desc.ByteWidth = (UINT)record->Length; desc.MiscFlags = 0; desc.StructureByteStride = 0; diff --git a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp index a0a5f5e2c..90c70e8d1 100644 --- a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp @@ -475,7 +475,7 @@ void WrappedOpenGL::glNamedBufferDataEXT(GLuint buffer, GLsizeiptr size, const v RDCASSERT(record); // detect buffer orphaning and just update backing store - if(m_State == WRITING_IDLE && record->HasDataPtr() && size == record->Length && usage == record->usage) + if(m_State == WRITING_IDLE && record->HasDataPtr() && size == (GLsizeiptr)record->Length && usage == record->usage) { if(data) memcpy(record->GetDataPtr(), data, (size_t)size); @@ -492,7 +492,7 @@ void WrappedOpenGL::glNamedBufferDataEXT(GLuint buffer, GLsizeiptr size, const v // data, but we don't support (if it's even possible) querying out size etc. // we need to add only the chunks required - glGenBuffers, glBindBuffer to current target, // and this buffer storage. All other chunks have no effect - if(m_State == WRITING_IDLE && (record->HasDataPtr() || (record->Length > 0 && size != record->Length))) + if(m_State == WRITING_IDLE && (record->HasDataPtr() || (record->Length > 0 && size != (GLsizeiptr)record->Length))) { // we need to maintain chunk ordering, so fetch the first two chunk IDs. // We should have at least two by this point - glGenBuffers and whatever gave the record @@ -601,7 +601,7 @@ void WrappedOpenGL::glBufferData(GLenum target, GLsizeiptr size, const void *dat RDCASSERT(record); // detect buffer orphaning and just update backing store - if(m_State == WRITING_IDLE && record->HasDataPtr() && size == record->Length && usage == record->usage) + if(m_State == WRITING_IDLE && record->HasDataPtr() && size == (GLsizeiptr)record->Length && usage == record->usage) { if(data) memcpy(record->GetDataPtr(), data, (size_t)size); @@ -620,7 +620,7 @@ void WrappedOpenGL::glBufferData(GLenum target, GLsizeiptr size, const void *dat // data, but we don't support (if it's even possible) querying out size etc. // we need to add only the chunks required - glGenBuffers, glBindBuffer to current target, // and this buffer storage. All other chunks have no effect - if(m_State == WRITING_IDLE && (record->HasDataPtr() || (record->Length > 0 && size != record->Length))) + if(m_State == WRITING_IDLE && (record->HasDataPtr() || (record->Length > 0 && size != (GLsizeiptr)record->Length))) { // we need to maintain chunk ordering, so fetch the first two chunk IDs. // We should have at least two by this point - glGenBuffers and whatever gave the record @@ -689,7 +689,7 @@ void WrappedOpenGL::glBufferData(GLenum target, GLsizeiptr size, const void *dat { record->AddChunk(chunk); record->SetDataPtr(chunk->GetData()); - record->Length = (int32_t)size; + record->Length = size; record->usage = usage; record->DataInSerialiser = true; } @@ -1845,7 +1845,7 @@ void *WrappedOpenGL::glMapNamedBufferEXT(GLuint buffer, GLenum access) if(access == eGL_READ_ONLY) accessBits = eGL_MAP_READ_BIT; else if(access == eGL_WRITE_ONLY) accessBits = eGL_MAP_WRITE_BIT; else if(access == eGL_READ_WRITE) accessBits = eGL_MAP_READ_BIT|eGL_MAP_WRITE_BIT; - return glMapNamedBufferRangeEXT(record->Resource.name, 0, record->Length, accessBits); + return glMapNamedBufferRangeEXT(record->Resource.name, 0, (GLsizeiptr)record->Length, accessBits); } RDCERR("glMapNamedBufferEXT: Couldn't get resource record for buffer %x!", buffer); @@ -1870,7 +1870,7 @@ void *WrappedOpenGL::glMapBuffer(GLenum target, GLenum access) if(access == eGL_READ_ONLY) accessBits = eGL_MAP_READ_BIT; else if(access == eGL_WRITE_ONLY) accessBits = eGL_MAP_WRITE_BIT; else if(access == eGL_READ_WRITE) accessBits = eGL_MAP_READ_BIT|eGL_MAP_WRITE_BIT; - return glMapNamedBufferRangeEXT(record->Resource.name, 0, record->Length, accessBits); + return glMapNamedBufferRangeEXT(record->Resource.name, 0, (GLsizeiptr)record->Length, accessBits); } RDCERR("glMapBuffer: Couldn't get resource record for target %x - no buffer bound?", target); @@ -1903,7 +1903,7 @@ bool WrappedOpenGL::Serialise_glUnmapNamedBufferEXT(GLuint buffer) // if the map has a sub-range specified, trust the user to have specified // a minimal range, similar to glFlushMappedBufferRange, so don't find diff // range. - record->Map.offset == 0 && record->Map.length == record->Length && + record->Map.offset == 0 && record->Map.length == (GLsizeiptr)record->Length && // similarly for invalidate maps, we want to update the whole buffer !record->Map.invalidate) { diff --git a/renderdoc/driver/vulkan/vk_initstate.cpp b/renderdoc/driver/vulkan/vk_initstate.cpp index 8599c62a0..d0e28d82a 100644 --- a/renderdoc/driver/vulkan/vk_initstate.cpp +++ b/renderdoc/driver/vulkan/vk_initstate.cpp @@ -137,7 +137,7 @@ bool WrappedVulkan::Prepare_SparseInitialState(WrappedVkBuffer *buf) memDataOffs[i].memOffs = bufInfo.size; // increase size - bufInfo.size += (VkDeviceSize)GetRecord(it->first)->Length; + bufInfo.size += GetRecord(it->first)->Length; } info->totalSize = bufInfo.size; @@ -185,7 +185,7 @@ bool WrappedVulkan::Prepare_SparseInitialState(WrappedVkBuffer *buf) { VkBuffer srcBuf; - bufInfo.size = (VkDeviceSize)GetRecord(it->first)->Length; + bufInfo.size = GetRecord(it->first)->Length; vkr = ObjDisp(d)->CreateBuffer(Unwrap(d), &bufInfo, &srcBuf); RDCASSERT(vkr == VK_SUCCESS); @@ -308,7 +308,7 @@ bool WrappedVulkan::Prepare_SparseInitialState(WrappedVkImage *im) memDataOffs[i].memOffs = bufInfo.size; // increase size - bufInfo.size += (VkDeviceSize)GetRecord(it->first)->Length; + bufInfo.size += GetRecord(it->first)->Length; } state->totalSize = bufInfo.size; @@ -356,7 +356,7 @@ bool WrappedVulkan::Prepare_SparseInitialState(WrappedVkImage *im) { VkBuffer srcBuf; - bufInfo.size = (VkDeviceSize)GetRecord(it->first)->Length; + bufInfo.size = GetRecord(it->first)->Length; vkr = ObjDisp(d)->CreateBuffer(Unwrap(d), &bufInfo, &srcBuf); RDCASSERT(vkr == VK_SUCCESS); @@ -1068,12 +1068,12 @@ bool WrappedVulkan::Prepare_InitialState(WrappedVkRes *res) VkResourceRecord *record = GetResourceManager()->GetResourceRecord(id); VkDeviceSize dataoffs = 0; VkDeviceMemory datamem = ToHandle(res); - VkDeviceSize datasize = (VkDeviceSize)record->Length; + VkDeviceSize datasize = record->Length; RDCASSERT(datamem); RDCASSERT(record->Length > 0); - VkDeviceSize memsize = (VkDeviceSize)record->Length; + VkDeviceSize memsize = record->Length; VkDeviceMemory readbackmem = VK_NULL_HANDLE; diff --git a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp index 43dbc7fa3..a716badb9 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp @@ -233,9 +233,7 @@ VkResult WrappedVulkan::vkAllocMemory( record->AddChunk(chunk); - // VKTODOLOW Change record->Length to at least int64_t (maybe uint64_t) - record->Length = (int32_t)pAllocInfo->allocationSize; - RDCASSERT(pAllocInfo->allocationSize < 0x7FFFFFFF); + record->Length = pAllocInfo->allocationSize; uint32_t memProps = m_PhysicalDeviceData.fakeMemProps->memoryTypes[pAllocInfo->memoryTypeIndex].propertyFlags; @@ -319,7 +317,7 @@ VkResult WrappedVulkan::vkMapMemory( MemMapState &state = *memrecord->memMapState; // ensure size is valid - RDCASSERT(size == 0 || size <= (VkDeviceSize)memrecord->Length); + RDCASSERT(size == 0 || size <= memrecord->Length); state.mappedPtr = (byte *)realData; state.refData = NULL;