1 /* 2 * Copyright (c) 2015-2021 The Khronos Group Inc. 3 * Copyright (c) 2015-2021 Valve Corporation 4 * Copyright (c) 2015-2021 LunarG, Inc. 5 * 6 * 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 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * 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. 17 * 18 * Author: Ian Elliott <ian@lunarg.com> 19 * Author: Charles Giessen <charles@lunarg.com> 20 * 21 */ 22 23 #pragma once 24 25 #include "loader_common.h" 26 27 typedef struct { 28 union { 29 #ifdef VK_USE_PLATFORM_WAYLAND_KHR 30 VkIcdSurfaceWayland wayland_surf; 31 #endif // VK_USE_PLATFORM_WAYLAND_KHR 32 #ifdef VK_USE_PLATFORM_WIN32_KHR 33 VkIcdSurfaceWin32 win_surf; 34 #endif // VK_USE_PLATFORM_WIN32_KHR 35 #ifdef VK_USE_PLATFORM_XCB_KHR 36 VkIcdSurfaceXcb xcb_surf; 37 #endif // VK_USE_PLATFORM_XCB_KHR 38 #ifdef VK_USE_PLATFORM_XLIB_KHR 39 VkIcdSurfaceXlib xlib_surf; 40 #endif // VK_USE_PLATFORM_XLIB_KHR 41 #ifdef VK_USE_PLATFORM_DIRECTFB_EXT 42 VkIcdSurfaceDirectFB directfb_surf; 43 #endif // VK_USE_PLATFORM_DIRECTFB_EXT 44 #ifdef VK_USE_PLATFORM_MACOS_MVK 45 VkIcdSurfaceMacOS macos_surf; 46 #endif // VK_USE_PLATFORM_MACOS_MVK 47 #ifdef VK_USE_PLATFORM_GGP 48 VkIcdSurfaceGgp ggp_surf; 49 #endif // VK_USE_PLATFORM_GGP 50 #ifdef VK_USE_PLATFORM_FUCHSIA 51 VkIcdSurfaceImagePipe imagepipe_surf; 52 #endif // VK_USE_PLATFORM_FUCHSIA 53 #ifdef VK_USE_PLATFORM_METAL_EXT 54 VkIcdSurfaceMetal metal_surf; 55 #endif // VK_USE_PLATFORM_METAL_EXT 56 #ifdef VK_USE_PLATFORM_SCREEN_QNX 57 VkIcdSurfaceScreen screen_surf; 58 #endif // VK_USE_PLATFORM_SCREEN_QNX 59 #ifdef VK_USE_PLATFORM_VI_NN 60 VkIcdSurfaceVi vi_surf; 61 #endif // VK_USE_PLATFORM_VI_NN 62 VkIcdSurfaceDisplay display_surf; 63 VkIcdSurfaceHeadless headless_surf; 64 }; 65 uint32_t base_size; // Size of VkIcdSurfaceBase 66 uint32_t platform_size; // Size of corresponding VkIcdSurfaceXXX 67 uint32_t non_platform_offset; // Start offset to base_size 68 uint32_t entire_size; // Size of entire VkIcdSurface 69 VkSurfaceKHR *real_icd_surfaces; 70 } VkIcdSurface; 71 72 bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr); 73 74 void wsi_create_instance(struct loader_instance *ptr_instance, const VkInstanceCreateInfo *pCreateInfo); 75 bool wsi_unsupported_instance_extension(const VkExtensionProperties *ext_prop); 76 77 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateHeadlessSurfaceEXT(VkInstance instance, 78 const VkHeadlessSurfaceCreateInfoEXT *pCreateInfo, 79 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); 80 81 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo, 82 const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain); 83 84 VKAPI_ATTR void VKAPI_CALL terminator_DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, 85 const VkAllocationCallbacks *pAllocator); 86 87 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, 88 uint32_t queueFamilyIndex, VkSurfaceKHR surface, 89 VkBool32 *pSupported); 90 91 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, 92 VkSurfaceKHR surface, 93 VkSurfaceCapabilitiesKHR *pSurfaceCapabilities); 94 95 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, 96 uint32_t *pSurfaceFormatCount, 97 VkSurfaceFormatKHR *pSurfaceFormats); 98 99 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, 100 VkSurfaceKHR surface, uint32_t *pPresentModeCount, 101 VkPresentModeKHR *pPresentModes); 102 103 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDeviceGroupSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, 104 VkDeviceGroupPresentModeFlagsKHR *pModes); 105 106 #ifdef VK_USE_PLATFORM_WIN32_KHR 107 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo, 108 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); 109 VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice, 110 uint32_t queueFamilyIndex); 111 #endif 112 #ifdef VK_USE_PLATFORM_WAYLAND_KHR 113 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWaylandSurfaceKHR(VkInstance instance, 114 const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, 115 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); 116 VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice, 117 uint32_t queueFamilyIndex, 118 struct wl_display *display); 119 #endif 120 #ifdef VK_USE_PLATFORM_XCB_KHR 121 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo, 122 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); 123 124 VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice, 125 uint32_t queueFamilyIndex, 126 xcb_connection_t *connection, 127 xcb_visualid_t visual_id); 128 #endif 129 #ifdef VK_USE_PLATFORM_XLIB_KHR 130 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo, 131 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); 132 VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice, 133 uint32_t queueFamilyIndex, Display *dpy, 134 VisualID visualID); 135 #endif 136 #ifdef VK_USE_PLATFORM_DIRECTFB_EXT 137 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDirectFBSurfaceEXT(VkInstance instance, 138 const VkDirectFBSurfaceCreateInfoEXT *pCreateInfo, 139 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); 140 VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceDirectFBPresentationSupportEXT(VkPhysicalDevice physicalDevice, 141 uint32_t queueFamilyIndex, 142 IDirectFB *dfb); 143 #endif 144 #ifdef VK_USE_PLATFORM_MACOS_MVK 145 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMacOSSurfaceMVK(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK *pCreateInfo, 146 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); 147 #endif 148 #ifdef VK_USE_PLATFORM_IOS_MVK 149 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateIOSSurfaceMVK(VkInstance instance, const VkIOSSurfaceCreateInfoMVK *pCreateInfo, 150 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); 151 #endif 152 #ifdef VK_USE_PLATFORM_GGP 153 VKAPI_ATTR VkResult VKAPI_CALL 154 terminator_CreateStreamDescriptorSurfaceGGP(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP *pCreateInfo, 155 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); 156 #endif 157 #if defined(VK_USE_PLATFORM_METAL_EXT) 158 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMetalSurfaceEXT(VkInstance instance, const VkMetalSurfaceCreateInfoEXT *pCreateInfo, 159 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); 160 #endif 161 #ifdef VK_USE_PLATFORM_SCREEN_QNX 162 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateScreenSurfaceQNX(VkInstance instance, 163 const VkScreenSurfaceCreateInfoQNX *pCreateInfo, 164 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); 165 VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceScreenPresentationSupportQNX(VkPhysicalDevice physicalDevice, 166 uint32_t queueFamilyIndex, 167 struct _screen_window *window); 168 #endif // VK_USE_PLATFORM_SCREEN_QNX 169 #ifdef VK_USE_PLATFORM_VI_NN 170 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateViSurfaceNN(VkInstance instance, const VkViSurfaceCreateInfoNN *pCreateInfo, 171 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); 172 #endif // VK_USE_PLATFORM_VI_NN 173 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice, 174 uint32_t *pPropertyCount, 175 VkDisplayPropertiesKHR *pProperties); 176 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice, 177 uint32_t *pPropertyCount, 178 VkDisplayPlanePropertiesKHR *pProperties); 179 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice, uint32_t planeIndex, 180 uint32_t *pDisplayCount, VkDisplayKHR *pDisplays); 181 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, 182 uint32_t *pPropertyCount, 183 VkDisplayModePropertiesKHR *pProperties); 184 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayModeKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, 185 const VkDisplayModeCreateInfoKHR *pCreateInfo, 186 const VkAllocationCallbacks *pAllocator, VkDisplayModeKHR *pMode); 187 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, 188 uint32_t planeIndex, 189 VkDisplayPlaneCapabilitiesKHR *pCapabilities); 190 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayPlaneSurfaceKHR(VkInstance instance, 191 const VkDisplaySurfaceCreateInfoKHR *pCreateInfo, 192 const VkAllocationCallbacks *pAllocator, 193 VkSurfaceKHR *pSurface); 194 195 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount, 196 const VkSwapchainCreateInfoKHR *pCreateInfos, 197 const VkAllocationCallbacks *pAllocator, 198 VkSwapchainKHR *pSwapchains); 199 200 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice physicalDevice, 201 VkSurfaceKHR surface, uint32_t *pRectCount, 202 VkRect2D *pRects); 203 204 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayProperties2KHR(VkPhysicalDevice physicalDevice, 205 uint32_t *pPropertyCount, 206 VkDisplayProperties2KHR *pProperties); 207 208 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPlaneProperties2KHR(VkPhysicalDevice physicalDevice, 209 uint32_t *pPropertyCount, 210 VkDisplayPlaneProperties2KHR *pProperties); 211 212 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayModeProperties2KHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, 213 uint32_t *pPropertyCount, 214 VkDisplayModeProperties2KHR *pProperties); 215 216 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneCapabilities2KHR(VkPhysicalDevice physicalDevice, 217 const VkDisplayPlaneInfo2KHR *pDisplayPlaneInfo, 218 VkDisplayPlaneCapabilities2KHR *pCapabilities); 219 #ifdef VK_USE_PLATFORM_FUCHSIA 220 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateImagePipeSurfaceFUCHSIA(VkInstance instance, 221 const VkImagePipeSurfaceCreateInfoFUCHSIA *pCreateInfo, 222 const VkAllocationCallbacks *pAllocator, 223 VkSurfaceKHR *pSurface); 224 #endif 225 226 #ifdef VK_USE_PLATFORM_ANDROID_KHR 227 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateAndroidSurfaceKHR(VkInstance instance, 228 const VkAndroidSurfaceCreateInfoKHR *pCreateInfo, 229 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); 230 #endif 231 232 #ifdef VK_USE_PLATFORM_OHOS 233 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSurfaceOHOS(VkInstance instance, 234 const VkSurfaceCreateInfoOHOS* pCreateInfo, 235 const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); 236 #endif 237 238 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilities2KHR( 239 VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, 240 VkSurfaceCapabilities2KHR *pSurfaceCapabilities); 241 242 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice, 243 const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, 244 uint32_t *pSurfaceFormatCount, 245 VkSurfaceFormat2KHR *pSurfaceFormats); 246