@@ -8492,22 +8492,50 @@ static void TestWin32Handles()
84928492 return ;
84938493
84948494 wprintf (L" Test Win32 handles\n " );
8495+
8496+ constexpr VkExternalMemoryHandleTypeFlagBits handleType =
8497+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT;
8498+
84958499 constexpr static VkExportMemoryAllocateInfoKHR exportMemAllocInfo{
84968500 VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR,
84978501 nullptr ,
8498- VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
8502+ handleType
84998503 };
8504+
85008505 constexpr static VkExternalMemoryBufferCreateInfoKHR externalMemBufCreateInfo{
85018506 VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR,
85028507 nullptr ,
8503- VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
8508+ handleType
85048509 };
85058510
85068511 VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
85078512 bufCreateInfo.size = 0x10000 ;
85088513 bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
85098514 bufCreateInfo.pNext = &externalMemBufCreateInfo;
85108515
8516+ bool requiresDedicated = true ;
8517+ {
8518+ VkPhysicalDeviceExternalBufferInfo externalBufferInfo = {
8519+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO };
8520+ externalBufferInfo.flags = bufCreateInfo.flags ;
8521+ externalBufferInfo.usage = bufCreateInfo.usage ;
8522+ externalBufferInfo.handleType = handleType;
8523+
8524+ VkExternalBufferProperties externalBufferProperties = {
8525+ VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES };
8526+
8527+ vkGetPhysicalDeviceExternalBufferProperties (g_hPhysicalDevice,
8528+ &externalBufferInfo, &externalBufferProperties);
8529+ if ((externalBufferProperties.externalMemoryProperties .externalMemoryFeatures &
8530+ VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT) == 0 )
8531+ {
8532+ wprintf (L" WARNING: External memory not exportable, skipping test.\n " );
8533+ return ;
8534+ }
8535+ requiresDedicated = (externalBufferProperties.externalMemoryProperties .externalMemoryFeatures &
8536+ VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT) != 0 ;
8537+ }
8538+
85118539 VmaAllocationCreateInfo allocCreateInfo = {};
85128540 allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
85138541
@@ -8526,6 +8554,8 @@ static void TestWin32Handles()
85268554
85278555 for (size_t test = 0 ; test < 2 ; ++test)
85288556 {
8557+ if (test == 0 && requiresDedicated)
8558+ continue ; // Skip this case because it would fail.
85298559 if (test == 1 )
85308560 allocCreateInfo.flags = VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT;
85318561
0 commit comments