From 7a4f08ee0411220c728bf42832d98e72d72167e2 Mon Sep 17 00:00:00 2001 From: lucy96chen <47800040+lucy96chen@users.noreply.github.com> Date: Fri, 12 Nov 2021 15:43:23 -0800 Subject: Add support for buffer sharing from Vulkan to CUDA (#2008) * Added getSharedHandle() and additional code to handle shareable buffer creation to Buffer::init() and initVulkanInstanceAndDevice() for Vulkan; Modified createBufferFromSharedHandle() in CUDA to assign externalMemoryHandleDesc.type based on the type of handle being provided; Added an additional test case to get-shared-handle.cpp testing Vulkan to CUDA * Added createBufferFromNativeHandle() to Vulkan and enabled corresponding test * disable cuda * Fixed getSharedHandle() for D3D12 buffers assigning Win32 as the handle's source * Removed a dangling comment inside Buffer::init() * Added a missing override; Added code to check that a physical device supports the necessary external memory extensions before adding them to the deviceExtensions list; Added #if SLANG_WINDOWS_FAMILY guards around all Windows-specific code and sharedHandleVulkanToCUDA test (which uses said platform-specific code) * Added Windows check around vkGetMemoryWin32HandleKHR in vk-api.h * Added missing Windows check around BufferResourceImpl destructor * Added a temporary hack to ensure synchronization between devices, which solves an issue with buffer sharing resulting in incorrect values being read back; Added #if SLANG_WIN64 around all CUDA tests as the backend currently only supports running CUDA on 64-bit (despite devices being created successfully in a 32-bit config) --- tools/gfx/vulkan/vk-api.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'tools/gfx/vulkan/vk-api.h') diff --git a/tools/gfx/vulkan/vk-api.h b/tools/gfx/vulkan/vk-api.h index 0bb3339fb..543ad90d1 100644 --- a/tools/gfx/vulkan/vk-api.h +++ b/tools/gfx/vulkan/vk-api.h @@ -9,6 +9,7 @@ namespace gfx { x(vkGetInstanceProcAddr) \ x(vkCreateInstance) \ x(vkEnumerateInstanceLayerProperties) \ + x(vkEnumerateDeviceExtensionProperties) \ x(vkDestroyInstance) \ /* */ @@ -154,7 +155,18 @@ namespace gfx { x(vkAcquireNextImageKHR) \ /* */ +#if SLANG_WINDOWS_FAMILY +# define VK_API_DEVICE_PLATFORM_OPT_PROCS(x) \ + x(vkGetMemoryWin32HandleKHR) \ + /* */ +#else +# define VK_API_DEVICE_PLATFORM_OPT_PROCS(x) \ + x(vkGetMemoryFdKHR) \ + /* */ +#endif + #define VK_API_DEVICE_OPT_PROCS(x) \ + VK_API_DEVICE_PLATFORM_OPT_PROCS(x) \ x(vkCmdSetPrimitiveTopologyEXT) \ x(vkGetBufferDeviceAddress) \ x(vkGetBufferDeviceAddressKHR) \ -- cgit v1.2.3