| 5944 | } |
| 5945 | |
| 5946 | static 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 }; |
no test coverage detected