4 #include "vk_platform.h"
7 * The ICD must reserve space for a pointer for the loader's dispatch
8 * table, at the start of <each object>.
9 * The ICD must initialize this variable using the SET_LOADER_MAGIC_VALUE macro.
12 #define ICD_LOADER_MAGIC 0x01CDC0DE
14 typedef union _VK_LOADER_DATA
{
15 uintptr_t loaderMagic
;
19 static inline void set_loader_magic_value(void* pNewObject
) {
20 VK_LOADER_DATA
*loader_info
= (VK_LOADER_DATA
*) pNewObject
;
21 loader_info
->loaderMagic
= ICD_LOADER_MAGIC
;
24 static inline bool valid_loader_magic_value(void* pNewObject
) {
25 const VK_LOADER_DATA
*loader_info
= (VK_LOADER_DATA
*) pNewObject
;
26 return (loader_info
->loaderMagic
& 0xffffffff) == ICD_LOADER_MAGIC
;
30 * Windows and Linux ICDs will treat VkSurfaceKHR as a pointer to a struct that
31 * contains the platform-specific connection and surface information.
33 typedef enum _VkIcdWsiPlatform
{
34 VK_ICD_WSI_PLATFORM_MIR
,
35 VK_ICD_WSI_PLATFORM_WAYLAND
,
36 VK_ICD_WSI_PLATFORM_WIN32
,
37 VK_ICD_WSI_PLATFORM_XCB
,
38 VK_ICD_WSI_PLATFORM_XLIB
,
41 typedef struct _VkIcdSurfaceBase
{
42 VkIcdWsiPlatform platform
;
45 #ifdef VK_USE_PLATFORM_MIR_KHR
46 typedef struct _VkIcdSurfaceMir
{
47 VkIcdSurfaceBase base
;
48 MirConnection
* connection
;
49 MirSurface
* mirSurface
;
51 #endif // VK_USE_PLATFORM_MIR_KHR
53 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
54 typedef struct _VkIcdSurfaceWayland
{
55 VkIcdSurfaceBase base
;
56 struct wl_display
* display
;
57 struct wl_surface
* surface
;
58 } VkIcdSurfaceWayland
;
59 #endif // VK_USE_PLATFORM_WAYLAND_KHR
61 #ifdef VK_USE_PLATFORM_WIN32_KHR
62 typedef struct _VkIcdSurfaceWin32
{
63 VkIcdSurfaceBase base
;
67 #endif // VK_USE_PLATFORM_WIN32_KHR
69 #ifdef VK_USE_PLATFORM_XCB_KHR
70 typedef struct _VkIcdSurfaceXcb
{
71 VkIcdSurfaceBase base
;
72 xcb_connection_t
* connection
;
75 #endif // VK_USE_PLATFORM_XCB_KHR
77 #ifdef VK_USE_PLATFORM_XLIB_KHR
78 typedef struct _VkIcdSurfaceXlib
{
79 VkIcdSurfaceBase base
;
83 #endif // VK_USE_PLATFORM_XLIB_KHR