1 // *** THIS FILE IS GENERATED - DO NOT EDIT ***
2 // See loader_extension_generator.py for modifications
3 
4 /*
5  * Copyright (c) 2015-2017 The Khronos Group Inc.
6  * Copyright (c) 2015-2017 Valve Corporation
7  * Copyright (c) 2015-2017 LunarG, Inc.
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *     http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  * Author: Mark Lobodzinski <mark@lunarg.com>
22  * Author: Mark Young <marky@lunarg.com>
23  */
24 
25 #pragma once
26 
27 // Structures defined externally, but used here
28 struct loader_instance;
29 struct loader_device;
30 struct loader_icd_term;
31 struct loader_dev_dispatch_table;
32 
33 // Device extension error function
34 VKAPI_ATTR VkResult VKAPI_CALL vkDevExtError(VkDevice dev);
35 
36 // Extension interception for vkGetInstanceProcAddr function, so we can return
37 // the appropriate information for any instance extensions we know about.
38 bool extension_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr);
39 
40 // Extension interception for vkCreateInstance function, so we can properly
41 // detect and enable any instance extension information for extensions we know
42 // about.
43 void extensions_create_instance(struct loader_instance *ptr_instance, const VkInstanceCreateInfo *pCreateInfo);
44 
45 // Extension interception for vkGetDeviceProcAddr function, so we can return
46 // an appropriate terminator if this is one of those few device commands requiring
47 // a terminator.
48 PFN_vkVoidFunction get_extension_device_proc_terminator(struct loader_device *dev, const char *pName);
49 
50 // Dispatch table properly filled in with appropriate terminators for the
51 // supported extensions.
52 extern const VkLayerInstanceDispatchTable instance_disp;
53 
54 // Array of extension strings for instance extensions we support.
55 extern const char *const LOADER_INSTANCE_EXTENSIONS[];
56 
57 VKAPI_ATTR bool VKAPI_CALL loader_icd_init_entries(struct loader_icd_term *icd_term, VkInstance inst,
58                                                    const PFN_vkGetInstanceProcAddr fp_gipa);
59 
60 // Init Device function pointer dispatch table with core commands
61 VKAPI_ATTR void VKAPI_CALL loader_init_device_dispatch_table(struct loader_dev_dispatch_table *dev_table, PFN_vkGetDeviceProcAddr gpa,
62                                                              VkDevice dev);
63 
64 // Init Device function pointer dispatch table with extension commands
65 VKAPI_ATTR void VKAPI_CALL loader_init_device_extension_dispatch_table(struct loader_dev_dispatch_table *dev_table,
66                                                                        PFN_vkGetInstanceProcAddr gipa,
67                                                                        PFN_vkGetDeviceProcAddr gdpa,
68                                                                        VkInstance inst,
69                                                                        VkDevice dev);
70 
71 // Init Instance function pointer dispatch table with core commands
72 VKAPI_ATTR void VKAPI_CALL loader_init_instance_core_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa,
73                                                                     VkInstance inst);
74 
75 // Init Instance function pointer dispatch table with core commands
76 VKAPI_ATTR void VKAPI_CALL loader_init_instance_extension_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa,
77                                                                          VkInstance inst);
78 
79 // Device command lookup function
80 VKAPI_ATTR void* VKAPI_CALL loader_lookup_device_dispatch_table(const VkLayerDispatchTable *table, const char *name);
81 
82 // Instance command lookup function
83 VKAPI_ATTR void* VKAPI_CALL loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, const char *name,
84                                                                   bool *found_name);
85 
86 VKAPI_ATTR bool VKAPI_CALL loader_icd_init_entries(struct loader_icd_term *icd_term, VkInstance inst,
87                                                    const PFN_vkGetInstanceProcAddr fp_gipa);
88 
89 // Loader core instance terminators
90 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateInstance(
91     const VkInstanceCreateInfo*                 pCreateInfo,
92     const VkAllocationCallbacks*                pAllocator,
93     VkInstance*                                 pInstance);
94 VKAPI_ATTR void VKAPI_CALL terminator_DestroyInstance(
95     VkInstance                                  instance,
96     const VkAllocationCallbacks*                pAllocator);
97 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumeratePhysicalDevices(
98     VkInstance                                  instance,
99     uint32_t*                                   pPhysicalDeviceCount,
100     VkPhysicalDevice*                           pPhysicalDevices);
101 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFeatures(
102     VkPhysicalDevice                            physicalDevice,
103     VkPhysicalDeviceFeatures*                   pFeatures);
104 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFormatProperties(
105     VkPhysicalDevice                            physicalDevice,
106     VkFormat                                    format,
107     VkFormatProperties*                         pFormatProperties);
108 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceImageFormatProperties(
109     VkPhysicalDevice                            physicalDevice,
110     VkFormat                                    format,
111     VkImageType                                 type,
112     VkImageTiling                               tiling,
113     VkImageUsageFlags                           usage,
114     VkImageCreateFlags                          flags,
115     VkImageFormatProperties*                    pImageFormatProperties);
116 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceProperties(
117     VkPhysicalDevice                            physicalDevice,
118     VkPhysicalDeviceProperties*                 pProperties);
119 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyProperties(
120     VkPhysicalDevice                            physicalDevice,
121     uint32_t*                                   pQueueFamilyPropertyCount,
122     VkQueueFamilyProperties*                    pQueueFamilyProperties);
123 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceMemoryProperties(
124     VkPhysicalDevice                            physicalDevice,
125     VkPhysicalDeviceMemoryProperties*           pMemoryProperties);
126 VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL terminator_GetInstanceProcAddr(
127     VkInstance                                  instance,
128     const char*                                 pName);
129 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDevice(
130     VkPhysicalDevice                            physicalDevice,
131     const VkDeviceCreateInfo*                   pCreateInfo,
132     const VkAllocationCallbacks*                pAllocator,
133     VkDevice*                                   pDevice);
134 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceExtensionProperties(
135     const VkEnumerateInstanceExtensionPropertiesChain* chain,
136     const char*                                 pLayerName,
137     uint32_t*                                   pPropertyCount,
138     VkExtensionProperties*                      pProperties);
139 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateDeviceExtensionProperties(
140     VkPhysicalDevice                            physicalDevice,
141     const char*                                 pLayerName,
142     uint32_t*                                   pPropertyCount,
143     VkExtensionProperties*                      pProperties);
144 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceLayerProperties(
145     const VkEnumerateInstanceLayerPropertiesChain* chain,
146     uint32_t*                                   pPropertyCount,
147     VkLayerProperties*                          pProperties);
148 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateDeviceLayerProperties(
149     VkPhysicalDevice                            physicalDevice,
150     uint32_t*                                   pPropertyCount,
151     VkLayerProperties*                          pProperties);
152 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceSparseImageFormatProperties(
153     VkPhysicalDevice                            physicalDevice,
154     VkFormat                                    format,
155     VkImageType                                 type,
156     VkSampleCountFlagBits                       samples,
157     VkImageUsageFlags                           usage,
158     VkImageTiling                               tiling,
159     uint32_t*                                   pPropertyCount,
160     VkSparseImageFormatProperties*              pProperties);
161 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceVersion(
162     const VkEnumerateInstanceVersionChain* chain,
163     uint32_t*                                   pApiVersion);
164 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumeratePhysicalDeviceGroups(
165     VkInstance                                  instance,
166     uint32_t*                                   pPhysicalDeviceGroupCount,
167     VkPhysicalDeviceGroupProperties*            pPhysicalDeviceGroupProperties);
168 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFeatures2(
169     VkPhysicalDevice                            physicalDevice,
170     VkPhysicalDeviceFeatures2*                  pFeatures);
171 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceProperties2(
172     VkPhysicalDevice                            physicalDevice,
173     VkPhysicalDeviceProperties2*                pProperties);
174 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFormatProperties2(
175     VkPhysicalDevice                            physicalDevice,
176     VkFormat                                    format,
177     VkFormatProperties2*                        pFormatProperties);
178 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceImageFormatProperties2(
179     VkPhysicalDevice                            physicalDevice,
180     const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
181     VkImageFormatProperties2*                   pImageFormatProperties);
182 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyProperties2(
183     VkPhysicalDevice                            physicalDevice,
184     uint32_t*                                   pQueueFamilyPropertyCount,
185     VkQueueFamilyProperties2*                   pQueueFamilyProperties);
186 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceMemoryProperties2(
187     VkPhysicalDevice                            physicalDevice,
188     VkPhysicalDeviceMemoryProperties2*          pMemoryProperties);
189 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceSparseImageFormatProperties2(
190     VkPhysicalDevice                            physicalDevice,
191     const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
192     uint32_t*                                   pPropertyCount,
193     VkSparseImageFormatProperties2*             pProperties);
194 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalBufferProperties(
195     VkPhysicalDevice                            physicalDevice,
196     const VkPhysicalDeviceExternalBufferInfo*   pExternalBufferInfo,
197     VkExternalBufferProperties*                 pExternalBufferProperties);
198 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalFenceProperties(
199     VkPhysicalDevice                            physicalDevice,
200     const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
201     VkExternalFenceProperties*                  pExternalFenceProperties);
202 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalSemaphoreProperties(
203     VkPhysicalDevice                            physicalDevice,
204     const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
205     VkExternalSemaphoreProperties*              pExternalSemaphoreProperties);
206 
207 // ICD function pointer dispatch table
208 struct loader_icd_term_dispatch {
209 
210     // ---- Core 1_0 commands
211     PFN_vkCreateInstance CreateInstance;
212     PFN_vkDestroyInstance DestroyInstance;
213     PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
214     PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures;
215     PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties;
216     PFN_vkGetPhysicalDeviceImageFormatProperties GetPhysicalDeviceImageFormatProperties;
217     PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
218     PFN_vkGetPhysicalDeviceQueueFamilyProperties GetPhysicalDeviceQueueFamilyProperties;
219     PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties;
220     PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
221     PFN_vkCreateDevice CreateDevice;
222     PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties;
223     PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
224     PFN_vkEnumerateInstanceLayerProperties EnumerateInstanceLayerProperties;
225     PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
226 
227     // ---- Core 1_1 commands
228     PFN_vkEnumerateInstanceVersion EnumerateInstanceVersion;
229     PFN_vkEnumeratePhysicalDeviceGroups EnumeratePhysicalDeviceGroups;
230     PFN_vkGetPhysicalDeviceFeatures2 GetPhysicalDeviceFeatures2;
231     PFN_vkGetPhysicalDeviceProperties2 GetPhysicalDeviceProperties2;
232     PFN_vkGetPhysicalDeviceFormatProperties2 GetPhysicalDeviceFormatProperties2;
233     PFN_vkGetPhysicalDeviceImageFormatProperties2 GetPhysicalDeviceImageFormatProperties2;
234     PFN_vkGetPhysicalDeviceQueueFamilyProperties2 GetPhysicalDeviceQueueFamilyProperties2;
235     PFN_vkGetPhysicalDeviceMemoryProperties2 GetPhysicalDeviceMemoryProperties2;
236     PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 GetPhysicalDeviceSparseImageFormatProperties2;
237     PFN_vkGetPhysicalDeviceExternalBufferProperties GetPhysicalDeviceExternalBufferProperties;
238     PFN_vkGetPhysicalDeviceExternalFenceProperties GetPhysicalDeviceExternalFenceProperties;
239     PFN_vkGetPhysicalDeviceExternalSemaphoreProperties GetPhysicalDeviceExternalSemaphoreProperties;
240 
241     // ---- VK_KHR_surface extension commands
242     PFN_vkDestroySurfaceKHR DestroySurfaceKHR;
243     PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
244     PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR;
245     PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR;
246     PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR;
247 
248     // ---- VK_KHR_swapchain extension commands
249     PFN_vkCreateSwapchainKHR CreateSwapchainKHR;
250     PFN_vkGetDeviceGroupSurfacePresentModesKHR GetDeviceGroupSurfacePresentModesKHR;
251     PFN_vkGetPhysicalDevicePresentRectanglesKHR GetPhysicalDevicePresentRectanglesKHR;
252 
253     // ---- VK_KHR_display extension commands
254     PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR;
255     PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR;
256     PFN_vkGetDisplayPlaneSupportedDisplaysKHR GetDisplayPlaneSupportedDisplaysKHR;
257     PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR;
258     PFN_vkCreateDisplayModeKHR CreateDisplayModeKHR;
259     PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR;
260     PFN_vkCreateDisplayPlaneSurfaceKHR CreateDisplayPlaneSurfaceKHR;
261 
262     // ---- VK_KHR_display_swapchain extension commands
263     PFN_vkCreateSharedSwapchainsKHR CreateSharedSwapchainsKHR;
264 
265     // ---- VK_KHR_xlib_surface extension commands
266 #ifdef VK_USE_PLATFORM_XLIB_KHR
267     PFN_vkCreateXlibSurfaceKHR CreateXlibSurfaceKHR;
268 #endif // VK_USE_PLATFORM_XLIB_KHR
269 #ifdef VK_USE_PLATFORM_XLIB_KHR
270     PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR GetPhysicalDeviceXlibPresentationSupportKHR;
271 #endif // VK_USE_PLATFORM_XLIB_KHR
272 
273     // ---- VK_KHR_xcb_surface extension commands
274 #ifdef VK_USE_PLATFORM_XCB_KHR
275     PFN_vkCreateXcbSurfaceKHR CreateXcbSurfaceKHR;
276 #endif // VK_USE_PLATFORM_XCB_KHR
277 #ifdef VK_USE_PLATFORM_XCB_KHR
278     PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR GetPhysicalDeviceXcbPresentationSupportKHR;
279 #endif // VK_USE_PLATFORM_XCB_KHR
280 
281     // ---- VK_KHR_wayland_surface extension commands
282 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
283     PFN_vkCreateWaylandSurfaceKHR CreateWaylandSurfaceKHR;
284 #endif // VK_USE_PLATFORM_WAYLAND_KHR
285 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
286     PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR GetPhysicalDeviceWaylandPresentationSupportKHR;
287 #endif // VK_USE_PLATFORM_WAYLAND_KHR
288 
289     // ---- VK_KHR_android_surface extension commands
290 #ifdef VK_USE_PLATFORM_ANDROID_KHR
291     PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR;
292 #endif // VK_USE_PLATFORM_ANDROID_KHR
293 
294     // ---- VK_KHR_win32_surface extension commands
295 #ifdef VK_USE_PLATFORM_WIN32_KHR
296     PFN_vkCreateWin32SurfaceKHR CreateWin32SurfaceKHR;
297 #endif // VK_USE_PLATFORM_WIN32_KHR
298 #ifdef VK_USE_PLATFORM_WIN32_KHR
299     PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR GetPhysicalDeviceWin32PresentationSupportKHR;
300 #endif // VK_USE_PLATFORM_WIN32_KHR
301 
302     // ---- VK_KHR_get_physical_device_properties2 extension commands
303     PFN_vkGetPhysicalDeviceFeatures2KHR GetPhysicalDeviceFeatures2KHR;
304     PFN_vkGetPhysicalDeviceProperties2KHR GetPhysicalDeviceProperties2KHR;
305     PFN_vkGetPhysicalDeviceFormatProperties2KHR GetPhysicalDeviceFormatProperties2KHR;
306     PFN_vkGetPhysicalDeviceImageFormatProperties2KHR GetPhysicalDeviceImageFormatProperties2KHR;
307     PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR GetPhysicalDeviceQueueFamilyProperties2KHR;
308     PFN_vkGetPhysicalDeviceMemoryProperties2KHR GetPhysicalDeviceMemoryProperties2KHR;
309     PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR GetPhysicalDeviceSparseImageFormatProperties2KHR;
310 
311     // ---- VK_KHR_device_group_creation extension commands
312     PFN_vkEnumeratePhysicalDeviceGroupsKHR EnumeratePhysicalDeviceGroupsKHR;
313 
314     // ---- VK_KHR_external_memory_capabilities extension commands
315     PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR GetPhysicalDeviceExternalBufferPropertiesKHR;
316 
317     // ---- VK_KHR_external_semaphore_capabilities extension commands
318     PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR GetPhysicalDeviceExternalSemaphorePropertiesKHR;
319 
320     // ---- VK_KHR_external_fence_capabilities extension commands
321     PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR GetPhysicalDeviceExternalFencePropertiesKHR;
322 
323     // ---- VK_KHR_performance_query extension commands
324     PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR;
325     PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR;
326 
327     // ---- VK_KHR_get_surface_capabilities2 extension commands
328     PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR GetPhysicalDeviceSurfaceCapabilities2KHR;
329     PFN_vkGetPhysicalDeviceSurfaceFormats2KHR GetPhysicalDeviceSurfaceFormats2KHR;
330 
331     // ---- VK_KHR_get_display_properties2 extension commands
332     PFN_vkGetPhysicalDeviceDisplayProperties2KHR GetPhysicalDeviceDisplayProperties2KHR;
333     PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR GetPhysicalDeviceDisplayPlaneProperties2KHR;
334     PFN_vkGetDisplayModeProperties2KHR GetDisplayModeProperties2KHR;
335     PFN_vkGetDisplayPlaneCapabilities2KHR GetDisplayPlaneCapabilities2KHR;
336 
337     // ---- VK_KHR_fragment_shading_rate extension commands
338     PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR GetPhysicalDeviceFragmentShadingRatesKHR;
339 
340     // ---- VK_EXT_debug_report extension commands
341     PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
342     PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
343     PFN_vkDebugReportMessageEXT DebugReportMessageEXT;
344 
345     // ---- VK_EXT_debug_marker extension commands
346     PFN_vkDebugMarkerSetObjectTagEXT DebugMarkerSetObjectTagEXT;
347     PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT;
348 
349     // ---- VK_GGP_stream_descriptor_surface extension commands
350 #ifdef VK_USE_PLATFORM_GGP
351     PFN_vkCreateStreamDescriptorSurfaceGGP CreateStreamDescriptorSurfaceGGP;
352 #endif // VK_USE_PLATFORM_GGP
353 
354     // ---- VK_NV_external_memory_capabilities extension commands
355     PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV GetPhysicalDeviceExternalImageFormatPropertiesNV;
356 
357     // ---- VK_NN_vi_surface extension commands
358 #ifdef VK_USE_PLATFORM_VI_NN
359     PFN_vkCreateViSurfaceNN CreateViSurfaceNN;
360 #endif // VK_USE_PLATFORM_VI_NN
361 
362     // ---- VK_EXT_direct_mode_display extension commands
363     PFN_vkReleaseDisplayEXT ReleaseDisplayEXT;
364 
365     // ---- VK_EXT_acquire_xlib_display extension commands
366 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
367     PFN_vkAcquireXlibDisplayEXT AcquireXlibDisplayEXT;
368 #endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
369 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
370     PFN_vkGetRandROutputDisplayEXT GetRandROutputDisplayEXT;
371 #endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
372 
373     // ---- VK_EXT_display_surface_counter extension commands
374     PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT GetPhysicalDeviceSurfaceCapabilities2EXT;
375 
376     // ---- VK_MVK_ios_surface extension commands
377 #ifdef VK_USE_PLATFORM_IOS_MVK
378     PFN_vkCreateIOSSurfaceMVK CreateIOSSurfaceMVK;
379 #endif // VK_USE_PLATFORM_IOS_MVK
380 
381     // ---- VK_MVK_macos_surface extension commands
382 #ifdef VK_USE_PLATFORM_MACOS_MVK
383     PFN_vkCreateMacOSSurfaceMVK CreateMacOSSurfaceMVK;
384 #endif // VK_USE_PLATFORM_MACOS_MVK
385 
386     // ---- VK_EXT_debug_utils extension commands
387     PFN_vkSetDebugUtilsObjectNameEXT SetDebugUtilsObjectNameEXT;
388     PFN_vkSetDebugUtilsObjectTagEXT SetDebugUtilsObjectTagEXT;
389     PFN_vkQueueBeginDebugUtilsLabelEXT QueueBeginDebugUtilsLabelEXT;
390     PFN_vkQueueEndDebugUtilsLabelEXT QueueEndDebugUtilsLabelEXT;
391     PFN_vkQueueInsertDebugUtilsLabelEXT QueueInsertDebugUtilsLabelEXT;
392     PFN_vkCmdBeginDebugUtilsLabelEXT CmdBeginDebugUtilsLabelEXT;
393     PFN_vkCmdEndDebugUtilsLabelEXT CmdEndDebugUtilsLabelEXT;
394     PFN_vkCmdInsertDebugUtilsLabelEXT CmdInsertDebugUtilsLabelEXT;
395     PFN_vkCreateDebugUtilsMessengerEXT CreateDebugUtilsMessengerEXT;
396     PFN_vkDestroyDebugUtilsMessengerEXT DestroyDebugUtilsMessengerEXT;
397     PFN_vkSubmitDebugUtilsMessageEXT SubmitDebugUtilsMessageEXT;
398 
399     // ---- VK_EXT_sample_locations extension commands
400     PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT GetPhysicalDeviceMultisamplePropertiesEXT;
401 
402     // ---- VK_EXT_calibrated_timestamps extension commands
403     PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT GetPhysicalDeviceCalibrateableTimeDomainsEXT;
404 
405     // ---- VK_FUCHSIA_imagepipe_surface extension commands
406 #ifdef VK_USE_PLATFORM_FUCHSIA
407     PFN_vkCreateImagePipeSurfaceFUCHSIA CreateImagePipeSurfaceFUCHSIA;
408 #endif // VK_USE_PLATFORM_FUCHSIA
409 
410     // ---- VK_EXT_metal_surface extension commands
411 #ifdef VK_USE_PLATFORM_METAL_EXT
412     PFN_vkCreateMetalSurfaceEXT CreateMetalSurfaceEXT;
413 #endif // VK_USE_PLATFORM_METAL_EXT
414 
415     // ---- VK_EXT_tooling_info extension commands
416     PFN_vkGetPhysicalDeviceToolPropertiesEXT GetPhysicalDeviceToolPropertiesEXT;
417 
418     // ---- VK_NV_cooperative_matrix extension commands
419     PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV GetPhysicalDeviceCooperativeMatrixPropertiesNV;
420 
421     // ---- VK_NV_coverage_reduction_mode extension commands
422     PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV;
423 
424     // ---- VK_EXT_full_screen_exclusive extension commands
425 #ifdef VK_USE_PLATFORM_WIN32_KHR
426     PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT GetPhysicalDeviceSurfacePresentModes2EXT;
427 #endif // VK_USE_PLATFORM_WIN32_KHR
428 #ifdef VK_USE_PLATFORM_WIN32_KHR
429     PFN_vkGetDeviceGroupSurfacePresentModes2EXT GetDeviceGroupSurfacePresentModes2EXT;
430 #endif // VK_USE_PLATFORM_WIN32_KHR
431 
432     // ---- VK_EXT_headless_surface extension commands
433     PFN_vkCreateHeadlessSurfaceEXT CreateHeadlessSurfaceEXT;
434 
435     // ---- VK_EXT_directfb_surface extension commands
436 #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
437     PFN_vkCreateDirectFBSurfaceEXT CreateDirectFBSurfaceEXT;
438 #endif // VK_USE_PLATFORM_DIRECTFB_EXT
439 #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
440     PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT GetPhysicalDeviceDirectFBPresentationSupportEXT;
441 #endif // VK_USE_PLATFORM_DIRECTFB_EXT
442 };
443 
444 union loader_instance_extension_enables {
445     struct {
446         uint8_t khr_get_physical_device_properties2 : 1;
447         uint8_t khr_device_group_creation : 1;
448         uint8_t khr_external_memory_capabilities : 1;
449         uint8_t khr_external_semaphore_capabilities : 1;
450         uint8_t khr_external_fence_capabilities : 1;
451         uint8_t ext_debug_report : 1;
452         uint8_t ggp_stream_descriptor_surface : 1;
453         uint8_t nv_external_memory_capabilities : 1;
454         uint8_t nn_vi_surface : 1;
455         uint8_t ext_direct_mode_display : 1;
456         uint8_t ext_acquire_xlib_display : 1;
457         uint8_t ext_display_surface_counter : 1;
458         uint8_t ext_debug_utils : 1;
459     };
460     uint64_t padding[4];
461 };
462 
463 
464