11d73e66e556d12aafd9334bb8cad971c3628c3aaIan Elliott/*
244aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * Copyright (c) 2015-2016 The Khronos Group Inc.
344aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * Copyright (c) 2015-2016 Valve Corporation
444aed66f451bb8cb72e233f704aa1dd68397ffbbJon Ashburn * Copyright (c) 2015-2016 LunarG, Inc.
51d73e66e556d12aafd9334bb8cad971c3628c3aaIan Elliott *
643b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * Licensed under the Apache License, Version 2.0 (the "License");
743b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * you may not use this file except in compliance with the License.
843b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * You may obtain a copy of the License at
91d73e66e556d12aafd9334bb8cad971c3628c3aaIan Elliott *
1043b53e83705f02245da6ae61e31273866a35b833Jon Ashburn *     http://www.apache.org/licenses/LICENSE-2.0
111d73e66e556d12aafd9334bb8cad971c3628c3aaIan Elliott *
1243b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * Unless required by applicable law or agreed to in writing, software
1343b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * distributed under the License is distributed on an "AS IS" BASIS,
1443b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1543b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * See the License for the specific language governing permissions and
1643b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * limitations under the License.
171d73e66e556d12aafd9334bb8cad971c3628c3aaIan Elliott *
1896cd795bb585711057cd90d37a2251419384c937Courtney Goeltzenleuchter * Author: Ian Elliott <ian@lunarg.com>
1996cd795bb585711057cd90d37a2251419384c937Courtney Goeltzenleuchter *
201d73e66e556d12aafd9334bb8cad971c3628c3aaIan Elliott */
211d73e66e556d12aafd9334bb8cad971c3628c3aaIan Elliott
22bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell#ifndef WSI_H
23bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell#define WSI_H
24bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell
251d73e66e556d12aafd9334bb8cad971c3628c3aaIan Elliott#include "vk_loader_platform.h"
261d73e66e556d12aafd9334bb8cad971c3628c3aaIan Elliott#include "loader.h"
271d73e66e556d12aafd9334bb8cad971c3628c3aaIan Elliott
28bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Danielltypedef struct {
29bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell    union {
30bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell#ifdef VK_USE_PLATFORM_MIR_KHR
31bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell        VkIcdSurfaceMir mir_surf;
32cc7c305c82f6443c324165edb7af59f60fc87eebMark Lobodzinski#endif  // VK_USE_PLATFORM_MIR_KHR
33bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell#ifdef VK_USE_PLATFORM_WAYLAND_KHR
34bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell        VkIcdSurfaceWayland wayland_surf;
35cc7c305c82f6443c324165edb7af59f60fc87eebMark Lobodzinski#endif  // VK_USE_PLATFORM_WAYLAND_KHR
36bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell#ifdef VK_USE_PLATFORM_WIN32_KHR
37bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell        VkIcdSurfaceWin32 win_surf;
38cc7c305c82f6443c324165edb7af59f60fc87eebMark Lobodzinski#endif  // VK_USE_PLATFORM_WIN32_KHR
39bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell#ifdef VK_USE_PLATFORM_XCB_KHR
40bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell        VkIcdSurfaceXcb xcb_surf;
41cc7c305c82f6443c324165edb7af59f60fc87eebMark Lobodzinski#endif  // VK_USE_PLATFORM_XCB_KHR
42bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell#ifdef VK_USE_PLATFORM_XLIB_KHR
43bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell        VkIcdSurfaceXlib xlib_surf;
44cc7c305c82f6443c324165edb7af59f60fc87eebMark Lobodzinski#endif  // VK_USE_PLATFORM_XLIB_KHR
45bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell        VkIcdSurfaceDisplay display_surf;
46bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell    };
47cc7c305c82f6443c324165edb7af59f60fc87eebMark Lobodzinski    uint32_t base_size;            // Size of VkIcdSurfaceBase
48cc7c305c82f6443c324165edb7af59f60fc87eebMark Lobodzinski    uint32_t platform_size;        // Size of corresponding VkIcdSurfaceXXX
49cc7c305c82f6443c324165edb7af59f60fc87eebMark Lobodzinski    uint32_t non_platform_offset;  // Start offset to base_size
50cc7c305c82f6443c324165edb7af59f60fc87eebMark Lobodzinski    uint32_t entire_size;          // Size of entire VkIcdSurface
51bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell    VkSurfaceKHR *real_icd_surfaces;
52bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell} VkIcdSurface;
53bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell
54bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinskibool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr);
551d73e66e556d12aafd9334bb8cad971c3628c3aaIan Elliott
56bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinskivoid wsi_create_instance(struct loader_instance *ptr_instance, const VkInstanceCreateInfo *pCreateInfo);
57c666cff44f25c1db0451f52818807683b0346f00Jon Ashburnbool wsi_unsupported_instance_extension(const VkExtensionProperties *ext_prop);
581d73e66e556d12aafd9334bb8cad971c3628c3aaIan Elliott
597b06221f2c4cb2205e0363afe1ce59b81aa144a1Mark YoungVKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo,
607b06221f2c4cb2205e0363afe1ce59b81aa144a1Mark Young                                                             const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain);
61c1ee6940c9aef4be9b8d391dca2ca1ac7361a4c4Mark Young
62bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR void VKAPI_CALL terminator_DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface,
63bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                        const VkAllocationCallbacks *pAllocator);
647b9f782fbaa7dca37270940334bccae51bdff3d5Ian Elliott
65bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice,
66bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                             uint32_t queueFamilyIndex, VkSurfaceKHR surface,
67bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                             VkBool32 *pSupported);
688cda180a628734cd8262772b5b447592426b4360Ian Elliott
69bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice,
70bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                  VkSurfaceKHR surface,
71bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                  VkSurfaceCapabilitiesKHR *pSurfaceCapabilities);
728cda180a628734cd8262772b5b447592426b4360Ian Elliott
73bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
74bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                             uint32_t *pSurfaceFormatCount,
75bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                             VkSurfaceFormatKHR *pSurfaceFormats);
768cda180a628734cd8262772b5b447592426b4360Ian Elliott
77bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice,
78bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                  VkSurfaceKHR surface, uint32_t *pPresentModeCount,
79bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                  VkPresentModeKHR *pPresentModes);
804e309e90a9c495a4c89795df3dedfa9b7df7fca4Ian Elliott
814e309e90a9c495a4c89795df3dedfa9b7df7fca4Ian Elliott#ifdef VK_USE_PLATFORM_WIN32_KHR
82bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo,
83bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
84bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice,
85bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                       uint32_t queueFamilyIndex);
864e309e90a9c495a4c89795df3dedfa9b7df7fca4Ian Elliott#endif
874e309e90a9c495a4c89795df3dedfa9b7df7fca4Ian Elliott#ifdef VK_USE_PLATFORM_MIR_KHR
88bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMirSurfaceKHR(VkInstance instance, const VkMirSurfaceCreateInfoKHR *pCreateInfo,
89bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                              const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
90bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceMirPresentationSupportKHR(VkPhysicalDevice physicalDevice,
91bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                     uint32_t queueFamilyIndex,
92bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                     MirConnection *connection);
934e309e90a9c495a4c89795df3dedfa9b7df7fca4Ian Elliott#endif
944e309e90a9c495a4c89795df3dedfa9b7df7fca4Ian Elliott#ifdef VK_USE_PLATFORM_WAYLAND_KHR
95bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWaylandSurfaceKHR(VkInstance instance,
96bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                  const VkWaylandSurfaceCreateInfoKHR *pCreateInfo,
97bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                  const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
98bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice,
99bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                         uint32_t queueFamilyIndex,
100bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                         struct wl_display *display);
1014e309e90a9c495a4c89795df3dedfa9b7df7fca4Ian Elliott#endif
1024e309e90a9c495a4c89795df3dedfa9b7df7fca4Ian Elliott#ifdef VK_USE_PLATFORM_XCB_KHR
103bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo,
104bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                              const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
10525a158f77871ae1dfe123b8c1507168a2fc236caJon Ashburn
106bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice,
107bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                     uint32_t queueFamilyIndex,
108bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                     xcb_connection_t *connection,
109bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                     xcb_visualid_t visual_id);
1104e309e90a9c495a4c89795df3dedfa9b7df7fca4Ian Elliott#endif
1114e309e90a9c495a4c89795df3dedfa9b7df7fca4Ian Elliott#ifdef VK_USE_PLATFORM_XLIB_KHR
112bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo,
113bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                               const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
114bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice,
115bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                      uint32_t queueFamilyIndex, Display *dpy,
116bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                      VisualID visualID);
1174e309e90a9c495a4c89795df3dedfa9b7df7fca4Ian Elliott#endif
118bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice,
119bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                uint32_t *pPropertyCount,
120bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                VkDisplayPropertiesKHR *pProperties);
121bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice,
122bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                     uint32_t *pPropertyCount,
123bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                                     VkDisplayPlanePropertiesKHR *pProperties);
124bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice, uint32_t planeIndex,
125bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                              uint32_t *pDisplayCount, VkDisplayKHR *pDisplays);
126bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display,
127bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                      uint32_t *pPropertyCount,
128bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                      VkDisplayModePropertiesKHR *pProperties);
129bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayModeKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display,
130bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                               const VkDisplayModeCreateInfoKHR *pCreateInfo,
131bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                               const VkAllocationCallbacks *pAllocator, VkDisplayModeKHR *pMode);
132bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode,
133bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                         uint32_t planeIndex,
134bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                         VkDisplayPlaneCapabilitiesKHR *pCapabilities);
135bc9caa57c5583dfdf05198e78b78a7cb361da16cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayPlaneSurfaceKHR(VkInstance instance,
136bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                       const VkDisplaySurfaceCreateInfoKHR *pCreateInfo,
137bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                       const VkAllocationCallbacks *pAllocator,
138bc9caa57c5583dfdf05198e78b78a7cb361da16cMark Lobodzinski                                                                       VkSurfaceKHR *pSurface);
139bc1d21da9899fec48f60166a1a1bff23f7d02317Piers Daniell
1407b06221f2c4cb2205e0363afe1ce59b81aa144a1Mark YoungVKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount,
1417b06221f2c4cb2205e0363afe1ce59b81aa144a1Mark Young                                                                    const VkSwapchainCreateInfoKHR *pCreateInfos,
1427b06221f2c4cb2205e0363afe1ce59b81aa144a1Mark Young                                                                    const VkAllocationCallbacks *pAllocator,
1437b06221f2c4cb2205e0363afe1ce59b81aa144a1Mark Young                                                                    VkSwapchainKHR *pSwapchains);
144b5f087aec8b42faee128c5c3dd1cb11b662d85aaMark Young
1457b06221f2c4cb2205e0363afe1ce59b81aa144a1Mark Young#endif // WSI_H
146