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;