A fix in TestPool_Benchmark for GPUs with only 256 MB of DEVICE_LOCAL memory
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 @@
// 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 @@
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();