@@ -8258,15 +8258,50 @@ static void TestWin32Handles()
8258
8258
{
8259
8259
#if VMA_EXTERNAL_MEMORY_WIN32
8260
8260
wprintf (L" Test Win32 handles\n " );
8261
- VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
8262
- bufCreateInfo.size = 1024 ;
8263
- bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
8264
- VmaAllocationCreateInfo allocCreateInfo = {};
8265
- allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
8261
+ constexpr static VkExportMemoryAllocateInfoKHR exportInfo{
8262
+ VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR,
8263
+ nullptr ,
8264
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
8265
+ };
8266
+ constexpr static VkExternalMemoryBufferCreateInfoKHR externalInfo{
8267
+ VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR,
8268
+ nullptr ,
8269
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
8270
+ };
8271
+
8272
+ VkBufferCreateInfo sampleBufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
8273
+ sampleBufCreateInfo.size = 0x1000 ; // Doesn't matter.
8274
+ sampleBufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
8275
+ sampleBufCreateInfo.pNext = &externalInfo;
8276
+
8277
+ VmaAllocationCreateInfo sampleAllocCreateInfo = {};
8278
+ sampleAllocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
8279
+ sampleAllocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT;
8280
+
8281
+ uint32_t memTypeIndex;
8282
+ TEST (vmaFindMemoryTypeIndexForBufferInfo (g_hAllocator,
8283
+ &sampleBufCreateInfo, &sampleAllocCreateInfo, &memTypeIndex) == VK_SUCCESS);
8284
+ // Check res...
8285
+
8286
+
8287
+ // Create a pool that can have at most 2 blocks, 128 MiB each.
8288
+ VmaPoolCreateInfo poolCreateInfo = {};
8289
+ poolCreateInfo.memoryTypeIndex = memTypeIndex;
8290
+ poolCreateInfo.blockSize = 128ull * 1024 * 1024 ;
8291
+ poolCreateInfo.maxBlockCount = 2 ;
8292
+ poolCreateInfo.pMemoryAllocateNext = (void *)&exportInfo;
8293
+
8294
+
8295
+ VmaPool pool;
8296
+ TEST (vmaCreatePool (g_hAllocator, &poolCreateInfo, &pool) == VK_SUCCESS);
8297
+
8298
+
8299
+ sampleAllocCreateInfo.pool = pool;
8300
+
8266
8301
VkBuffer buf;
8267
8302
VmaAllocation alloc;
8268
8303
VmaAllocationInfo allocInfo;
8269
- TEST (vmaCreateBuffer (g_hAllocator, &bufCreateInfo , &allocCreateInfo , &buf, &alloc, &allocInfo) == VK_SUCCESS);
8304
+ TEST (vmaCreateBuffer (g_hAllocator, &sampleBufCreateInfo , &sampleAllocCreateInfo , &buf, &alloc, &allocInfo) == VK_SUCCESS);
8270
8305
HANDLE handle;
8271
8306
HANDLE handle2;
8272
8307
TEST (vmaGetMemoryWin32HandleKHR (g_hAllocator, alloc, nullptr , &handle) == VK_SUCCESS);
0 commit comments