From ab134958f58598bd0a1559cc08d03c25f2ff2c07 Mon Sep 17 00:00:00 2001 From: Adam Sawicki Date: Tue, 1 Feb 2022 14:03:52 +0100 Subject: [PATCH] Fixed algorithm in VmaBlockMetadata_TLSF::CreateAllocationRequest Code by @medranSolus --- include/vk_mem_alloc.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/include/vk_mem_alloc.h b/include/vk_mem_alloc.h index 6c5424f..ce4f48f 100644 --- a/include/vk_mem_alloc.h +++ b/include/vk_mem_alloc.h @@ -9928,12 +9928,15 @@ bool VmaBlockMetadata_TLSF::CreateAllocationRequest( // Round up to the next block VkDeviceSize sizeForNextList = allocSize; - if (allocSize >= (1 << SECOND_LEVEL_INDEX)) + VkDeviceSize smallSizeStep = SMALL_BUFFER_SIZE / (IsVirtual() ? 1 << SECOND_LEVEL_INDEX : 4); + if (allocSize > SMALL_BUFFER_SIZE) { - sizeForNextList += (1ULL << (VMA_BITSCAN_MSB(allocSize) - SECOND_LEVEL_INDEX)) - 1; + sizeForNextList += (1ULL << (VMA_BITSCAN_MSB(allocSize) - SECOND_LEVEL_INDEX)); } + else if (allocSize > SMALL_BUFFER_SIZE - smallSizeStep) + sizeForNextList = SMALL_BUFFER_SIZE + 1; else - sizeForNextList += (1 << SECOND_LEVEL_INDEX) - 1; + sizeForNextList += smallSizeStep; uint32_t nextListIndex = 0; uint32_t prevListIndex = 0;