blob: 519a7aaccf32448b7ca858ab9c00d43a5893e07d [file] [log] [blame]
Ian Elliottd3ef02f2015-07-06 14:36:13 -06001/*
Jon Ashburn23d36b12016-02-02 17:47:28 -07002 * Copyright (c) 2015-2016 The Khronos Group Inc.
3 * Copyright (c) 2015-2016 Valve Corporation
4 * Copyright (c) 2015-2016 LunarG, Inc.
Ian Elliottd3ef02f2015-07-06 14:36:13 -06005 *
Jon Ashburn3ebf1252016-04-19 11:30:31 -06006 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
Ian Elliottd3ef02f2015-07-06 14:36:13 -06009 *
Jon Ashburn3ebf1252016-04-19 11:30:31 -060010 * http://www.apache.org/licenses/LICENSE-2.0
Ian Elliottd3ef02f2015-07-06 14:36:13 -060011 *
Jon Ashburn3ebf1252016-04-19 11:30:31 -060012 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
Ian Elliottd3ef02f2015-07-06 14:36:13 -060017 *
Courtney Goeltzenleuchter05559522015-10-30 11:14:30 -060018 * Author: Ian Elliott <ian@lunarg.com>
19 *
Ian Elliottd3ef02f2015-07-06 14:36:13 -060020 */
21
Piers Daniellf9262be2016-09-14 11:24:36 -060022#ifndef WSI_H
23#define WSI_H
24
Ian Elliottd3ef02f2015-07-06 14:36:13 -060025#include "vk_loader_platform.h"
26#include "loader.h"
Ian Elliottd3ef02f2015-07-06 14:36:13 -060027
Piers Daniellf9262be2016-09-14 11:24:36 -060028typedef struct {
29 union {
30#ifdef VK_USE_PLATFORM_MIR_KHR
31 VkIcdSurfaceMir mir_surf;
Mark Lobodzinski64318ba2017-01-26 13:34:13 -070032#endif // VK_USE_PLATFORM_MIR_KHR
Piers Daniellf9262be2016-09-14 11:24:36 -060033#ifdef VK_USE_PLATFORM_WAYLAND_KHR
34 VkIcdSurfaceWayland wayland_surf;
Mark Lobodzinski64318ba2017-01-26 13:34:13 -070035#endif // VK_USE_PLATFORM_WAYLAND_KHR
Piers Daniellf9262be2016-09-14 11:24:36 -060036#ifdef VK_USE_PLATFORM_WIN32_KHR
37 VkIcdSurfaceWin32 win_surf;
Mark Lobodzinski64318ba2017-01-26 13:34:13 -070038#endif // VK_USE_PLATFORM_WIN32_KHR
Piers Daniellf9262be2016-09-14 11:24:36 -060039#ifdef VK_USE_PLATFORM_XCB_KHR
40 VkIcdSurfaceXcb xcb_surf;
Mark Lobodzinski64318ba2017-01-26 13:34:13 -070041#endif // VK_USE_PLATFORM_XCB_KHR
Piers Daniellf9262be2016-09-14 11:24:36 -060042#ifdef VK_USE_PLATFORM_XLIB_KHR
43 VkIcdSurfaceXlib xlib_surf;
Mark Lobodzinski64318ba2017-01-26 13:34:13 -070044#endif // VK_USE_PLATFORM_XLIB_KHR
Piers Daniellf9262be2016-09-14 11:24:36 -060045 VkIcdSurfaceDisplay display_surf;
46 };
Mark Lobodzinski64318ba2017-01-26 13:34:13 -070047 uint32_t base_size; // Size of VkIcdSurfaceBase
48 uint32_t platform_size; // Size of corresponding VkIcdSurfaceXXX
49 uint32_t non_platform_offset; // Start offset to base_size
50 uint32_t entire_size; // Size of entire VkIcdSurface
Piers Daniellf9262be2016-09-14 11:24:36 -060051 VkSurfaceKHR *real_icd_surfaces;
52} VkIcdSurface;
53
Mark Lobodzinski729a8d32017-01-26 12:16:30 -070054bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr);
Ian Elliottd3ef02f2015-07-06 14:36:13 -060055
Mark Lobodzinski729a8d32017-01-26 12:16:30 -070056void wsi_create_instance(struct loader_instance *ptr_instance, const VkInstanceCreateInfo *pCreateInfo);
Jon Ashburn6fa520f2016-03-25 12:49:35 -060057bool wsi_unsupported_instance_extension(const VkExtensionProperties *ext_prop);
Ian Elliottd3ef02f2015-07-06 14:36:13 -060058
Mark Young0f183a82017-02-28 09:58:04 -070059VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo,
60 const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain);
Mark Young16573c72016-06-28 10:52:43 -060061
Mark Lobodzinski729a8d32017-01-26 12:16:30 -070062VKAPI_ATTR void VKAPI_CALL terminator_DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface,
63 const VkAllocationCallbacks *pAllocator);
Ian Elliottd3ef02f2015-07-06 14:36:13 -060064
Mark Lobodzinski729a8d32017-01-26 12:16:30 -070065VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice,
66 uint32_t queueFamilyIndex, VkSurfaceKHR surface,
67 VkBool32 *pSupported);
Ian Elliott486c5502015-11-19 16:05:09 -070068
Mark Lobodzinski729a8d32017-01-26 12:16:30 -070069VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice,
70 VkSurfaceKHR surface,
71 VkSurfaceCapabilitiesKHR *pSurfaceCapabilities);
Ian Elliott486c5502015-11-19 16:05:09 -070072
Mark Lobodzinski729a8d32017-01-26 12:16:30 -070073VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
74 uint32_t *pSurfaceFormatCount,
75 VkSurfaceFormatKHR *pSurfaceFormats);
Ian Elliott486c5502015-11-19 16:05:09 -070076
Mark Lobodzinski729a8d32017-01-26 12:16:30 -070077VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice,
78 VkSurfaceKHR surface, uint32_t *pPresentModeCount,
79 VkPresentModeKHR *pPresentModes);
Ian Elliott919fa302015-11-24 15:39:10 -070080
81#ifdef VK_USE_PLATFORM_WIN32_KHR
Mark Lobodzinski729a8d32017-01-26 12:16:30 -070082VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo,
83 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
84VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice,
85 uint32_t queueFamilyIndex);
Ian Elliott919fa302015-11-24 15:39:10 -070086#endif
87#ifdef VK_USE_PLATFORM_MIR_KHR
Mark Lobodzinski729a8d32017-01-26 12:16:30 -070088VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMirSurfaceKHR(VkInstance instance, const VkMirSurfaceCreateInfoKHR *pCreateInfo,
89 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
90VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceMirPresentationSupportKHR(VkPhysicalDevice physicalDevice,
91 uint32_t queueFamilyIndex,
92 MirConnection *connection);
Ian Elliott919fa302015-11-24 15:39:10 -070093#endif
94#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Mark Lobodzinski729a8d32017-01-26 12:16:30 -070095VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWaylandSurfaceKHR(VkInstance instance,
96 const VkWaylandSurfaceCreateInfoKHR *pCreateInfo,
97 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
98VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice,
99 uint32_t queueFamilyIndex,
100 struct wl_display *display);
Ian Elliott919fa302015-11-24 15:39:10 -0700101#endif
102#ifdef VK_USE_PLATFORM_XCB_KHR
Mark Lobodzinski729a8d32017-01-26 12:16:30 -0700103VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo,
104 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700105
Mark Lobodzinski729a8d32017-01-26 12:16:30 -0700106VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice,
107 uint32_t queueFamilyIndex,
108 xcb_connection_t *connection,
109 xcb_visualid_t visual_id);
Ian Elliott919fa302015-11-24 15:39:10 -0700110#endif
111#ifdef VK_USE_PLATFORM_XLIB_KHR
Mark Lobodzinski729a8d32017-01-26 12:16:30 -0700112VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo,
113 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
114VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice,
115 uint32_t queueFamilyIndex, Display *dpy,
116 VisualID visualID);
Ian Elliott919fa302015-11-24 15:39:10 -0700117#endif
Mark Lobodzinski729a8d32017-01-26 12:16:30 -0700118VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice,
119 uint32_t *pPropertyCount,
120 VkDisplayPropertiesKHR *pProperties);
121VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice,
122 uint32_t *pPropertyCount,
123 VkDisplayPlanePropertiesKHR *pProperties);
124VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice, uint32_t planeIndex,
125 uint32_t *pDisplayCount, VkDisplayKHR *pDisplays);
126VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display,
127 uint32_t *pPropertyCount,
128 VkDisplayModePropertiesKHR *pProperties);
129VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayModeKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display,
130 const VkDisplayModeCreateInfoKHR *pCreateInfo,
131 const VkAllocationCallbacks *pAllocator, VkDisplayModeKHR *pMode);
132VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode,
133 uint32_t planeIndex,
134 VkDisplayPlaneCapabilitiesKHR *pCapabilities);
135VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayPlaneSurfaceKHR(VkInstance instance,
136 const VkDisplaySurfaceCreateInfoKHR *pCreateInfo,
137 const VkAllocationCallbacks *pAllocator,
138 VkSurfaceKHR *pSurface);
Piers Daniellf9262be2016-09-14 11:24:36 -0600139
Mark Young0f183a82017-02-28 09:58:04 -0700140VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount,
141 const VkSwapchainCreateInfoKHR *pCreateInfos,
142 const VkAllocationCallbacks *pAllocator,
143 VkSwapchainKHR *pSwapchains);
Mark Young39389872017-01-19 21:10:49 -0700144
Mark Young0f183a82017-02-28 09:58:04 -0700145#endif // WSI_H