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