Merge remote-tracking branch 'origin/master' into vulkan
[mesa.git] / include / vulkan / vk_icd.h
1 #ifndef VKICD_H
2 #define VKICD_H
3
4 #include "vk_platform.h"
5
6 /*
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.
10 */
11
12 #define ICD_LOADER_MAGIC 0x01CDC0DE
13
14 typedef union _VK_LOADER_DATA {
15 uintptr_t loaderMagic;
16 void *loaderData;
17 } VK_LOADER_DATA;
18
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;
22 }
23
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;
27 }
28
29 /*
30 * Windows and Linux ICDs will treat VkSurfaceKHR as a pointer to a struct that
31 * contains the platform-specific connection and surface information.
32 */
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,
39 } VkIcdWsiPlatform;
40
41 typedef struct _VkIcdSurfaceBase {
42 VkIcdWsiPlatform platform;
43 } VkIcdSurfaceBase;
44
45 #ifdef VK_USE_PLATFORM_MIR_KHR
46 typedef struct _VkIcdSurfaceMir {
47 VkIcdSurfaceBase base;
48 MirConnection* connection;
49 MirSurface* mirSurface;
50 } VkIcdSurfaceMir;
51 #endif // VK_USE_PLATFORM_MIR_KHR
52
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
60
61 #ifdef VK_USE_PLATFORM_WIN32_KHR
62 typedef struct _VkIcdSurfaceWin32 {
63 VkIcdSurfaceBase base;
64 HINSTANCE hinstance;
65 HWND hwnd;
66 } VkIcdSurfaceWin32;
67 #endif // VK_USE_PLATFORM_WIN32_KHR
68
69 #ifdef VK_USE_PLATFORM_XCB_KHR
70 typedef struct _VkIcdSurfaceXcb {
71 VkIcdSurfaceBase base;
72 xcb_connection_t* connection;
73 xcb_window_t window;
74 } VkIcdSurfaceXcb;
75 #endif // VK_USE_PLATFORM_XCB_KHR
76
77 #ifdef VK_USE_PLATFORM_XLIB_KHR
78 typedef struct _VkIcdSurfaceXlib {
79 VkIcdSurfaceBase base;
80 Display* dpy;
81 Window window;
82 } VkIcdSurfaceXlib;
83 #endif // VK_USE_PLATFORM_XLIB_KHR
84
85 #endif // VKICD_H