Store resource record length field as uint64_t instead of int32_t

This commit is contained in:
baldurk
2016-02-07 18:47:55 +01:00
parent 04467206cb
commit 3b9f4da65a
8 changed files with 32 additions and 33 deletions
+1 -1
View File
@@ -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)
+2 -2
View File
@@ -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;
@@ -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;
@@ -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();
+2 -2
View File
@@ -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;
@@ -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)
{
+6 -6
View File
@@ -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<VkDeviceMemory>(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;
@@ -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;