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();