MCPcopy Create free account
hub / github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator / TestVirtualBlocksAlgorithms

Function TestVirtualBlocksAlgorithms

src/Tests.cpp:3382–3549  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3380}
3381
3382static void TestVirtualBlocksAlgorithms()
3383{
3384 wprintf(L"Test virtual blocks algorithms\n");
3385
3386 RandomNumberGenerator rand{3454335};
3387 auto calcRandomAllocSize = [&rand]() -> VkDeviceSize { return rand.Generate() % 20 + 5; };
3388
3389 for(size_t algorithmIndex = 0; algorithmIndex < 2; ++algorithmIndex)
3390 {
3391 // Create the block
3392 VmaVirtualBlockCreateInfo blockCreateInfo = {};
3393 blockCreateInfo.pAllocationCallbacks = g_Allocs;
3394 blockCreateInfo.size = 10'000;
3395 switch(algorithmIndex)
3396 {
3397 case 1: blockCreateInfo.flags = VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT; break;
3398 }
3399 VmaVirtualBlock block = nullptr;
3400 VkResult res = vmaCreateVirtualBlock(&blockCreateInfo, &block);
3401 TEST(res == VK_SUCCESS);
3402
3403 struct AllocData
3404 {
3405 VmaVirtualAllocation allocation;
3406 VkDeviceSize allocOffset, requestedSize, allocationSize;
3407 };
3408 std::vector<AllocData> allocations;
3409
3410 // Test too large allocation
3411 {
3412 VmaVirtualAllocationCreateInfo allocCreateInfo = {};
3413 allocCreateInfo.size = blockCreateInfo.size * 2;
3414 VmaVirtualAllocation alloc;
3415 TEST(vmaVirtualAllocate(block, &allocCreateInfo, &alloc, nullptr) < 0);
3416 }
3417
3418 // Make some allocations
3419 for(size_t i = 0; i < 20; ++i)
3420 {
3421 VmaVirtualAllocationCreateInfo allocCreateInfo = {};
3422 allocCreateInfo.size = calcRandomAllocSize();
3423 allocCreateInfo.pUserData = (void*)(uintptr_t)(allocCreateInfo.size * 10);
3424 if(i < 10) { }
3425 else if(i < 12) allocCreateInfo.flags = VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT;
3426 else if(i < 14) allocCreateInfo.flags = VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT;
3427 else if(i < 16) allocCreateInfo.flags = VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT;
3428 else if(i < 18 && algorithmIndex == 1) allocCreateInfo.flags = VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT;
3429
3430 AllocData alloc = {};
3431 alloc.requestedSize = allocCreateInfo.size;
3432 res = vmaVirtualAllocate(block, &allocCreateInfo, &alloc.allocation, nullptr);
3433 TEST(res == VK_SUCCESS);
3434
3435 VmaVirtualAllocationInfo allocInfo;
3436 vmaGetVirtualAllocationInfo(block, alloc.allocation, &allocInfo);
3437 TEST(allocInfo.size >= allocCreateInfo.size);
3438 alloc.allocOffset = allocInfo.offset;
3439 alloc.allocationSize = allocInfo.size;

Callers 1

TestFunction · 0.85

Calls 15

vmaCreateVirtualBlockFunction · 0.85
TESTEnum · 0.85
vmaVirtualAllocateFunction · 0.85
vmaVirtualFreeFunction · 0.85
vmaClearVirtualBlockFunction · 0.85
vmaDestroyVirtualBlockFunction · 0.85
GenerateMethod · 0.80

Tested by

no test coverage detected