1 // *** THIS FILE IS GENERATED - DO NOT EDIT ***
2 // See loader_extension_generator.py for modifications
3 
4 /*
5  * Copyright (c) 2015-2021 The Khronos Group Inc.
6  * Copyright (c) 2015-2021 Valve Corporation
7  * Copyright (c) 2015-2021 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 // Loader core instance terminators
87 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateInstance(
88     const VkInstanceCreateInfo*                 pCreateInfo,
89     const VkAllocationCallbacks*                pAllocator,
90     VkInstance*                                 pInstance);
91 VKAPI_ATTR void VKAPI_CALL terminator_DestroyInstance(
92     VkInstance                                  instance,
93     const VkAllocationCallbacks*                pAllocator);
94 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumeratePhysicalDevices(
95     VkInstance                                  instance,
96     uint32_t*                                   pPhysicalDeviceCount,
97     VkPhysicalDevice*                           pPhysicalDevices);
98 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFeatures(
99     VkPhysicalDevice                            physicalDevice,
100     VkPhysicalDeviceFeatures*                   pFeatures);
101 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFormatProperties(
102     VkPhysicalDevice                            physicalDevice,
103     VkFormat                                    format,
104     VkFormatProperties*                         pFormatProperties);
105 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceImageFormatProperties(
106     VkPhysicalDevice                            physicalDevice,
107     VkFormat                                    format,
108     VkImageType                                 type,
109     VkImageTiling                               tiling,
110     VkImageUsageFlags                           usage,
111     VkImageCreateFlags                          flags,
112     VkImageFormatProperties*                    pImageFormatProperties);
113 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceProperties(
114     VkPhysicalDevice                            physicalDevice,
115     VkPhysicalDeviceProperties*                 pProperties);
116 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyProperties(
117     VkPhysicalDevice                            physicalDevice,
118     uint32_t*                                   pQueueFamilyPropertyCount,
119     VkQueueFamilyProperties*                    pQueueFamilyProperties);
120 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceMemoryProperties(
121     VkPhysicalDevice                            physicalDevice,
122     VkPhysicalDeviceMemoryProperties*           pMemoryProperties);
123 VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL terminator_GetInstanceProcAddr(
124     VkInstance                                  instance,
125     const char*                                 pName);
126 VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDevice(
127     VkPhysicalDevice                            physicalDevice,
128     const VkDeviceCreateInfo*                   pCreateInfo,
129     const VkAllocationCallbacks*                pAllocator,
130     VkDevice*                                   pDevice);
131 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceExtensionProperties(
132     const VkEnumerateInstanceExtensionPropertiesChain* chain,
133     const char*                                 pLayerName,
134     uint32_t*                                   pPropertyCount,
135     VkExtensionProperties*                      pProperties);
136 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateDeviceExtensionProperties(
137     VkPhysicalDevice                            physicalDevice,
138     const char*                                 pLayerName,
139     uint32_t*                                   pPropertyCount,
140     VkExtensionProperties*                      pProperties);
141 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceLayerProperties(
142     const VkEnumerateInstanceLayerPropertiesChain* chain,
143     uint32_t*                                   pPropertyCount,
144     VkLayerProperties*                          pProperties);
145 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateDeviceLayerProperties(
146     VkPhysicalDevice                            physicalDevice,
147     uint32_t*                                   pPropertyCount,
148     VkLayerProperties*                          pProperties);
149 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceSparseImageFormatProperties(
150     VkPhysicalDevice                            physicalDevice,
151     VkFormat                                    format,
152     VkImageType                                 type,
153     VkSampleCountFlagBits                       samples,
154     VkImageUsageFlags                           usage,
155     VkImageTiling                               tiling,
156     uint32_t*                                   pPropertyCount,
157     VkSparseImageFormatProperties*              pProperties);
158 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceVersion(
159     const VkEnumerateInstanceVersionChain* chain,
160     uint32_t*                                   pApiVersion);
161 VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumeratePhysicalDeviceGroups(
162     VkInstance                                  instance,
163     uint32_t*                                   pPhysicalDeviceGroupCount,
164     VkPhysicalDeviceGroupProperties*            pPhysicalDeviceGroupProperties);
165 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFeatures2(
166     VkPhysicalDevice                            physicalDevice,
167     VkPhysicalDeviceFeatures2*                  pFeatures);
168 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceProperties2(
169     VkPhysicalDevice                            physicalDevice,
170     VkPhysicalDeviceProperties2*                pProperties);
171 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFormatProperties2(
172     VkPhysicalDevice                            physicalDevice,
173     VkFormat                                    format,
174     VkFormatProperties2*                        pFormatProperties);
175 VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceImageFormatProperties2(
176     VkPhysicalDevice                            physicalDevice,
177     const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
178     VkImageFormatProperties2*                   pImageFormatProperties);
179 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyProperties2(
180     VkPhysicalDevice                            physicalDevice,
181     uint32_t*                                   pQueueFamilyPropertyCount,
182     VkQueueFamilyProperties2*                   pQueueFamilyProperties);
183 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceMemoryProperties2(
184     VkPhysicalDevice                            physicalDevice,
185     VkPhysicalDeviceMemoryProperties2*          pMemoryProperties);
186 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceSparseImageFormatProperties2(
187     VkPhysicalDevice                            physicalDevice,
188     const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
189     uint32_t*                                   pPropertyCount,
190     VkSparseImageFormatProperties2*             pProperties);
191 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalBufferProperties(
192     VkPhysicalDevice                            physicalDevice,
193     const VkPhysicalDeviceExternalBufferInfo*   pExternalBufferInfo,
194     VkExternalBufferProperties*                 pExternalBufferProperties);
195 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalFenceProperties(
196     VkPhysicalDevice                            physicalDevice,
197     const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
198     VkExternalFenceProperties*                  pExternalFenceProperties);
199 VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalSemaphoreProperties(
200     VkPhysicalDevice                            physicalDevice,
201     const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
202     VkExternalSemaphoreProperties*              pExternalSemaphoreProperties);
203 
204 // ICD function pointer dispatch table
205 struct loader_icd_term_dispatch {
206 
207     // ---- Core 1_0 commands
208     PFN_vkCreateInstance CreateInstance;
209     PFN_vkDestroyInstance DestroyInstance;
210     PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
211     PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures;
212     PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties;
213     PFN_vkGetPhysicalDeviceImageFormatProperties GetPhysicalDeviceImageFormatProperties;
214     PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
215     PFN_vkGetPhysicalDeviceQueueFamilyProperties GetPhysicalDeviceQueueFamilyProperties;
216     PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties;
217     PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
218     PFN_vkCreateDevice CreateDevice;
219     PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties;
220     PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
221     PFN_vkEnumerateInstanceLayerProperties EnumerateInstanceLayerProperties;
222     PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
223 
224     // ---- Core 1_1 commands
225     PFN_vkEnumerateInstanceVersion EnumerateInstanceVersion;
226     PFN_vkEnumeratePhysicalDeviceGroups EnumeratePhysicalDeviceGroups;
227     PFN_vkGetPhysicalDeviceFeatures2 GetPhysicalDeviceFeatures2;
228     PFN_vkGetPhysicalDeviceProperties2 GetPhysicalDeviceProperties2;
229     PFN_vkGetPhysicalDeviceFormatProperties2 GetPhysicalDeviceFormatProperties2;
230     PFN_vkGetPhysicalDeviceImageFormatProperties2 GetPhysicalDeviceImageFormatProperties2;
231     PFN_vkGetPhysicalDeviceQueueFamilyProperties2 GetPhysicalDeviceQueueFamilyProperties2;
232     PFN_vkGetPhysicalDeviceMemoryProperties2 GetPhysicalDeviceMemoryProperties2;
233     PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 GetPhysicalDeviceSparseImageFormatProperties2;
234     PFN_vkGetPhysicalDeviceExternalBufferProperties GetPhysicalDeviceExternalBufferProperties;
235     PFN_vkGetPhysicalDeviceExternalFenceProperties GetPhysicalDeviceExternalFenceProperties;
236     PFN_vkGetPhysicalDeviceExternalSemaphoreProperties GetPhysicalDeviceExternalSemaphoreProperties;
237 
238     // ---- VK_KHR_surface extension commands
239     PFN_vkDestroySurfaceKHR DestroySurfaceKHR;
240     PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
241     PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR;
242     PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR;
243     PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR;
244 
245     // ---- VK_KHR_swapchain extension commands
246     PFN_vkCreateSwapchainKHR CreateSwapchainKHR;
247     PFN_vkGetDeviceGroupSurfacePresentModesKHR GetDeviceGroupSurfacePresentModesKHR;
248     PFN_vkGetPhysicalDevicePresentRectanglesKHR GetPhysicalDevicePresentRectanglesKHR;
249 
250     // ---- VK_KHR_display extension commands
251     PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR;
252     PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR;
253     PFN_vkGetDisplayPlaneSupportedDisplaysKHR GetDisplayPlaneSupportedDisplaysKHR;
254     PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR;
255     PFN_vkCreateDisplayModeKHR CreateDisplayModeKHR;
256     PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR;
257     PFN_vkCreateDisplayPlaneSurfaceKHR CreateDisplayPlaneSurfaceKHR;
258 
259     // ---- VK_KHR_display_swapchain extension commands
260     PFN_vkCreateSharedSwapchainsKHR CreateSharedSwapchainsKHR;
261 
262     // ---- VK_KHR_xlib_surface extension commands
263 #ifdef VK_USE_PLATFORM_XLIB_KHR
264     PFN_vkCreateXlibSurfaceKHR CreateXlibSurfaceKHR;
265 #endif // VK_USE_PLATFORM_XLIB_KHR
266 #ifdef VK_USE_PLATFORM_XLIB_KHR
267     PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR GetPhysicalDeviceXlibPresentationSupportKHR;
268 #endif // VK_USE_PLATFORM_XLIB_KHR
269 
270     // ---- VK_KHR_xcb_surface extension commands
271 #ifdef VK_USE_PLATFORM_XCB_KHR
272     PFN_vkCreateXcbSurfaceKHR CreateXcbSurfaceKHR;
273 #endif // VK_USE_PLATFORM_XCB_KHR
274 #ifdef VK_USE_PLATFORM_XCB_KHR
275     PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR GetPhysicalDeviceXcbPresentationSupportKHR;
276 #endif // VK_USE_PLATFORM_XCB_KHR
277 
278     // ---- VK_KHR_wayland_surface extension commands
279 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
280     PFN_vkCreateWaylandSurfaceKHR CreateWaylandSurfaceKHR;
281 #endif // VK_USE_PLATFORM_WAYLAND_KHR
282 #ifdef VK_USE_PLATFORM_WAYLAND_KHR
283     PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR GetPhysicalDeviceWaylandPresentationSupportKHR;
284 #endif // VK_USE_PLATFORM_WAYLAND_KHR
285 
286     // ---- VK_KHR_android_surface extension commands
287 #ifdef VK_USE_PLATFORM_ANDROID_KHR
288     PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR;
289 #endif // VK_USE_PLATFORM_ANDROID_KHR
290 
291     // ---- VK_KHR_win32_surface extension commands
292 #ifdef VK_USE_PLATFORM_WIN32_KHR
293     PFN_vkCreateWin32SurfaceKHR CreateWin32SurfaceKHR;
294 #endif // VK_USE_PLATFORM_WIN32_KHR
295 #ifdef VK_USE_PLATFORM_WIN32_KHR
296     PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR GetPhysicalDeviceWin32PresentationSupportKHR;
297 #endif // VK_USE_PLATFORM_WIN32_KHR
298 
299     // ---- VK_KHR_video_queue extension commands
300 #ifdef VK_ENABLE_BETA_EXTENSIONS
301     PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR GetPhysicalDeviceVideoCapabilitiesKHR;
302 #endif // VK_ENABLE_BETA_EXTENSIONS
303 #ifdef VK_ENABLE_BETA_EXTENSIONS
304     PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR GetPhysicalDeviceVideoFormatPropertiesKHR;
305 #endif // VK_ENABLE_BETA_EXTENSIONS
306 
307     // ---- VK_KHR_get_physical_device_properties2 extension commands
308     PFN_vkGetPhysicalDeviceFeatures2KHR GetPhysicalDeviceFeatures2KHR;
309     PFN_vkGetPhysicalDeviceProperties2KHR GetPhysicalDeviceProperties2KHR;
310     PFN_vkGetPhysicalDeviceFormatProperties2KHR GetPhysicalDeviceFormatProperties2KHR;
311     PFN_vkGetPhysicalDeviceImageFormatProperties2KHR GetPhysicalDeviceImageFormatProperties2KHR;
312     PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR GetPhysicalDeviceQueueFamilyProperties2KHR;
313     PFN_vkGetPhysicalDeviceMemoryProperties2KHR GetPhysicalDeviceMemoryProperties2KHR;
314     PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR GetPhysicalDeviceSparseImageFormatProperties2KHR;
315 
316     // ---- VK_KHR_device_group_creation extension commands
317     PFN_vkEnumeratePhysicalDeviceGroupsKHR EnumeratePhysicalDeviceGroupsKHR;
318 
319     // ---- VK_KHR_external_memory_capabilities extension commands
320     PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR GetPhysicalDeviceExternalBufferPropertiesKHR;
321 
322     // ---- VK_KHR_external_semaphore_capabilities extension commands
323     PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR GetPhysicalDeviceExternalSemaphorePropertiesKHR;
324 
325     // ---- VK_KHR_external_fence_capabilities extension commands
326     PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR GetPhysicalDeviceExternalFencePropertiesKHR;
327 
328     // ---- VK_KHR_performance_query extension commands
329     PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR EnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR;
330     PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR;
331 
332     // ---- VK_KHR_get_surface_capabilities2 extension commands
333     PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR GetPhysicalDeviceSurfaceCapabilities2KHR;
334     PFN_vkGetPhysicalDeviceSurfaceFormats2KHR GetPhysicalDeviceSurfaceFormats2KHR;
335 
336     // ---- VK_KHR_get_display_properties2 extension commands
337     PFN_vkGetPhysicalDeviceDisplayProperties2KHR GetPhysicalDeviceDisplayProperties2KHR;
338     PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR GetPhysicalDeviceDisplayPlaneProperties2KHR;
339     PFN_vkGetDisplayModeProperties2KHR GetDisplayModeProperties2KHR;
340     PFN_vkGetDisplayPlaneCapabilities2KHR GetDisplayPlaneCapabilities2KHR;
341 
342     // ---- VK_KHR_fragment_shading_rate extension commands
343     PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR GetPhysicalDeviceFragmentShadingRatesKHR;
344 
345     // ---- VK_EXT_debug_report extension commands
346     PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
347     PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
348     PFN_vkDebugReportMessageEXT DebugReportMessageEXT;
349 
350     // ---- VK_EXT_debug_marker extension commands
351     PFN_vkDebugMarkerSetObjectTagEXT DebugMarkerSetObjectTagEXT;
352     PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT;
353 
354     // ---- VK_GGP_stream_descriptor_surface extension commands
355 #ifdef VK_USE_PLATFORM_GGP
356     PFN_vkCreateStreamDescriptorSurfaceGGP CreateStreamDescriptorSurfaceGGP;
357 #endif // VK_USE_PLATFORM_GGP
358 
359     // ---- VK_NV_external_memory_capabilities extension commands
360     PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV GetPhysicalDeviceExternalImageFormatPropertiesNV;
361 
362     // ---- VK_NN_vi_surface extension commands
363 #ifdef VK_USE_PLATFORM_VI_NN
364     PFN_vkCreateViSurfaceNN CreateViSurfaceNN;
365 #endif // VK_USE_PLATFORM_VI_NN
366 
367     // ---- VK_EXT_direct_mode_display extension commands
368     PFN_vkReleaseDisplayEXT ReleaseDisplayEXT;
369 
370     // ---- VK_EXT_acquire_xlib_display extension commands
371 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
372     PFN_vkAcquireXlibDisplayEXT AcquireXlibDisplayEXT;
373 #endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
374 #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
375     PFN_vkGetRandROutputDisplayEXT GetRandROutputDisplayEXT;
376 #endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
377 
378     // ---- VK_EXT_display_surface_counter extension commands
379     PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT GetPhysicalDeviceSurfaceCapabilities2EXT;
380 
381     // ---- VK_MVK_ios_surface extension commands
382 #ifdef VK_USE_PLATFORM_IOS_MVK
383     PFN_vkCreateIOSSurfaceMVK CreateIOSSurfaceMVK;
384 #endif // VK_USE_PLATFORM_IOS_MVK
385 
386     // ---- VK_MVK_macos_surface extension commands
387 #ifdef VK_USE_PLATFORM_MACOS_MVK
388     PFN_vkCreateMacOSSurfaceMVK CreateMacOSSurfaceMVK;
389 #endif // VK_USE_PLATFORM_MACOS_MVK
390 
391     // ---- VK_EXT_debug_utils extension commands
392     PFN_vkSetDebugUtilsObjectNameEXT SetDebugUtilsObjectNameEXT;
393     PFN_vkSetDebugUtilsObjectTagEXT SetDebugUtilsObjectTagEXT;
394     PFN_vkQueueBeginDebugUtilsLabelEXT QueueBeginDebugUtilsLabelEXT;
395     PFN_vkQueueEndDebugUtilsLabelEXT QueueEndDebugUtilsLabelEXT;
396     PFN_vkQueueInsertDebugUtilsLabelEXT QueueInsertDebugUtilsLabelEXT;
397     PFN_vkCmdBeginDebugUtilsLabelEXT CmdBeginDebugUtilsLabelEXT;
398     PFN_vkCmdEndDebugUtilsLabelEXT CmdEndDebugUtilsLabelEXT;
399     PFN_vkCmdInsertDebugUtilsLabelEXT CmdInsertDebugUtilsLabelEXT;
400     PFN_vkCreateDebugUtilsMessengerEXT CreateDebugUtilsMessengerEXT;
401     PFN_vkDestroyDebugUtilsMessengerEXT DestroyDebugUtilsMessengerEXT;
402     PFN_vkSubmitDebugUtilsMessageEXT SubmitDebugUtilsMessageEXT;
403 
404     // ---- VK_EXT_sample_locations extension commands
405     PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT GetPhysicalDeviceMultisamplePropertiesEXT;
406 
407     // ---- VK_EXT_calibrated_timestamps extension commands
408     PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT GetPhysicalDeviceCalibrateableTimeDomainsEXT;
409 
410     // ---- VK_FUCHSIA_imagepipe_surface extension commands
411 #ifdef VK_USE_PLATFORM_FUCHSIA
412     PFN_vkCreateImagePipeSurfaceFUCHSIA CreateImagePipeSurfaceFUCHSIA;
413 #endif // VK_USE_PLATFORM_FUCHSIA
414 
415     // ---- VK_EXT_metal_surface extension commands
416 #ifdef VK_USE_PLATFORM_METAL_EXT
417     PFN_vkCreateMetalSurfaceEXT CreateMetalSurfaceEXT;
418 #endif // VK_USE_PLATFORM_METAL_EXT
419 
420     // ---- VK_EXT_tooling_info extension commands
421     PFN_vkGetPhysicalDeviceToolPropertiesEXT GetPhysicalDeviceToolPropertiesEXT;
422 
423     // ---- VK_NV_cooperative_matrix extension commands
424     PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV GetPhysicalDeviceCooperativeMatrixPropertiesNV;
425 
426     // ---- VK_NV_coverage_reduction_mode extension commands
427     PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV;
428 
429     // ---- VK_EXT_full_screen_exclusive extension commands
430 #ifdef VK_USE_PLATFORM_WIN32_KHR
431     PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT GetPhysicalDeviceSurfacePresentModes2EXT;
432 #endif // VK_USE_PLATFORM_WIN32_KHR
433 #ifdef VK_USE_PLATFORM_WIN32_KHR
434     PFN_vkGetDeviceGroupSurfacePresentModes2EXT GetDeviceGroupSurfacePresentModes2EXT;
435 #endif // VK_USE_PLATFORM_WIN32_KHR
436 
437     // ---- VK_EXT_headless_surface extension commands
438     PFN_vkCreateHeadlessSurfaceEXT CreateHeadlessSurfaceEXT;
439 
440     // ---- VK_EXT_acquire_drm_display extension commands
441     PFN_vkAcquireDrmDisplayEXT AcquireDrmDisplayEXT;
442     PFN_vkGetDrmDisplayEXT GetDrmDisplayEXT;
443 
444     // ---- VK_NV_acquire_winrt_display extension commands
445 #ifdef VK_USE_PLATFORM_WIN32_KHR
446     PFN_vkAcquireWinrtDisplayNV AcquireWinrtDisplayNV;
447 #endif // VK_USE_PLATFORM_WIN32_KHR
448 #ifdef VK_USE_PLATFORM_WIN32_KHR
449     PFN_vkGetWinrtDisplayNV GetWinrtDisplayNV;
450 #endif // VK_USE_PLATFORM_WIN32_KHR
451 
452     // ---- VK_EXT_directfb_surface extension commands
453 #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
454     PFN_vkCreateDirectFBSurfaceEXT CreateDirectFBSurfaceEXT;
455 #endif // VK_USE_PLATFORM_DIRECTFB_EXT
456 #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
457     PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT GetPhysicalDeviceDirectFBPresentationSupportEXT;
458 #endif // VK_USE_PLATFORM_DIRECTFB_EXT
459 
460     // ---- VK_QNX_screen_surface extension commands
461 #ifdef VK_USE_PLATFORM_SCREEN_QNX
462     PFN_vkCreateScreenSurfaceQNX CreateScreenSurfaceQNX;
463 #endif // VK_USE_PLATFORM_SCREEN_QNX
464 #ifdef VK_USE_PLATFORM_SCREEN_QNX
465     PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX GetPhysicalDeviceScreenPresentationSupportQNX;
466 #endif // VK_USE_PLATFORM_SCREEN_QNX
467 };
468 
469 union loader_instance_extension_enables {
470     struct {
471         uint8_t khr_get_physical_device_properties2 : 1;
472         uint8_t khr_device_group_creation : 1;
473         uint8_t khr_external_memory_capabilities : 1;
474         uint8_t khr_external_semaphore_capabilities : 1;
475         uint8_t khr_external_fence_capabilities : 1;
476         uint8_t ext_debug_report : 1;
477         uint8_t nv_external_memory_capabilities : 1;
478         uint8_t nn_vi_surface : 1;
479         uint8_t ext_direct_mode_display : 1;
480         uint8_t ext_acquire_xlib_display : 1;
481         uint8_t ext_display_surface_counter : 1;
482         uint8_t ext_debug_utils : 1;
483         uint8_t ext_acquire_drm_display : 1;
484     };
485     uint64_t padding[4];
486 };
487 
488 
489