summaryrefslogtreecommitdiffstats
path: root/tools/gfx/vulkan/render-vk.cpp
diff options
context:
space:
mode:
authorlucy96chen <47800040+lucy96chen@users.noreply.github.com>2022-02-18 22:17:13 -0800
committerGitHub <noreply@github.com>2022-02-18 22:17:13 -0800
commite993ff5f8d21d77dd3fb579f7afc51c6dcad834c (patch)
tree37e5a9fc2f285a2bdd073cd11835d020d20d5c33 /tools/gfx/vulkan/render-vk.cpp
parent7953c0b6e4e6328bacf9945763013f9e0af6e435 (diff)
Added implementations for IFence::getSharedHandle() for Vulkan and D3D12 (#2137)
Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'tools/gfx/vulkan/render-vk.cpp')
-rw-r--r--tools/gfx/vulkan/render-vk.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/tools/gfx/vulkan/render-vk.cpp b/tools/gfx/vulkan/render-vk.cpp
index 1a42f3261..0a66c653b 100644
--- a/tools/gfx/vulkan/render-vk.cpp
+++ b/tools/gfx/vulkan/render-vk.cpp
@@ -412,8 +412,25 @@ public:
virtual SLANG_NO_THROW Result SLANG_MCALL getSharedHandle(InteropHandle* outHandle) override
{
- outHandle->handleValue = 0;
- return SLANG_FAIL;
+ // Check if a shared handle already exists.
+ if (sharedHandle.handleValue != 0)
+ {
+ *outHandle = sharedHandle;
+ return SLANG_OK;
+ }
+
+#if SLANG_WINDOWS_FAMILY
+ VkSemaphoreGetWin32HandleInfoKHR handleInfo = { VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR };
+ handleInfo.pNext = nullptr;
+ handleInfo.semaphore = m_semaphore;
+ handleInfo.handleType = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT;
+
+ SLANG_VK_RETURN_ON_FAIL(
+ m_device->m_api.vkGetSemaphoreWin32HandleKHR(m_device->m_api.m_device, &handleInfo, (HANDLE*)&outHandle->handleValue)
+ );
+#endif
+ sharedHandle.api = InteropHandleAPI::Vulkan;
+ return SLANG_OK;
}
virtual SLANG_NO_THROW Result SLANG_MCALL