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