diff options
| author | lucy96chen <47800040+lucy96chen@users.noreply.github.com> | 2021-11-12 15:43:23 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-12 15:43:23 -0800 |
| commit | 7a4f08ee0411220c728bf42832d98e72d72167e2 (patch) | |
| tree | f06410fecfe8aff8f28c913fe8cef90caa7479d1 /tools/gfx/cuda | |
| parent | 6f523dd95d1f16003c7ed1d4a9e1da0cba0ea76c (diff) | |
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)
Diffstat (limited to 'tools/gfx/cuda')
| -rw-r--r-- | tools/gfx/cuda/render-cuda.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/tools/gfx/cuda/render-cuda.cpp b/tools/gfx/cuda/render-cuda.cpp index 2dc1bc1e1..9f52c4c62 100644 --- a/tools/gfx/cuda/render-cuda.cpp +++ b/tools/gfx/cuda/render-cuda.cpp @@ -1842,8 +1842,17 @@ public: // memory association, we first need to fill in a descriptor struct. cudaExternalMemoryHandleDesc externalMemoryHandleDesc; memset(&externalMemoryHandleDesc, 0, sizeof(externalMemoryHandleDesc)); - // TODO: Change according to the type of handle being passed in - externalMemoryHandleDesc.type = cudaExternalMemoryHandleTypeD3D12Resource; + switch (handle.api) + { + case InteropHandleAPI::D3D12: + externalMemoryHandleDesc.type = cudaExternalMemoryHandleTypeD3D12Resource; + break; + case InteropHandleAPI::Vulkan: + externalMemoryHandleDesc.type = cudaExternalMemoryHandleTypeOpaqueWin32; + break; + default: + return SLANG_FAIL; + } externalMemoryHandleDesc.handle.win32.handle = (void*)handle.handleValue; externalMemoryHandleDesc.size = desc.sizeInBytes; externalMemoryHandleDesc.flags = cudaExternalMemoryDedicated; |
