blob: 43ca83f38d01882360a98927f08dcb82833e5dce [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 Confidential Information as defined by the Khronos
17 * Membership Agreement until designated non-confidential by Khronos, at which
18 * point this condition clause shall be removed.
Ian Elliott954fa342015-10-30 15:28:23 -060019 *
Jon Ashburn23d36b12016-02-02 17:47:28 -070020 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Ian Elliott954fa342015-10-30 15:28:23 -060021 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Jon Ashburn23d36b12016-02-02 17:47:28 -070022 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23 *
24 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
26 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
27 * USE OR OTHER DEALINGS IN THE MATERIALS.
Ian Elliott954fa342015-10-30 15:28:23 -060028 *
29 * Author: Ian Elliott <ian@lunarg.com>
Jon Ashburn23d36b12016-02-02 17:47:28 -070030 * Author: Jon Ashburn <jon@lunarg.com>
Ian Elliottc2e9aee2015-11-19 11:58:08 -070031 * Author: Ian Elliott <ianelliott@google.com>
Jon Ashburn23d36b12016-02-02 17:47:28 -070032 * Author: Mark Lobodzinski <mark@lunarg.com>
Ian Elliott954fa342015-10-30 15:28:23 -060033 */
34
35//#define _ISOC11_SOURCE /* for aligned_alloc() */
36#define _GNU_SOURCE
37#include <stdlib.h>
38#include <string.h>
39#include "vk_loader_platform.h"
40#include "loader.h"
41#include "wsi.h"
Ian Elliott2c05e222015-11-19 13:14:05 -070042#include <vulkan/vk_icd.h>
Ian Elliott954fa342015-10-30 15:28:23 -060043
44static const VkExtensionProperties wsi_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070045 .extensionName = VK_KHR_SURFACE_EXTENSION_NAME,
46 .specVersion = VK_KHR_SURFACE_SPEC_VERSION,
Ian Elliott954fa342015-10-30 15:28:23 -060047};
48
Ian Elliottc2e9aee2015-11-19 11:58:08 -070049#ifdef VK_USE_PLATFORM_WIN32_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060050static const VkExtensionProperties wsi_win32_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070051 .extensionName = VK_KHR_WIN32_SURFACE_EXTENSION_NAME,
52 .specVersion = VK_KHR_WIN32_SURFACE_SPEC_VERSION,
Ian Elliott954fa342015-10-30 15:28:23 -060053};
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -070054#endif // VK_USE_PLATFORM_WIN32_KHR
55
Ian Elliottaf7d6362015-10-30 17:45:05 -060056#ifdef VK_USE_PLATFORM_MIR_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060057static const VkExtensionProperties wsi_mir_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070058 .extensionName = VK_KHR_MIR_SURFACE_EXTENSION_NAME,
59 .specVersion = VK_KHR_MIR_SURFACE_SPEC_VERSION,
Ian Elliott954fa342015-10-30 15:28:23 -060060};
Ian Elliottaf7d6362015-10-30 17:45:05 -060061#endif // VK_USE_PLATFORM_MIR_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060062
Ian Elliottaf7d6362015-10-30 17:45:05 -060063#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060064static const VkExtensionProperties wsi_wayland_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070065 .extensionName = VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME,
66 .specVersion = VK_KHR_WAYLAND_SURFACE_SPEC_VERSION,
Ian Elliott954fa342015-10-30 15:28:23 -060067};
Ian Elliottaf7d6362015-10-30 17:45:05 -060068#endif // VK_USE_PLATFORM_WAYLAND_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060069
Ian Elliottaf7d6362015-10-30 17:45:05 -060070#ifdef VK_USE_PLATFORM_XCB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060071static const VkExtensionProperties wsi_xcb_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070072 .extensionName = VK_KHR_XCB_SURFACE_EXTENSION_NAME,
73 .specVersion = VK_KHR_XCB_SURFACE_SPEC_VERSION,
Ian Elliott954fa342015-10-30 15:28:23 -060074};
Ian Elliottaf7d6362015-10-30 17:45:05 -060075#endif // VK_USE_PLATFORM_XCB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060076
Ian Elliottaf7d6362015-10-30 17:45:05 -060077#ifdef VK_USE_PLATFORM_XLIB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060078static const VkExtensionProperties wsi_xlib_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070079 .extensionName = VK_KHR_XLIB_SURFACE_EXTENSION_NAME,
80 .specVersion = VK_KHR_XLIB_SURFACE_SPEC_VERSION,
Ian Elliott954fa342015-10-30 15:28:23 -060081};
Ian Elliottaf7d6362015-10-30 17:45:05 -060082#endif // VK_USE_PLATFORM_XLIB_KHR
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -070083
84#ifdef VK_USE_PLATFORM_ANDROID_KHR
85static const VkExtensionProperties wsi_android_surface_extension_info = {
Jon Ashburn23d36b12016-02-02 17:47:28 -070086 .extensionName = VK_KHR_ANDROID_SURFACE_EXTENSION_NAME,
87 .specVersion = VK_KHR_ANDROID_SURFACE_REVISION,
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -070088};
89#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060090
Jon Ashburn23d36b12016-02-02 17:47:28 -070091void wsi_add_instance_extensions(const struct loader_instance *inst,
92 struct loader_extension_list *ext_list) {
Ian Elliott954fa342015-10-30 15:28:23 -060093 loader_add_to_ext_list(inst, ext_list, 1, &wsi_surface_extension_info);
Ian Elliottc2e9aee2015-11-19 11:58:08 -070094#ifdef VK_USE_PLATFORM_WIN32_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -070095 loader_add_to_ext_list(inst, ext_list, 1,
96 &wsi_win32_surface_extension_info);
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -070097#endif // VK_USE_PLATFORM_WIN32_KHR
Ian Elliottaf7d6362015-10-30 17:45:05 -060098#ifdef VK_USE_PLATFORM_MIR_KHR
Ian Elliott954fa342015-10-30 15:28:23 -060099 loader_add_to_ext_list(inst, ext_list, 1, &wsi_mir_surface_extension_info);
Ian Elliottaf7d6362015-10-30 17:45:05 -0600100#endif // VK_USE_PLATFORM_MIR_KHR
101#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700102 loader_add_to_ext_list(inst, ext_list, 1,
103 &wsi_wayland_surface_extension_info);
Ian Elliottaf7d6362015-10-30 17:45:05 -0600104#endif // VK_USE_PLATFORM_WAYLAND_KHR
105#ifdef VK_USE_PLATFORM_XCB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600106 loader_add_to_ext_list(inst, ext_list, 1, &wsi_xcb_surface_extension_info);
Ian Elliottaf7d6362015-10-30 17:45:05 -0600107#endif // VK_USE_PLATFORM_XCB_KHR
108#ifdef VK_USE_PLATFORM_XLIB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600109 loader_add_to_ext_list(inst, ext_list, 1, &wsi_xlib_surface_extension_info);
Ian Elliottaf7d6362015-10-30 17:45:05 -0600110#endif // VK_USE_PLATFORM_XLIB_KHR
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700111#ifdef VK_USE_PLATFORM_ANDROID_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700112 loader_add_to_ext_list(inst, ext_list, 1,
113 &wsi_android_surface_extension_info);
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700114#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600115}
116
Jon Ashburn23d36b12016-02-02 17:47:28 -0700117void wsi_create_instance(struct loader_instance *ptr_instance,
118 const VkInstanceCreateInfo *pCreateInfo) {
Ian Elliottaf7d6362015-10-30 17:45:05 -0600119 ptr_instance->wsi_surface_enabled = false;
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700120
121#ifdef VK_USE_PLATFORM_WIN32_KHR
Ian Elliottdb4300a2015-11-23 10:17:23 -0700122 ptr_instance->wsi_win32_surface_enabled = true;
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700123#endif // VK_USE_PLATFORM_WIN32_KHR
124#ifdef VK_USE_PLATFORM_MIR_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600125 ptr_instance->wsi_mir_surface_enabled = false;
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700126#endif // VK_USE_PLATFORM_MIR_KHR
127#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600128 ptr_instance->wsi_wayland_surface_enabled = false;
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700129#endif // VK_USE_PLATFORM_WAYLAND_KHR
130#ifdef VK_USE_PLATFORM_XCB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600131 ptr_instance->wsi_xcb_surface_enabled = false;
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700132#endif // VK_USE_PLATFORM_XCB_KHR
133#ifdef VK_USE_PLATFORM_XLIB_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600134 ptr_instance->wsi_xlib_surface_enabled = false;
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700135#endif // VK_USE_PLATFORM_XLIB_KHR
136#ifdef VK_USE_PLATFORM_ANDROID_KHR
137 ptr_instance->wsi_android_surface_enabled = false;
138#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600139
Jon Ashburnf19916e2016-01-11 13:12:43 -0700140 for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700141 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
142 VK_KHR_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott954fa342015-10-30 15:28:23 -0600143 ptr_instance->wsi_surface_enabled = true;
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700144 continue;
Ian Elliott954fa342015-10-30 15:28:23 -0600145 }
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700146#ifdef VK_USE_PLATFORM_WIN32_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700147 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
148 VK_KHR_WIN32_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700149 ptr_instance->wsi_win32_surface_enabled = true;
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700150 continue;
Ian Elliott954fa342015-10-30 15:28:23 -0600151 }
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700152#endif // VK_USE_PLATFORM_WIN32_KHR
Ian Elliottaf7d6362015-10-30 17:45:05 -0600153#ifdef VK_USE_PLATFORM_MIR_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700154 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
155 VK_KHR_MIR_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott954fa342015-10-30 15:28:23 -0600156 ptr_instance->wsi_mir_surface_enabled = true;
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700157 continue;
Ian Elliott954fa342015-10-30 15:28:23 -0600158 }
Ian Elliottaf7d6362015-10-30 17:45:05 -0600159#endif // VK_USE_PLATFORM_MIR_KHR
160#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700161 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
162 VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott954fa342015-10-30 15:28:23 -0600163 ptr_instance->wsi_wayland_surface_enabled = true;
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700164 continue;
Ian Elliott954fa342015-10-30 15:28:23 -0600165 }
Ian Elliottaf7d6362015-10-30 17:45:05 -0600166#endif // VK_USE_PLATFORM_WAYLAND_KHR
167#ifdef VK_USE_PLATFORM_XCB_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700168 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
169 VK_KHR_XCB_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott954fa342015-10-30 15:28:23 -0600170 ptr_instance->wsi_xcb_surface_enabled = true;
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700171 continue;
Ian Elliott954fa342015-10-30 15:28:23 -0600172 }
Ian Elliottaf7d6362015-10-30 17:45:05 -0600173#endif // VK_USE_PLATFORM_XCB_KHR
174#ifdef VK_USE_PLATFORM_XLIB_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700175 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
176 VK_KHR_XLIB_SURFACE_EXTENSION_NAME) == 0) {
Ian Elliott954fa342015-10-30 15:28:23 -0600177 ptr_instance->wsi_xlib_surface_enabled = true;
Ian Elliottc2e9aee2015-11-19 11:58:08 -0700178 continue;
Ian Elliott954fa342015-10-30 15:28:23 -0600179 }
Ian Elliottaf7d6362015-10-30 17:45:05 -0600180#endif // VK_USE_PLATFORM_XLIB_KHR
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700181#ifdef VK_USE_PLATFORM_ANDROID_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -0700182 if (strcmp(pCreateInfo->ppEnabledExtensionNames[i],
183 VK_KHR_ANDROID_SURFACE_EXTENSION_NAME) == 0) {
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700184 ptr_instance->wsi_android_surface_enabled = true;
185 continue;
186 }
187#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott954fa342015-10-30 15:28:23 -0600188 }
189}
190
191/*
Ian Elliott2c05e222015-11-19 13:14:05 -0700192 * Functions for the VK_KHR_surface extension:
193 */
194
195/*
196 * This is the trampoline entrypoint
197 * for DestroySurfaceKHR
Ian Elliott2c05e222015-11-19 13:14:05 -0700198 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700199LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL
200vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface,
201 const VkAllocationCallbacks *pAllocator) {
Ian Elliottfb42cd72015-11-25 14:43:02 -0700202 const VkLayerInstanceDispatchTable *disp;
203 disp = loader_get_instance_dispatch(instance);
204 disp->DestroySurfaceKHR(instance, surface, pAllocator);
205}
206
207/*
208 * This is the instance chain terminator function
209 * for DestroySurfaceKHR
210 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700211VKAPI_ATTR void VKAPI_CALL
212loader_DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface,
213 const VkAllocationCallbacks *pAllocator) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700214 struct loader_instance *ptr_instance = loader_get_instance(instance);
215
Mark Young93ecb1d2016-01-13 13:47:16 -0700216 loader_heap_free(ptr_instance, (void *)surface);
Ian Elliott2c05e222015-11-19 13:14:05 -0700217}
218
219/*
Ian Elliott954fa342015-10-30 15:28:23 -0600220 * This is the trampoline entrypoint
221 * for GetPhysicalDeviceSurfaceSupportKHR
222 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700223LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
224vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice,
225 uint32_t queueFamilyIndex,
226 VkSurfaceKHR surface,
227 VkBool32 *pSupported) {
Ian Elliott954fa342015-10-30 15:28:23 -0600228 const VkLayerInstanceDispatchTable *disp;
229 disp = loader_get_instance_dispatch(physicalDevice);
230 VkResult res = disp->GetPhysicalDeviceSurfaceSupportKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700231 physicalDevice, queueFamilyIndex, surface, pSupported);
Ian Elliott954fa342015-10-30 15:28:23 -0600232 return res;
233}
234
235/*
236 * This is the instance chain terminator function
237 * for GetPhysicalDeviceSurfaceSupportKHR
238 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700239VKAPI_ATTR VkResult VKAPI_CALL
240loader_GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice,
241 uint32_t queueFamilyIndex,
242 VkSurfaceKHR surface,
243 VkBool32 *pSupported) {
244 struct loader_physical_device *phys_dev =
245 (struct loader_physical_device *)physicalDevice;
Ian Elliott954fa342015-10-30 15:28:23 -0600246 struct loader_icd *icd = phys_dev->this_icd;
247
Jon Ashburn23d36b12016-02-02 17:47:28 -0700248 assert(pSupported &&
249 "GetPhysicalDeviceSurfaceSupportKHR: Error, null pSupported");
Ian Elliott954fa342015-10-30 15:28:23 -0600250 *pSupported = false;
251
Jon Ashburn23d36b12016-02-02 17:47:28 -0700252 assert(icd->GetPhysicalDeviceSurfaceSupportKHR &&
253 "loader: null GetPhysicalDeviceSurfaceSupportKHR ICD pointer");
Ian Elliott954fa342015-10-30 15:28:23 -0600254
Jon Ashburn23d36b12016-02-02 17:47:28 -0700255 return icd->GetPhysicalDeviceSurfaceSupportKHR(
256 phys_dev->phys_dev, queueFamilyIndex, surface, pSupported);
Ian Elliott954fa342015-10-30 15:28:23 -0600257}
258
Ian Elliott486c5502015-11-19 16:05:09 -0700259/*
260 * This is the trampoline entrypoint
261 * for GetPhysicalDeviceSurfaceCapabilitiesKHR
262 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700263LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
264vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
265 VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
266 VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) {
Ian Elliott486c5502015-11-19 16:05:09 -0700267 const VkLayerInstanceDispatchTable *disp;
268 disp = loader_get_instance_dispatch(physicalDevice);
269 VkResult res = disp->GetPhysicalDeviceSurfaceCapabilitiesKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700270 physicalDevice, surface, pSurfaceCapabilities);
Ian Elliott486c5502015-11-19 16:05:09 -0700271 return res;
272}
273
274/*
275 * This is the instance chain terminator function
276 * for GetPhysicalDeviceSurfaceCapabilitiesKHR
277 */
278VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfaceCapabilitiesKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700279 VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
280 VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) {
281 struct loader_physical_device *phys_dev =
282 (struct loader_physical_device *)physicalDevice;
Ian Elliott486c5502015-11-19 16:05:09 -0700283 struct loader_icd *icd = phys_dev->this_icd;
284
Jon Ashburn23d36b12016-02-02 17:47:28 -0700285 assert(pSurfaceCapabilities && "GetPhysicalDeviceSurfaceCapabilitiesKHR: "
286 "Error, null pSurfaceCapabilities");
Ian Elliott486c5502015-11-19 16:05:09 -0700287
Jon Ashburn23d36b12016-02-02 17:47:28 -0700288 assert(icd->GetPhysicalDeviceSurfaceCapabilitiesKHR &&
289 "loader: null GetPhysicalDeviceSurfaceCapabilitiesKHR ICD pointer");
Ian Elliott486c5502015-11-19 16:05:09 -0700290
Jon Ashburn23d36b12016-02-02 17:47:28 -0700291 return icd->GetPhysicalDeviceSurfaceCapabilitiesKHR(
292 phys_dev->phys_dev, surface, pSurfaceCapabilities);
Ian Elliott486c5502015-11-19 16:05:09 -0700293}
294
295/*
296 * This is the trampoline entrypoint
297 * for GetPhysicalDeviceSurfaceFormatsKHR
298 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700299LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
300vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice,
301 VkSurfaceKHR surface,
302 uint32_t *pSurfaceFormatCount,
303 VkSurfaceFormatKHR *pSurfaceFormats) {
Ian Elliott486c5502015-11-19 16:05:09 -0700304 const VkLayerInstanceDispatchTable *disp;
305 disp = loader_get_instance_dispatch(physicalDevice);
306 VkResult res = disp->GetPhysicalDeviceSurfaceFormatsKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700307 physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
Ian Elliott486c5502015-11-19 16:05:09 -0700308 return res;
309}
310
311/*
312 * This is the instance chain terminator function
313 * for GetPhysicalDeviceSurfaceFormatsKHR
314 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700315VKAPI_ATTR VkResult VKAPI_CALL
316loader_GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice,
317 VkSurfaceKHR surface,
318 uint32_t *pSurfaceFormatCount,
319 VkSurfaceFormatKHR *pSurfaceFormats) {
320 struct loader_physical_device *phys_dev =
321 (struct loader_physical_device *)physicalDevice;
Ian Elliott486c5502015-11-19 16:05:09 -0700322 struct loader_icd *icd = phys_dev->this_icd;
323
Jon Ashburn23d36b12016-02-02 17:47:28 -0700324 assert(
325 pSurfaceFormatCount &&
326 "GetPhysicalDeviceSurfaceFormatsKHR: Error, null pSurfaceFormatCount");
Ian Elliott486c5502015-11-19 16:05:09 -0700327
Jon Ashburn23d36b12016-02-02 17:47:28 -0700328 assert(icd->GetPhysicalDeviceSurfaceFormatsKHR &&
329 "loader: null GetPhysicalDeviceSurfaceFormatsKHR ICD pointer");
Ian Elliott486c5502015-11-19 16:05:09 -0700330
Jon Ashburn23d36b12016-02-02 17:47:28 -0700331 return icd->GetPhysicalDeviceSurfaceFormatsKHR(
332 phys_dev->phys_dev, surface, pSurfaceFormatCount, pSurfaceFormats);
Ian Elliott486c5502015-11-19 16:05:09 -0700333}
334
335/*
336 * This is the trampoline entrypoint
337 * for GetPhysicalDeviceSurfacePresentModesKHR
338 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700339LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
340vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice,
341 VkSurfaceKHR surface,
342 uint32_t *pPresentModeCount,
343 VkPresentModeKHR *pPresentModes) {
Ian Elliott486c5502015-11-19 16:05:09 -0700344 const VkLayerInstanceDispatchTable *disp;
345 disp = loader_get_instance_dispatch(physicalDevice);
346 VkResult res = disp->GetPhysicalDeviceSurfacePresentModesKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700347 physicalDevice, surface, pPresentModeCount, pPresentModes);
Ian Elliott486c5502015-11-19 16:05:09 -0700348 return res;
349}
350
351/*
352 * This is the instance chain terminator function
353 * for GetPhysicalDeviceSurfacePresentModesKHR
354 */
355VKAPI_ATTR VkResult VKAPI_CALL loader_GetPhysicalDeviceSurfacePresentModesKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700356 VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
357 uint32_t *pPresentModeCount, VkPresentModeKHR *pPresentModes) {
358 struct loader_physical_device *phys_dev =
359 (struct loader_physical_device *)physicalDevice;
Ian Elliott486c5502015-11-19 16:05:09 -0700360 struct loader_icd *icd = phys_dev->this_icd;
361
Jon Ashburn23d36b12016-02-02 17:47:28 -0700362 assert(pPresentModeCount && "GetPhysicalDeviceSurfacePresentModesKHR: "
363 "Error, null pPresentModeCount");
Ian Elliott486c5502015-11-19 16:05:09 -0700364
Jon Ashburn23d36b12016-02-02 17:47:28 -0700365 assert(icd->GetPhysicalDeviceSurfacePresentModesKHR &&
366 "loader: null GetPhysicalDeviceSurfacePresentModesKHR ICD pointer");
Ian Elliott486c5502015-11-19 16:05:09 -0700367
Jon Ashburn23d36b12016-02-02 17:47:28 -0700368 return icd->GetPhysicalDeviceSurfacePresentModesKHR(
369 phys_dev->phys_dev, surface, pPresentModeCount, pPresentModes);
Ian Elliott486c5502015-11-19 16:05:09 -0700370}
371
Ian Elliott2c05e222015-11-19 13:14:05 -0700372/*
373 * Functions for the VK_KHR_swapchain extension:
374 */
375
Ian Elliott934d0d52015-11-19 16:39:21 -0700376/*
377 * This is the trampoline entrypoint
378 * for CreateSwapchainKHR
379 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700380LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
381vkCreateSwapchainKHR(VkDevice device,
382 const VkSwapchainCreateInfoKHR *pCreateInfo,
383 const VkAllocationCallbacks *pAllocator,
384 VkSwapchainKHR *pSwapchain) {
Ian Elliott934d0d52015-11-19 16:39:21 -0700385 const VkLayerDispatchTable *disp;
386 disp = loader_get_dispatch(device);
Jon Ashburn23d36b12016-02-02 17:47:28 -0700387 VkResult res =
388 disp->CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
Ian Elliott934d0d52015-11-19 16:39:21 -0700389 return res;
390}
Ian Elliott2c05e222015-11-19 13:14:05 -0700391
Ian Elliott934d0d52015-11-19 16:39:21 -0700392/*
393 * This is the trampoline entrypoint
394 * for DestroySwapchainKHR
395 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700396LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL
397vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain,
398 const VkAllocationCallbacks *pAllocator) {
Ian Elliott934d0d52015-11-19 16:39:21 -0700399 const VkLayerDispatchTable *disp;
400 disp = loader_get_dispatch(device);
401 disp->DestroySwapchainKHR(device, swapchain, pAllocator);
402}
Ian Elliott2c05e222015-11-19 13:14:05 -0700403
Ian Elliott934d0d52015-11-19 16:39:21 -0700404/*
405 * This is the trampoline entrypoint
406 * for GetSwapchainImagesKHR
407 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700408LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
409vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain,
410 uint32_t *pSwapchainImageCount,
411 VkImage *pSwapchainImages) {
Ian Elliott934d0d52015-11-19 16:39:21 -0700412 const VkLayerDispatchTable *disp;
413 disp = loader_get_dispatch(device);
414 VkResult res = disp->GetSwapchainImagesKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700415 device, swapchain, pSwapchainImageCount, pSwapchainImages);
Ian Elliott934d0d52015-11-19 16:39:21 -0700416 return res;
417}
418
419/*
420 * This is the trampoline entrypoint
421 * for AcquireNextImageKHR
422 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700423LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
424vkAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain,
425 uint64_t timeout, VkSemaphore semaphore, VkFence fence,
426 uint32_t *pImageIndex) {
Ian Elliott934d0d52015-11-19 16:39:21 -0700427 const VkLayerDispatchTable *disp;
428 disp = loader_get_dispatch(device);
Jon Ashburn23d36b12016-02-02 17:47:28 -0700429 VkResult res = disp->AcquireNextImageKHR(device, swapchain, timeout,
430 semaphore, fence, pImageIndex);
Ian Elliott934d0d52015-11-19 16:39:21 -0700431 return res;
432}
433
434/*
435 * This is the trampoline entrypoint
436 * for QueuePresentKHR
437 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700438LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
439vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pPresentInfo) {
Ian Elliott934d0d52015-11-19 16:39:21 -0700440 const VkLayerDispatchTable *disp;
441 disp = loader_get_dispatch(queue);
442 VkResult res = disp->QueuePresentKHR(queue, pPresentInfo);
443 return res;
444}
Ian Elliott2c05e222015-11-19 13:14:05 -0700445
Ian Elliott2c05e222015-11-19 13:14:05 -0700446#ifdef VK_USE_PLATFORM_WIN32_KHR
447
448/*
449 * Functions for the VK_KHR_win32_surface extension:
450 */
451
452/*
453 * This is the trampoline entrypoint
454 * for CreateWin32SurfaceKHR
455 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700456LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
457vkCreateWin32SurfaceKHR(VkInstance instance,
458 const VkWin32SurfaceCreateInfoKHR *pCreateInfo,
459 const VkAllocationCallbacks *pAllocator,
460 VkSurfaceKHR *pSurface) {
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700461 const VkLayerInstanceDispatchTable *disp;
462 disp = loader_get_instance_dispatch(instance);
463 VkResult res;
464
Jon Ashburn23d36b12016-02-02 17:47:28 -0700465 res = disp->CreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator,
466 pSurface);
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700467 return res;
468}
469
470/*
471 * This is the instance chain terminator function
472 * for CreateWin32SurfaceKHR
473 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700474VKAPI_ATTR VkResult VKAPI_CALL
475loader_CreateWin32SurfaceKHR(VkInstance instance,
476 const VkWin32SurfaceCreateInfoKHR *pCreateInfo,
477 const VkAllocationCallbacks *pAllocator,
478 VkSurfaceKHR *pSurface) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700479 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott2c05e222015-11-19 13:14:05 -0700480 VkIcdSurfaceWin32 *pIcdSurface = NULL;
481
Jon Ashburn23d36b12016-02-02 17:47:28 -0700482 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceWin32),
Ian Elliottdb4300a2015-11-23 10:17:23 -0700483 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott2c05e222015-11-19 13:14:05 -0700484 if (pIcdSurface == NULL) {
485 return VK_ERROR_OUT_OF_HOST_MEMORY;
486 }
487
488 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_WIN32;
Ian Elliott6e7e6002015-12-10 17:28:50 -0700489 pIcdSurface->hinstance = pCreateInfo->hinstance;
490 pIcdSurface->hwnd = pCreateInfo->hwnd;
Ian Elliott2c05e222015-11-19 13:14:05 -0700491
Jon Ashburn23d36b12016-02-02 17:47:28 -0700492 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700493
494 return VK_SUCCESS;
495}
Ian Elliott919fa302015-11-24 15:39:10 -0700496
497/*
498 * This is the trampoline entrypoint
499 * for GetPhysicalDeviceWin32PresentationSupportKHR
500 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700501LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
502vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice,
503 uint32_t queueFamilyIndex) {
Ian Elliott919fa302015-11-24 15:39:10 -0700504 const VkLayerInstanceDispatchTable *disp;
505 disp = loader_get_instance_dispatch(physicalDevice);
506 VkBool32 res = disp->GetPhysicalDeviceWin32PresentationSupportKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700507 physicalDevice, queueFamilyIndex);
Ian Elliott919fa302015-11-24 15:39:10 -0700508 return res;
509}
510
Ian Elliott919fa302015-11-24 15:39:10 -0700511/*
512 * This is the instance chain terminator function
513 * for GetPhysicalDeviceWin32PresentationSupportKHR
514 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700515VKAPI_ATTR VkBool32 VKAPI_CALL
516loader_GetPhysicalDeviceWin32PresentationSupportKHR(
517 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex) {
518 struct loader_physical_device *phys_dev =
519 (struct loader_physical_device *)physicalDevice;
Ian Elliott919fa302015-11-24 15:39:10 -0700520 struct loader_icd *icd = phys_dev->this_icd;
521
Jon Ashburn23d36b12016-02-02 17:47:28 -0700522 assert(icd->GetPhysicalDeviceWin32PresentationSupportKHR &&
523 "loader: null GetPhysicalDeviceWin32PresentationSupportKHR ICD "
524 "pointer");
Ian Elliott919fa302015-11-24 15:39:10 -0700525
526 return icd->GetPhysicalDeviceWin32PresentationSupportKHR(phys_dev->phys_dev,
Jon Ashburn23d36b12016-02-02 17:47:28 -0700527 queueFamilyIndex);
Ian Elliott919fa302015-11-24 15:39:10 -0700528}
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700529#endif // VK_USE_PLATFORM_WIN32_KHR
Ian Elliott2c05e222015-11-19 13:14:05 -0700530
531#ifdef VK_USE_PLATFORM_MIR_KHR
532
533/*
534 * Functions for the VK_KHR_mir_surface extension:
535 */
536
537/*
538 * This is the trampoline entrypoint
539 * for CreateMirSurfaceKHR
540 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700541LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
542vkCreateMirSurfaceKHR(VkInstance instance,
543 const VkMirSurfaceCreateInfoKHR *pCreateInfo,
544 const VkAllocationCallbacks *pAllocator,
545 VkSurfaceKHR *pSurface) {
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700546 const VkLayerInstanceDispatchTable *disp;
547 disp = loader_get_instance_dispatch(instance);
548 VkResult res;
549
Jon Ashburn23d36b12016-02-02 17:47:28 -0700550 res =
551 disp->CreateMirSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700552 return res;
553}
554
555/*
556 * This is the instance chain terminator function
557 * for CreateMirSurfaceKHR
558 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700559VKAPI_ATTR VkResult VKAPI_CALL
560loader_CreateMirSurfaceKHR(VkInstance instance,
561 const VkMirSurfaceCreateInfoKHR *pCreateInfo,
562 const VkAllocationCallbacks *pAllocator,
563 VkSurfaceKHR *pSurface) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700564 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott2c05e222015-11-19 13:14:05 -0700565 VkIcdSurfaceMir *pIcdSurface = NULL;
566
Jon Ashburn23d36b12016-02-02 17:47:28 -0700567 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceMir),
Ian Elliottdb4300a2015-11-23 10:17:23 -0700568 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott2c05e222015-11-19 13:14:05 -0700569 if (pIcdSurface == NULL) {
570 return VK_ERROR_OUT_OF_HOST_MEMORY;
571 }
572
573 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_MIR;
Ian Elliott6e7e6002015-12-10 17:28:50 -0700574 pIcdSurface->connection = pCreateInfo->connection;
575 pIcdSurface->mirSurface = pCreateInfo->mirSurface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700576
Jon Ashburn23d36b12016-02-02 17:47:28 -0700577 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700578
579 return VK_SUCCESS;
580}
Ian Elliott919fa302015-11-24 15:39:10 -0700581
582/*
583 * This is the trampoline entrypoint
584 * for GetPhysicalDeviceMirPresentationSupportKHR
585 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700586LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
587vkGetPhysicalDeviceMirPresentationSupportKHR(VkPhysicalDevice physicalDevice,
588 uint32_t queueFamilyIndex,
589 MirConnection *connection) {
Ian Elliott919fa302015-11-24 15:39:10 -0700590 const VkLayerInstanceDispatchTable *disp;
591 disp = loader_get_instance_dispatch(physicalDevice);
592 VkBool32 res = disp->GetPhysicalDeviceMirPresentationSupportKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700593 physicalDevice, queueFamilyIndex, connection);
Ian Elliott919fa302015-11-24 15:39:10 -0700594 return res;
595}
596
Ian Elliott919fa302015-11-24 15:39:10 -0700597/*
598 * This is the instance chain terminator function
599 * for GetPhysicalDeviceMirPresentationSupportKHR
600 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700601VKAPI_ATTR VkBool32 VKAPI_CALL
602loader_GetPhysicalDeviceMirPresentationSupportKHR(
603 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
604 MirConnection *connection) {
605 struct loader_physical_device *phys_dev =
606 (struct loader_physical_device *)physicalDevice;
Ian Elliott919fa302015-11-24 15:39:10 -0700607 struct loader_icd *icd = phys_dev->this_icd;
608
Jon Ashburn23d36b12016-02-02 17:47:28 -0700609 assert(
610 icd->GetPhysicalDeviceMirPresentationSupportKHR &&
611 "loader: null GetPhysicalDeviceMirPresentationSupportKHR ICD pointer");
Ian Elliott919fa302015-11-24 15:39:10 -0700612
Jon Ashburn23d36b12016-02-02 17:47:28 -0700613 return icd->GetPhysicalDeviceMirPresentationSupportKHR(
614 phys_dev->phys_dev, queueFamilyIndex, connection);
Ian Elliott919fa302015-11-24 15:39:10 -0700615}
Ian Elliott2c05e222015-11-19 13:14:05 -0700616#endif // VK_USE_PLATFORM_MIR_KHR
617
618#ifdef VK_USE_PLATFORM_WAYLAND_KHR
619
620/*
621 * Functions for the VK_KHR_wayland_surface extension:
622 */
623
624/*
625 * This is the trampoline entrypoint
626 * for CreateWaylandSurfaceKHR
627 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700628LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
629vkCreateWaylandSurfaceKHR(VkInstance instance,
630 const VkMirSurfaceCreateInfoKHR *pCreateInfo,
631 const VkAllocationCallbacks *pAllocator,
632 VkSurfaceKHR *pSurface) {
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700633 const VkLayerInstanceDispatchTable *disp;
634 disp = loader_get_instance_dispatch(instance);
635 VkResult res;
636
Jon Ashburn23d36b12016-02-02 17:47:28 -0700637 res = disp->CreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator,
638 pSurface);
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700639 return res;
640}
641
642/*
643 * This is the instance chain terminator function
644 * for CreateXlibSurfaceKHR
645 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700646VKAPI_ATTR VkResult VKAPI_CALL
647loader_CreateWaylandSurfaceKHR(VkInstance instance,
648 const VkMirSurfaceCreateInfoKHR *pCreateInfo,
649 const VkAllocationCallbacks *pAllocator,
650 VkSurfaceKHR *pSurface) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700651 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott2c05e222015-11-19 13:14:05 -0700652 VkIcdSurfaceWayland *pIcdSurface = NULL;
653
Jon Ashburn23d36b12016-02-02 17:47:28 -0700654 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceWayland),
Ian Elliottdb4300a2015-11-23 10:17:23 -0700655 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott2c05e222015-11-19 13:14:05 -0700656 if (pIcdSurface == NULL) {
657 return VK_ERROR_OUT_OF_HOST_MEMORY;
658 }
659
660 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_WAYLAND;
Ian Elliott6e7e6002015-12-10 17:28:50 -0700661 pIcdSurface->display = pCreateInfo->display;
662 pIcdSurface->surface = pCreateInfo->surface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700663
Jon Ashburn23d36b12016-02-02 17:47:28 -0700664 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700665
666 return VK_SUCCESS;
667}
Ian Elliott919fa302015-11-24 15:39:10 -0700668
669/*
670 * This is the trampoline entrypoint
671 * for GetPhysicalDeviceWaylandPresentationSupportKHR
672 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700673LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
674vkGetPhysicalDeviceWaylandPresentationSupportKHR(
675 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
676 struct wl_display *display) {
Ian Elliott919fa302015-11-24 15:39:10 -0700677 const VkLayerInstanceDispatchTable *disp;
678 disp = loader_get_instance_dispatch(physicalDevice);
679 VkBool32 res = disp->GetPhysicalDeviceWaylandPresentationSupportKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700680 physicalDevice, queueFamilyIndex, display);
Ian Elliott919fa302015-11-24 15:39:10 -0700681 return res;
682}
683
Ian Elliott919fa302015-11-24 15:39:10 -0700684/*
685 * This is the instance chain terminator function
686 * for GetPhysicalDeviceWaylandPresentationSupportKHR
687 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700688VKAPI_ATTR VkBool32 VKAPI_CALL
689loader_GetPhysicalDeviceWaylandPresentationSupportKHR(
690 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
691 struct wl_display *display) {
692 struct loader_physical_device *phys_dev =
693 (struct loader_physical_device *)physicalDevice;
Ian Elliott919fa302015-11-24 15:39:10 -0700694 struct loader_icd *icd = phys_dev->this_icd;
695
Jon Ashburn23d36b12016-02-02 17:47:28 -0700696 assert(icd->GetPhysicalDeviceWaylandPresentationSupportKHR &&
697 "loader: null GetPhysicalDeviceWaylandPresentationSupportKHR ICD "
698 "pointer");
Ian Elliott919fa302015-11-24 15:39:10 -0700699
Jon Ashburn23d36b12016-02-02 17:47:28 -0700700 return icd->GetPhysicalDeviceWaylandPresentationSupportKHR(
701 phys_dev->phys_dev, queueFamilyIndex, display);
Ian Elliott919fa302015-11-24 15:39:10 -0700702}
Ian Elliott2c05e222015-11-19 13:14:05 -0700703#endif // VK_USE_PLATFORM_WAYLAND_KHR
704
705#ifdef VK_USE_PLATFORM_XCB_KHR
706
707/*
708 * Functions for the VK_KHR_xcb_surface extension:
709 */
710
711/*
712 * This is the trampoline entrypoint
713 * for CreateXcbSurfaceKHR
714 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700715LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
716vkCreateXcbSurfaceKHR(VkInstance instance,
717 const VkXcbSurfaceCreateInfoKHR *pCreateInfo,
718 const VkAllocationCallbacks *pAllocator,
719 VkSurfaceKHR *pSurface) {
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700720 const VkLayerInstanceDispatchTable *disp;
721 disp = loader_get_instance_dispatch(instance);
722 VkResult res;
723
Jon Ashburn23d36b12016-02-02 17:47:28 -0700724 res =
725 disp->CreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700726 return res;
727}
728
729/*
730 * This is the instance chain terminator function
731 * for CreateXcbSurfaceKHR
732 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700733VKAPI_ATTR VkResult VKAPI_CALL
734loader_CreateXcbSurfaceKHR(VkInstance instance,
735 const VkXcbSurfaceCreateInfoKHR *pCreateInfo,
736 const VkAllocationCallbacks *pAllocator,
737 VkSurfaceKHR *pSurface) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700738 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott2c05e222015-11-19 13:14:05 -0700739 VkIcdSurfaceXcb *pIcdSurface = NULL;
740
Jon Ashburn23d36b12016-02-02 17:47:28 -0700741 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceXcb),
Ian Elliottdb4300a2015-11-23 10:17:23 -0700742 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott2c05e222015-11-19 13:14:05 -0700743 if (pIcdSurface == NULL) {
744 return VK_ERROR_OUT_OF_HOST_MEMORY;
745 }
746
747 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_XCB;
Ian Elliott6e7e6002015-12-10 17:28:50 -0700748 pIcdSurface->connection = pCreateInfo->connection;
749 pIcdSurface->window = pCreateInfo->window;
Ian Elliott2c05e222015-11-19 13:14:05 -0700750
Jon Ashburn23d36b12016-02-02 17:47:28 -0700751 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700752
753 return VK_SUCCESS;
754}
Ian Elliott919fa302015-11-24 15:39:10 -0700755
756/*
757 * This is the trampoline entrypoint
758 * for GetPhysicalDeviceXcbPresentationSupportKHR
759 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700760LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
761vkGetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice,
762 uint32_t queueFamilyIndex,
763 xcb_connection_t *connection,
764 xcb_visualid_t visual_id) {
Ian Elliott919fa302015-11-24 15:39:10 -0700765 const VkLayerInstanceDispatchTable *disp;
766 disp = loader_get_instance_dispatch(physicalDevice);
767 VkBool32 res = disp->GetPhysicalDeviceXcbPresentationSupportKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700768 physicalDevice, queueFamilyIndex, connection, visual_id);
Ian Elliott919fa302015-11-24 15:39:10 -0700769 return res;
770}
771
Ian Elliott919fa302015-11-24 15:39:10 -0700772/*
773 * This is the instance chain terminator function
774 * for GetPhysicalDeviceXcbPresentationSupportKHR
775 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700776VKAPI_ATTR VkBool32 VKAPI_CALL
777loader_GetPhysicalDeviceXcbPresentationSupportKHR(
778 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex,
779 xcb_connection_t *connection, xcb_visualid_t visual_id) {
780 struct loader_physical_device *phys_dev =
781 (struct loader_physical_device *)physicalDevice;
Ian Elliott919fa302015-11-24 15:39:10 -0700782 struct loader_icd *icd = phys_dev->this_icd;
783
Jon Ashburn23d36b12016-02-02 17:47:28 -0700784 assert(
785 icd->GetPhysicalDeviceXcbPresentationSupportKHR &&
786 "loader: null GetPhysicalDeviceXcbPresentationSupportKHR ICD pointer");
Ian Elliott919fa302015-11-24 15:39:10 -0700787
Jon Ashburn23d36b12016-02-02 17:47:28 -0700788 return icd->GetPhysicalDeviceXcbPresentationSupportKHR(
789 phys_dev->phys_dev, queueFamilyIndex, connection, visual_id);
Ian Elliott919fa302015-11-24 15:39:10 -0700790}
Ian Elliott2c05e222015-11-19 13:14:05 -0700791#endif // VK_USE_PLATFORM_XCB_KHR
792
793#ifdef VK_USE_PLATFORM_XLIB_KHR
794
795/*
796 * Functions for the VK_KHR_xlib_surface extension:
797 */
798
799/*
800 * This is the trampoline entrypoint
801 * for CreateXlibSurfaceKHR
802 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700803LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
804vkCreateXlibSurfaceKHR(VkInstance instance,
805 const VkXlibSurfaceCreateInfoKHR *pCreateInfo,
806 const VkAllocationCallbacks *pAllocator,
807 VkSurfaceKHR *pSurface) {
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700808 const VkLayerInstanceDispatchTable *disp;
809 disp = loader_get_instance_dispatch(instance);
810 VkResult res;
811
Jon Ashburn23d36b12016-02-02 17:47:28 -0700812 res =
813 disp->CreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
Jon Ashburnf72a04b2015-11-25 17:55:49 -0700814 return res;
815}
816
817/*
818 * This is the instance chain terminator function
819 * for CreateXlibSurfaceKHR
820 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700821VKAPI_ATTR VkResult VKAPI_CALL
822loader_CreateXlibSurfaceKHR(VkInstance instance,
823 const VkXlibSurfaceCreateInfoKHR *pCreateInfo,
824 const VkAllocationCallbacks *pAllocator,
825 VkSurfaceKHR *pSurface) {
Ian Elliottdb4300a2015-11-23 10:17:23 -0700826 struct loader_instance *ptr_instance = loader_get_instance(instance);
Ian Elliott2c05e222015-11-19 13:14:05 -0700827 VkIcdSurfaceXlib *pIcdSurface = NULL;
828
Jon Ashburn23d36b12016-02-02 17:47:28 -0700829 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceXlib),
Ian Elliottdb4300a2015-11-23 10:17:23 -0700830 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
Ian Elliott2c05e222015-11-19 13:14:05 -0700831 if (pIcdSurface == NULL) {
832 return VK_ERROR_OUT_OF_HOST_MEMORY;
833 }
834
835 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_XLIB;
Ian Elliott6e7e6002015-12-10 17:28:50 -0700836 pIcdSurface->dpy = pCreateInfo->dpy;
837 pIcdSurface->window = pCreateInfo->window;
Ian Elliott2c05e222015-11-19 13:14:05 -0700838
Jon Ashburn23d36b12016-02-02 17:47:28 -0700839 *pSurface = (VkSurfaceKHR)pIcdSurface;
Ian Elliott2c05e222015-11-19 13:14:05 -0700840
841 return VK_SUCCESS;
842}
Ian Elliott919fa302015-11-24 15:39:10 -0700843
844/*
845 * This is the trampoline entrypoint
846 * for GetPhysicalDeviceXlibPresentationSupportKHR
847 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700848LOADER_EXPORT VKAPI_ATTR VkBool32 VKAPI_CALL
849vkGetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice,
850 uint32_t queueFamilyIndex,
851 Display *dpy, VisualID visualID) {
Ian Elliott919fa302015-11-24 15:39:10 -0700852 const VkLayerInstanceDispatchTable *disp;
853 disp = loader_get_instance_dispatch(physicalDevice);
854 VkBool32 res = disp->GetPhysicalDeviceXlibPresentationSupportKHR(
Jon Ashburn23d36b12016-02-02 17:47:28 -0700855 physicalDevice, queueFamilyIndex, dpy, visualID);
Ian Elliott919fa302015-11-24 15:39:10 -0700856 return res;
857}
858
Ian Elliott919fa302015-11-24 15:39:10 -0700859/*
860 * This is the instance chain terminator function
861 * for GetPhysicalDeviceXlibPresentationSupportKHR
862 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700863VKAPI_ATTR VkBool32 VKAPI_CALL
864loader_GetPhysicalDeviceXlibPresentationSupportKHR(
865 VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display *dpy,
866 VisualID visualID) {
867 struct loader_physical_device *phys_dev =
868 (struct loader_physical_device *)physicalDevice;
Ian Elliott919fa302015-11-24 15:39:10 -0700869 struct loader_icd *icd = phys_dev->this_icd;
870
Jon Ashburn23d36b12016-02-02 17:47:28 -0700871 assert(
872 icd->GetPhysicalDeviceXlibPresentationSupportKHR &&
873 "loader: null GetPhysicalDeviceXlibPresentationSupportKHR ICD pointer");
Ian Elliott919fa302015-11-24 15:39:10 -0700874
Jon Ashburn23d36b12016-02-02 17:47:28 -0700875 return icd->GetPhysicalDeviceXlibPresentationSupportKHR(
876 phys_dev->phys_dev, queueFamilyIndex, dpy, visualID);
Ian Elliott919fa302015-11-24 15:39:10 -0700877}
Ian Elliott2c05e222015-11-19 13:14:05 -0700878#endif // VK_USE_PLATFORM_XLIB_KHR
879
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700880#ifdef VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott2c05e222015-11-19 13:14:05 -0700881
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700882/*
883 * Functions for the VK_KHR_android_surface extension:
884 */
885
886/*
887 * This is the trampoline entrypoint
888 * for CreateAndroidSurfaceKHR
889 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700890LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
891vkCreateAndroidSurfaceKHR(VkInstance instance, ANativeWindow *window,
892 const VkAllocationCallbacks *pAllocator,
893 VkSurfaceKHR *pSurface) {
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700894 const VkLayerInstanceDispatchTable *disp;
895 disp = loader_get_instance_dispatch(instance);
896 VkResult res;
897
898 res = disp->CreateAndroidSurfaceKHR(instance, window, pAllocator, pSurface);
899 return res;
900}
901
902/*
903 * This is the instance chain terminator function
904 * for CreateAndroidSurfaceKHR
905 */
Jon Ashburn23d36b12016-02-02 17:47:28 -0700906VKAPI_ATTR VkResult VKAPI_CALL
907loader_CreateAndroidSurfaceKHR(VkInstance instance, Window window,
908 const VkAllocationCallbacks *pAllocator,
909 VkSurfaceKHR *pSurface) {
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700910 struct loader_instance *ptr_instance = loader_get_instance(instance);
911 VkIcdSurfaceAndroid *pIcdSurface = NULL;
912
Jon Ashburn23d36b12016-02-02 17:47:28 -0700913 pIcdSurface = loader_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceAndroid),
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700914 VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
915 if (pIcdSurface == NULL) {
916 return VK_ERROR_OUT_OF_HOST_MEMORY;
917 }
918
919 pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_ANDROID;
920 pIcdSurface->dpy = dpy;
921 pIcdSurface->window = window;
922
Jon Ashburn23d36b12016-02-02 17:47:28 -0700923 *pSurface = (VkSurfaceKHR)pIcdSurface;
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -0700924
925 return VK_SUCCESS;
926}
927
928#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott2c05e222015-11-19 13:14:05 -0700929
Ian Elliott954fa342015-10-30 15:28:23 -0600930bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance,
Jon Ashburn23d36b12016-02-02 17:47:28 -0700931 const char *name, void **addr) {
Ian Elliott954fa342015-10-30 15:28:23 -0600932 *addr = NULL;
933
Ian Elliott934d0d52015-11-19 16:39:21 -0700934 /*
935 * Functions for the VK_KHR_surface extension:
936 */
Ian Elliott2c05e222015-11-19 13:14:05 -0700937 if (!strcmp("vkDestroySurfaceKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700938 *addr = ptr_instance->wsi_surface_enabled ? (void *)vkDestroySurfaceKHR
939 : NULL;
Ian Elliott2c05e222015-11-19 13:14:05 -0700940 return true;
941 }
Ian Elliott954fa342015-10-30 15:28:23 -0600942 if (!strcmp("vkGetPhysicalDeviceSurfaceSupportKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700943 *addr = ptr_instance->wsi_surface_enabled
944 ? (void *)vkGetPhysicalDeviceSurfaceSupportKHR
945 : NULL;
Ian Elliott954fa342015-10-30 15:28:23 -0600946 return true;
947 }
Ian Elliott486c5502015-11-19 16:05:09 -0700948 if (!strcmp("vkGetPhysicalDeviceSurfaceCapabilitiesKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700949 *addr = ptr_instance->wsi_surface_enabled
950 ? (void *)vkGetPhysicalDeviceSurfaceCapabilitiesKHR
951 : NULL;
Ian Elliott486c5502015-11-19 16:05:09 -0700952 return true;
953 }
954 if (!strcmp("vkGetPhysicalDeviceSurfaceFormatsKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700955 *addr = ptr_instance->wsi_surface_enabled
956 ? (void *)vkGetPhysicalDeviceSurfaceFormatsKHR
957 : NULL;
Ian Elliott486c5502015-11-19 16:05:09 -0700958 return true;
959 }
960 if (!strcmp("vkGetPhysicalDeviceSurfacePresentModesKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700961 *addr = ptr_instance->wsi_surface_enabled
962 ? (void *)vkGetPhysicalDeviceSurfacePresentModesKHR
963 : NULL;
Ian Elliott486c5502015-11-19 16:05:09 -0700964 return true;
965 }
Ian Elliott934d0d52015-11-19 16:39:21 -0700966
967 /*
968 * Functions for the VK_KHR_swapchain extension:
969 *
970 * Note: This is a device extension, and its functions are statically
971 * exported from the loader. Per Khronos decisions, the the loader's GIPA
972 * function will return the trampoline function for such device-extension
973 * functions, regardless of whether the extension has been enabled.
974 */
975 if (!strcmp("vkCreateSwapchainKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700976 *addr = (void *)vkCreateSwapchainKHR;
Ian Elliott934d0d52015-11-19 16:39:21 -0700977 return true;
978 }
979 if (!strcmp("vkDestroySwapchainKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700980 *addr = (void *)vkDestroySwapchainKHR;
Ian Elliott934d0d52015-11-19 16:39:21 -0700981 return true;
982 }
983 if (!strcmp("vkGetSwapchainImagesKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700984 *addr = (void *)vkGetSwapchainImagesKHR;
Ian Elliott934d0d52015-11-19 16:39:21 -0700985 return true;
986 }
987 if (!strcmp("vkAcquireNextImageKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700988 *addr = (void *)vkAcquireNextImageKHR;
Ian Elliott934d0d52015-11-19 16:39:21 -0700989 return true;
990 }
991 if (!strcmp("vkQueuePresentKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -0700992 *addr = (void *)vkQueuePresentKHR;
Ian Elliott934d0d52015-11-19 16:39:21 -0700993 return true;
994 }
995
Ian Elliott2c05e222015-11-19 13:14:05 -0700996#ifdef VK_USE_PLATFORM_WIN32_KHR
Ian Elliott934d0d52015-11-19 16:39:21 -0700997 /*
998 * Functions for the VK_KHR_win32_surface extension:
999 */
Ian Elliott2c05e222015-11-19 13:14:05 -07001000 if (!strcmp("vkCreateWin32SurfaceKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -07001001 *addr = ptr_instance->wsi_win32_surface_enabled
1002 ? (void *)vkCreateWin32SurfaceKHR
1003 : NULL;
Ian Elliott2c05e222015-11-19 13:14:05 -07001004 return true;
1005 }
Ian Elliott919fa302015-11-24 15:39:10 -07001006 if (!strcmp("vkGetPhysicalDeviceWin32PresentationSupportKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -07001007 *addr = ptr_instance->wsi_win32_surface_enabled
1008 ? (void *)vkGetPhysicalDeviceWin32PresentationSupportKHR
1009 : NULL;
Ian Elliott919fa302015-11-24 15:39:10 -07001010 return true;
1011 }
Ian Elliott2c05e222015-11-19 13:14:05 -07001012#endif // VK_USE_PLATFORM_WIN32_KHR
Ian Elliott2c05e222015-11-19 13:14:05 -07001013#ifdef VK_USE_PLATFORM_MIR_KHR
Ian Elliott934d0d52015-11-19 16:39:21 -07001014 /*
1015 * Functions for the VK_KHR_mir_surface extension:
1016 */
Ian Elliott2c05e222015-11-19 13:14:05 -07001017 if (!strcmp("vkCreateMirSurfaceKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -07001018 *addr = ptr_instance->wsi_mir_surface_enabled
1019 ? (void *)vkCreateMirSurfaceKHR
1020 : NULL;
Ian Elliott2c05e222015-11-19 13:14:05 -07001021 return true;
1022 }
Ian Elliott919fa302015-11-24 15:39:10 -07001023 if (!strcmp("vkGetPhysicalDeviceMirPresentationSupportKHR", name)) {
Jon Ashburn23d36b12016-02-02 17:47:28 -07001024 *addr = ptr_instance->wsi_mir_surface_enabled
1025 ? (void *)vkGetPhysicalDeviceMirPresentationSupportKHR
1026 : NULL;
Ian Elliott919fa302015-11-24 15:39:10 -07001027 return true;
Ian Elliott2c05e222015-11-19 13:14:05 -07001028#endif // VK_USE_PLATFORM_MIR_KHR
1029#ifdef VK_USE_PLATFORM_WAYLAND_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -07001030 /*
1031 * Functions for the VK_KHR_wayland_surface extension:
1032 */
1033 if (!strcmp("vkCreateWaylandSurfaceKHR", name)) {
1034 *addr = ptr_instance->wsi_wayland_surface_enabled
1035 ? (void *)vkCreateWaylandSurfaceKHR
1036 : NULL;
1037 return true;
1038 }
1039 if (!strcmp("vkGetPhysicalDeviceWaylandPresentationSupportKHR", name)) {
1040 *addr =
1041 ptr_instance->wsi_wayland_surface_enabled
1042 ? (void *)vkGetPhysicalDeviceWaylandPresentationSupportKHR
1043 : NULL;
1044 return true;
Ian Elliott2c05e222015-11-19 13:14:05 -07001045#endif // VK_USE_PLATFORM_WAYLAND_KHR
1046#ifdef VK_USE_PLATFORM_XCB_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -07001047 /*
1048 * Functions for the VK_KHR_xcb_surface extension:
1049 */
1050 if (!strcmp("vkCreateXcbSurfaceKHR", name)) {
1051 *addr = ptr_instance->wsi_xcb_surface_enabled
1052 ? (void *)vkCreateXcbSurfaceKHR
1053 : NULL;
1054 return true;
1055 }
1056 if (!strcmp("vkGetPhysicalDeviceXcbPresentationSupportKHR", name)) {
1057 *addr =
1058 ptr_instance->wsi_xcb_surface_enabled
1059 ? (void *)vkGetPhysicalDeviceXcbPresentationSupportKHR
1060 : NULL;
1061 return true;
1062 }
Ian Elliott2c05e222015-11-19 13:14:05 -07001063#endif // VK_USE_PLATFORM_XCB_KHR
1064#ifdef VK_USE_PLATFORM_XLIB_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -07001065 /*
1066 * Functions for the VK_KHR_xlib_surface extension:
1067 */
1068 if (!strcmp("vkCreateXlibSurfaceKHR", name)) {
1069 *addr = ptr_instance->wsi_xlib_surface_enabled
1070 ? (void *)vkCreateXlibSurfaceKHR
1071 : NULL;
1072 return true;
1073 }
1074 if (!strcmp("vkGetPhysicalDeviceXlibPresentationSupportKHR",
1075 name)) {
1076 *addr =
1077 ptr_instance->wsi_xlib_surface_enabled
1078 ? (void *)vkGetPhysicalDeviceXlibPresentationSupportKHR
1079 : NULL;
1080 return true;
1081 }
Ian Elliott2c05e222015-11-19 13:14:05 -07001082#endif // VK_USE_PLATFORM_XLIB_KHR
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -07001083#ifdef VK_USE_PLATFORM_ANDROID_KHR
Jon Ashburn23d36b12016-02-02 17:47:28 -07001084 /*
1085 * Functions for the VK_KHR_android_surface extension:
1086 */
1087 if (!strcmp("vkCreateAndroidSurfaceKHR", name)) {
1088 *addr = ptr_instance->wsi_xlib_surface_enabled
1089 ? (void *)vkCreateAndroidSurfaceKHR
1090 : NULL;
1091 return true;
1092 }
Mark Lobodzinskia8a5f852015-12-10 16:25:21 -07001093#endif // VK_USE_PLATFORM_ANDROID_KHR
Ian Elliott2c05e222015-11-19 13:14:05 -07001094
Jon Ashburn23d36b12016-02-02 17:47:28 -07001095 return false;
1096 }