Skip to content

Commit 1feaa24

Browse files
committed
Fixes and improvements in TestWin32Handles
1 parent 48db0e0 commit 1feaa24

1 file changed

Lines changed: 32 additions & 2 deletions

File tree

src/Tests.cpp

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)