blob: fdb1e6e43384d0ef50f269e111f65a86c5d7ef5b [file] [log] [blame]
Karl Schultz673df322016-02-02 12:32:50 -07001//
2// File: vk_icd.h
3//
4/*
5 * Copyright (c) 2015-2016 The Khronos Group Inc.
6 * Copyright (c) 2015-2016 Valve Corporation
7 * Copyright (c) 2015-2016 LunarG, Inc.
8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a copy
10 * of this software and/or associated documentation files (the "Materials"), to
11 * deal in the Materials without restriction, including without limitation the
12 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
13 * sell copies of the Materials, and to permit persons to whom the Materials are
14 * furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice(s) and this permission notice shall be included in
17 * all copies or substantial portions of the Materials.
18 *
Karl Schultz673df322016-02-02 12:32:50 -070019 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22 *
23 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
24 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
25 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
26 * USE OR OTHER DEALINGS IN THE MATERIALS.
27 *
28 */
29
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060030#ifndef VKICD_H
31#define VKICD_H
32
Jon Ashburn00df0452016-03-08 09:30:30 -070033#include "vulkan.h"
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060034
35/*
36 * The ICD must reserve space for a pointer for the loader's dispatch
37 * table, at the start of <each object>.
38 * The ICD must initialize this variable using the SET_LOADER_MAGIC_VALUE macro.
39 */
40
Karl Schultz673df322016-02-02 12:32:50 -070041#define ICD_LOADER_MAGIC 0x01CDC0DE
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060042
43typedef union _VK_LOADER_DATA {
Karl Schultz673df322016-02-02 12:32:50 -070044 uintptr_t loaderMagic;
45 void *loaderData;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060046} VK_LOADER_DATA;
47
Karl Schultz673df322016-02-02 12:32:50 -070048static inline void set_loader_magic_value(void *pNewObject) {
49 VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060050 loader_info->loaderMagic = ICD_LOADER_MAGIC;
51}
52
Karl Schultz673df322016-02-02 12:32:50 -070053static inline bool valid_loader_magic_value(void *pNewObject) {
54 const VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject;
Courtney Goeltzenleuchter5f70fc42015-07-24 10:18:40 -060055 return (loader_info->loaderMagic & 0xffffffff) == ICD_LOADER_MAGIC;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -060056}
57
Ian Elliott1bc18312015-11-18 12:19:12 -070058/*
59 * Windows and Linux ICDs will treat VkSurfaceKHR as a pointer to a struct that
60 * contains the platform-specific connection and surface information.
61 */
62typedef enum _VkIcdWsiPlatform {
63 VK_ICD_WSI_PLATFORM_MIR,
64 VK_ICD_WSI_PLATFORM_WAYLAND,
65 VK_ICD_WSI_PLATFORM_WIN32,
66 VK_ICD_WSI_PLATFORM_XCB,
67 VK_ICD_WSI_PLATFORM_XLIB,
Jon Ashburn00df0452016-03-08 09:30:30 -070068 VK_ICD_WSI_PLATFORM_DISPLAY
Ian Elliott1bc18312015-11-18 12:19:12 -070069} VkIcdWsiPlatform;
70
71typedef struct _VkIcdSurfaceBase {
Karl Schultz673df322016-02-02 12:32:50 -070072 VkIcdWsiPlatform platform;
Ian Elliott1bc18312015-11-18 12:19:12 -070073} VkIcdSurfaceBase;
74
75#ifdef VK_USE_PLATFORM_MIR_KHR
76typedef struct _VkIcdSurfaceMir {
Karl Schultz673df322016-02-02 12:32:50 -070077 VkIcdSurfaceBase base;
78 MirConnection *connection;
79 MirSurface *mirSurface;
Ian Elliott1bc18312015-11-18 12:19:12 -070080} VkIcdSurfaceMir;
81#endif // VK_USE_PLATFORM_MIR_KHR
82
83#ifdef VK_USE_PLATFORM_WAYLAND_KHR
84typedef struct _VkIcdSurfaceWayland {
Karl Schultz673df322016-02-02 12:32:50 -070085 VkIcdSurfaceBase base;
86 struct wl_display *display;
87 struct wl_surface *surface;
Ian Elliott1bc18312015-11-18 12:19:12 -070088} VkIcdSurfaceWayland;
89#endif // VK_USE_PLATFORM_WAYLAND_KHR
90
91#ifdef VK_USE_PLATFORM_WIN32_KHR
92typedef struct _VkIcdSurfaceWin32 {
Karl Schultz673df322016-02-02 12:32:50 -070093 VkIcdSurfaceBase base;
94 HINSTANCE hinstance;
95 HWND hwnd;
Ian Elliott1bc18312015-11-18 12:19:12 -070096} VkIcdSurfaceWin32;
97#endif // VK_USE_PLATFORM_WIN32_KHR
98
99#ifdef VK_USE_PLATFORM_XCB_KHR
100typedef struct _VkIcdSurfaceXcb {
Karl Schultz673df322016-02-02 12:32:50 -0700101 VkIcdSurfaceBase base;
102 xcb_connection_t *connection;
103 xcb_window_t window;
Ian Elliott1bc18312015-11-18 12:19:12 -0700104} VkIcdSurfaceXcb;
105#endif // VK_USE_PLATFORM_XCB_KHR
106
107#ifdef VK_USE_PLATFORM_XLIB_KHR
108typedef struct _VkIcdSurfaceXlib {
Karl Schultz673df322016-02-02 12:32:50 -0700109 VkIcdSurfaceBase base;
110 Display *dpy;
111 Window window;
Ian Elliott1bc18312015-11-18 12:19:12 -0700112} VkIcdSurfaceXlib;
113#endif // VK_USE_PLATFORM_XLIB_KHR
114
Jon Ashburn00df0452016-03-08 09:30:30 -0700115typedef struct _VkIcdSurfaceDisplay {
116 VkIcdSurfaceBase base;
117 VkDisplayModeKHR displayMode;
118 uint32_t planeIndex;
119 uint32_t planeStackIndex;
120 VkSurfaceTransformFlagBitsKHR transform;
121 float globalAlpha;
122 VkDisplayPlaneAlphaFlagBitsKHR alphaMode;
123 VkExtent2D imageExtent;
124} VkIcdSurfaceDisplay;
Courtney Goeltzenleuchter89e99e62015-04-08 18:04:29 -0600125#endif // VKICD_H