diff --git a/src/SparseBindingTest.cpp b/src/SparseBindingTest.cpp index e7bc589..4468d2c 100644 --- a/src/SparseBindingTest.cpp +++ b/src/SparseBindingTest.cpp @@ -588,6 +588,8 @@ void TestSparseBinding() // Free remaining images. images.clear(); + + wprintf(L"Done.\n"); } #endif // #ifdef _WIN32 diff --git a/src/Tests.cpp b/src/Tests.cpp index ff2136d..82db70a 100644 --- a/src/Tests.cpp +++ b/src/Tests.cpp @@ -4414,13 +4414,22 @@ static void TestPool_Benchmark( poolCreateInfo.blockSize = config.PoolSize; poolCreateInfo.frameInUseCount = 1; - VmaAllocationCreateInfo dummyAllocCreateInfo = {}; - dummyAllocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY; - vmaFindMemoryTypeIndex(g_hAllocator, memoryTypeBits, &dummyAllocCreateInfo, &poolCreateInfo.memoryTypeIndex); + VmaPool pool = VK_NULL_HANDLE; + VkResult res; + // Loop over memory types because we sometimes allocate a big block here, + // while the most eligible DEVICE_LOCAL heap may be only 256 MB on some GPUs. + while(memoryTypeBits) + { + VmaAllocationCreateInfo dummyAllocCreateInfo = {}; + dummyAllocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY; + vmaFindMemoryTypeIndex(g_hAllocator, memoryTypeBits, &dummyAllocCreateInfo, &poolCreateInfo.memoryTypeIndex); - VmaPool pool; - VkResult res = vmaCreatePool(g_hAllocator, &poolCreateInfo, &pool); - TEST(res == VK_SUCCESS); + res = vmaCreatePool(g_hAllocator, &poolCreateInfo, &pool); + if(res == VK_SUCCESS) + break; + memoryTypeBits &= ~(1u << poolCreateInfo.memoryTypeIndex); + } + TEST(pool); // Start time measurement - after creating pool and initializing data structures. time_point timeBeg = std::chrono::high_resolution_clock::now();