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

Function TestMemoryUsage

src/Tests.cpp:5946–6141  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5944}
5945
5946static void TestMemoryUsage()
5947{
5948 wprintf(L"Testing memory usage:\n");
5949
5950 static const VmaMemoryUsage lastUsage = VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED;
5951 for(uint32_t usage = 0; usage <= lastUsage; ++usage)
5952 {
5953 switch(usage)
5954 {
5955 case VMA_MEMORY_USAGE_UNKNOWN: printf(" VMA_MEMORY_USAGE_UNKNOWN:\n"); break;
5956 case VMA_MEMORY_USAGE_GPU_ONLY: printf(" VMA_MEMORY_USAGE_GPU_ONLY:\n"); break;
5957 case VMA_MEMORY_USAGE_CPU_ONLY: printf(" VMA_MEMORY_USAGE_CPU_ONLY:\n"); break;
5958 case VMA_MEMORY_USAGE_CPU_TO_GPU: printf(" VMA_MEMORY_USAGE_CPU_TO_GPU:\n"); break;
5959 case VMA_MEMORY_USAGE_GPU_TO_CPU: printf(" VMA_MEMORY_USAGE_GPU_TO_CPU:\n"); break;
5960 case VMA_MEMORY_USAGE_CPU_COPY: printf(" VMA_MEMORY_USAGE_CPU_COPY:\n"); break;
5961 case VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED: printf(" VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED:\n"); break;
5962 default: assert(0);
5963 }
5964
5965 auto printResult = [](const char* testName, VkResult res, uint32_t memoryTypeBits, uint32_t memoryTypeIndex)
5966 {
5967 if(res == VK_SUCCESS)
5968 printf(" %s: memoryTypeBits=0x%X, memoryTypeIndex=%u\n", testName, memoryTypeBits, memoryTypeIndex);
5969 else
5970 printf(" %s: memoryTypeBits=0x%X, FAILED with res=%d\n", testName, memoryTypeBits, (int32_t)res);
5971 };
5972
5973 // 1: Buffer for copy
5974 {
5975 VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
5976 bufCreateInfo.size = 65536;
5977 bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
5978
5979 VkBuffer buf = VK_NULL_HANDLE;
5980 VkResult res = vkCreateBuffer(g_hDevice, &bufCreateInfo, g_Allocs, &buf);
5981 TEST(res == VK_SUCCESS && buf != VK_NULL_HANDLE);
5982
5983 VkMemoryRequirements memReq = {};
5984 vkGetBufferMemoryRequirements(g_hDevice, buf, &memReq);
5985
5986 VmaAllocationCreateInfo allocCreateInfo = {};
5987 allocCreateInfo.usage = (VmaMemoryUsage)usage;
5988 VmaAllocation alloc = VK_NULL_HANDLE;
5989 VmaAllocationInfo allocInfo = {};
5990 res = vmaAllocateMemoryForBuffer(g_hAllocator, buf, &allocCreateInfo, &alloc, &allocInfo);
5991 if(res == VK_SUCCESS)
5992 {
5993 TEST((memReq.memoryTypeBits & (1u << allocInfo.memoryType)) != 0);
5994 res = vkBindBufferMemory(g_hDevice, buf, allocInfo.deviceMemory, allocInfo.offset);
5995 TEST(res == VK_SUCCESS);
5996 }
5997 printResult("Buffer TRANSFER_DST + TRANSFER_SRC", res, memReq.memoryTypeBits, allocInfo.memoryType);
5998 vmaDestroyBuffer(g_hAllocator, buf, alloc);
5999 }
6000
6001 // 2: Vertex buffer
6002 {
6003 VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };

Callers 1

TestFunction · 0.85

Calls 5

TESTEnum · 0.85
vmaDestroyBufferFunction · 0.85
vmaDestroyImageFunction · 0.85

Tested by

no test coverage detected