blob: 451143e57a8689e5695c8ddf368c7939b3a6cc15 [file] [log] [blame]
Ian Elliott54cea232015-10-30 15:28:23 -06001/*
Jon Ashburn1c75aec2016-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 Elliott54cea232015-10-30 15:28:23 -06005 *
Jon Ashburn1c75aec2016-02-02 17:47:28 -07006 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and/or associated documentation files (the "Materials"), to
8 * deal in the Materials without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Materials, and to permit persons to whom the Materials are
11 * furnished to do so, subject to the following conditions:
Ian Elliott54cea232015-10-30 15:28:23 -060012 *
Jon Ashburn1c75aec2016-02-02 17:47:28 -070013 * The above copyright notice(s) and this permission notice shall be included in
14 * all copies or substantial portions of the Materials.
Ian Elliott54cea232015-10-30 15:28:23 -060015 *
Jon Ashburn1c75aec2016-02-02 17:47:28 -070016 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Ian Elliott54cea232015-10-30 15:28:23 -060017 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Jon Ashburn1c75aec2016-02-02 17:47:28 -070018 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 *
20 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
21 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
23 * USE OR OTHER DEALINGS IN THE MATERIALS.
Ian Elliott54cea232015-10-30 15:28:23 -060024 *
25 * Author: Ian Elliott <ian@lunarg.com>
Jon Ashburn1c75aec2016-02-02 17:47:28 -070026 * Author: Jon Ashburn <jon@lunarg.com>
Ian Elliottb1849742015-11-19 11:58:08 -070027 * Author: Ian Elliott <ianelliott@google.com>
Jon Ashburn1c75aec2016-02-02 17:47:28 -070028 * Author: Mark Lobodzinski <mark@lunarg.com>
Ian Elliott54cea232015-10-30 15:28:23 -060029 */
30
31//#define _ISOC11_SOURCE /* for aligned_alloc() */
32#define _GNU_SOURCE
33#include <stdlib.h>
34#include <string.h>
35#include "vk_loader_platform.h"
36#include "loader.h"
37#include "wsi.h"
Ian Elliott7c352552015-11-19 13:14:05 -070038#include <vulkan/vk_icd.h>
Ian Elliott54cea232015-10-30 15:28:23 -060039
40static const VkExtensionProperties wsi_surface_extension_info = {
Jon Ashburn1c75aec2016-02-02 17:47:28 -070041 .extensionName = VK_KHR_SURFACE_EXTENSION_NAME,
42 .specVersion = VK_KHR_SURFACE_SPEC_VERSION,
Ian Elliott54cea232015-10-30 15:28:23 -060043};
44
Ian Elliottb1849742015-11-19 11:58:08 -070045#ifdef VK_USE_PLATFORM_WIN32_KHR
Ian Elliott54cea232015-10-30 15:28:23 -060046static const VkExtensionProperties wsi_win32_surface_extension_info = {
Jon Ashburn1c75aec2016-02-02 17:47:28 -070047 .extensionName = VK_KHR_WIN32_SURFACE_EXTENSION_NAME,
48 .specVersion = VK_KHR_WIN32_SURFACE_SPEC_VERSION,
Ian Elliott54cea232015-10-30 15:28:23 -060049};
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -070050#endif // VK_USE_PLATFORM_WIN32_KHR
51
Ian Elliott5fb891a2015-10-30 17:45:05 -060052#ifdef VK_USE_PLATFORM_MIR_KHR
Ian Elliott54cea232015-10-30 15:28:23 -060053static const VkExtensionProperties wsi_mir_surface_extension_info = {
Jon Ashburn1c75aec2016-02-02 17:47:28 -070054 .extensionName = VK_KHR_MIR_SURFACE_EXTENSION_NAME,
55 .specVersion = VK_KHR_MIR_SURFACE_SPEC_VERSION,
Ian Elliott54cea232015-10-30 15:28:23 -060056};
Ian Elliott5fb891a2015-10-30 17:45:05 -060057#endif // VK_USE_PLATFORM_MIR_KHR
Ian Elliott54cea232015-10-30 15:28:23 -060058
Ian Elliott5fb891a2015-10-30 17:45:05 -060059#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Ian Elliott54cea232015-10-30 15:28:23 -060060static const VkExtensionProperties wsi_wayland_surface_extension_info = {
Jon Ashburn1c75aec2016-02-02 17:47:28 -070061 .extensionName = VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME,
62 .specVersion = VK_KHR_WAYLAND_SURFACE_SPEC_VERSION,
Ian Elliott54cea232015-10-30 15:28:23 -060063};
Ian Elliott5fb891a2015-10-30 17:45:05 -060064#endif // VK_USE_PLATFORM_WAYLAND_KHR
Ian Elliott54cea232015-10-30 15:28:23 -060065
Ian Elliott5fb891a2015-10-30 17:45:05 -060066#ifdef VK_USE_PLATFORM_XCB_KHR
Ian Elliott54cea232015-10-30 15:28:23 -060067static const VkExtensionProperties wsi_xcb_surface_extension_info = {
Jon Ashburn1c75aec2016-02-02 17:47:28 -070068 .extensionName = VK_KHR_XCB_SURFACE_EXTENSION_NAME,
69 .specVersion = VK_KHR_XCB_SURFACE_SPEC_VERSION,
Ian Elliott54cea232015-10-30 15:28:23 -060070};
Ian Elliott5fb891a2015-10-30 17:45:05 -060071#endif // VK_USE_PLATFORM_XCB_KHR
Ian Elliott54cea232015-10-30 15:28:23 -060072
Ian Elliott5fb891a2015-10-30 17:45:05 -060073#ifdef VK_USE_PLATFORM_XLIB_KHR
Ian Elliott54cea232015-10-30 15:28:23 -060074static const VkExtensionProperties wsi_xlib_surface_extension_info = {
Jon Ashburn1c75aec2016-02-02 17:47:28 -070075 .extensionName = VK_KHR_XLIB_SURFACE_EXTENSION_NAME,
76 .specVersion = VK_KHR_XLIB_SURFACE_SPEC_VERSION,
Ian Elliott54cea232015-10-30 15:28:23 -060077};
Ian Elliott5fb891a2015-10-30 17:45:05 -060078#endif // VK_USE_PLATFORM_XLIB_KHR
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -070079
80#ifdef VK_USE_PLATFORM_ANDROID_KHR
81static const VkExtensionProperties wsi_android_surface_extension_info = {
Jon Ashburn1c75aec2016-02-02 17:47:28 -070082 .extensionName = VK_KHR_ANDROID_SURFACE_EXTENSION_NAME,
83 .specVersion = VK_KHR_ANDROID_SURFACE_REVISION,
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -070084};
85#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott54cea232015-10-30 15:28:23 -060086
Jon Ashburn1c75aec2016-02-02 17:47:28 -070087void wsi_add_instance_extensions(const struct loader_instance *inst,
88 struct loader_extension_list *ext_list) {
Ian Elliott54cea232015-10-30 15:28:23 -060089 loader_add_to_ext_list(inst, ext_list, 1, &wsi_surface_extension_info);
Ian Elliottb1849742015-11-19 11:58:08 -070090#ifdef VK_USE_PLATFORM_WIN32_KHR
Jon Ashburn1c75aec2016-02-02 17:47:28 -070091 loader_add_to_ext_list(inst, ext_list, 1,
92 &wsi_win32_surface_extension_info);
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -070093#endif // VK_USE_PLATFORM_WIN32_KHR
Ian Elliott5fb891a2015-10-30 17:45:05 -060094#ifdef VK_USE_PLATFORM_MIR_KHR
Ian Elliott54cea232015-10-30 15:28:23 -060095 loader_add_to_ext_list(inst, ext_list, 1, &wsi_mir_surface_extension_info);
Ian Elliott5fb891a2015-10-30 17:45:05 -060096#endif // VK_USE_PLATFORM_MIR_KHR
97#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Jon Ashburn1c75aec2016-02-02 17:47:28 -070098 loader_add_to_ext_list(inst, ext_list, 1,
99 &wsi_wayland_surface_extension_info);
Ian Elliott5fb891a2015-10-30 17:45:05 -0600100#endif // VK_USE_PLATFORM_WAYLAND_KHR
101#ifdef VK_USE_PLATFORM_XCB_KHR
Ian Elliott54cea232015-10-30 15:28:23 -0600102 loader_add_to_ext_list(inst, ext_list, 1, &wsi_xcb_surface_extension_info);
Ian Elliott5fb891a2015-10-30 17:45:05 -0600103#endif // VK_USE_PLATFORM_XCB_KHR
104#ifdef VK_USE_PLATFORM_XLIB_KHR
Ian Elliott54cea232015-10-30 15:28:23 -0600105 loader_add_to_ext_list(inst, ext_list, 1, &wsi_xlib_surface_extension_info);
Ian Elliott5fb891a2015-10-30 17:45:05 -0600106#endif // VK_USE_PLATFORM_XLIB_KHR
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700107#ifdef VK_USE_PLATFORM_ANDROID_KHR
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700108 loader_add_to_ext_list(inst, ext_list, 1,
109 &wsi_android_surface_extension_info);
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700110#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott54cea232015-10-30 15:28:23 -0600111}
112
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700113void wsi_create_instance(struct loader_instance *ptr_instance,
114 const VkInstanceCreateInfo *pCreateInfo) {
Ian Elliott5fb891a2015-10-30 17:45:05 -0600115 ptr_instance->wsi_surface_enabled = false;
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700116
117#ifdef VK_USE_PLATFORM_WIN32_KHR
Ian Elliott1693f592015-11-23 10:17:23 -0700118 ptr_instance->wsi_win32_surface_enabled = true;
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700119#endif // VK_USE_PLATFORM_WIN32_KHR
120#ifdef VK_USE_PLATFORM_MIR_KHR
Ian Elliott54cea232015-10-30 15:28:23 -0600121 ptr_instance->wsi_mir_surface_enabled = false;
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700122#endif // VK_USE_PLATFORM_MIR_KHR
123#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Ian Elliott54cea232015-10-30 15:28:23 -0600124 ptr_instance->wsi_wayland_surface_enabled = false;
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700125#endif // VK_USE_PLATFORM_WAYLAND_KHR
126#ifdef VK_USE_PLATFORM_XCB_KHR
Ian Elliott54cea232015-10-30 15:28:23 -0600127 ptr_instance->wsi_xcb_surface_enabled = false;
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700128#endif // VK_USE_PLATFORM_XCB_KHR
129#ifdef VK_USE_PLATFORM_XLIB_KHR
Ian Elliott54cea232015-10-30 15:28:23 -0600130 ptr_instance->wsi_xlib_surface_enabled = false;
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700131#endif // VK_USE_PLATFORM_XLIB_KHR
132#ifdef VK_USE_PLATFORM_ANDROID_KHR
133 ptr_instance->wsi_android_surface_enabled = false;
134#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott54cea232015-10-30 15:28:23 -0600135
Jon Ashburna0673ab2016-01-11 13:12:43 -0700136 for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700137 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
138 VK_KHR_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott54cea232015-10-30 15:28:23 -0600139 ptr_instance->wsi_surface_enabled = true;
Ian Elliottb1849742015-11-19 11:58:08 -0700140 continue;
Ian Elliott54cea232015-10-30 15:28:23 -0600141 }
Ian Elliottb1849742015-11-19 11:58:08 -0700142#ifdef VK_USE_PLATFORM_WIN32_KHR
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700143 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
144 VK_KHR_WIN32_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott1693f592015-11-23 10:17:23 -0700145 ptr_instance->wsi_win32_surface_enabled = true;
Ian Elliottb1849742015-11-19 11:58:08 -0700146 continue;
Ian Elliott54cea232015-10-30 15:28:23 -0600147 }
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700148#endif // VK_USE_PLATFORM_WIN32_KHR
Ian Elliott5fb891a2015-10-30 17:45:05 -0600149#ifdef VK_USE_PLATFORM_MIR_KHR
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700150 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
151 VK_KHR_MIR_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott54cea232015-10-30 15:28:23 -0600152 ptr_instance->wsi_mir_surface_enabled = true;
Ian Elliottb1849742015-11-19 11:58:08 -0700153 continue;
Ian Elliott54cea232015-10-30 15:28:23 -0600154 }
Ian Elliott5fb891a2015-10-30 17:45:05 -0600155#endif // VK_USE_PLATFORM_MIR_KHR
156#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700157 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
158 VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott54cea232015-10-30 15:28:23 -0600159 ptr_instance->wsi_wayland_surface_enabled = true;
Ian Elliottb1849742015-11-19 11:58:08 -0700160 continue;
Ian Elliott54cea232015-10-30 15:28:23 -0600161 }
Ian Elliott5fb891a2015-10-30 17:45:05 -0600162#endif // VK_USE_PLATFORM_WAYLAND_KHR
163#ifdef VK_USE_PLATFORM_XCB_KHR
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700164 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
165 VK_KHR_XCB_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott54cea232015-10-30 15:28:23 -0600166 ptr_instance->wsi_xcb_surface_enabled = true;
Ian Elliottb1849742015-11-19 11:58:08 -0700167 continue;
Ian Elliott54cea232015-10-30 15:28:23 -0600168 }
Ian Elliott5fb891a2015-10-30 17:45:05 -0600169#endif // VK_USE_PLATFORM_XCB_KHR
170#ifdef VK_USE_PLATFORM_XLIB_KHR
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700171 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
172 VK_KHR_XLIB_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott54cea232015-10-30 15:28:23 -0600173 ptr_instance->wsi_xlib_surface_enabled = true;
Ian Elliottb1849742015-11-19 11:58:08 -0700174 continue;
Ian Elliott54cea232015-10-30 15:28:23 -0600175 }
Ian Elliott5fb891a2015-10-30 17:45:05 -0600176#endif // VK_USE_PLATFORM_XLIB_KHR
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700177#ifdef VK_USE_PLATFORM_ANDROID_KHR
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700178 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
179 VK_KHR_ANDROID_SURFACE_EXTENSION_NAME) == 0) {
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700180 ptr_instance->wsi_android_surface_enabled = true;
181 continue;
182 }
183#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott54cea232015-10-30 15:28:23 -0600184 }
185}
186
187/*
Ian Elliott7c352552015-11-19 13:14:05 -0700188 * Functions for the VK_KHR_surface extension:
189 */
190
191/*
192 * This is the trampoline entrypoint
193 * for DestroySurfaceKHR
Ian Elliott7c352552015-11-19 13:14:05 -0700194 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700195LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL
196vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface,
197 const VkAllocationCallbacks *pAllocator) {
Ian Elliottabf50662015-11-25 14:43:02 -0700198 const VkLayerInstanceDispatchTable *disp;
199 disp = loader_get_instance_dispatch(instance);
200 disp->DestroySurfaceKHR(instance, surface, pAllocator);
201}
202
203/*
204 * This is the instance chain terminator function
205 * for DestroySurfaceKHR
206 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700207VKAPI_ATTR void VKAPI_CALL
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700208terminator_DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface,
209 const VkAllocationCallbacks *pAllocator) {
Ian Elliott1693f592015-11-23 10:17:23 -0700210 struct loader_instance *ptr_instance = loader_get_instance(instance);
211
Mark Youngecf2a092016-01-13 13:47:16 -0700212 loader_heap_free(ptr_instance, (void *)surface);
Ian Elliott7c352552015-11-19 13:14:05 -0700213}
214
215/*
Ian Elliott54cea232015-10-30 15:28:23 -0600216 * This is the trampoline entrypoint
217 * for GetPhysicalDeviceSurfaceSupportKHR
218 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700219LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
220vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice,
221 uint32_t queueFamilyIndex,
222 VkSurfaceKHR surface,
223 VkBool32 *pSupported) {
Ian Elliott54cea232015-10-30 15:28:23 -0600224 const VkLayerInstanceDispatchTable *disp;
225 disp = loader_get_instance_dispatch(physicalDevice);
226 VkResult res = disp->GetPhysicalDeviceSurfaceSupportKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700227 physicalDevice, queueFamilyIndex, surface, pSupported);
Ian Elliott54cea232015-10-30 15:28:23 -0600228 return res;
229}
230
231/*
232 * This is the instance chain terminator function
233 * for GetPhysicalDeviceSurfaceSupportKHR
234 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700235VKAPI_ATTR VkResult VKAPI_CALL
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700236terminator_GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice,
237 uint32_t queueFamilyIndex,
238 VkSurfaceKHR surface,
239 VkBool32 *pSupported) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700240 struct loader_physical_device *phys_dev =
241 (struct loader_physical_device *)physicalDevice;
Ian Elliott54cea232015-10-30 15:28:23 -0600242 struct loader_icd *icd = phys_dev->this_icd;
243
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700244 assert(pSupported &&
245 "GetPhysicalDeviceSurfaceSupportKHR: Error, null pSupported");
Ian Elliott54cea232015-10-30 15:28:23 -0600246 *pSupported = false;
247
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700248 assert(icd->GetPhysicalDeviceSurfaceSupportKHR &&
249 "loader: null GetPhysicalDeviceSurfaceSupportKHR ICD pointer");
Ian Elliott54cea232015-10-30 15:28:23 -0600250
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700251 return icd->GetPhysicalDeviceSurfaceSupportKHR(
252 phys_dev->phys_dev, queueFamilyIndex, surface, pSupported);
Ian Elliott54cea232015-10-30 15:28:23 -0600253}
254
Ian Elliottea666b22015-11-19 16:05:09 -0700255/*
256 * This is the trampoline entrypoint
257 * for GetPhysicalDeviceSurfaceCapabilitiesKHR
258 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700259LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
260vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
261 VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
262 VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) {
Ian Elliottea666b22015-11-19 16:05:09 -0700263 const VkLayerInstanceDispatchTable *disp;
264 disp = loader_get_instance_dispatch(physicalDevice);
265 VkResult res = disp->GetPhysicalDeviceSurfaceCapabilitiesKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700266 physicalDevice, surface, pSurfaceCapabilities);
Ian Elliottea666b22015-11-19 16:05:09 -0700267 return res;
268}
269
270/*
271 * This is the instance chain terminator function
272 * for GetPhysicalDeviceSurfaceCapabilitiesKHR
273 */
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700274VKAPI_ATTR VkResult VKAPI_CALL
275terminator_GetPhysicalDeviceSurfaceCapabilitiesKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700276 VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
277 VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) {
278 struct loader_physical_device *phys_dev =
279 (struct loader_physical_device *)physicalDevice;
Ian Elliottea666b22015-11-19 16:05:09 -0700280 struct loader_icd *icd = phys_dev->this_icd;
281
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700282 assert(pSurfaceCapabilities && "GetPhysicalDeviceSurfaceCapabilitiesKHR: "
283 "Error, null pSurfaceCapabilities");
Ian Elliottea666b22015-11-19 16:05:09 -0700284
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700285 assert(icd->GetPhysicalDeviceSurfaceCapabilitiesKHR &&
286 "loader: null GetPhysicalDeviceSurfaceCapabilitiesKHR ICD pointer");
Ian Elliottea666b22015-11-19 16:05:09 -0700287
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700288 return icd->GetPhysicalDeviceSurfaceCapabilitiesKHR(
289 phys_dev->phys_dev, surface, pSurfaceCapabilities);
Ian Elliottea666b22015-11-19 16:05:09 -0700290}
291
292/*
293 * This is the trampoline entrypoint
294 * for GetPhysicalDeviceSurfaceFormatsKHR
295 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700296LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
297vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice,
298 VkSurfaceKHR surface,
299 uint32_t *pSurfaceFormatCount,
300 VkSurfaceFormatKHR *pSurfaceFormats) {
Ian Elliottea666b22015-11-19 16:05:09 -0700301 const VkLayerInstanceDispatchTable *disp;
302 disp = loader_get_instance_dispatch(physicalDevice);
303 VkResult res = disp->GetPhysicalDeviceSurfaceFormatsKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700304 physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
Ian Elliottea666b22015-11-19 16:05:09 -0700305 return res;
306}
307
308/*
309 * This is the instance chain terminator function
310 * for GetPhysicalDeviceSurfaceFormatsKHR
311 */
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700312VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceFormatsKHR(
313 VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
314 uint32_t *pSurfaceFormatCount, VkSurfaceFormatKHR *pSurfaceFormats) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700315 struct loader_physical_device *phys_dev =
316 (struct loader_physical_device *)physicalDevice;
Ian Elliottea666b22015-11-19 16:05:09 -0700317 struct loader_icd *icd = phys_dev->this_icd;
318
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700319 assert(
320 pSurfaceFormatCount &&
321 "GetPhysicalDeviceSurfaceFormatsKHR: Error, null pSurfaceFormatCount");
Ian Elliottea666b22015-11-19 16:05:09 -0700322
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700323 assert(icd->GetPhysicalDeviceSurfaceFormatsKHR &&
324 "loader: null GetPhysicalDeviceSurfaceFormatsKHR ICD pointer");
Ian Elliottea666b22015-11-19 16:05:09 -0700325
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700326 return icd->GetPhysicalDeviceSurfaceFormatsKHR(
327 phys_dev->phys_dev, surface, pSurfaceFormatCount, pSurfaceFormats);
Ian Elliottea666b22015-11-19 16:05:09 -0700328}
329
330/*
331 * This is the trampoline entrypoint
332 * for GetPhysicalDeviceSurfacePresentModesKHR
333 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700334LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
335vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice,
336 VkSurfaceKHR surface,
337 uint32_t *pPresentModeCount,
338 VkPresentModeKHR *pPresentModes) {
Ian Elliottea666b22015-11-19 16:05:09 -0700339 const VkLayerInstanceDispatchTable *disp;
340 disp = loader_get_instance_dispatch(physicalDevice);
341 VkResult res = disp->GetPhysicalDeviceSurfacePresentModesKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700342 physicalDevice, surface, pPresentModeCount, pPresentModes);
Ian Elliottea666b22015-11-19 16:05:09 -0700343 return res;
344}
345
346/*
347 * This is the instance chain terminator function
348 * for GetPhysicalDeviceSurfacePresentModesKHR
349 */
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700350VKAPI_ATTR VkResult VKAPI_CALL
351terminator_GetPhysicalDeviceSurfacePresentModesKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700352 VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
353 uint32_t *pPresentModeCount, VkPresentModeKHR *pPresentModes) {
354 struct loader_physical_device *phys_dev =
355 (struct loader_physical_device *)physicalDevice;
Ian Elliottea666b22015-11-19 16:05:09 -0700356 struct loader_icd *icd = phys_dev->this_icd;
357
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700358 assert(pPresentModeCount && "GetPhysicalDeviceSurfacePresentModesKHR: "
359 "Error, null pPresentModeCount");
Ian Elliottea666b22015-11-19 16:05:09 -0700360
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700361 assert(icd->GetPhysicalDeviceSurfacePresentModesKHR &&
362 "loader: null GetPhysicalDeviceSurfacePresentModesKHR ICD pointer");
Ian Elliottea666b22015-11-19 16:05:09 -0700363
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700364 return icd->GetPhysicalDeviceSurfacePresentModesKHR(
365 phys_dev->phys_dev, surface, pPresentModeCount, pPresentModes);
Ian Elliottea666b22015-11-19 16:05:09 -0700366}
367
Ian Elliott7c352552015-11-19 13:14:05 -0700368/*
369 * Functions for the VK_KHR_swapchain extension:
370 */
371
Ian Elliott9b89a472015-11-19 16:39:21 -0700372/*
373 * This is the trampoline entrypoint
374 * for CreateSwapchainKHR
375 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700376LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
377vkCreateSwapchainKHR(VkDevice device,
378 const VkSwapchainCreateInfoKHR *pCreateInfo,
379 const VkAllocationCallbacks *pAllocator,
380 VkSwapchainKHR *pSwapchain) {
Ian Elliott9b89a472015-11-19 16:39:21 -0700381 const VkLayerDispatchTable *disp;
382 disp = loader_get_dispatch(device);
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700383 VkResult res =
384 disp->CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
Ian Elliott9b89a472015-11-19 16:39:21 -0700385 return res;
386}
Ian Elliott7c352552015-11-19 13:14:05 -0700387
Ian Elliott9b89a472015-11-19 16:39:21 -0700388/*
389 * This is the trampoline entrypoint
390 * for DestroySwapchainKHR
391 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700392LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL
393vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain,
394 const VkAllocationCallbacks *pAllocator) {
Ian Elliott9b89a472015-11-19 16:39:21 -0700395 const VkLayerDispatchTable *disp;
396 disp = loader_get_dispatch(device);
397 disp->DestroySwapchainKHR(device, swapchain, pAllocator);
398}
Ian Elliott7c352552015-11-19 13:14:05 -0700399
Ian Elliott9b89a472015-11-19 16:39:21 -0700400/*
401 * This is the trampoline entrypoint
402 * for GetSwapchainImagesKHR
403 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700404LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
405vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain,
406 uint32_t *pSwapchainImageCount,
407 VkImage *pSwapchainImages) {
Ian Elliott9b89a472015-11-19 16:39:21 -0700408 const VkLayerDispatchTable *disp;
409 disp = loader_get_dispatch(device);
410 VkResult res = disp->GetSwapchainImagesKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700411 device, swapchain, pSwapchainImageCount, pSwapchainImages);
Ian Elliott9b89a472015-11-19 16:39:21 -0700412 return res;
413}
414
415/*
416 * This is the trampoline entrypoint
417 * for AcquireNextImageKHR
418 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700419LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
420vkAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain,
421 uint64_t timeout, VkSemaphore semaphore, VkFence fence,
422 uint32_t *pImageIndex) {
Ian Elliott9b89a472015-11-19 16:39:21 -0700423 const VkLayerDispatchTable *disp;
424 disp = loader_get_dispatch(device);
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700425 VkResult res = disp->AcquireNextImageKHR(device, swapchain, timeout,
426 semaphore, fence, pImageIndex);
Ian Elliott9b89a472015-11-19 16:39:21 -0700427 return res;
428}
429
430/*
431 * This is the trampoline entrypoint
432 * for QueuePresentKHR
433 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700434LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
435vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pPresentInfo) {
Ian Elliott9b89a472015-11-19 16:39:21 -0700436 const VkLayerDispatchTable *disp;
437 disp = loader_get_dispatch(queue);
438 VkResult res = disp->QueuePresentKHR(queue, pPresentInfo);
439 return res;
440}
Ian Elliott7c352552015-11-19 13:14:05 -0700441
Ian Elliott7c352552015-11-19 13:14:05 -0700442#ifdef VK_USE_PLATFORM_WIN32_KHR
443
444/*
445 * Functions for the VK_KHR_win32_surface extension:
446 */
447
448/*
449 * This is the trampoline entrypoint
450 * for CreateWin32SurfaceKHR
451 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700452LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
453vkCreateWin32SurfaceKHR(VkInstance instance,
454 const VkWin32SurfaceCreateInfoKHR *pCreateInfo,
455 const VkAllocationCallbacks *pAllocator,
456 VkSurfaceKHR *pSurface) {
Jon Ashburn16edfa62015-11-25 17:55:49 -0700457 const VkLayerInstanceDispatchTable *disp;
458 disp = loader_get_instance_dispatch(instance);
459 VkResult res;
460
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700461 res = disp->CreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator,
462 pSurface);
Jon Ashburn16edfa62015-11-25 17:55:49 -0700463 return res;
464}
465
466/*
467 * This is the instance chain terminator function
468 * for CreateWin32SurfaceKHR
469 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700470VKAPI_ATTR VkResult VKAPI_CALL
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700471terminator_CreateWin32SurfaceKHR(VkInstance instance,
472 const VkWin32SurfaceCreateInfoKHR *pCreateInfo,
473 const VkAllocationCallbacks *pAllocator,
474 VkSurfaceKHR *pSurface) {
Ian Elliott1693f592015-11-23 10:17:23 -0700475 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott7c352552015-11-19 13:14:05 -0700476 VkIcdSurfaceWin32 *pIcdSurface = NULL;
477
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700478 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceWin32),
Ian Elliott1693f592015-11-23 10:17:23 -0700479 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott7c352552015-11-19 13:14:05 -0700480 if (pIcdSurface == NULL) {
481 return VK_ERROR_OUT_OF_HOST_MEMORY;
482 }
483
484 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_WIN32;
Ian Elliott07eb3282015-12-10 17:28:50 -0700485 pIcdSurface->hinstance = pCreateInfo->hinstance;
486 pIcdSurface->hwnd = pCreateInfo->hwnd;
Ian Elliott7c352552015-11-19 13:14:05 -0700487
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700488 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott7c352552015-11-19 13:14:05 -0700489
490 return VK_SUCCESS;
491}
Ian Elliotte851dd62015-11-24 15:39:10 -0700492
493/*
494 * This is the trampoline entrypoint
495 * for GetPhysicalDeviceWin32PresentationSupportKHR
496 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700497LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
498vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice,
499 uint32_t queueFamilyIndex) {
Ian Elliotte851dd62015-11-24 15:39:10 -0700500 const VkLayerInstanceDispatchTable *disp;
501 disp = loader_get_instance_dispatch(physicalDevice);
502 VkBool32 res = disp->GetPhysicalDeviceWin32PresentationSupportKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700503 physicalDevice, queueFamilyIndex);
Ian Elliotte851dd62015-11-24 15:39:10 -0700504 return res;
505}
506
Ian Elliotte851dd62015-11-24 15:39:10 -0700507/*
508 * This is the instance chain terminator function
509 * for GetPhysicalDeviceWin32PresentationSupportKHR
510 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700511VKAPI_ATTR VkBool32 VKAPI_CALL
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700512terminator_GetPhysicalDeviceWin32PresentationSupportKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700513 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex) {
514 struct loader_physical_device *phys_dev =
515 (struct loader_physical_device *)physicalDevice;
Ian Elliotte851dd62015-11-24 15:39:10 -0700516 struct loader_icd *icd = phys_dev->this_icd;
517
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700518 assert(icd->GetPhysicalDeviceWin32PresentationSupportKHR &&
519 "loader: null GetPhysicalDeviceWin32PresentationSupportKHR ICD "
520 "pointer");
Ian Elliotte851dd62015-11-24 15:39:10 -0700521
522 return icd->GetPhysicalDeviceWin32PresentationSupportKHR(phys_dev->phys_dev,
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700523 queueFamilyIndex);
Ian Elliotte851dd62015-11-24 15:39:10 -0700524}
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700525#endif // VK_USE_PLATFORM_WIN32_KHR
Ian Elliott7c352552015-11-19 13:14:05 -0700526
527#ifdef VK_USE_PLATFORM_MIR_KHR
528
529/*
530 * Functions for the VK_KHR_mir_surface extension:
531 */
532
533/*
534 * This is the trampoline entrypoint
535 * for CreateMirSurfaceKHR
536 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700537LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
538vkCreateMirSurfaceKHR(VkInstance instance,
539 const VkMirSurfaceCreateInfoKHR *pCreateInfo,
540 const VkAllocationCallbacks *pAllocator,
541 VkSurfaceKHR *pSurface) {
Jon Ashburn16edfa62015-11-25 17:55:49 -0700542 const VkLayerInstanceDispatchTable *disp;
543 disp = loader_get_instance_dispatch(instance);
544 VkResult res;
545
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700546 res =
547 disp->CreateMirSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
Jon Ashburn16edfa62015-11-25 17:55:49 -0700548 return res;
549}
550
551/*
552 * This is the instance chain terminator function
553 * for CreateMirSurfaceKHR
554 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700555VKAPI_ATTR VkResult VKAPI_CALL
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700556terminator_CreateMirSurfaceKHR(VkInstance instance,
557 const VkMirSurfaceCreateInfoKHR *pCreateInfo,
558 const VkAllocationCallbacks *pAllocator,
559 VkSurfaceKHR *pSurface) {
Ian Elliott1693f592015-11-23 10:17:23 -0700560 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott7c352552015-11-19 13:14:05 -0700561 VkIcdSurfaceMir *pIcdSurface = NULL;
562
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700563 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceMir),
Ian Elliott1693f592015-11-23 10:17:23 -0700564 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott7c352552015-11-19 13:14:05 -0700565 if (pIcdSurface == NULL) {
566 return VK_ERROR_OUT_OF_HOST_MEMORY;
567 }
568
569 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_MIR;
Ian Elliott07eb3282015-12-10 17:28:50 -0700570 pIcdSurface->connection = pCreateInfo->connection;
571 pIcdSurface->mirSurface = pCreateInfo->mirSurface;
Ian Elliott7c352552015-11-19 13:14:05 -0700572
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700573 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott7c352552015-11-19 13:14:05 -0700574
575 return VK_SUCCESS;
576}
Ian Elliotte851dd62015-11-24 15:39:10 -0700577
578/*
579 * This is the trampoline entrypoint
580 * for GetPhysicalDeviceMirPresentationSupportKHR
581 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700582LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
583vkGetPhysicalDeviceMirPresentationSupportKHR(VkPhysicalDevice physicalDevice,
584 uint32_t queueFamilyIndex,
585 MirConnection *connection) {
Ian Elliotte851dd62015-11-24 15:39:10 -0700586 const VkLayerInstanceDispatchTable *disp;
587 disp = loader_get_instance_dispatch(physicalDevice);
588 VkBool32 res = disp->GetPhysicalDeviceMirPresentationSupportKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700589 physicalDevice, queueFamilyIndex, connection);
Ian Elliotte851dd62015-11-24 15:39:10 -0700590 return res;
591}
592
Ian Elliotte851dd62015-11-24 15:39:10 -0700593/*
594 * This is the instance chain terminator function
595 * for GetPhysicalDeviceMirPresentationSupportKHR
596 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700597VKAPI_ATTR VkBool32 VKAPI_CALL
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700598terminator_GetPhysicalDeviceMirPresentationSupportKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700599 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
600 MirConnection *connection) {
601 struct loader_physical_device *phys_dev =
602 (struct loader_physical_device *)physicalDevice;
Ian Elliotte851dd62015-11-24 15:39:10 -0700603 struct loader_icd *icd = phys_dev->this_icd;
604
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700605 assert(
606 icd->GetPhysicalDeviceMirPresentationSupportKHR &&
607 "loader: null GetPhysicalDeviceMirPresentationSupportKHR ICD pointer");
Ian Elliotte851dd62015-11-24 15:39:10 -0700608
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700609 return icd->GetPhysicalDeviceMirPresentationSupportKHR(
610 phys_dev->phys_dev, queueFamilyIndex, connection);
Ian Elliotte851dd62015-11-24 15:39:10 -0700611}
Ian Elliott7c352552015-11-19 13:14:05 -0700612#endif // VK_USE_PLATFORM_MIR_KHR
613
614#ifdef VK_USE_PLATFORM_WAYLAND_KHR
615
616/*
617 * Functions for the VK_KHR_wayland_surface extension:
618 */
619
620/*
621 * This is the trampoline entrypoint
622 * for CreateWaylandSurfaceKHR
623 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700624LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
625vkCreateWaylandSurfaceKHR(VkInstance instance,
Jason Ekstrand3bfebc92016-02-12 17:25:03 -0800626 const VkWaylandSurfaceCreateInfoKHR *pCreateInfo,
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700627 const VkAllocationCallbacks *pAllocator,
628 VkSurfaceKHR *pSurface) {
Jon Ashburn16edfa62015-11-25 17:55:49 -0700629 const VkLayerInstanceDispatchTable *disp;
630 disp = loader_get_instance_dispatch(instance);
631 VkResult res;
632
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700633 res = disp->CreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator,
634 pSurface);
Jon Ashburn16edfa62015-11-25 17:55:49 -0700635 return res;
636}
637
638/*
639 * This is the instance chain terminator function
Mun, Gwan-gyeong07a61cd2016-02-22 09:33:58 +0900640 * for CreateWaylandSurfaceKHR
Jon Ashburn16edfa62015-11-25 17:55:49 -0700641 */
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700642VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWaylandSurfaceKHR(
643 VkInstance instance, const VkWaylandSurfaceCreateInfoKHR *pCreateInfo,
644 const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) {
Ian Elliott1693f592015-11-23 10:17:23 -0700645 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott7c352552015-11-19 13:14:05 -0700646 VkIcdSurfaceWayland *pIcdSurface = NULL;
647
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700648 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceWayland),
Ian Elliott1693f592015-11-23 10:17:23 -0700649 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott7c352552015-11-19 13:14:05 -0700650 if (pIcdSurface == NULL) {
651 return VK_ERROR_OUT_OF_HOST_MEMORY;
652 }
653
654 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_WAYLAND;
Ian Elliott07eb3282015-12-10 17:28:50 -0700655 pIcdSurface->display = pCreateInfo->display;
656 pIcdSurface->surface = pCreateInfo->surface;
Ian Elliott7c352552015-11-19 13:14:05 -0700657
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700658 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott7c352552015-11-19 13:14:05 -0700659
660 return VK_SUCCESS;
661}
Ian Elliotte851dd62015-11-24 15:39:10 -0700662
663/*
664 * This is the trampoline entrypoint
665 * for GetPhysicalDeviceWaylandPresentationSupportKHR
666 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700667LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
668vkGetPhysicalDeviceWaylandPresentationSupportKHR(
669 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
670 struct wl_display *display) {
Ian Elliotte851dd62015-11-24 15:39:10 -0700671 const VkLayerInstanceDispatchTable *disp;
672 disp = loader_get_instance_dispatch(physicalDevice);
673 VkBool32 res = disp->GetPhysicalDeviceWaylandPresentationSupportKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700674 physicalDevice, queueFamilyIndex, display);
Ian Elliotte851dd62015-11-24 15:39:10 -0700675 return res;
676}
677
Ian Elliotte851dd62015-11-24 15:39:10 -0700678/*
679 * This is the instance chain terminator function
680 * for GetPhysicalDeviceWaylandPresentationSupportKHR
681 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700682VKAPI_ATTR VkBool32 VKAPI_CALL
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700683terminator_GetPhysicalDeviceWaylandPresentationSupportKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700684 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
685 struct wl_display *display) {
686 struct loader_physical_device *phys_dev =
687 (struct loader_physical_device *)physicalDevice;
Ian Elliotte851dd62015-11-24 15:39:10 -0700688 struct loader_icd *icd = phys_dev->this_icd;
689
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700690 assert(icd->GetPhysicalDeviceWaylandPresentationSupportKHR &&
691 "loader: null GetPhysicalDeviceWaylandPresentationSupportKHR ICD "
692 "pointer");
Ian Elliotte851dd62015-11-24 15:39:10 -0700693
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700694 return icd->GetPhysicalDeviceWaylandPresentationSupportKHR(
695 phys_dev->phys_dev, queueFamilyIndex, display);
Ian Elliotte851dd62015-11-24 15:39:10 -0700696}
Ian Elliott7c352552015-11-19 13:14:05 -0700697#endif // VK_USE_PLATFORM_WAYLAND_KHR
698
699#ifdef VK_USE_PLATFORM_XCB_KHR
700
701/*
702 * Functions for the VK_KHR_xcb_surface extension:
703 */
704
705/*
706 * This is the trampoline entrypoint
707 * for CreateXcbSurfaceKHR
708 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700709LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
710vkCreateXcbSurfaceKHR(VkInstance instance,
711 const VkXcbSurfaceCreateInfoKHR *pCreateInfo,
712 const VkAllocationCallbacks *pAllocator,
713 VkSurfaceKHR *pSurface) {
Jon Ashburn16edfa62015-11-25 17:55:49 -0700714 const VkLayerInstanceDispatchTable *disp;
715 disp = loader_get_instance_dispatch(instance);
716 VkResult res;
717
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700718 res =
719 disp->CreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
Jon Ashburn16edfa62015-11-25 17:55:49 -0700720 return res;
721}
722
723/*
724 * This is the instance chain terminator function
725 * for CreateXcbSurfaceKHR
726 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700727VKAPI_ATTR VkResult VKAPI_CALL
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700728terminator_CreateXcbSurfaceKHR(VkInstance instance,
729 const VkXcbSurfaceCreateInfoKHR *pCreateInfo,
730 const VkAllocationCallbacks *pAllocator,
731 VkSurfaceKHR *pSurface) {
Ian Elliott1693f592015-11-23 10:17:23 -0700732 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott7c352552015-11-19 13:14:05 -0700733 VkIcdSurfaceXcb *pIcdSurface = NULL;
734
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700735 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceXcb),
Ian Elliott1693f592015-11-23 10:17:23 -0700736 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott7c352552015-11-19 13:14:05 -0700737 if (pIcdSurface == NULL) {
738 return VK_ERROR_OUT_OF_HOST_MEMORY;
739 }
740
741 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_XCB;
Ian Elliott07eb3282015-12-10 17:28:50 -0700742 pIcdSurface->connection = pCreateInfo->connection;
743 pIcdSurface->window = pCreateInfo->window;
Ian Elliott7c352552015-11-19 13:14:05 -0700744
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700745 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott7c352552015-11-19 13:14:05 -0700746
747 return VK_SUCCESS;
748}
Ian Elliotte851dd62015-11-24 15:39:10 -0700749
750/*
751 * This is the trampoline entrypoint
752 * for GetPhysicalDeviceXcbPresentationSupportKHR
753 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700754LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
755vkGetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice,
756 uint32_t queueFamilyIndex,
757 xcb_connection_t *connection,
758 xcb_visualid_t visual_id) {
Ian Elliotte851dd62015-11-24 15:39:10 -0700759 const VkLayerInstanceDispatchTable *disp;
760 disp = loader_get_instance_dispatch(physicalDevice);
761 VkBool32 res = disp->GetPhysicalDeviceXcbPresentationSupportKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700762 physicalDevice, queueFamilyIndex, connection, visual_id);
Ian Elliotte851dd62015-11-24 15:39:10 -0700763 return res;
764}
765
Ian Elliotte851dd62015-11-24 15:39:10 -0700766/*
767 * This is the instance chain terminator function
768 * for GetPhysicalDeviceXcbPresentationSupportKHR
769 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700770VKAPI_ATTR VkBool32 VKAPI_CALL
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700771terminator_GetPhysicalDeviceXcbPresentationSupportKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700772 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
773 xcb_connection_t *connection, xcb_visualid_t visual_id) {
774 struct loader_physical_device *phys_dev =
775 (struct loader_physical_device *)physicalDevice;
Ian Elliotte851dd62015-11-24 15:39:10 -0700776 struct loader_icd *icd = phys_dev->this_icd;
777
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700778 assert(
779 icd->GetPhysicalDeviceXcbPresentationSupportKHR &&
780 "loader: null GetPhysicalDeviceXcbPresentationSupportKHR ICD pointer");
Ian Elliotte851dd62015-11-24 15:39:10 -0700781
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700782 return icd->GetPhysicalDeviceXcbPresentationSupportKHR(
783 phys_dev->phys_dev, queueFamilyIndex, connection, visual_id);
Ian Elliotte851dd62015-11-24 15:39:10 -0700784}
Ian Elliott7c352552015-11-19 13:14:05 -0700785#endif // VK_USE_PLATFORM_XCB_KHR
786
787#ifdef VK_USE_PLATFORM_XLIB_KHR
788
789/*
790 * Functions for the VK_KHR_xlib_surface extension:
791 */
792
793/*
794 * This is the trampoline entrypoint
795 * for CreateXlibSurfaceKHR
796 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700797LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
798vkCreateXlibSurfaceKHR(VkInstance instance,
799 const VkXlibSurfaceCreateInfoKHR *pCreateInfo,
800 const VkAllocationCallbacks *pAllocator,
801 VkSurfaceKHR *pSurface) {
Jon Ashburn16edfa62015-11-25 17:55:49 -0700802 const VkLayerInstanceDispatchTable *disp;
803 disp = loader_get_instance_dispatch(instance);
804 VkResult res;
805
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700806 res =
807 disp->CreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
Jon Ashburn16edfa62015-11-25 17:55:49 -0700808 return res;
809}
810
811/*
812 * This is the instance chain terminator function
813 * for CreateXlibSurfaceKHR
814 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700815VKAPI_ATTR VkResult VKAPI_CALL
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700816terminator_CreateXlibSurfaceKHR(VkInstance instance,
817 const VkXlibSurfaceCreateInfoKHR *pCreateInfo,
818 const VkAllocationCallbacks *pAllocator,
819 VkSurfaceKHR *pSurface) {
Ian Elliott1693f592015-11-23 10:17:23 -0700820 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott7c352552015-11-19 13:14:05 -0700821 VkIcdSurfaceXlib *pIcdSurface = NULL;
822
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700823 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceXlib),
Ian Elliott1693f592015-11-23 10:17:23 -0700824 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott7c352552015-11-19 13:14:05 -0700825 if (pIcdSurface == NULL) {
826 return VK_ERROR_OUT_OF_HOST_MEMORY;
827 }
828
829 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_XLIB;
Ian Elliott07eb3282015-12-10 17:28:50 -0700830 pIcdSurface->dpy = pCreateInfo->dpy;
831 pIcdSurface->window = pCreateInfo->window;
Ian Elliott7c352552015-11-19 13:14:05 -0700832
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700833 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott7c352552015-11-19 13:14:05 -0700834
835 return VK_SUCCESS;
836}
Ian Elliotte851dd62015-11-24 15:39:10 -0700837
838/*
839 * This is the trampoline entrypoint
840 * for GetPhysicalDeviceXlibPresentationSupportKHR
841 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700842LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
843vkGetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice,
844 uint32_t queueFamilyIndex,
845 Display *dpy, VisualID visualID) {
Ian Elliotte851dd62015-11-24 15:39:10 -0700846 const VkLayerInstanceDispatchTable *disp;
847 disp = loader_get_instance_dispatch(physicalDevice);
848 VkBool32 res = disp->GetPhysicalDeviceXlibPresentationSupportKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700849 physicalDevice, queueFamilyIndex, dpy, visualID);
Ian Elliotte851dd62015-11-24 15:39:10 -0700850 return res;
851}
852
Ian Elliotte851dd62015-11-24 15:39:10 -0700853/*
854 * This is the instance chain terminator function
855 * for GetPhysicalDeviceXlibPresentationSupportKHR
856 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700857VKAPI_ATTR VkBool32 VKAPI_CALL
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700858terminator_GetPhysicalDeviceXlibPresentationSupportKHR(
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700859 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display *dpy,
860 VisualID visualID) {
861 struct loader_physical_device *phys_dev =
862 (struct loader_physical_device *)physicalDevice;
Ian Elliotte851dd62015-11-24 15:39:10 -0700863 struct loader_icd *icd = phys_dev->this_icd;
864
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700865 assert(
866 icd->GetPhysicalDeviceXlibPresentationSupportKHR &&
867 "loader: null GetPhysicalDeviceXlibPresentationSupportKHR ICD pointer");
Ian Elliotte851dd62015-11-24 15:39:10 -0700868
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700869 return icd->GetPhysicalDeviceXlibPresentationSupportKHR(
870 phys_dev->phys_dev, queueFamilyIndex, dpy, visualID);
Ian Elliotte851dd62015-11-24 15:39:10 -0700871}
Ian Elliott7c352552015-11-19 13:14:05 -0700872#endif // VK_USE_PLATFORM_XLIB_KHR
873
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700874#ifdef VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott7c352552015-11-19 13:14:05 -0700875
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700876/*
877 * Functions for the VK_KHR_android_surface extension:
878 */
879
880/*
881 * This is the trampoline entrypoint
882 * for CreateAndroidSurfaceKHR
883 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700884LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
885vkCreateAndroidSurfaceKHR(VkInstance instance, ANativeWindow *window,
886 const VkAllocationCallbacks *pAllocator,
887 VkSurfaceKHR *pSurface) {
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700888 const VkLayerInstanceDispatchTable *disp;
889 disp = loader_get_instance_dispatch(instance);
890 VkResult res;
891
892 res = disp->CreateAndroidSurfaceKHR(instance, window, pAllocator, pSurface);
893 return res;
894}
895
896/*
897 * This is the instance chain terminator function
898 * for CreateAndroidSurfaceKHR
899 */
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700900VKAPI_ATTR VkResult VKAPI_CALL
Jon Ashburnc4e9ae62016-02-26 13:14:27 -0700901terminator_CreateAndroidSurfaceKHR(VkInstance instance, Window window,
902 const VkAllocationCallbacks *pAllocator,
903 VkSurfaceKHR *pSurface) {
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700904 struct loader_instance *ptr_instance = loader_get_instance(instance);
905 VkIcdSurfaceAndroid *pIcdSurface = NULL;
906
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700907 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceAndroid),
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700908 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
909 if (pIcdSurface == NULL) {
910 return VK_ERROR_OUT_OF_HOST_MEMORY;
911 }
912
913 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_ANDROID;
914 pIcdSurface->dpy = dpy;
915 pIcdSurface->window = window;
916
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700917 *pSurface = (VkSurfaceKHR)pIcdSurface;
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -0700918
919 return VK_SUCCESS;
920}
921
922#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott7c352552015-11-19 13:14:05 -0700923
Ian Elliott54cea232015-10-30 15:28:23 -0600924bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance,
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700925 const char *name, void **addr) {
Ian Elliott54cea232015-10-30 15:28:23 -0600926 *addr = NULL;
927
Ian Elliott9b89a472015-11-19 16:39:21 -0700928 /*
929 * Functions for the VK_KHR_surface extension:
930 */
Ian Elliott7c352552015-11-19 13:14:05 -0700931 if (!strcmp("vkDestroySurfaceKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700932 *addr = ptr_instance->wsi_surface_enabled ? (void *)vkDestroySurfaceKHR
933 : NULL;
Ian Elliott7c352552015-11-19 13:14:05 -0700934 return true;
935 }
Ian Elliott54cea232015-10-30 15:28:23 -0600936 if (!strcmp("vkGetPhysicalDeviceSurfaceSupportKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700937 *addr = ptr_instance->wsi_surface_enabled
938 ? (void *)vkGetPhysicalDeviceSurfaceSupportKHR
939 : NULL;
Ian Elliott54cea232015-10-30 15:28:23 -0600940 return true;
941 }
Ian Elliottea666b22015-11-19 16:05:09 -0700942 if (!strcmp("vkGetPhysicalDeviceSurfaceCapabilitiesKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700943 *addr = ptr_instance->wsi_surface_enabled
944 ? (void *)vkGetPhysicalDeviceSurfaceCapabilitiesKHR
945 : NULL;
Ian Elliottea666b22015-11-19 16:05:09 -0700946 return true;
947 }
948 if (!strcmp("vkGetPhysicalDeviceSurfaceFormatsKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700949 *addr = ptr_instance->wsi_surface_enabled
950 ? (void *)vkGetPhysicalDeviceSurfaceFormatsKHR
951 : NULL;
Ian Elliottea666b22015-11-19 16:05:09 -0700952 return true;
953 }
954 if (!strcmp("vkGetPhysicalDeviceSurfacePresentModesKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700955 *addr = ptr_instance->wsi_surface_enabled
956 ? (void *)vkGetPhysicalDeviceSurfacePresentModesKHR
957 : NULL;
Ian Elliottea666b22015-11-19 16:05:09 -0700958 return true;
959 }
Ian Elliott9b89a472015-11-19 16:39:21 -0700960
961 /*
962 * Functions for the VK_KHR_swapchain extension:
963 *
964 * Note: This is a device extension, and its functions are statically
965 * exported from the loader. Per Khronos decisions, the the loader's GIPA
966 * function will return the trampoline function for such device-extension
967 * functions, regardless of whether the extension has been enabled.
968 */
969 if (!strcmp("vkCreateSwapchainKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700970 *addr = (void *)vkCreateSwapchainKHR;
Ian Elliott9b89a472015-11-19 16:39:21 -0700971 return true;
972 }
973 if (!strcmp("vkDestroySwapchainKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700974 *addr = (void *)vkDestroySwapchainKHR;
Ian Elliott9b89a472015-11-19 16:39:21 -0700975 return true;
976 }
977 if (!strcmp("vkGetSwapchainImagesKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700978 *addr = (void *)vkGetSwapchainImagesKHR;
Ian Elliott9b89a472015-11-19 16:39:21 -0700979 return true;
980 }
981 if (!strcmp("vkAcquireNextImageKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700982 *addr = (void *)vkAcquireNextImageKHR;
Ian Elliott9b89a472015-11-19 16:39:21 -0700983 return true;
984 }
985 if (!strcmp("vkQueuePresentKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700986 *addr = (void *)vkQueuePresentKHR;
Ian Elliott9b89a472015-11-19 16:39:21 -0700987 return true;
988 }
989
Ian Elliott7c352552015-11-19 13:14:05 -0700990#ifdef VK_USE_PLATFORM_WIN32_KHR
Ian Elliott9b89a472015-11-19 16:39:21 -0700991 /*
992 * Functions for the VK_KHR_win32_surface extension:
993 */
Ian Elliott7c352552015-11-19 13:14:05 -0700994 if (!strcmp("vkCreateWin32SurfaceKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -0700995 *addr = ptr_instance->wsi_win32_surface_enabled
996 ? (void *)vkCreateWin32SurfaceKHR
997 : NULL;
Ian Elliott7c352552015-11-19 13:14:05 -0700998 return true;
999 }
Ian Elliotte851dd62015-11-24 15:39:10 -07001000 if (!strcmp("vkGetPhysicalDeviceWin32PresentationSupportKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -07001001 *addr = ptr_instance->wsi_win32_surface_enabled
1002 ? (void *)vkGetPhysicalDeviceWin32PresentationSupportKHR
1003 : NULL;
Ian Elliotte851dd62015-11-24 15:39:10 -07001004 return true;
1005 }
Ian Elliott7c352552015-11-19 13:14:05 -07001006#endif // VK_USE_PLATFORM_WIN32_KHR
Ian Elliott7c352552015-11-19 13:14:05 -07001007#ifdef VK_USE_PLATFORM_MIR_KHR
Ian Elliott9b89a472015-11-19 16:39:21 -07001008 /*
1009 * Functions for the VK_KHR_mir_surface extension:
1010 */
Ian Elliott7c352552015-11-19 13:14:05 -07001011 if (!strcmp("vkCreateMirSurfaceKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -07001012 *addr = ptr_instance->wsi_mir_surface_enabled
1013 ? (void *)vkCreateMirSurfaceKHR
1014 : NULL;
Ian Elliott7c352552015-11-19 13:14:05 -07001015 return true;
1016 }
Ian Elliotte851dd62015-11-24 15:39:10 -07001017 if (!strcmp("vkGetPhysicalDeviceMirPresentationSupportKHR", name)) {
Jon Ashburn1c75aec2016-02-02 17:47:28 -07001018 *addr = ptr_instance->wsi_mir_surface_enabled
1019 ? (void *)vkGetPhysicalDeviceMirPresentationSupportKHR
1020 : NULL;
Ian Elliotte851dd62015-11-24 15:39:10 -07001021 return true;
Jason Ekstrand3bfebc92016-02-12 17:25:03 -08001022 }
Ian Elliott7c352552015-11-19 13:14:05 -07001023#endif // VK_USE_PLATFORM_MIR_KHR
1024#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Jon Ashburnc4e9ae62016-02-26 13:14:27 -07001025 /*
1026 * Functions for the VK_KHR_wayland_surface extension:
1027 */
1028 if (!strcmp("vkCreateWaylandSurfaceKHR", name)) {
1029 *addr = ptr_instance->wsi_wayland_surface_enabled
1030 ? (void *)vkCreateWaylandSurfaceKHR
1031 : NULL;
1032 return true;
1033 }
1034 if (!strcmp("vkGetPhysicalDeviceWaylandPresentationSupportKHR", name)) {
1035 *addr = ptr_instance->wsi_wayland_surface_enabled
Jon Ashburn1c75aec2016-02-02 17:47:28 -07001036 ? (void *)vkGetPhysicalDeviceWaylandPresentationSupportKHR
1037 : NULL;
Jon Ashburnc4e9ae62016-02-26 13:14:27 -07001038 return true;
1039 }
Ian Elliott7c352552015-11-19 13:14:05 -07001040#endif // VK_USE_PLATFORM_WAYLAND_KHR
1041#ifdef VK_USE_PLATFORM_XCB_KHR
Jon Ashburnc4e9ae62016-02-26 13:14:27 -07001042 /*
1043 * Functions for the VK_KHR_xcb_surface extension:
1044 */
1045 if (!strcmp("vkCreateXcbSurfaceKHR", name)) {
1046 *addr = ptr_instance->wsi_xcb_surface_enabled
1047 ? (void *)vkCreateXcbSurfaceKHR
1048 : NULL;
1049 return true;
1050 }
1051 if (!strcmp("vkGetPhysicalDeviceXcbPresentationSupportKHR", name)) {
1052 *addr = ptr_instance->wsi_xcb_surface_enabled
1053 ? (void *)vkGetPhysicalDeviceXcbPresentationSupportKHR
1054 : NULL;
1055 return true;
1056 }
Ian Elliott7c352552015-11-19 13:14:05 -07001057#endif // VK_USE_PLATFORM_XCB_KHR
1058#ifdef VK_USE_PLATFORM_XLIB_KHR
Jon Ashburnc4e9ae62016-02-26 13:14:27 -07001059 /*
1060 * Functions for the VK_KHR_xlib_surface extension:
1061 */
1062 if (!strcmp("vkCreateXlibSurfaceKHR", name)) {
1063 *addr = ptr_instance->wsi_xlib_surface_enabled
1064 ? (void *)vkCreateXlibSurfaceKHR
1065 : NULL;
1066 return true;
1067 }
1068 if (!strcmp("vkGetPhysicalDeviceXlibPresentationSupportKHR", name)) {
1069 *addr = ptr_instance->wsi_xlib_surface_enabled
1070 ? (void *)vkGetPhysicalDeviceXlibPresentationSupportKHR
1071 : NULL;
1072 return true;
1073 }
Ian Elliott7c352552015-11-19 13:14:05 -07001074#endif // VK_USE_PLATFORM_XLIB_KHR
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -07001075#ifdef VK_USE_PLATFORM_ANDROID_KHR
Jon Ashburnc4e9ae62016-02-26 13:14:27 -07001076 /*
1077 * Functions for the VK_KHR_android_surface extension:
1078 */
1079 if (!strcmp("vkCreateAndroidSurfaceKHR", name)) {
1080 *addr = ptr_instance->wsi_xlib_surface_enabled
1081 ? (void *)vkCreateAndroidSurfaceKHR
1082 : NULL;
1083 return true;
1084 }
Mark Lobodzinski1ad14b42015-12-10 16:25:21 -07001085#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott7c352552015-11-19 13:14:05 -07001086
Jon Ashburnc4e9ae62016-02-26 13:14:27 -07001087 return false;
1088}