Fixed bug with mapping of non-dedicated allocations.
This commit is contained in:
parent
8eb9d8e253
commit
6a1f1e2d8d
1 changed files with 32 additions and 0 deletions
|
@ -3191,6 +3191,8 @@ public:
|
||||||
outInfo.unusedRangeSizeMax = 0;
|
outInfo.unusedRangeSizeMax = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BlockAllocMap();
|
||||||
|
void BlockAllocUnmap();
|
||||||
VkResult DedicatedAllocMap(VmaAllocator hAllocator, void** ppData);
|
VkResult DedicatedAllocMap(VmaAllocator hAllocator, void** ppData);
|
||||||
void DedicatedAllocUnmap(VmaAllocator hAllocator);
|
void DedicatedAllocUnmap(VmaAllocator hAllocator);
|
||||||
|
|
||||||
|
@ -4383,6 +4385,34 @@ void VmaAllocation_T::FreeUserDataString(VmaAllocator hAllocator)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VmaAllocation_T::BlockAllocMap()
|
||||||
|
{
|
||||||
|
VMA_ASSERT(GetType() == ALLOCATION_TYPE_BLOCK);
|
||||||
|
|
||||||
|
if((m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP) < 0x7F)
|
||||||
|
{
|
||||||
|
++m_MapCount;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VMA_ASSERT(0 && "Allocation mapped too many times simultaneously.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VmaAllocation_T::BlockAllocUnmap()
|
||||||
|
{
|
||||||
|
VMA_ASSERT(GetType() == ALLOCATION_TYPE_BLOCK);
|
||||||
|
|
||||||
|
if((m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP) != 0)
|
||||||
|
{
|
||||||
|
--m_MapCount;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VMA_ASSERT(0 && "Unmapping allocation not previously mapped.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
VkResult VmaAllocation_T::DedicatedAllocMap(VmaAllocator hAllocator, void** ppData)
|
VkResult VmaAllocation_T::DedicatedAllocMap(VmaAllocator hAllocator, void** ppData)
|
||||||
{
|
{
|
||||||
VMA_ASSERT(GetType() == ALLOCATION_TYPE_DEDICATED);
|
VMA_ASSERT(GetType() == ALLOCATION_TYPE_DEDICATED);
|
||||||
|
@ -7454,6 +7484,7 @@ VkResult VmaAllocator_T::Map(VmaAllocation hAllocation, void** ppData)
|
||||||
if(res == VK_SUCCESS)
|
if(res == VK_SUCCESS)
|
||||||
{
|
{
|
||||||
*ppData = pBytes + (ptrdiff_t)hAllocation->GetOffset();
|
*ppData = pBytes + (ptrdiff_t)hAllocation->GetOffset();
|
||||||
|
hAllocation->BlockAllocMap();
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -7472,6 +7503,7 @@ void VmaAllocator_T::Unmap(VmaAllocation hAllocation)
|
||||||
case VmaAllocation_T::ALLOCATION_TYPE_BLOCK:
|
case VmaAllocation_T::ALLOCATION_TYPE_BLOCK:
|
||||||
{
|
{
|
||||||
VmaDeviceMemoryBlock* const pBlock = hAllocation->GetBlock();
|
VmaDeviceMemoryBlock* const pBlock = hAllocation->GetBlock();
|
||||||
|
hAllocation->BlockAllocUnmap();
|
||||||
pBlock->Unmap(this);
|
pBlock->Unmap(this);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue