blob: 05945fb50cbe494d7b983cdc3a0840191c0fd08b [file] [log] [blame]
Ian Elliott954fa342015-10-30 15:28:23 -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 Elliott954fa342015-10-30 15:28:23 -06005 *
Jon Ashburn23d36b12016-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 Elliott954fa342015-10-30 15:28:23 -060012 *
Jon Ashburn23d36b12016-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 Elliott954fa342015-10-30 15:28:23 -060015 *
Jon Ashburn23d36b12016-02-02 17:47:28 -070016 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Ian Elliott954fa342015-10-30 15:28:23 -060017 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Jon Ashburn23d36b12016-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 Elliott954fa342015-10-30 15:28:23 -060024 *
25 * Author: Ian Elliott <ian@lunarg.com>
Jon Ashburn23d36b12016-02-02 17:47:28 -070026 * Author: Jon Ashburn <jon@lunarg.com>
Ian Elliottc2e9aee2015-11-19 11:58:08 -070027 * Author: Ian Elliott <ianelliott@google.com>
Jon Ashburn23d36b12016-02-02 17:47:28 -070028 * Author: Mark Lobodzinski <mark@lunarg.com>
Ian Elliott954fa342015-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 Elliott2c05e222015-11-19 13:14:05 -070038#include <vulkan/vk_icd.h>
Ian Elliott954fa342015-10-30 15:28:23 -060039
40static const VkExtensionProperties wsi_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070041 .extensionName = VK_KHR_SURFACE_EXTENSION_NAME,
42 .specVersion = VK_KHR_SURFACE_SPEC_VERSION,
Ian Elliott954fa342015-10-30 15:28:23 -060043};
44
Ian Elliottc2e9aee2015-11-19 11:58:08 -070045#ifdef VK_USE_PLATFORM_WIN32_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060046static const VkExtensionProperties wsi_win32_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070047 .extensionName = VK_KHR_WIN32_SURFACE_EXTENSION_NAME,
48 .specVersion = VK_KHR_WIN32_SURFACE_SPEC_VERSION,
Ian Elliott954fa342015-10-30 15:28:23 -060049};
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -070050#endif // VK_USE_PLATFORM_WIN32_KHR
51
Ian Elliottaf7d6362015-10-30 17:45:05 -060052#ifdef VK_USE_PLATFORM_MIR_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060053static const VkExtensionProperties wsi_mir_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070054 .extensionName = VK_KHR_MIR_SURFACE_EXTENSION_NAME,
55 .specVersion = VK_KHR_MIR_SURFACE_SPEC_VERSION,
Ian Elliott954fa342015-10-30 15:28:23 -060056};
Ian Elliottaf7d6362015-10-30 17:45:05 -060057#endif // VK_USE_PLATFORM_MIR_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060058
Ian Elliottaf7d6362015-10-30 17:45:05 -060059#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060060static const VkExtensionProperties wsi_wayland_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070061 .extensionName = VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME,
62 .specVersion = VK_KHR_WAYLAND_SURFACE_SPEC_VERSION,
Ian Elliott954fa342015-10-30 15:28:23 -060063};
Ian Elliottaf7d6362015-10-30 17:45:05 -060064#endif // VK_USE_PLATFORM_WAYLAND_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060065
Ian Elliottaf7d6362015-10-30 17:45:05 -060066#ifdef VK_USE_PLATFORM_XCB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060067static const VkExtensionProperties wsi_xcb_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070068 .extensionName = VK_KHR_XCB_SURFACE_EXTENSION_NAME,
69 .specVersion = VK_KHR_XCB_SURFACE_SPEC_VERSION,
Ian Elliott954fa342015-10-30 15:28:23 -060070};
Ian Elliottaf7d6362015-10-30 17:45:05 -060071#endif // VK_USE_PLATFORM_XCB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060072
Ian Elliottaf7d6362015-10-30 17:45:05 -060073#ifdef VK_USE_PLATFORM_XLIB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060074static const VkExtensionProperties wsi_xlib_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070075 .extensionName = VK_KHR_XLIB_SURFACE_EXTENSION_NAME,
76 .specVersion = VK_KHR_XLIB_SURFACE_SPEC_VERSION,
Ian Elliott954fa342015-10-30 15:28:23 -060077};
Ian Elliottaf7d6362015-10-30 17:45:05 -060078#endif // VK_USE_PLATFORM_XLIB_KHR
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -070079
80#ifdef VK_USE_PLATFORM_ANDROID_KHR
81static const VkExtensionProperties wsi_android_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070082 .extensionName = VK_KHR_ANDROID_SURFACE_EXTENSION_NAME,
83 .specVersion = VK_KHR_ANDROID_SURFACE_REVISION,
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -070084};
85#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060086
Jon Ashburn23d36b12016-02-02 17:47:28 -070087void wsi_add_instance_extensions(const struct loader_instance *inst,
88 struct loader_extension_list *ext_list) {
Ian Elliott954fa342015-10-30 15:28:23 -060089 loader_add_to_ext_list(inst, ext_list, 1, &wsi_surface_extension_info);
Ian Elliottc2e9aee2015-11-19 11:58:08 -070090#ifdef VK_USE_PLATFORM_WIN32_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -070091 loader_add_to_ext_list(inst, ext_list, 1,
92 &wsi_win32_surface_extension_info);
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -070093#endif // VK_USE_PLATFORM_WIN32_KHR
Ian Elliottaf7d6362015-10-30 17:45:05 -060094#ifdef VK_USE_PLATFORM_MIR_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060095 loader_add_to_ext_list(inst, ext_list, 1, &wsi_mir_surface_extension_info);
Ian Elliottaf7d6362015-10-30 17:45:05 -060096#endif // VK_USE_PLATFORM_MIR_KHR
97#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -070098 loader_add_to_ext_list(inst, ext_list, 1,
99 &wsi_wayland_surface_extension_info);
Ian Elliottaf7d6362015-10-30 17:45:05 -0600100#endif // VK_USE_PLATFORM_WAYLAND_KHR
101#ifdef VK_USE_PLATFORM_XCB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600102 loader_add_to_ext_list(inst, ext_list, 1, &wsi_xcb_surface_extension_info);
Ian Elliottaf7d6362015-10-30 17:45:05 -0600103#endif // VK_USE_PLATFORM_XCB_KHR
104#ifdef VK_USE_PLATFORM_XLIB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600105 loader_add_to_ext_list(inst, ext_list, 1, &wsi_xlib_surface_extension_info);
Ian Elliottaf7d6362015-10-30 17:45:05 -0600106#endif // VK_USE_PLATFORM_XLIB_KHR
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700107#ifdef VK_USE_PLATFORM_ANDROID_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700108 loader_add_to_ext_list(inst, ext_list, 1,
109 &wsi_android_surface_extension_info);
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700110#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600111}
112
Jon Ashburn23d36b12016-02-02 17:47:28 -0700113void wsi_create_instance(struct loader_instance *ptr_instance,
114 const VkInstanceCreateInfo *pCreateInfo) {
Ian Elliottaf7d6362015-10-30 17:45:05 -0600115 ptr_instance->wsi_surface_enabled = false;
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700116
117#ifdef VK_USE_PLATFORM_WIN32_KHR
Ian Elliottdb4300a2015-11-23 10:17:23 -0700118 ptr_instance->wsi_win32_surface_enabled = true;
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700119#endif // VK_USE_PLATFORM_WIN32_KHR
120#ifdef VK_USE_PLATFORM_MIR_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600121 ptr_instance->wsi_mir_surface_enabled = false;
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700122#endif // VK_USE_PLATFORM_MIR_KHR
123#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600124 ptr_instance->wsi_wayland_surface_enabled = false;
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700125#endif // VK_USE_PLATFORM_WAYLAND_KHR
126#ifdef VK_USE_PLATFORM_XCB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600127 ptr_instance->wsi_xcb_surface_enabled = false;
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700128#endif // VK_USE_PLATFORM_XCB_KHR
129#ifdef VK_USE_PLATFORM_XLIB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600130 ptr_instance->wsi_xlib_surface_enabled = false;
Mark Lobodzinskia8a5f852015-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 Elliott954fa342015-10-30 15:28:23 -0600135
Jon Ashburnf19916e2016-01-11 13:12:43 -0700136 for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700137 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
138 VK_KHR_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott954fa342015-10-30 15:28:23 -0600139 ptr_instance->wsi_surface_enabled = true;
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700140 continue;
Ian Elliott954fa342015-10-30 15:28:23 -0600141 }
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700142#ifdef VK_USE_PLATFORM_WIN32_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700143 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
144 VK_KHR_WIN32_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700145 ptr_instance->wsi_win32_surface_enabled = true;
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700146 continue;
Ian Elliott954fa342015-10-30 15:28:23 -0600147 }
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700148#endif // VK_USE_PLATFORM_WIN32_KHR
Ian Elliottaf7d6362015-10-30 17:45:05 -0600149#ifdef VK_USE_PLATFORM_MIR_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700150 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
151 VK_KHR_MIR_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott954fa342015-10-30 15:28:23 -0600152 ptr_instance->wsi_mir_surface_enabled = true;
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700153 continue;
Ian Elliott954fa342015-10-30 15:28:23 -0600154 }
Ian Elliottaf7d6362015-10-30 17:45:05 -0600155#endif // VK_USE_PLATFORM_MIR_KHR
156#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700157 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
158 VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott954fa342015-10-30 15:28:23 -0600159 ptr_instance->wsi_wayland_surface_enabled = true;
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700160 continue;
Ian Elliott954fa342015-10-30 15:28:23 -0600161 }
Ian Elliottaf7d6362015-10-30 17:45:05 -0600162#endif // VK_USE_PLATFORM_WAYLAND_KHR
163#ifdef VK_USE_PLATFORM_XCB_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700164 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
165 VK_KHR_XCB_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott954fa342015-10-30 15:28:23 -0600166 ptr_instance->wsi_xcb_surface_enabled = true;
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700167 continue;
Ian Elliott954fa342015-10-30 15:28:23 -0600168 }
Ian Elliottaf7d6362015-10-30 17:45:05 -0600169#endif // VK_USE_PLATFORM_XCB_KHR
170#ifdef VK_USE_PLATFORM_XLIB_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700171 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
172 VK_KHR_XLIB_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott954fa342015-10-30 15:28:23 -0600173 ptr_instance->wsi_xlib_surface_enabled = true;
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700174 continue;
Ian Elliott954fa342015-10-30 15:28:23 -0600175 }
Ian Elliottaf7d6362015-10-30 17:45:05 -0600176#endif // VK_USE_PLATFORM_XLIB_KHR
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700177#ifdef VK_USE_PLATFORM_ANDROID_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700178 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
179 VK_KHR_ANDROID_SURFACE_EXTENSION_NAME) == 0) {
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700180 ptr_instance->wsi_android_surface_enabled = true;
181 continue;
182 }
183#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600184 }
185}
186
187/*
Ian Elliott2c05e222015-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 Elliott2c05e222015-11-19 13:14:05 -0700194 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700195LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL
196vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface,
197 const VkAllocationCallbacks *pAllocator) {
Ian Elliottfb42cd72015-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 Ashburn23d36b12016-02-02 17:47:28 -0700207VKAPI_ATTR void VKAPI_CALL
208loader_DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface,
209 const VkAllocationCallbacks *pAllocator) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700210 struct loader_instance *ptr_instance = loader_get_instance(instance);
211
Mark Young93ecb1d2016-01-13 13:47:16 -0700212 loader_heap_free(ptr_instance, (void *)surface);
Ian Elliott2c05e222015-11-19 13:14:05 -0700213}
214
215/*
Ian Elliott954fa342015-10-30 15:28:23 -0600216 * This is the trampoline entrypoint
217 * for GetPhysicalDeviceSurfaceSupportKHR
218 */
Jon Ashburn23d36b12016-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 Elliott954fa342015-10-30 15:28:23 -0600224 const VkLayerInstanceDispatchTable *disp;
225 disp = loader_get_instance_dispatch(physicalDevice);
226 VkResult res = disp->GetPhysicalDeviceSurfaceSupportKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700227 physicalDevice, queueFamilyIndex, surface, pSupported);
Ian Elliott954fa342015-10-30 15:28:23 -0600228 return res;
229}
230
231/*
232 * This is the instance chain terminator function
233 * for GetPhysicalDeviceSurfaceSupportKHR
234 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700235VKAPI_ATTR VkResult VKAPI_CALL
236loader_GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice,
237 uint32_t queueFamilyIndex,
238 VkSurfaceKHR surface,
239 VkBool32 *pSupported) {
240 struct loader_physical_device *phys_dev =
241 (struct loader_physical_device *)physicalDevice;
Ian Elliott954fa342015-10-30 15:28:23 -0600242 struct loader_icd *icd = phys_dev->this_icd;
243
Jon Ashburn23d36b12016-02-02 17:47:28 -0700244 assert(pSupported &&
245 "GetPhysicalDeviceSurfaceSupportKHR: Error, null pSupported");
Ian Elliott954fa342015-10-30 15:28:23 -0600246 *pSupported = false;
247
Jon Ashburn23d36b12016-02-02 17:47:28 -0700248 assert(icd->GetPhysicalDeviceSurfaceSupportKHR &&
249 "loader: null GetPhysicalDeviceSurfaceSupportKHR ICD pointer");
Ian Elliott954fa342015-10-30 15:28:23 -0600250
Jon Ashburn23d36b12016-02-02 17:47:28 -0700251 return icd->GetPhysicalDeviceSurfaceSupportKHR(
252 phys_dev->phys_dev, queueFamilyIndex, surface, pSupported);
Ian Elliott954fa342015-10-30 15:28:23 -0600253}
254
Ian Elliott486c5502015-11-19 16:05:09 -0700255/*
256 * This is the trampoline entrypoint
257 * for GetPhysicalDeviceSurfaceCapabilitiesKHR
258 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700259LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
260vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
261 VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
262 VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) {
Ian Elliott486c5502015-11-19 16:05:09 -0700263 const VkLayerInstanceDispatchTable *disp;
264 disp = loader_get_instance_dispatch(physicalDevice);
265 VkResult res = disp->GetPhysicalDeviceSurfaceCapabilitiesKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700266 physicalDevice, surface, pSurfaceCapabilities);
Ian Elliott486c5502015-11-19 16:05:09 -0700267 return res;
268}
269
270/*
271 * This is the instance chain terminator function
272 * for GetPhysicalDeviceSurfaceCapabilitiesKHR
273 */
274VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfaceCapabilitiesKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700275 VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
276 VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) {
277 struct loader_physical_device *phys_dev =
278 (struct loader_physical_device *)physicalDevice;
Ian Elliott486c5502015-11-19 16:05:09 -0700279 struct loader_icd *icd = phys_dev->this_icd;
280
Jon Ashburn23d36b12016-02-02 17:47:28 -0700281 assert(pSurfaceCapabilities && "GetPhysicalDeviceSurfaceCapabilitiesKHR: "
282 "Error, null pSurfaceCapabilities");
Ian Elliott486c5502015-11-19 16:05:09 -0700283
Jon Ashburn23d36b12016-02-02 17:47:28 -0700284 assert(icd->GetPhysicalDeviceSurfaceCapabilitiesKHR &&
285 "loader: null GetPhysicalDeviceSurfaceCapabilitiesKHR ICD pointer");
Ian Elliott486c5502015-11-19 16:05:09 -0700286
Jon Ashburn23d36b12016-02-02 17:47:28 -0700287 return icd->GetPhysicalDeviceSurfaceCapabilitiesKHR(
288 phys_dev->phys_dev, surface, pSurfaceCapabilities);
Ian Elliott486c5502015-11-19 16:05:09 -0700289}
290
291/*
292 * This is the trampoline entrypoint
293 * for GetPhysicalDeviceSurfaceFormatsKHR
294 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700295LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
296vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice,
297 VkSurfaceKHR surface,
298 uint32_t *pSurfaceFormatCount,
299 VkSurfaceFormatKHR *pSurfaceFormats) {
Ian Elliott486c5502015-11-19 16:05:09 -0700300 const VkLayerInstanceDispatchTable *disp;
301 disp = loader_get_instance_dispatch(physicalDevice);
302 VkResult res = disp->GetPhysicalDeviceSurfaceFormatsKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700303 physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
Ian Elliott486c5502015-11-19 16:05:09 -0700304 return res;
305}
306
307/*
308 * This is the instance chain terminator function
309 * for GetPhysicalDeviceSurfaceFormatsKHR
310 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700311VKAPI_ATTR VkResult VKAPI_CALL
312loader_GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice,
313 VkSurfaceKHR surface,
314 uint32_t *pSurfaceFormatCount,
315 VkSurfaceFormatKHR *pSurfaceFormats) {
316 struct loader_physical_device *phys_dev =
317 (struct loader_physical_device *)physicalDevice;
Ian Elliott486c5502015-11-19 16:05:09 -0700318 struct loader_icd *icd = phys_dev->this_icd;
319
Jon Ashburn23d36b12016-02-02 17:47:28 -0700320 assert(
321 pSurfaceFormatCount &&
322 "GetPhysicalDeviceSurfaceFormatsKHR: Error, null pSurfaceFormatCount");
Ian Elliott486c5502015-11-19 16:05:09 -0700323
Jon Ashburn23d36b12016-02-02 17:47:28 -0700324 assert(icd->GetPhysicalDeviceSurfaceFormatsKHR &&
325 "loader: null GetPhysicalDeviceSurfaceFormatsKHR ICD pointer");
Ian Elliott486c5502015-11-19 16:05:09 -0700326
Jon Ashburn23d36b12016-02-02 17:47:28 -0700327 return icd->GetPhysicalDeviceSurfaceFormatsKHR(
328 phys_dev->phys_dev, surface, pSurfaceFormatCount, pSurfaceFormats);
Ian Elliott486c5502015-11-19 16:05:09 -0700329}
330
331/*
332 * This is the trampoline entrypoint
333 * for GetPhysicalDeviceSurfacePresentModesKHR
334 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700335LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
336vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice,
337 VkSurfaceKHR surface,
338 uint32_t *pPresentModeCount,
339 VkPresentModeKHR *pPresentModes) {
Ian Elliott486c5502015-11-19 16:05:09 -0700340 const VkLayerInstanceDispatchTable *disp;
341 disp = loader_get_instance_dispatch(physicalDevice);
342 VkResult res = disp->GetPhysicalDeviceSurfacePresentModesKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700343 physicalDevice, surface, pPresentModeCount, pPresentModes);
Ian Elliott486c5502015-11-19 16:05:09 -0700344 return res;
345}
346
347/*
348 * This is the instance chain terminator function
349 * for GetPhysicalDeviceSurfacePresentModesKHR
350 */
351VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfacePresentModesKHR(
Jon Ashburn23d36b12016-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 Elliott486c5502015-11-19 16:05:09 -0700356 struct loader_icd *icd = phys_dev->this_icd;
357
Jon Ashburn23d36b12016-02-02 17:47:28 -0700358 assert(pPresentModeCount && "GetPhysicalDeviceSurfacePresentModesKHR: "
359 "Error, null pPresentModeCount");
Ian Elliott486c5502015-11-19 16:05:09 -0700360
Jon Ashburn23d36b12016-02-02 17:47:28 -0700361 assert(icd->GetPhysicalDeviceSurfacePresentModesKHR &&
362 "loader: null GetPhysicalDeviceSurfacePresentModesKHR ICD pointer");
Ian Elliott486c5502015-11-19 16:05:09 -0700363
Jon Ashburn23d36b12016-02-02 17:47:28 -0700364 return icd->GetPhysicalDeviceSurfacePresentModesKHR(
365 phys_dev->phys_dev, surface, pPresentModeCount, pPresentModes);
Ian Elliott486c5502015-11-19 16:05:09 -0700366}
367
Ian Elliott2c05e222015-11-19 13:14:05 -0700368/*
369 * Functions for the VK_KHR_swapchain extension:
370 */
371
Ian Elliott934d0d52015-11-19 16:39:21 -0700372/*
373 * This is the trampoline entrypoint
374 * for CreateSwapchainKHR
375 */
Jon Ashburn23d36b12016-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 Elliott934d0d52015-11-19 16:39:21 -0700381 const VkLayerDispatchTable *disp;
382 disp = loader_get_dispatch(device);
Jon Ashburn23d36b12016-02-02 17:47:28 -0700383 VkResult res =
384 disp->CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
Ian Elliott934d0d52015-11-19 16:39:21 -0700385 return res;
386}
Ian Elliott2c05e222015-11-19 13:14:05 -0700387
Ian Elliott934d0d52015-11-19 16:39:21 -0700388/*
389 * This is the trampoline entrypoint
390 * for DestroySwapchainKHR
391 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700392LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL
393vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain,
394 const VkAllocationCallbacks *pAllocator) {
Ian Elliott934d0d52015-11-19 16:39:21 -0700395 const VkLayerDispatchTable *disp;
396 disp = loader_get_dispatch(device);
397 disp->DestroySwapchainKHR(device, swapchain, pAllocator);
398}
Ian Elliott2c05e222015-11-19 13:14:05 -0700399
Ian Elliott934d0d52015-11-19 16:39:21 -0700400/*
401 * This is the trampoline entrypoint
402 * for GetSwapchainImagesKHR
403 */
Jon Ashburn23d36b12016-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 Elliott934d0d52015-11-19 16:39:21 -0700408 const VkLayerDispatchTable *disp;
409 disp = loader_get_dispatch(device);
410 VkResult res = disp->GetSwapchainImagesKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700411 device, swapchain, pSwapchainImageCount, pSwapchainImages);
Ian Elliott934d0d52015-11-19 16:39:21 -0700412 return res;
413}
414
415/*
416 * This is the trampoline entrypoint
417 * for AcquireNextImageKHR
418 */
Jon Ashburn23d36b12016-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 Elliott934d0d52015-11-19 16:39:21 -0700423 const VkLayerDispatchTable *disp;
424 disp = loader_get_dispatch(device);
Jon Ashburn23d36b12016-02-02 17:47:28 -0700425 VkResult res = disp->AcquireNextImageKHR(device, swapchain, timeout,
426 semaphore, fence, pImageIndex);
Ian Elliott934d0d52015-11-19 16:39:21 -0700427 return res;
428}
429
430/*
431 * This is the trampoline entrypoint
432 * for QueuePresentKHR
433 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700434LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
435vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pPresentInfo) {
Ian Elliott934d0d52015-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 Elliott2c05e222015-11-19 13:14:05 -0700441
Ian Elliott2c05e222015-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 Ashburn23d36b12016-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 Ashburnf72a04b2015-11-25 17:55:49 -0700457 const VkLayerInstanceDispatchTable *disp;
458 disp = loader_get_instance_dispatch(instance);
459 VkResult res;
460
Jon Ashburn23d36b12016-02-02 17:47:28 -0700461 res = disp->CreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator,
462 pSurface);
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700463 return res;
464}
465
466/*
467 * This is the instance chain terminator function
468 * for CreateWin32SurfaceKHR
469 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700470VKAPI_ATTR VkResult VKAPI_CALL
471loader_CreateWin32SurfaceKHR(VkInstance instance,
472 const VkWin32SurfaceCreateInfoKHR *pCreateInfo,
473 const VkAllocationCallbacks *pAllocator,
474 VkSurfaceKHR *pSurface) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700475 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott2c05e222015-11-19 13:14:05 -0700476 VkIcdSurfaceWin32 *pIcdSurface = NULL;
477
Jon Ashburn23d36b12016-02-02 17:47:28 -0700478 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceWin32),
Ian Elliottdb4300a2015-11-23 10:17:23 -0700479 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott2c05e222015-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 Elliott6e7e6002015-12-10 17:28:50 -0700485 pIcdSurface->hinstance = pCreateInfo->hinstance;
486 pIcdSurface->hwnd = pCreateInfo->hwnd;
Ian Elliott2c05e222015-11-19 13:14:05 -0700487
Jon Ashburn23d36b12016-02-02 17:47:28 -0700488 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700489
490 return VK_SUCCESS;
491}
Ian Elliott919fa302015-11-24 15:39:10 -0700492
493/*
494 * This is the trampoline entrypoint
495 * for GetPhysicalDeviceWin32PresentationSupportKHR
496 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700497LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
498vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice,
499 uint32_t queueFamilyIndex) {
Ian Elliott919fa302015-11-24 15:39:10 -0700500 const VkLayerInstanceDispatchTable *disp;
501 disp = loader_get_instance_dispatch(physicalDevice);
502 VkBool32 res = disp->GetPhysicalDeviceWin32PresentationSupportKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700503 physicalDevice, queueFamilyIndex);
Ian Elliott919fa302015-11-24 15:39:10 -0700504 return res;
505}
506
Ian Elliott919fa302015-11-24 15:39:10 -0700507/*
508 * This is the instance chain terminator function
509 * for GetPhysicalDeviceWin32PresentationSupportKHR
510 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700511VKAPI_ATTR VkBool32 VKAPI_CALL
512loader_GetPhysicalDeviceWin32PresentationSupportKHR(
513 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex) {
514 struct loader_physical_device *phys_dev =
515 (struct loader_physical_device *)physicalDevice;
Ian Elliott919fa302015-11-24 15:39:10 -0700516 struct loader_icd *icd = phys_dev->this_icd;
517
Jon Ashburn23d36b12016-02-02 17:47:28 -0700518 assert(icd->GetPhysicalDeviceWin32PresentationSupportKHR &&
519 "loader: null GetPhysicalDeviceWin32PresentationSupportKHR ICD "
520 "pointer");
Ian Elliott919fa302015-11-24 15:39:10 -0700521
522 return icd->GetPhysicalDeviceWin32PresentationSupportKHR(phys_dev->phys_dev,
Jon Ashburn23d36b12016-02-02 17:47:28 -0700523 queueFamilyIndex);
Ian Elliott919fa302015-11-24 15:39:10 -0700524}
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700525#endif // VK_USE_PLATFORM_WIN32_KHR
Ian Elliott2c05e222015-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 Ashburn23d36b12016-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 Ashburnf72a04b2015-11-25 17:55:49 -0700542 const VkLayerInstanceDispatchTable *disp;
543 disp = loader_get_instance_dispatch(instance);
544 VkResult res;
545
Jon Ashburn23d36b12016-02-02 17:47:28 -0700546 res =
547 disp->CreateMirSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700548 return res;
549}
550
551/*
552 * This is the instance chain terminator function
553 * for CreateMirSurfaceKHR
554 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700555VKAPI_ATTR VkResult VKAPI_CALL
556loader_CreateMirSurfaceKHR(VkInstance instance,
557 const VkMirSurfaceCreateInfoKHR *pCreateInfo,
558 const VkAllocationCallbacks *pAllocator,
559 VkSurfaceKHR *pSurface) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700560 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott2c05e222015-11-19 13:14:05 -0700561 VkIcdSurfaceMir *pIcdSurface = NULL;
562
Jon Ashburn23d36b12016-02-02 17:47:28 -0700563 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceMir),
Ian Elliottdb4300a2015-11-23 10:17:23 -0700564 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott2c05e222015-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 Elliott6e7e6002015-12-10 17:28:50 -0700570 pIcdSurface->connection = pCreateInfo->connection;
571 pIcdSurface->mirSurface = pCreateInfo->mirSurface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700572
Jon Ashburn23d36b12016-02-02 17:47:28 -0700573 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700574
575 return VK_SUCCESS;
576}
Ian Elliott919fa302015-11-24 15:39:10 -0700577
578/*
579 * This is the trampoline entrypoint
580 * for GetPhysicalDeviceMirPresentationSupportKHR
581 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700582LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
583vkGetPhysicalDeviceMirPresentationSupportKHR(VkPhysicalDevice physicalDevice,
584 uint32_t queueFamilyIndex,
585 MirConnection *connection) {
Ian Elliott919fa302015-11-24 15:39:10 -0700586 const VkLayerInstanceDispatchTable *disp;
587 disp = loader_get_instance_dispatch(physicalDevice);
588 VkBool32 res = disp->GetPhysicalDeviceMirPresentationSupportKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700589 physicalDevice, queueFamilyIndex, connection);
Ian Elliott919fa302015-11-24 15:39:10 -0700590 return res;
591}
592
Ian Elliott919fa302015-11-24 15:39:10 -0700593/*
594 * This is the instance chain terminator function
595 * for GetPhysicalDeviceMirPresentationSupportKHR
596 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700597VKAPI_ATTR VkBool32 VKAPI_CALL
598loader_GetPhysicalDeviceMirPresentationSupportKHR(
599 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
600 MirConnection *connection) {
601 struct loader_physical_device *phys_dev =
602 (struct loader_physical_device *)physicalDevice;
Ian Elliott919fa302015-11-24 15:39:10 -0700603 struct loader_icd *icd = phys_dev->this_icd;
604
Jon Ashburn23d36b12016-02-02 17:47:28 -0700605 assert(
606 icd->GetPhysicalDeviceMirPresentationSupportKHR &&
607 "loader: null GetPhysicalDeviceMirPresentationSupportKHR ICD pointer");
Ian Elliott919fa302015-11-24 15:39:10 -0700608
Jon Ashburn23d36b12016-02-02 17:47:28 -0700609 return icd->GetPhysicalDeviceMirPresentationSupportKHR(
610 phys_dev->phys_dev, queueFamilyIndex, connection);
Ian Elliott919fa302015-11-24 15:39:10 -0700611}
Ian Elliott2c05e222015-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 Ashburn23d36b12016-02-02 17:47:28 -0700624LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
625vkCreateWaylandSurfaceKHR(VkInstance instance,
626 const VkMirSurfaceCreateInfoKHR *pCreateInfo,
627 const VkAllocationCallbacks *pAllocator,
628 VkSurfaceKHR *pSurface) {
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700629 const VkLayerInstanceDispatchTable *disp;
630 disp = loader_get_instance_dispatch(instance);
631 VkResult res;
632
Jon Ashburn23d36b12016-02-02 17:47:28 -0700633 res = disp->CreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator,
634 pSurface);
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700635 return res;
636}
637
638/*
639 * This is the instance chain terminator function
640 * for CreateXlibSurfaceKHR
641 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700642VKAPI_ATTR VkResult VKAPI_CALL
643loader_CreateWaylandSurfaceKHR(VkInstance instance,
644 const VkMirSurfaceCreateInfoKHR *pCreateInfo,
645 const VkAllocationCallbacks *pAllocator,
646 VkSurfaceKHR *pSurface) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700647 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott2c05e222015-11-19 13:14:05 -0700648 VkIcdSurfaceWayland *pIcdSurface = NULL;
649
Jon Ashburn23d36b12016-02-02 17:47:28 -0700650 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceWayland),
Ian Elliottdb4300a2015-11-23 10:17:23 -0700651 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott2c05e222015-11-19 13:14:05 -0700652 if (pIcdSurface == NULL) {
653 return VK_ERROR_OUT_OF_HOST_MEMORY;
654 }
655
656 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_WAYLAND;
Ian Elliott6e7e6002015-12-10 17:28:50 -0700657 pIcdSurface->display = pCreateInfo->display;
658 pIcdSurface->surface = pCreateInfo->surface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700659
Jon Ashburn23d36b12016-02-02 17:47:28 -0700660 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700661
662 return VK_SUCCESS;
663}
Ian Elliott919fa302015-11-24 15:39:10 -0700664
665/*
666 * This is the trampoline entrypoint
667 * for GetPhysicalDeviceWaylandPresentationSupportKHR
668 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700669LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
670vkGetPhysicalDeviceWaylandPresentationSupportKHR(
671 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
672 struct wl_display *display) {
Ian Elliott919fa302015-11-24 15:39:10 -0700673 const VkLayerInstanceDispatchTable *disp;
674 disp = loader_get_instance_dispatch(physicalDevice);
675 VkBool32 res = disp->GetPhysicalDeviceWaylandPresentationSupportKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700676 physicalDevice, queueFamilyIndex, display);
Ian Elliott919fa302015-11-24 15:39:10 -0700677 return res;
678}
679
Ian Elliott919fa302015-11-24 15:39:10 -0700680/*
681 * This is the instance chain terminator function
682 * for GetPhysicalDeviceWaylandPresentationSupportKHR
683 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700684VKAPI_ATTR VkBool32 VKAPI_CALL
685loader_GetPhysicalDeviceWaylandPresentationSupportKHR(
686 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
687 struct wl_display *display) {
688 struct loader_physical_device *phys_dev =
689 (struct loader_physical_device *)physicalDevice;
Ian Elliott919fa302015-11-24 15:39:10 -0700690 struct loader_icd *icd = phys_dev->this_icd;
691
Jon Ashburn23d36b12016-02-02 17:47:28 -0700692 assert(icd->GetPhysicalDeviceWaylandPresentationSupportKHR &&
693 "loader: null GetPhysicalDeviceWaylandPresentationSupportKHR ICD "
694 "pointer");
Ian Elliott919fa302015-11-24 15:39:10 -0700695
Jon Ashburn23d36b12016-02-02 17:47:28 -0700696 return icd->GetPhysicalDeviceWaylandPresentationSupportKHR(
697 phys_dev->phys_dev, queueFamilyIndex, display);
Ian Elliott919fa302015-11-24 15:39:10 -0700698}
Ian Elliott2c05e222015-11-19 13:14:05 -0700699#endif // VK_USE_PLATFORM_WAYLAND_KHR
700
701#ifdef VK_USE_PLATFORM_XCB_KHR
702
703/*
704 * Functions for the VK_KHR_xcb_surface extension:
705 */
706
707/*
708 * This is the trampoline entrypoint
709 * for CreateXcbSurfaceKHR
710 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700711LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
712vkCreateXcbSurfaceKHR(VkInstance instance,
713 const VkXcbSurfaceCreateInfoKHR *pCreateInfo,
714 const VkAllocationCallbacks *pAllocator,
715 VkSurfaceKHR *pSurface) {
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700716 const VkLayerInstanceDispatchTable *disp;
717 disp = loader_get_instance_dispatch(instance);
718 VkResult res;
719
Jon Ashburn23d36b12016-02-02 17:47:28 -0700720 res =
721 disp->CreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700722 return res;
723}
724
725/*
726 * This is the instance chain terminator function
727 * for CreateXcbSurfaceKHR
728 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700729VKAPI_ATTR VkResult VKAPI_CALL
730loader_CreateXcbSurfaceKHR(VkInstance instance,
731 const VkXcbSurfaceCreateInfoKHR *pCreateInfo,
732 const VkAllocationCallbacks *pAllocator,
733 VkSurfaceKHR *pSurface) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700734 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott2c05e222015-11-19 13:14:05 -0700735 VkIcdSurfaceXcb *pIcdSurface = NULL;
736
Jon Ashburn23d36b12016-02-02 17:47:28 -0700737 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceXcb),
Ian Elliottdb4300a2015-11-23 10:17:23 -0700738 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott2c05e222015-11-19 13:14:05 -0700739 if (pIcdSurface == NULL) {
740 return VK_ERROR_OUT_OF_HOST_MEMORY;
741 }
742
743 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_XCB;
Ian Elliott6e7e6002015-12-10 17:28:50 -0700744 pIcdSurface->connection = pCreateInfo->connection;
745 pIcdSurface->window = pCreateInfo->window;
Ian Elliott2c05e222015-11-19 13:14:05 -0700746
Jon Ashburn23d36b12016-02-02 17:47:28 -0700747 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700748
749 return VK_SUCCESS;
750}
Ian Elliott919fa302015-11-24 15:39:10 -0700751
752/*
753 * This is the trampoline entrypoint
754 * for GetPhysicalDeviceXcbPresentationSupportKHR
755 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700756LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
757vkGetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice,
758 uint32_t queueFamilyIndex,
759 xcb_connection_t *connection,
760 xcb_visualid_t visual_id) {
Ian Elliott919fa302015-11-24 15:39:10 -0700761 const VkLayerInstanceDispatchTable *disp;
762 disp = loader_get_instance_dispatch(physicalDevice);
763 VkBool32 res = disp->GetPhysicalDeviceXcbPresentationSupportKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700764 physicalDevice, queueFamilyIndex, connection, visual_id);
Ian Elliott919fa302015-11-24 15:39:10 -0700765 return res;
766}
767
Ian Elliott919fa302015-11-24 15:39:10 -0700768/*
769 * This is the instance chain terminator function
770 * for GetPhysicalDeviceXcbPresentationSupportKHR
771 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700772VKAPI_ATTR VkBool32 VKAPI_CALL
773loader_GetPhysicalDeviceXcbPresentationSupportKHR(
774 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
775 xcb_connection_t *connection, xcb_visualid_t visual_id) {
776 struct loader_physical_device *phys_dev =
777 (struct loader_physical_device *)physicalDevice;
Ian Elliott919fa302015-11-24 15:39:10 -0700778 struct loader_icd *icd = phys_dev->this_icd;
779
Jon Ashburn23d36b12016-02-02 17:47:28 -0700780 assert(
781 icd->GetPhysicalDeviceXcbPresentationSupportKHR &&
782 "loader: null GetPhysicalDeviceXcbPresentationSupportKHR ICD pointer");
Ian Elliott919fa302015-11-24 15:39:10 -0700783
Jon Ashburn23d36b12016-02-02 17:47:28 -0700784 return icd->GetPhysicalDeviceXcbPresentationSupportKHR(
785 phys_dev->phys_dev, queueFamilyIndex, connection, visual_id);
Ian Elliott919fa302015-11-24 15:39:10 -0700786}
Ian Elliott2c05e222015-11-19 13:14:05 -0700787#endif // VK_USE_PLATFORM_XCB_KHR
788
789#ifdef VK_USE_PLATFORM_XLIB_KHR
790
791/*
792 * Functions for the VK_KHR_xlib_surface extension:
793 */
794
795/*
796 * This is the trampoline entrypoint
797 * for CreateXlibSurfaceKHR
798 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700799LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
800vkCreateXlibSurfaceKHR(VkInstance instance,
801 const VkXlibSurfaceCreateInfoKHR *pCreateInfo,
802 const VkAllocationCallbacks *pAllocator,
803 VkSurfaceKHR *pSurface) {
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700804 const VkLayerInstanceDispatchTable *disp;
805 disp = loader_get_instance_dispatch(instance);
806 VkResult res;
807
Jon Ashburn23d36b12016-02-02 17:47:28 -0700808 res =
809 disp->CreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700810 return res;
811}
812
813/*
814 * This is the instance chain terminator function
815 * for CreateXlibSurfaceKHR
816 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700817VKAPI_ATTR VkResult VKAPI_CALL
818loader_CreateXlibSurfaceKHR(VkInstance instance,
819 const VkXlibSurfaceCreateInfoKHR *pCreateInfo,
820 const VkAllocationCallbacks *pAllocator,
821 VkSurfaceKHR *pSurface) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700822 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott2c05e222015-11-19 13:14:05 -0700823 VkIcdSurfaceXlib *pIcdSurface = NULL;
824
Jon Ashburn23d36b12016-02-02 17:47:28 -0700825 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceXlib),
Ian Elliottdb4300a2015-11-23 10:17:23 -0700826 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott2c05e222015-11-19 13:14:05 -0700827 if (pIcdSurface == NULL) {
828 return VK_ERROR_OUT_OF_HOST_MEMORY;
829 }
830
831 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_XLIB;
Ian Elliott6e7e6002015-12-10 17:28:50 -0700832 pIcdSurface->dpy = pCreateInfo->dpy;
833 pIcdSurface->window = pCreateInfo->window;
Ian Elliott2c05e222015-11-19 13:14:05 -0700834
Jon Ashburn23d36b12016-02-02 17:47:28 -0700835 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700836
837 return VK_SUCCESS;
838}
Ian Elliott919fa302015-11-24 15:39:10 -0700839
840/*
841 * This is the trampoline entrypoint
842 * for GetPhysicalDeviceXlibPresentationSupportKHR
843 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700844LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
845vkGetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice,
846 uint32_t queueFamilyIndex,
847 Display *dpy, VisualID visualID) {
Ian Elliott919fa302015-11-24 15:39:10 -0700848 const VkLayerInstanceDispatchTable *disp;
849 disp = loader_get_instance_dispatch(physicalDevice);
850 VkBool32 res = disp->GetPhysicalDeviceXlibPresentationSupportKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700851 physicalDevice, queueFamilyIndex, dpy, visualID);
Ian Elliott919fa302015-11-24 15:39:10 -0700852 return res;
853}
854
Ian Elliott919fa302015-11-24 15:39:10 -0700855/*
856 * This is the instance chain terminator function
857 * for GetPhysicalDeviceXlibPresentationSupportKHR
858 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700859VKAPI_ATTR VkBool32 VKAPI_CALL
860loader_GetPhysicalDeviceXlibPresentationSupportKHR(
861 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display *dpy,
862 VisualID visualID) {
863 struct loader_physical_device *phys_dev =
864 (struct loader_physical_device *)physicalDevice;
Ian Elliott919fa302015-11-24 15:39:10 -0700865 struct loader_icd *icd = phys_dev->this_icd;
866
Jon Ashburn23d36b12016-02-02 17:47:28 -0700867 assert(
868 icd->GetPhysicalDeviceXlibPresentationSupportKHR &&
869 "loader: null GetPhysicalDeviceXlibPresentationSupportKHR ICD pointer");
Ian Elliott919fa302015-11-24 15:39:10 -0700870
Jon Ashburn23d36b12016-02-02 17:47:28 -0700871 return icd->GetPhysicalDeviceXlibPresentationSupportKHR(
872 phys_dev->phys_dev, queueFamilyIndex, dpy, visualID);
Ian Elliott919fa302015-11-24 15:39:10 -0700873}
Ian Elliott2c05e222015-11-19 13:14:05 -0700874#endif // VK_USE_PLATFORM_XLIB_KHR
875
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700876#ifdef VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott2c05e222015-11-19 13:14:05 -0700877
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700878/*
879 * Functions for the VK_KHR_android_surface extension:
880 */
881
882/*
883 * This is the trampoline entrypoint
884 * for CreateAndroidSurfaceKHR
885 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700886LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
887vkCreateAndroidSurfaceKHR(VkInstance instance, ANativeWindow *window,
888 const VkAllocationCallbacks *pAllocator,
889 VkSurfaceKHR *pSurface) {
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700890 const VkLayerInstanceDispatchTable *disp;
891 disp = loader_get_instance_dispatch(instance);
892 VkResult res;
893
894 res = disp->CreateAndroidSurfaceKHR(instance, window, pAllocator, pSurface);
895 return res;
896}
897
898/*
899 * This is the instance chain terminator function
900 * for CreateAndroidSurfaceKHR
901 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700902VKAPI_ATTR VkResult VKAPI_CALL
903loader_CreateAndroidSurfaceKHR(VkInstance instance, Window window,
904 const VkAllocationCallbacks *pAllocator,
905 VkSurfaceKHR *pSurface) {
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700906 struct loader_instance *ptr_instance = loader_get_instance(instance);
907 VkIcdSurfaceAndroid *pIcdSurface = NULL;
908
Jon Ashburn23d36b12016-02-02 17:47:28 -0700909 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceAndroid),
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700910 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
911 if (pIcdSurface == NULL) {
912 return VK_ERROR_OUT_OF_HOST_MEMORY;
913 }
914
915 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_ANDROID;
916 pIcdSurface->dpy = dpy;
917 pIcdSurface->window = window;
918
Jon Ashburn23d36b12016-02-02 17:47:28 -0700919 *pSurface = (VkSurfaceKHR)pIcdSurface;
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700920
921 return VK_SUCCESS;
922}
923
924#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott2c05e222015-11-19 13:14:05 -0700925
Ian Elliott954fa342015-10-30 15:28:23 -0600926bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance,
Jon Ashburn23d36b12016-02-02 17:47:28 -0700927 const char *name, void **addr) {
Ian Elliott954fa342015-10-30 15:28:23 -0600928 *addr = NULL;
929
Ian Elliott934d0d52015-11-19 16:39:21 -0700930 /*
931 * Functions for the VK_KHR_surface extension:
932 */
Ian Elliott2c05e222015-11-19 13:14:05 -0700933 if (!strcmp("vkDestroySurfaceKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700934 *addr = ptr_instance->wsi_surface_enabled ? (void *)vkDestroySurfaceKHR
935 : NULL;
Ian Elliott2c05e222015-11-19 13:14:05 -0700936 return true;
937 }
Ian Elliott954fa342015-10-30 15:28:23 -0600938 if (!strcmp("vkGetPhysicalDeviceSurfaceSupportKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700939 *addr = ptr_instance->wsi_surface_enabled
940 ? (void *)vkGetPhysicalDeviceSurfaceSupportKHR
941 : NULL;
Ian Elliott954fa342015-10-30 15:28:23 -0600942 return true;
943 }
Ian Elliott486c5502015-11-19 16:05:09 -0700944 if (!strcmp("vkGetPhysicalDeviceSurfaceCapabilitiesKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700945 *addr = ptr_instance->wsi_surface_enabled
946 ? (void *)vkGetPhysicalDeviceSurfaceCapabilitiesKHR
947 : NULL;
Ian Elliott486c5502015-11-19 16:05:09 -0700948 return true;
949 }
950 if (!strcmp("vkGetPhysicalDeviceSurfaceFormatsKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700951 *addr = ptr_instance->wsi_surface_enabled
952 ? (void *)vkGetPhysicalDeviceSurfaceFormatsKHR
953 : NULL;
Ian Elliott486c5502015-11-19 16:05:09 -0700954 return true;
955 }
956 if (!strcmp("vkGetPhysicalDeviceSurfacePresentModesKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700957 *addr = ptr_instance->wsi_surface_enabled
958 ? (void *)vkGetPhysicalDeviceSurfacePresentModesKHR
959 : NULL;
Ian Elliott486c5502015-11-19 16:05:09 -0700960 return true;
961 }
Ian Elliott934d0d52015-11-19 16:39:21 -0700962
963 /*
964 * Functions for the VK_KHR_swapchain extension:
965 *
966 * Note: This is a device extension, and its functions are statically
967 * exported from the loader. Per Khronos decisions, the the loader's GIPA
968 * function will return the trampoline function for such device-extension
969 * functions, regardless of whether the extension has been enabled.
970 */
971 if (!strcmp("vkCreateSwapchainKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700972 *addr = (void *)vkCreateSwapchainKHR;
Ian Elliott934d0d52015-11-19 16:39:21 -0700973 return true;
974 }
975 if (!strcmp("vkDestroySwapchainKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700976 *addr = (void *)vkDestroySwapchainKHR;
Ian Elliott934d0d52015-11-19 16:39:21 -0700977 return true;
978 }
979 if (!strcmp("vkGetSwapchainImagesKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700980 *addr = (void *)vkGetSwapchainImagesKHR;
Ian Elliott934d0d52015-11-19 16:39:21 -0700981 return true;
982 }
983 if (!strcmp("vkAcquireNextImageKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700984 *addr = (void *)vkAcquireNextImageKHR;
Ian Elliott934d0d52015-11-19 16:39:21 -0700985 return true;
986 }
987 if (!strcmp("vkQueuePresentKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700988 *addr = (void *)vkQueuePresentKHR;
Ian Elliott934d0d52015-11-19 16:39:21 -0700989 return true;
990 }
991
Ian Elliott2c05e222015-11-19 13:14:05 -0700992#ifdef VK_USE_PLATFORM_WIN32_KHR
Ian Elliott934d0d52015-11-19 16:39:21 -0700993 /*
994 * Functions for the VK_KHR_win32_surface extension:
995 */
Ian Elliott2c05e222015-11-19 13:14:05 -0700996 if (!strcmp("vkCreateWin32SurfaceKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700997 *addr = ptr_instance->wsi_win32_surface_enabled
998 ? (void *)vkCreateWin32SurfaceKHR
999 : NULL;
Ian Elliott2c05e222015-11-19 13:14:05 -07001000 return true;
1001 }
Ian Elliott919fa302015-11-24 15:39:10 -07001002 if (!strcmp("vkGetPhysicalDeviceWin32PresentationSupportKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -07001003 *addr = ptr_instance->wsi_win32_surface_enabled
1004 ? (void *)vkGetPhysicalDeviceWin32PresentationSupportKHR
1005 : NULL;
Ian Elliott919fa302015-11-24 15:39:10 -07001006 return true;
1007 }
Ian Elliott2c05e222015-11-19 13:14:05 -07001008#endif // VK_USE_PLATFORM_WIN32_KHR
Ian Elliott2c05e222015-11-19 13:14:05 -07001009#ifdef VK_USE_PLATFORM_MIR_KHR
Ian Elliott934d0d52015-11-19 16:39:21 -07001010 /*
1011 * Functions for the VK_KHR_mir_surface extension:
1012 */
Ian Elliott2c05e222015-11-19 13:14:05 -07001013 if (!strcmp("vkCreateMirSurfaceKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -07001014 *addr = ptr_instance->wsi_mir_surface_enabled
1015 ? (void *)vkCreateMirSurfaceKHR
1016 : NULL;
Ian Elliott2c05e222015-11-19 13:14:05 -07001017 return true;
1018 }
Ian Elliott919fa302015-11-24 15:39:10 -07001019 if (!strcmp("vkGetPhysicalDeviceMirPresentationSupportKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -07001020 *addr = ptr_instance->wsi_mir_surface_enabled
1021 ? (void *)vkGetPhysicalDeviceMirPresentationSupportKHR
1022 : NULL;
Ian Elliott919fa302015-11-24 15:39:10 -07001023 return true;
Ian Elliott2c05e222015-11-19 13:14:05 -07001024#endif // VK_USE_PLATFORM_MIR_KHR
1025#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -07001026 /*
1027 * Functions for the VK_KHR_wayland_surface extension:
1028 */
1029 if (!strcmp("vkCreateWaylandSurfaceKHR", name)) {
1030 *addr = ptr_instance->wsi_wayland_surface_enabled
1031 ? (void *)vkCreateWaylandSurfaceKHR
1032 : NULL;
1033 return true;
1034 }
1035 if (!strcmp("vkGetPhysicalDeviceWaylandPresentationSupportKHR", name)) {
1036 *addr =
1037 ptr_instance->wsi_wayland_surface_enabled
1038 ? (void *)vkGetPhysicalDeviceWaylandPresentationSupportKHR
1039 : NULL;
1040 return true;
Ian Elliott2c05e222015-11-19 13:14:05 -07001041#endif // VK_USE_PLATFORM_WAYLAND_KHR
1042#ifdef VK_USE_PLATFORM_XCB_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -07001043 /*
1044 * Functions for the VK_KHR_xcb_surface extension:
1045 */
1046 if (!strcmp("vkCreateXcbSurfaceKHR", name)) {
1047 *addr = ptr_instance->wsi_xcb_surface_enabled
1048 ? (void *)vkCreateXcbSurfaceKHR
1049 : NULL;
1050 return true;
1051 }
1052 if (!strcmp("vkGetPhysicalDeviceXcbPresentationSupportKHR", name)) {
1053 *addr =
1054 ptr_instance->wsi_xcb_surface_enabled
1055 ? (void *)vkGetPhysicalDeviceXcbPresentationSupportKHR
1056 : NULL;
1057 return true;
1058 }
Ian Elliott2c05e222015-11-19 13:14:05 -07001059#endif // VK_USE_PLATFORM_XCB_KHR
1060#ifdef VK_USE_PLATFORM_XLIB_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -07001061 /*
1062 * Functions for the VK_KHR_xlib_surface extension:
1063 */
1064 if (!strcmp("vkCreateXlibSurfaceKHR", name)) {
1065 *addr = ptr_instance->wsi_xlib_surface_enabled
1066 ? (void *)vkCreateXlibSurfaceKHR
1067 : NULL;
1068 return true;
1069 }
1070 if (!strcmp("vkGetPhysicalDeviceXlibPresentationSupportKHR",
1071 name)) {
1072 *addr =
1073 ptr_instance->wsi_xlib_surface_enabled
1074 ? (void *)vkGetPhysicalDeviceXlibPresentationSupportKHR
1075 : NULL;
1076 return true;
1077 }
Ian Elliott2c05e222015-11-19 13:14:05 -07001078#endif // VK_USE_PLATFORM_XLIB_KHR
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -07001079#ifdef VK_USE_PLATFORM_ANDROID_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -07001080 /*
1081 * Functions for the VK_KHR_android_surface extension:
1082 */
1083 if (!strcmp("vkCreateAndroidSurfaceKHR", name)) {
1084 *addr = ptr_instance->wsi_xlib_surface_enabled
1085 ? (void *)vkCreateAndroidSurfaceKHR
1086 : NULL;
1087 return true;
1088 }
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -07001089#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott2c05e222015-11-19 13:14:05 -07001090
Jon Ashburn23d36b12016-02-02 17:47:28 -07001091 return false;
1092 }