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

Function TestVirtualBlocks

src/Tests.cpp:3234–3380  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3232}
3233
3234static void TestVirtualBlocks()
3235{
3236 wprintf(L"Test virtual blocks\n");
3237
3238 const VkDeviceSize blockSize = 16 * MEGABYTE;
3239 const VkDeviceSize alignment = 256;
3240 VkDeviceSize offset;
3241
3242 // # Create block 16 MB
3243
3244 VmaVirtualBlockCreateInfo blockCreateInfo = {};
3245 blockCreateInfo.pAllocationCallbacks = g_Allocs;
3246 blockCreateInfo.size = blockSize;
3247 VmaVirtualBlock block;
3248 TEST(vmaCreateVirtualBlock(&blockCreateInfo, &block) == VK_SUCCESS && block);
3249
3250 // # Allocate 8 MB (also fetch offset from the allocation)
3251
3252 VmaVirtualAllocationCreateInfo allocCreateInfo = {};
3253 allocCreateInfo.alignment = alignment;
3254 allocCreateInfo.pUserData = (void*)(uintptr_t)1;
3255 allocCreateInfo.size = 8 * MEGABYTE;
3256 VmaVirtualAllocation allocation0 = VK_NULL_HANDLE;
3257 TEST(vmaVirtualAllocate(block, &allocCreateInfo, &allocation0, &offset) == VK_SUCCESS);
3258 TEST(allocation0 != VK_NULL_HANDLE);
3259
3260 // # Validate the allocation
3261
3262 VmaVirtualAllocationInfo allocInfo0 = {};
3263 vmaGetVirtualAllocationInfo(block, allocation0, &allocInfo0);
3264 TEST(allocInfo0.offset < blockSize);
3265 TEST(allocInfo0.offset == offset);
3266 TEST(allocInfo0.size == allocCreateInfo.size);
3267 TEST(allocInfo0.pUserData == allocCreateInfo.pUserData);
3268
3269 // # Check SetUserData
3270
3271 vmaSetVirtualAllocationUserData(block, allocation0, (void*)(uintptr_t)2);
3272 vmaGetVirtualAllocationInfo(block, allocation0, &allocInfo0);
3273 TEST(allocInfo0.pUserData == (void*)(uintptr_t)2);
3274
3275 // # Allocate 4 MB (also test passing null as pOffset during allocation)
3276
3277 allocCreateInfo.size = 4 * MEGABYTE;
3278 VmaVirtualAllocation allocation1 = VK_NULL_HANDLE;
3279 TEST(vmaVirtualAllocate(block, &allocCreateInfo, &allocation1, nullptr) == VK_SUCCESS);
3280 TEST(allocation1 != VK_NULL_HANDLE);
3281 VmaVirtualAllocationInfo allocInfo1 = {};
3282 vmaGetVirtualAllocationInfo(block, allocation1, &allocInfo1);
3283 TEST(allocInfo1.offset < blockSize);
3284 TEST(allocInfo1.offset + 4 * MEGABYTE <= allocInfo0.offset || allocInfo0.offset + 8 * MEGABYTE <= allocInfo1.offset); // Check if they don't overlap.
3285
3286 // # Allocate another 8 MB - it should fail
3287
3288 allocCreateInfo.size = 8 * MEGABYTE;
3289 VmaVirtualAllocation allocation2 = VK_NULL_HANDLE;
3290 TEST(vmaVirtualAllocate(block, &allocCreateInfo, &allocation2, &offset) < 0);
3291 TEST(allocation2 == VK_NULL_HANDLE);

Callers 1

TestFunction · 0.85

Calls 11

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

Tested by

no test coverage detected