Plasma Engine  2.0
Loading...
Searching...
No Matches
DispatchContext.h
1#pragma once
2
3#include <vulkan/vulkan.h>
4
6
7#if PL_ENABLED(PL_COMPILE_FOR_DEBUG)
8# define PL_DISPATCH_CONTEXT_MEMBER_NAME(Name) m_p##Name
9#else
10# define PL_DISPATCH_CONTEXT_MEMBER_NAME(Name) Name
11#endif
12
13// A vulkan hpp compatible dispatch context.
15{
16public:
17 void Init(plGALDeviceVulkan& device);
18
19 plUInt32 getVkHeaderVersion() const { return VK_HEADER_VERSION; }
20
21#if PL_ENABLED(PL_PLATFORM_LINUX)
22 // VK_KHR_external_memory_fd
23 PFN_vkGetMemoryFdKHR PL_DISPATCH_CONTEXT_MEMBER_NAME(vkGetMemoryFdKHR) = nullptr;
24 PFN_vkGetMemoryFdPropertiesKHR PL_DISPATCH_CONTEXT_MEMBER_NAME(vkGetMemoryFdPropertiesKHR) = nullptr;
25
26 // VK_KHR_external_semaphore_fd
27 PFN_vkGetSemaphoreFdKHR PL_DISPATCH_CONTEXT_MEMBER_NAME(vkGetSemaphoreFdKHR) = nullptr;
28 PFN_vkImportSemaphoreFdKHR PL_DISPATCH_CONTEXT_MEMBER_NAME(vkImportSemaphoreFdKHR) = nullptr;
29#elif PL_ENABLED(PL_PLATFORM_WINDOWS)
30 // VK_KHR_external_memory_win32
31 PFN_vkGetMemoryWin32HandleKHR PL_DISPATCH_CONTEXT_MEMBER_NAME(vkGetMemoryWin32HandleKHR) = nullptr;
32 PFN_vkGetMemoryWin32HandlePropertiesKHR PL_DISPATCH_CONTEXT_MEMBER_NAME(vkGetMemoryWin32HandlePropertiesKHR) = nullptr;
33
34 // VK_KHR_external_semaphore_win32
35 PFN_vkGetSemaphoreWin32HandleKHR PL_DISPATCH_CONTEXT_MEMBER_NAME(vkGetSemaphoreWin32HandleKHR) = nullptr;
36 PFN_vkImportSemaphoreWin32HandleKHR PL_DISPATCH_CONTEXT_MEMBER_NAME(vkImportSemaphoreWin32HandleKHR) = nullptr;
37#endif
38
39#if PL_ENABLED(PL_COMPILE_FOR_DEBUG)
40# if PL_ENABLED(PL_PLATFORM_LINUX)
41 // VK_KHR_external_memory_fd
42 VkResult vkGetMemoryFdKHR(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd) const;
43 VkResult vkGetMemoryFdPropertiesKHR(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties) const;
44
45 // VK_KHR_external_semaphore_fd
46 VkResult vkGetSemaphoreFdKHR(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd) const;
47 VkResult vkImportSemaphoreFdKHR(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) const;
48# elif PL_ENABLED(PL_PLATFORM_WINDOWS)
49 // VK_KHR_external_memory_win32
50 VkResult vkGetMemoryWin32HandleKHR(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pWin32Handle) const;
51 VkResult vkGetMemoryWin32HandlePropertiesKHR(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE Win32Handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties) const;
52
53 // VK_KHR_external_semaphore_win32
54 VkResult vkGetSemaphoreWin32HandleKHR(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pWin32Handle) const;
55 VkResult vkImportSemaphoreWin32HandleKHR(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo) const;
56# endif
57#endif
58
59private:
60 plGALDeviceVulkan* m_pDevice = nullptr;
61};
The Vulkan device implementation of the graphics abstraction layer.
Definition DeviceVulkan.h:58
Definition DispatchContext.h:15