• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  * Copyright (c) 2015-2023 The Khronos Group Inc.
4  * Copyright (c) 2015-2023 Valve Corporation
5  * Copyright (c) 2015-2023 LunarG, Inc.
6  * Copyright (C) 2015 Google Inc.
7  * Copyright (c) 2021-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
8  * Copyright (c) 2023-2023 RasterGrid Kft.
9  *
10  * Licensed under the Apache License, Version 2.0 (the "License");
11  * you may not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  *     http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS,
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  *
22  * Author: Courtney Goeltzenleuchter <courtney@lunarg.com>
23  * Author: Jon Ashburn <jon@lunarg.com>
24  * Author: Tony Barbour <tony@LunarG.com>
25  * Author: Chia-I Wu <olv@lunarg.com>
26  * Author: Charles Giessen <charles@lunarg.com>
27  */
28 
29 #include <stdlib.h>
30 #include <string.h>
31 
32 #include "allocation.h"
33 #include "debug_utils.h"
34 #include "gpa_helper.h"
35 #include "loader.h"
36 #include "loader_environment.h"
37 #include "log.h"
38 #include "settings.h"
39 #include "vk_loader_extensions.h"
40 #include "vk_loader_platform.h"
41 #include "wsi.h"
42 
43 // Trampoline entrypoints are in this file for core Vulkan commands
44 
45 /* vkGetInstanceProcAddr: Get global level or instance level entrypoint addresses.
46  * @param instance
47  * @param pName
48  * @return
49  *    If pName is a global level entrypoint:
50  *        If instance == NULL || instance is invalid || (instance is valid && instance.minor_version <= 2):
51  *            return global level functions
52  *        Else:
53  *            return NULL
54  *    Else:
55  *        If instance is valid:
56  *            return a trampoline entry point for all dispatchable Vulkan functions both core and extensions.
57  *        Else:
58  *            return NULL
59  *
60  * Note:
61  * Vulkan header updated 1.2.193 changed the behavior of vkGetInstanceProcAddr for global entrypoints. They used to always be
62  * returned regardless of the value of the instance parameter. The spec was amended in this version to only allow querying global
63  * level entrypoints with a NULL instance. However, as to not break old applications, the new behavior is only applied if the
64  * instance passed in is both valid and minor version is greater than 1.2, which was when this change in behavior occurred. Only
65  * instances with a newer version will get the new behavior.
66  */
vkGetInstanceProcAddr(VkInstance instance,const char * pName)67 LOADER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *pName) {
68     // Always should be able to get vkGetInstanceProcAddr if queried, regardless of the value of instance
69     if (!strcmp(pName, "vkGetInstanceProcAddr")) return (PFN_vkVoidFunction)vkGetInstanceProcAddr;
70 
71     // Get entrypoint addresses that are global (no dispatchable object)
72     void *addr = globalGetProcAddr(pName);
73     if (addr != VK_NULL_HANDLE) {
74         // Always can get a global entrypoint from vkGetInstanceProcAddr with a NULL instance handle
75         if (instance == VK_NULL_HANDLE) {
76             return addr;
77         } else {
78             // New behavior only returns a global entrypoint if the instance handle is NULL.
79             // Old behavior is to return a global entrypoint regardless of the value of the instance handle.
80             // Use new behavior if: The instance is valid and the minor version of the instance is greater than 1.2, which
81             // was when the new behavior was added. (eg, it is enforced in the next minor version of vulkan, which will be 1.3)
82 
83             // First check if instance is valid - loader_get_instance() returns NULL if it isn't.
84             struct loader_instance *ptr_instance = loader_get_instance(instance);
85             if (ptr_instance != NULL &&
86                 loader_check_version_meets_required(loader_combine_version(1, 3, 0), ptr_instance->app_api_version)) {
87                 // New behavior
88                 return NULL;
89             } else {
90                 // Old behavior
91                 return addr;
92             }
93         }
94     } else {
95         // All other functions require a valid instance handle to get
96         if (instance == VK_NULL_HANDLE) {
97             return NULL;
98         }
99         struct loader_instance *ptr_instance = loader_get_instance(instance);
100         // If we've gotten here and the pointer is NULL, it's invalid
101         if (ptr_instance == NULL) {
102             loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
103                        "vkGetInstanceProcAddr: Invalid instance [VUID-vkGetInstanceProcAddr-instance-parameter]");
104             abort(); /* Intentionally fail so user can correct issue. */
105         }
106         // Return trampoline code for non-global entrypoints including any extensions.
107         // Device extensions are returned if a layer or ICD supports the extension.
108         // Instance extensions are returned if the extension is enabled and the
109         // loader or someone else supports the extension
110         return trampoline_get_proc_addr(ptr_instance, pName);
111     }
112 }
113 
114 // Get a device level or global level entry point address.
115 // @param device
116 // @param pName
117 // @return
118 //    If device is valid, returns a device relative entry point for device level
119 //    entry points both core and extensions.
120 //    Device relative means call down the device chain.
vkGetDeviceProcAddr(VkDevice device,const char * pName)121 LOADER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char *pName) {
122     if (!pName || pName[0] != 'v' || pName[1] != 'k') return NULL;
123 
124     // For entrypoints that loader must handle (ie non-dispatchable or create object)
125     // make sure the loader entrypoint is returned
126     const char *name = pName;
127     name += 2;
128     if (!strcmp(name, "GetDeviceProcAddr")) return (PFN_vkVoidFunction)vkGetDeviceProcAddr;
129     if (!strcmp(name, "DestroyDevice")) return (PFN_vkVoidFunction)vkDestroyDevice;
130     if (!strcmp(name, "GetDeviceQueue")) return (PFN_vkVoidFunction)vkGetDeviceQueue;
131     if (!strcmp(name, "AllocateCommandBuffers")) return (PFN_vkVoidFunction)vkAllocateCommandBuffers;
132 
133     // Although CreateDevice is on device chain it's dispatchable object isn't
134     // a VkDevice or child of VkDevice so return NULL.
135     if (!strcmp(pName, "CreateDevice")) return NULL;
136 
137     // Because vkGetDeviceQueue2 is a 1.1 entry point, we need to check if the apiVersion provided during instance creation is
138     // sufficient
139     if (!strcmp(name, "GetDeviceQueue2")) {
140         struct loader_device *dev = NULL;
141         struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev);
142         if (NULL != icd_term && dev != NULL) {
143             const struct loader_instance *inst = icd_term->this_instance;
144             uint32_t api_version =
145                 VK_MAKE_API_VERSION(0, inst->app_api_version.major, inst->app_api_version.minor, inst->app_api_version.patch);
146             return (dev->should_ignore_device_commands_from_newer_version && api_version < VK_API_VERSION_1_1)
147                        ? NULL
148                        : (PFN_vkVoidFunction)vkGetDeviceQueue2;
149         }
150         return NULL;
151     }
152     // Return the dispatch table entrypoint for the fastest case
153     const VkLayerDispatchTable *disp_table = loader_get_dispatch(device);
154     if (disp_table == NULL) return NULL;
155 
156     bool found_name = false;
157     void *addr = loader_lookup_device_dispatch_table(disp_table, pName, &found_name);
158     if (found_name) return addr;
159 
160     if (disp_table->GetDeviceProcAddr == NULL) return NULL;
161     return disp_table->GetDeviceProcAddr(device, pName);
162 }
163 
vkEnumerateInstanceExtensionProperties(const char * pLayerName,uint32_t * pPropertyCount,VkExtensionProperties * pProperties)164 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char *pLayerName,
165                                                                                     uint32_t *pPropertyCount,
166                                                                                     VkExtensionProperties *pProperties) {
167     LOADER_PLATFORM_THREAD_ONCE(&once_init, loader_initialize);
168 
169     update_global_loader_settings();
170 
171     // We know we need to call at least the terminator
172     VkResult res = VK_SUCCESS;
173     VkEnumerateInstanceExtensionPropertiesChain chain_tail = {
174         .header =
175             {
176                 .type = VK_CHAIN_TYPE_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES,
177                 .version = VK_CURRENT_CHAIN_VERSION,
178                 .size = sizeof(chain_tail),
179             },
180         .pfnNextLayer = &terminator_pre_instance_EnumerateInstanceExtensionProperties,
181         .pNextLink = NULL,
182     };
183     VkEnumerateInstanceExtensionPropertiesChain *chain_head = &chain_tail;
184 
185     // Get the implicit layers
186     struct loader_layer_list layers = {0};
187     memset(&layers, 0, sizeof(layers));
188     struct loader_envvar_all_filters layer_filters = {0};
189 
190     res = parse_layer_environment_var_filters(NULL, &layer_filters);
191     if (VK_SUCCESS != res) {
192         return res;
193     }
194 
195     res = loader_scan_for_implicit_layers(NULL, &layers, &layer_filters);
196     if (VK_SUCCESS != res) {
197         return res;
198     }
199 
200     // Prepend layers onto the chain if they implement this entry point
201     for (uint32_t i = 0; i < layers.count; ++i) {
202         // Skip this layer if it doesn't expose the entry-point
203         if (NULL == layers.list[i].pre_instance_functions.enumerate_instance_extension_properties) {
204             continue;
205         }
206 
207         loader_open_layer_file(NULL, &layers.list[i]);
208         if (layers.list[i].lib_handle == NULL) {
209             continue;
210         }
211 
212         void *pfn = loader_platform_get_proc_address(layers.list[i].lib_handle,
213                                                      layers.list[i].pre_instance_functions.enumerate_instance_extension_properties);
214         if (pfn == NULL) {
215             loader_log(NULL, VULKAN_LOADER_WARN_BIT | VULKAN_LOADER_LAYER_BIT, 0,
216                        "%s: Unable to resolve symbol \"%s\" in implicit layer library \"%s\"", __FUNCTION__,
217                        layers.list[i].pre_instance_functions.enumerate_instance_extension_properties, layers.list[i].lib_name);
218             continue;
219         }
220 
221         VkEnumerateInstanceExtensionPropertiesChain *chain_link =
222             loader_alloc(NULL, sizeof(VkEnumerateInstanceExtensionPropertiesChain), VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
223         if (chain_link == NULL) {
224             res = VK_ERROR_OUT_OF_HOST_MEMORY;
225             break;
226         }
227         memset(chain_link, 0, sizeof(VkEnumerateInstanceLayerPropertiesChain));
228         chain_link->header.type = VK_CHAIN_TYPE_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES;
229         chain_link->header.version = VK_CURRENT_CHAIN_VERSION;
230         chain_link->header.size = sizeof(*chain_link);
231         chain_link->pfnNextLayer = pfn;
232         chain_link->pNextLink = chain_head;
233 
234         chain_head = chain_link;
235     }
236 
237     // Call down the chain
238     if (res == VK_SUCCESS) {
239         res = chain_head->pfnNextLayer(chain_head->pNextLink, pLayerName, pPropertyCount, pProperties);
240     }
241 
242     // Free up the layers
243     loader_delete_layer_list_and_properties(NULL, &layers);
244 
245     // Tear down the chain
246     while (chain_head != &chain_tail) {
247         VkEnumerateInstanceExtensionPropertiesChain *holder = chain_head;
248         chain_head = (VkEnumerateInstanceExtensionPropertiesChain *)chain_head->pNextLink;
249         loader_free(NULL, holder);
250     }
251 
252     return res;
253 }
254 
vkEnumerateInstanceLayerProperties(uint32_t * pPropertyCount,VkLayerProperties * pProperties)255 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t *pPropertyCount,
256                                                                                 VkLayerProperties *pProperties) {
257     LOADER_PLATFORM_THREAD_ONCE(&once_init, loader_initialize);
258 
259     update_global_loader_settings();
260 
261     // We know we need to call at least the terminator
262     VkResult res = VK_SUCCESS;
263     VkEnumerateInstanceLayerPropertiesChain chain_tail = {
264         .header =
265             {
266                 .type = VK_CHAIN_TYPE_ENUMERATE_INSTANCE_LAYER_PROPERTIES,
267                 .version = VK_CURRENT_CHAIN_VERSION,
268                 .size = sizeof(chain_tail),
269             },
270         .pfnNextLayer = &terminator_pre_instance_EnumerateInstanceLayerProperties,
271         .pNextLink = NULL,
272     };
273     VkEnumerateInstanceLayerPropertiesChain *chain_head = &chain_tail;
274 
275     // Get the implicit layers
276     struct loader_layer_list layers;
277     memset(&layers, 0, sizeof(layers));
278     struct loader_envvar_all_filters layer_filters = {0};
279 
280     res = parse_layer_environment_var_filters(NULL, &layer_filters);
281     if (VK_SUCCESS != res) {
282         return res;
283     }
284 
285     res = loader_scan_for_implicit_layers(NULL, &layers, &layer_filters);
286     if (VK_SUCCESS != res) {
287         return res;
288     }
289 
290     // Prepend layers onto the chain if they implement this entry point
291     for (uint32_t i = 0; i < layers.count; ++i) {
292         // Skip this layer if it doesn't expose the entry-point
293         if (NULL == layers.list[i].pre_instance_functions.enumerate_instance_layer_properties) {
294             continue;
295         }
296 
297         loader_open_layer_file(NULL, &layers.list[i]);
298         if (layers.list[i].lib_handle == NULL) {
299             continue;
300         }
301 
302         void *pfn = loader_platform_get_proc_address(layers.list[i].lib_handle,
303                                                      layers.list[i].pre_instance_functions.enumerate_instance_layer_properties);
304         if (pfn == NULL) {
305             loader_log(NULL, VULKAN_LOADER_WARN_BIT, 0, "%s: Unable to resolve symbol \"%s\" in implicit layer library \"%s\"",
306                        __FUNCTION__, layers.list[i].pre_instance_functions.enumerate_instance_layer_properties,
307                        layers.list[i].lib_name);
308             continue;
309         }
310 
311         VkEnumerateInstanceLayerPropertiesChain *chain_link =
312             loader_alloc(NULL, sizeof(VkEnumerateInstanceLayerPropertiesChain), VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
313         if (chain_link == NULL) {
314             res = VK_ERROR_OUT_OF_HOST_MEMORY;
315             break;
316         }
317         memset(chain_link, 0, sizeof(VkEnumerateInstanceLayerPropertiesChain));
318         chain_link->header.type = VK_CHAIN_TYPE_ENUMERATE_INSTANCE_LAYER_PROPERTIES;
319         chain_link->header.version = VK_CURRENT_CHAIN_VERSION;
320         chain_link->header.size = sizeof(*chain_link);
321         chain_link->pfnNextLayer = pfn;
322         chain_link->pNextLink = chain_head;
323 
324         chain_head = chain_link;
325     }
326 
327     // Call down the chain
328     if (res == VK_SUCCESS) {
329         res = chain_head->pfnNextLayer(chain_head->pNextLink, pPropertyCount, pProperties);
330     }
331 
332     // Free up the layers
333     loader_delete_layer_list_and_properties(NULL, &layers);
334 
335     // Tear down the chain
336     while (chain_head != &chain_tail) {
337         VkEnumerateInstanceLayerPropertiesChain *holder = chain_head;
338         chain_head = (VkEnumerateInstanceLayerPropertiesChain *)chain_head->pNextLink;
339         loader_free(NULL, holder);
340     }
341 
342     return res;
343 }
344 
vkEnumerateInstanceVersion(uint32_t * pApiVersion)345 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceVersion(uint32_t *pApiVersion) {
346     LOADER_PLATFORM_THREAD_ONCE(&once_init, loader_initialize);
347 
348     update_global_loader_settings();
349 
350     if (NULL == pApiVersion) {
351         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
352                    "vkEnumerateInstanceVersion: \'pApiVersion\' must not be NULL "
353                    "(VUID-vkEnumerateInstanceVersion-pApiVersion-parameter");
354         // NOTE: This seems silly, but it's the only allowable failure
355         return VK_ERROR_OUT_OF_HOST_MEMORY;
356     }
357 
358     // We know we need to call at least the terminator
359     VkResult res = VK_SUCCESS;
360     VkEnumerateInstanceVersionChain chain_tail = {
361         .header =
362             {
363                 .type = VK_CHAIN_TYPE_ENUMERATE_INSTANCE_VERSION,
364                 .version = VK_CURRENT_CHAIN_VERSION,
365                 .size = sizeof(chain_tail),
366             },
367         .pfnNextLayer = &terminator_pre_instance_EnumerateInstanceVersion,
368         .pNextLink = NULL,
369     };
370     VkEnumerateInstanceVersionChain *chain_head = &chain_tail;
371 
372     // Get the implicit layers
373     struct loader_layer_list layers;
374     memset(&layers, 0, sizeof(layers));
375     struct loader_envvar_all_filters layer_filters = {0};
376 
377     res = parse_layer_environment_var_filters(NULL, &layer_filters);
378     if (VK_SUCCESS != res) {
379         return res;
380     }
381 
382     res = loader_scan_for_implicit_layers(NULL, &layers, &layer_filters);
383     if (VK_SUCCESS != res) {
384         return res;
385     }
386 
387     // Prepend layers onto the chain if they implement this entry point
388     for (uint32_t i = 0; i < layers.count; ++i) {
389         // Skip this layer if it doesn't expose the entry-point
390         if (NULL == layers.list[i].pre_instance_functions.enumerate_instance_version) {
391             continue;
392         }
393 
394         loader_open_layer_file(NULL, &layers.list[i]);
395         if (layers.list[i].lib_handle == NULL) {
396             continue;
397         }
398 
399         void *pfn = loader_platform_get_proc_address(layers.list[i].lib_handle,
400                                                      layers.list[i].pre_instance_functions.enumerate_instance_version);
401         if (pfn == NULL) {
402             loader_log(NULL, VULKAN_LOADER_WARN_BIT, 0, "%s: Unable to resolve symbol \"%s\" in implicit layer library \"%s\"",
403                        __FUNCTION__, layers.list[i].pre_instance_functions.enumerate_instance_version, layers.list[i].lib_name);
404             continue;
405         }
406 
407         VkEnumerateInstanceVersionChain *chain_link =
408             loader_alloc(NULL, sizeof(VkEnumerateInstanceVersionChain), VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
409         if (chain_link == NULL) {
410             res = VK_ERROR_OUT_OF_HOST_MEMORY;
411             break;
412         }
413         memset(chain_link, 0, sizeof(VkEnumerateInstanceLayerPropertiesChain));
414         chain_link->header.type = VK_CHAIN_TYPE_ENUMERATE_INSTANCE_VERSION;
415         chain_link->header.version = VK_CURRENT_CHAIN_VERSION;
416         chain_link->header.size = sizeof(*chain_link);
417         chain_link->pfnNextLayer = pfn;
418         chain_link->pNextLink = chain_head;
419 
420         chain_head = chain_link;
421     }
422 
423     // Call down the chain
424     if (res == VK_SUCCESS) {
425         res = chain_head->pfnNextLayer(chain_head->pNextLink, pApiVersion);
426     }
427 
428     // Free up the layers
429     loader_delete_layer_list_and_properties(NULL, &layers);
430 
431     // Tear down the chain
432     while (chain_head != &chain_tail) {
433         VkEnumerateInstanceVersionChain *holder = chain_head;
434         chain_head = (VkEnumerateInstanceVersionChain *)chain_head->pNextLink;
435         loader_free(NULL, holder);
436     }
437 
438     return res;
439 }
440 
441 // Add the "instance-only" debug functions to the list of active debug functions
442 // at the very end.  This way it doesn't get replaced by any new messengers
loader_add_instance_only_debug_funcs(struct loader_instance * ptr_instance)443 void loader_add_instance_only_debug_funcs(struct loader_instance *ptr_instance) {
444     VkLayerDbgFunctionNode *cur_node = ptr_instance->current_dbg_function_head;
445     if (cur_node == NULL) {
446         ptr_instance->current_dbg_function_head = ptr_instance->instance_only_dbg_function_head;
447     } else {
448         while (cur_node != NULL) {
449             if (cur_node == ptr_instance->instance_only_dbg_function_head) {
450                 // Already added
451                 break;
452             }
453             // Last item
454             else if (cur_node->pNext == NULL) {
455                 cur_node->pNext = ptr_instance->instance_only_dbg_function_head;
456             }
457             cur_node = cur_node->pNext;
458         }
459     }
460 }
461 
462 // Remove the "instance-only" debug functions from the list of active debug functions.
463 // It should be added after the last actual debug utils/debug report function.
loader_remove_instance_only_debug_funcs(struct loader_instance * ptr_instance)464 void loader_remove_instance_only_debug_funcs(struct loader_instance *ptr_instance) {
465     VkLayerDbgFunctionNode *cur_node = ptr_instance->current_dbg_function_head;
466 
467     // Only thing in list is the instance only head
468     if (cur_node == ptr_instance->instance_only_dbg_function_head) {
469         ptr_instance->current_dbg_function_head = NULL;
470     }
471     while (cur_node != NULL) {
472         if (cur_node->pNext == ptr_instance->instance_only_dbg_function_head) {
473             cur_node->pNext = NULL;
474             break;
475         }
476         cur_node = cur_node->pNext;
477     }
478 }
479 
vkCreateInstance(const VkInstanceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkInstance * pInstance)480 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(const VkInstanceCreateInfo *pCreateInfo,
481                                                               const VkAllocationCallbacks *pAllocator, VkInstance *pInstance) {
482     struct loader_instance *ptr_instance = NULL;
483     VkInstance created_instance = VK_NULL_HANDLE;
484     VkResult res = VK_ERROR_INITIALIZATION_FAILED;
485     VkInstanceCreateInfo ici = {0};
486     struct loader_envvar_all_filters layer_filters = {0};
487 
488     LOADER_PLATFORM_THREAD_ONCE(&once_init, loader_initialize);
489 
490     if (pCreateInfo == NULL) {
491         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
492                    "vkCreateInstance: \'pCreateInfo\' is NULL (VUID-vkCreateInstance-pCreateInfo-parameter)");
493         goto out;
494     }
495     ici = *pCreateInfo;
496 
497     if (pInstance == NULL) {
498         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
499                    "vkCreateInstance \'pInstance\' not valid (VUID-vkCreateInstance-pInstance-parameter)");
500         goto out;
501     }
502 
503     ptr_instance =
504         (struct loader_instance *)loader_calloc(pAllocator, sizeof(struct loader_instance), VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
505 
506     if (ptr_instance == NULL) {
507         res = VK_ERROR_OUT_OF_HOST_MEMORY;
508         goto out;
509     }
510 
511     loader_platform_thread_lock_mutex(&loader_lock);
512     if (pAllocator) {
513         ptr_instance->alloc_callbacks = *pAllocator;
514     }
515     ptr_instance->magic = LOADER_MAGIC_NUMBER;
516 
517     // Save the application version
518     if (NULL == pCreateInfo->pApplicationInfo || 0 == pCreateInfo->pApplicationInfo->apiVersion) {
519         ptr_instance->app_api_version = LOADER_VERSION_1_0_0;
520     } else {
521         ptr_instance->app_api_version = loader_make_version(pCreateInfo->pApplicationInfo->apiVersion);
522     }
523 
524     // Look for one or more VK_EXT_debug_report or VK_EXT_debug_utils create info structures
525     // and setup a callback(s) for each one found.
526 
527     // Handle cases of VK_EXT_debug_utils
528     // Setup the temporary messenger(s) here to catch early issues:
529     res = util_CreateDebugUtilsMessengers(ptr_instance, pCreateInfo->pNext, pAllocator);
530     if (VK_ERROR_OUT_OF_HOST_MEMORY == res) {
531         // Failure of setting up one or more of the messenger.
532         goto out;
533     }
534 
535     // Handle cases of VK_EXT_debug_report
536     // Setup the temporary callback(s) here to catch early issues:
537     res = util_CreateDebugReportCallbacks(ptr_instance, pCreateInfo->pNext, pAllocator);
538     if (VK_ERROR_OUT_OF_HOST_MEMORY == res) {
539         // Failure of setting up one or more of the callback.
540         goto out;
541     }
542 
543     VkResult settings_file_res = get_loader_settings(ptr_instance, &ptr_instance->settings);
544     if (settings_file_res == VK_ERROR_OUT_OF_HOST_MEMORY) {
545         res = settings_file_res;
546         goto out;
547     }
548     if (ptr_instance->settings.settings_active) {
549         log_settings(ptr_instance, &ptr_instance->settings);
550     }
551 
552     // Providing an apiVersion less than VK_API_VERSION_1_0 but greater than zero prevents the validation layers from starting
553     if (pCreateInfo->pApplicationInfo && pCreateInfo->pApplicationInfo->apiVersion != 0u &&
554         pCreateInfo->pApplicationInfo->apiVersion < VK_API_VERSION_1_0) {
555         loader_log(ptr_instance, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT, 0,
556                    "VkInstanceCreateInfo::pApplicationInfo::apiVersion has value of %u which is not permitted. If apiVersion is "
557                    "not 0, then it must be "
558                    "greater than or equal to the value of VK_API_VERSION_1_0 [VUID-VkApplicationInfo-apiVersion]",
559                    pCreateInfo->pApplicationInfo->apiVersion);
560     }
561 
562     // Check the VkInstanceCreateInfoFlags wether to allow the portability enumeration flag
563     if ((pCreateInfo->flags & VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR) == 1) {
564         ptr_instance->portability_enumeration_flag_bit_set = true;
565     }
566     // Make sure the extension has been enabled
567     if (pCreateInfo->ppEnabledExtensionNames) {
568         for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
569             if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME) == 0) {
570                 ptr_instance->portability_enumeration_extension_enabled = true;
571                 if (ptr_instance->portability_enumeration_flag_bit_set) {
572                     ptr_instance->portability_enumeration_enabled = true;
573                     loader_log(ptr_instance, VULKAN_LOADER_INFO_BIT, 0,
574                                "Portability enumeration bit was set, enumerating portability drivers.");
575                 }
576             }
577         }
578     }
579 
580     // Make sure the application provided API version has the correct variant
581     if (NULL != pCreateInfo->pApplicationInfo) {
582         uint32_t variant_version = VK_API_VERSION_VARIANT(pCreateInfo->pApplicationInfo->apiVersion);
583         const uint32_t expected_variant = 0;
584         if (expected_variant != variant_version) {
585             loader_log(ptr_instance, VULKAN_LOADER_WARN_BIT, 0,
586                        "vkCreateInstance: The API Variant specified in pCreateInfo->pApplicationInfo.apiVersion is %d instead of "
587                        "the expected value of %d.",
588                        variant_version, expected_variant);
589         }
590     }
591 
592     res = parse_layer_environment_var_filters(ptr_instance, &layer_filters);
593     if (VK_SUCCESS != res) {
594         goto out;
595     }
596 
597     // Due to implicit layers need to get layer list even if
598     // enabledLayerCount == 0 and VK_INSTANCE_LAYERS is unset. For now always
599     // get layer list via loader_scan_for_layers().
600     memset(&ptr_instance->instance_layer_list, 0, sizeof(ptr_instance->instance_layer_list));
601     res = loader_scan_for_layers(ptr_instance, &ptr_instance->instance_layer_list, &layer_filters);
602     if (VK_SUCCESS != res) {
603         goto out;
604     }
605 
606     // Validate the app requested layers to be enabled
607     if (pCreateInfo->enabledLayerCount > 0) {
608         res = loader_validate_layers(ptr_instance, pCreateInfo->enabledLayerCount, pCreateInfo->ppEnabledLayerNames,
609                                      &ptr_instance->instance_layer_list);
610         if (res != VK_SUCCESS) {
611             goto out;
612         }
613     }
614 
615     // Scan/discover all System and Environment Variable ICD libraries
616     bool skipped_portability_drivers = false;
617     res = loader_icd_scan(ptr_instance, &ptr_instance->icd_tramp_list, pCreateInfo, &skipped_portability_drivers);
618     if (res == VK_ERROR_OUT_OF_HOST_MEMORY) {
619         goto out;
620     }
621 
622     if (ptr_instance->icd_tramp_list.count == 0) {
623         // No drivers found
624         if (skipped_portability_drivers) {
625             if (ptr_instance->portability_enumeration_extension_enabled && !ptr_instance->portability_enumeration_flag_bit_set) {
626                 loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0,
627                            "vkCreateInstance: Found drivers that contain devices which support the portability subset, but "
628                            "the instance does not enumerate portability drivers! Applications that wish to enumerate portability "
629                            "drivers must set the VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR bit in the VkInstanceCreateInfo "
630                            "flags.");
631             } else if (ptr_instance->portability_enumeration_flag_bit_set &&
632                        !ptr_instance->portability_enumeration_extension_enabled) {
633                 loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0,
634                            "VkInstanceCreateInfo: If flags has the VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR bit set, the "
635                            "list of enabled extensions in ppEnabledExtensionNames must contain VK_KHR_portability_enumeration "
636                            "[VUID-VkInstanceCreateInfo-flags-06559 ]"
637                            "Applications that wish to enumerate portability drivers must enable the VK_KHR_portability_enumeration "
638                            "instance extension.");
639             } else {
640                 loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0,
641                            "vkCreateInstance: Found drivers that contain devices which support the portability subset, but "
642                            "the instance does not enumerate portability drivers! Applications that wish to enumerate portability "
643                            "drivers must set the VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR bit in the VkInstanceCreateInfo "
644                            "flags and enable the VK_KHR_portability_enumeration instance extension.");
645             }
646         }
647         loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_DRIVER_BIT, 0, "vkCreateInstance: Found no drivers!");
648         res = VK_ERROR_INCOMPATIBLE_DRIVER;
649         goto out;
650     }
651 
652     // Get extensions from all ICD's, merge so no duplicates, then validate
653     res = loader_get_icd_loader_instance_extensions(ptr_instance, &ptr_instance->icd_tramp_list, &ptr_instance->ext_list);
654     if (res != VK_SUCCESS) {
655         goto out;
656     }
657     res = loader_validate_instance_extensions(ptr_instance, &ptr_instance->ext_list, &ptr_instance->instance_layer_list,
658                                               &layer_filters, &ici);
659     if (res != VK_SUCCESS) {
660         goto out;
661     }
662 
663     ptr_instance->disp = loader_instance_heap_alloc(ptr_instance, sizeof(struct loader_instance_dispatch_table),
664                                                     VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
665     if (ptr_instance->disp == NULL) {
666         loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT, 0,
667                    "vkCreateInstance:  Failed to allocate Loader's full Instance dispatch table.");
668         res = VK_ERROR_OUT_OF_HOST_MEMORY;
669         goto out;
670     }
671     memcpy(&ptr_instance->disp->layer_inst_disp, &instance_disp, sizeof(instance_disp));
672 
673     loader_platform_thread_lock_mutex(&loader_global_instance_list_lock);
674     ptr_instance->next = loader.instances;
675     loader.instances = ptr_instance;
676     loader_platform_thread_unlock_mutex(&loader_global_instance_list_lock);
677 
678     // Activate any layers on instance chain
679     res = loader_enable_instance_layers(ptr_instance, &ici, &ptr_instance->instance_layer_list, &layer_filters);
680     if (res != VK_SUCCESS) {
681         goto out;
682     }
683 
684     created_instance = (VkInstance)ptr_instance;
685     res = loader_create_instance_chain(&ici, pAllocator, ptr_instance, &created_instance);
686 
687     if (VK_SUCCESS == res) {
688         // Check for enabled extensions here to setup the loader structures so the loader knows what extensions
689         // it needs to worry about.
690         // We do it in the terminator and again above the layers here since we may think different extensions
691         // are enabled than what's down in the terminator.
692         // This is why we don't clear inside of these function calls.
693         // The clearing should actually be handled by the overall memset of the pInstance structure above.
694         wsi_create_instance(ptr_instance, &ici);
695         check_for_enabled_debug_extensions(ptr_instance, &ici);
696         extensions_create_instance(ptr_instance, &ici);
697 
698         *pInstance = (VkInstance)ptr_instance;
699 
700         // Finally have the layers in place and everyone has seen
701         // the CreateInstance command go by. This allows the layer's
702         // GetInstanceProcAddr functions to return valid extension functions
703         // if enabled.
704         loader_activate_instance_layer_extensions(ptr_instance, created_instance);
705         ptr_instance->instance_finished_creation = true;
706     } else if (VK_ERROR_EXTENSION_NOT_PRESENT == res && !ptr_instance->create_terminator_invalid_extension) {
707         loader_log(ptr_instance, VULKAN_LOADER_WARN_BIT, 0,
708                    "vkCreateInstance: Layer returning invalid extension error not triggered by ICD/Loader (Policy #LLP_LAYER_17).");
709     }
710 
711 out:
712 
713     if (NULL != ptr_instance) {
714         if (res != VK_SUCCESS) {
715             loader_platform_thread_lock_mutex(&loader_global_instance_list_lock);
716             // error path, should clean everything up
717             if (loader.instances == ptr_instance) {
718                 loader.instances = ptr_instance->next;
719             }
720             loader_platform_thread_unlock_mutex(&loader_global_instance_list_lock);
721 
722             free_loader_settings(ptr_instance, &ptr_instance->settings);
723 
724             loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->surfaces_list);
725             loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->debug_utils_messengers_list);
726             loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->debug_report_callbacks_list);
727 
728             loader_instance_heap_free(ptr_instance, ptr_instance->disp);
729             // Remove any created VK_EXT_debug_report or VK_EXT_debug_utils items
730             destroy_debug_callbacks_chain(ptr_instance, pAllocator);
731 
732             loader_destroy_pointer_layer_list(ptr_instance, &ptr_instance->expanded_activated_layer_list);
733             loader_destroy_pointer_layer_list(ptr_instance, &ptr_instance->app_activated_layer_list);
734 
735             loader_delete_layer_list_and_properties(ptr_instance, &ptr_instance->instance_layer_list);
736             loader_clear_scanned_icd_list(ptr_instance, &ptr_instance->icd_tramp_list);
737             loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->ext_list);
738 
739             // Free any icd_terms that were created.
740             // If an OOM occurs from a layer, terminator_CreateInstance won't be reached where this kind of
741             // cleanup normally occurs
742             struct loader_icd_term *icd_term = NULL;
743             while (NULL != ptr_instance->icd_terms) {
744                 icd_term = ptr_instance->icd_terms;
745                 // Call destroy Instance on each driver in case we successfully called down the chain but failed on
746                 // our way back out of it.
747                 if (icd_term->instance) {
748                     loader_icd_close_objects(ptr_instance, icd_term);
749                     icd_term->dispatch.DestroyInstance(icd_term->instance, pAllocator);
750                 }
751                 icd_term->instance = VK_NULL_HANDLE;
752                 ptr_instance->icd_terms = icd_term->next;
753                 loader_icd_destroy(ptr_instance, icd_term, pAllocator);
754             }
755 
756             free_string_list(ptr_instance, &ptr_instance->enabled_layer_names);
757 
758             loader_instance_heap_free(ptr_instance, ptr_instance);
759         } else {
760             // success path, swap out created debug callbacks out so they aren't used until instance destruction
761             loader_remove_instance_only_debug_funcs(ptr_instance);
762         }
763         // Only unlock when ptr_instance isn't NULL, as if it is, the above code didn't make it to when loader_lock was locked.
764         loader_platform_thread_unlock_mutex(&loader_lock);
765     }
766 
767     return res;
768 }
769 
vkDestroyInstance(VkInstance instance,const VkAllocationCallbacks * pAllocator)770 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) {
771     const VkLayerInstanceDispatchTable *disp;
772     struct loader_instance *ptr_instance = NULL;
773 
774     if (instance == VK_NULL_HANDLE) {
775         return;
776     }
777     loader_platform_thread_lock_mutex(&loader_lock);
778 
779     ptr_instance = loader_get_instance(instance);
780     if (ptr_instance == NULL) {
781         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
782                    "vkDestroyInstance: Invalid instance [VUID-vkDestroyInstance-instance-parameter]");
783         loader_platform_thread_unlock_mutex(&loader_lock);
784         abort(); /* Intentionally fail so user can correct issue. */
785     }
786 
787     if (pAllocator) {
788         ptr_instance->alloc_callbacks = *pAllocator;
789     }
790 
791     // Remove any callbacks that weren't cleaned up by the application
792     destroy_debug_callbacks_chain(ptr_instance, pAllocator);
793 
794     // Swap in the debug callbacks created during instance creation
795     loader_add_instance_only_debug_funcs(ptr_instance);
796 
797     disp = loader_get_instance_layer_dispatch(instance);
798     disp->DestroyInstance(ptr_instance->instance, pAllocator);
799 
800     free_loader_settings(ptr_instance, &ptr_instance->settings);
801 
802     loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->surfaces_list);
803     loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->debug_utils_messengers_list);
804     loader_destroy_generic_list(ptr_instance, (struct loader_generic_list *)&ptr_instance->debug_report_callbacks_list);
805 
806     loader_destroy_pointer_layer_list(ptr_instance, &ptr_instance->expanded_activated_layer_list);
807     loader_destroy_pointer_layer_list(ptr_instance, &ptr_instance->app_activated_layer_list);
808 
809     loader_delete_layer_list_and_properties(ptr_instance, &ptr_instance->instance_layer_list);
810 
811     free_string_list(ptr_instance, &ptr_instance->enabled_layer_names);
812 
813     if (ptr_instance->phys_devs_tramp) {
814         for (uint32_t i = 0; i < ptr_instance->phys_dev_count_tramp; i++) {
815             loader_instance_heap_free(ptr_instance, ptr_instance->phys_devs_tramp[i]);
816         }
817         loader_instance_heap_free(ptr_instance, ptr_instance->phys_devs_tramp);
818     }
819 
820     // Destroy the debug callbacks created during instance creation
821     destroy_debug_callbacks_chain(ptr_instance, pAllocator);
822 
823     loader_instance_heap_free(ptr_instance, ptr_instance->disp);
824     loader_instance_heap_free(ptr_instance, ptr_instance);
825     loader_platform_thread_unlock_mutex(&loader_lock);
826 
827     // Unload preloaded layers, so if vkEnumerateInstanceExtensionProperties or vkCreateInstance is called again, the ICD's are
828     // up to date
829     loader_unload_preloaded_icds();
830 }
831 
vkEnumeratePhysicalDevices(VkInstance instance,uint32_t * pPhysicalDeviceCount,VkPhysicalDevice * pPhysicalDevices)832 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(VkInstance instance, uint32_t *pPhysicalDeviceCount,
833                                                                         VkPhysicalDevice *pPhysicalDevices) {
834     VkResult res = VK_SUCCESS;
835     struct loader_instance *inst;
836 
837     loader_platform_thread_lock_mutex(&loader_lock);
838 
839     inst = loader_get_instance(instance);
840     if (NULL == inst) {
841         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
842                    "vkEnumeratePhysicalDevices: Invalid instance [VUID-vkEnumeratePhysicalDevices-instance-parameter]");
843         abort(); /* Intentionally fail so user can correct issue. */
844     }
845 
846     if (NULL == pPhysicalDeviceCount) {
847         loader_log(inst, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
848                    "vkEnumeratePhysicalDevices: Received NULL pointer for physical device count return value. "
849                    "[VUID-vkEnumeratePhysicalDevices-pPhysicalDeviceCount-parameter]");
850         res = VK_ERROR_INITIALIZATION_FAILED;
851         goto out;
852     }
853 
854     // Call down the chain to get the physical device info
855     res = inst->disp->layer_inst_disp.EnumeratePhysicalDevices(inst->instance, pPhysicalDeviceCount, pPhysicalDevices);
856 
857     if (NULL != pPhysicalDevices && (VK_SUCCESS == res || VK_INCOMPLETE == res)) {
858         // Wrap the PhysDev object for loader usage, return wrapped objects
859         VkResult update_res = setup_loader_tramp_phys_devs(inst, *pPhysicalDeviceCount, pPhysicalDevices);
860         if (VK_SUCCESS != update_res) {
861             res = update_res;
862         }
863 
864         // Unloads any drivers that do not expose any physical devices - should save some address space
865         unload_drivers_without_physical_devices(inst);
866     }
867 
868 out:
869 
870     loader_platform_thread_unlock_mutex(&loader_lock);
871 
872     return res;
873 }
874 
vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures * pFeatures)875 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice,
876                                                                      VkPhysicalDeviceFeatures *pFeatures) {
877     const VkLayerInstanceDispatchTable *disp;
878     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
879     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
880         loader_log(
881             NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
882             "vkGetPhysicalDeviceFeatures: Invalid physicalDevice [VUID-vkGetPhysicalDeviceFeatures-physicalDevice-parameter]");
883         abort(); /* Intentionally fail so user can correct issue. */
884     }
885     disp = loader_get_instance_layer_dispatch(physicalDevice);
886     disp->GetPhysicalDeviceFeatures(unwrapped_phys_dev, pFeatures);
887 }
888 
vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties * pFormatInfo)889 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format,
890                                                                              VkFormatProperties *pFormatInfo) {
891     const VkLayerInstanceDispatchTable *disp;
892     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
893     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
894         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
895                    "vkGetPhysicalDeviceFormatProperties: Invalid physicalDevice "
896                    "[VUID-vkGetPhysicalDeviceFormatProperties-physicalDevice-parameter]");
897         abort(); /* Intentionally fail so user can correct issue. */
898     }
899     disp = loader_get_instance_layer_dispatch(physicalDevice);
900     disp->GetPhysicalDeviceFormatProperties(unwrapped_phys_dev, format, pFormatInfo);
901 }
902 
vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkImageTiling tiling,VkImageUsageFlags usage,VkImageCreateFlags flags,VkImageFormatProperties * pImageFormatProperties)903 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
904     VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage,
905     VkImageCreateFlags flags, VkImageFormatProperties *pImageFormatProperties) {
906     const VkLayerInstanceDispatchTable *disp;
907     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
908     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
909         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
910                    "vkGetPhysicalDeviceImageFormatProperties: Invalid physicalDevice "
911                    "[VUID-vkGetPhysicalDeviceImageFormatProperties-physicalDevice-parameter]");
912         abort(); /* Intentionally fail so user can correct issue. */
913     }
914     disp = loader_get_instance_layer_dispatch(physicalDevice);
915     return disp->GetPhysicalDeviceImageFormatProperties(unwrapped_phys_dev, format, type, tiling, usage, flags,
916                                                         pImageFormatProperties);
917 }
918 
vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties * pProperties)919 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice,
920                                                                        VkPhysicalDeviceProperties *pProperties) {
921     const VkLayerInstanceDispatchTable *disp;
922     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
923     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
924         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
925                    "vkGetPhysicalDeviceProperties: Invalid physicalDevice "
926                    "[VUID-vkGetPhysicalDeviceProperties-physicalDevice-parameter]");
927         abort(); /* Intentionally fail so user can correct issue. */
928     }
929     disp = loader_get_instance_layer_dispatch(physicalDevice);
930     disp->GetPhysicalDeviceProperties(unwrapped_phys_dev, pProperties);
931 }
932 
vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties * pQueueProperties)933 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice,
934                                                                                   uint32_t *pQueueFamilyPropertyCount,
935                                                                                   VkQueueFamilyProperties *pQueueProperties) {
936     const VkLayerInstanceDispatchTable *disp;
937     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
938     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
939         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
940                    "vkGetPhysicalDeviceQueueFamilyProperties: Invalid physicalDevice "
941                    "[VUID-vkGetPhysicalDeviceQueueFamilyProperties-physicalDevice-parameter]");
942         abort(); /* Intentionally fail so user can correct issue. */
943     }
944     disp = loader_get_instance_layer_dispatch(physicalDevice);
945     disp->GetPhysicalDeviceQueueFamilyProperties(unwrapped_phys_dev, pQueueFamilyPropertyCount, pQueueProperties);
946 }
947 
vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties * pMemoryProperties)948 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice,
949                                                                              VkPhysicalDeviceMemoryProperties *pMemoryProperties) {
950     const VkLayerInstanceDispatchTable *disp;
951     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
952     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
953         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
954                    "vkGetPhysicalDeviceMemoryProperties: Invalid physicalDevice "
955                    "[VUID-vkGetPhysicalDeviceMemoryProperties-physicalDevice-parameter]");
956         abort(); /* Intentionally fail so user can correct issue. */
957     }
958     disp = loader_get_instance_layer_dispatch(physicalDevice);
959     disp->GetPhysicalDeviceMemoryProperties(unwrapped_phys_dev, pMemoryProperties);
960 }
961 
vkCreateDevice(VkPhysicalDevice physicalDevice,const VkDeviceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDevice * pDevice)962 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo,
963                                                             const VkAllocationCallbacks *pAllocator, VkDevice *pDevice) {
964     if (VK_NULL_HANDLE == loader_unwrap_physical_device(physicalDevice)) {
965         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
966                    "vkCreateDevice: Invalid physicalDevice [VUID-vkCreateDevice-physicalDevice-parameter]");
967         abort(); /* Intentionally fail so user can correct issue. */
968     }
969     loader_platform_thread_lock_mutex(&loader_lock);
970     VkResult res = loader_layer_create_device(NULL, physicalDevice, pCreateInfo, pAllocator, pDevice, NULL, NULL);
971     loader_platform_thread_unlock_mutex(&loader_lock);
972     return res;
973 }
974 
vkDestroyDevice(VkDevice device,const VkAllocationCallbacks * pAllocator)975 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator) {
976     const VkLayerDispatchTable *disp;
977 
978     if (device == VK_NULL_HANDLE) {
979         return;
980     }
981     disp = loader_get_dispatch(device);
982     if (NULL == disp) {
983         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
984                    "vkDestroyDevice: Invalid device [VUID-vkDestroyDevice-device-parameter]");
985         abort(); /* Intentionally fail so user can correct issue. */
986     }
987 
988     loader_platform_thread_lock_mutex(&loader_lock);
989 
990     loader_layer_destroy_device(device, pAllocator, disp->DestroyDevice);
991 
992     loader_platform_thread_unlock_mutex(&loader_lock);
993 }
994 
vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice,const char * pLayerName,uint32_t * pPropertyCount,VkExtensionProperties * pProperties)995 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice,
996                                                                                   const char *pLayerName, uint32_t *pPropertyCount,
997                                                                                   VkExtensionProperties *pProperties) {
998     VkResult res = VK_SUCCESS;
999     struct loader_physical_device_tramp *phys_dev;
1000     const VkLayerInstanceDispatchTable *disp;
1001     phys_dev = (struct loader_physical_device_tramp *)physicalDevice;
1002     if (VK_NULL_HANDLE == physicalDevice || PHYS_TRAMP_MAGIC_NUMBER != phys_dev->magic) {
1003         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1004                    "vkEnumerateDeviceExtensionProperties: Invalid physicalDevice "
1005                    "[VUID-vkEnumerateDeviceExtensionProperties-physicalDevice-parameter]");
1006         abort(); /* Intentionally fail so user can correct issue. */
1007     }
1008 
1009     loader_platform_thread_lock_mutex(&loader_lock);
1010 
1011     // always pass this call down the instance chain which will terminate
1012     // in the ICD. This allows layers to filter the extensions coming back
1013     // up the chain. In the terminator we look up layer extensions from the
1014     // manifest file if it wasn't provided by the layer itself.
1015     disp = loader_get_instance_layer_dispatch(physicalDevice);
1016     res = disp->EnumerateDeviceExtensionProperties(phys_dev->phys_dev, pLayerName, pPropertyCount, pProperties);
1017 
1018     loader_platform_thread_unlock_mutex(&loader_lock);
1019     return res;
1020 }
1021 
vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkLayerProperties * pProperties)1022 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice,
1023                                                                               uint32_t *pPropertyCount,
1024                                                                               VkLayerProperties *pProperties) {
1025     uint32_t copy_size;
1026     struct loader_physical_device_tramp *phys_dev;
1027     loader_platform_thread_lock_mutex(&loader_lock);
1028 
1029     // Don't dispatch this call down the instance chain, want all device layers
1030     // enumerated and instance chain may not contain all device layers
1031     // TODO re-evaluate the above statement we maybe able to start calling
1032     // down the chain
1033 
1034     phys_dev = (struct loader_physical_device_tramp *)physicalDevice;
1035     if (VK_NULL_HANDLE == physicalDevice || PHYS_TRAMP_MAGIC_NUMBER != phys_dev->magic) {
1036         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1037                    "vkEnumerateDeviceLayerProperties: Invalid physicalDevice "
1038                    "[VUID-vkEnumerateDeviceLayerProperties-physicalDevice-parameter]");
1039         loader_platform_thread_unlock_mutex(&loader_lock);
1040         abort(); /* Intentionally fail so user can correct issue. */
1041     }
1042 
1043     const struct loader_instance *inst = phys_dev->this_instance;
1044 
1045     uint32_t count = inst->app_activated_layer_list.count;
1046     if (count == 0 || pProperties == NULL) {
1047         *pPropertyCount = count;
1048         loader_platform_thread_unlock_mutex(&loader_lock);
1049         return VK_SUCCESS;
1050     }
1051 
1052     copy_size = (*pPropertyCount < count) ? *pPropertyCount : count;
1053     for (uint32_t i = 0; i < copy_size; i++) {
1054         memcpy(&pProperties[i], &(inst->app_activated_layer_list.list[i]->info), sizeof(VkLayerProperties));
1055     }
1056     *pPropertyCount = copy_size;
1057 
1058     if (copy_size < count) {
1059         loader_platform_thread_unlock_mutex(&loader_lock);
1060         return VK_INCOMPLETE;
1061     }
1062 
1063     loader_platform_thread_unlock_mutex(&loader_lock);
1064     return VK_SUCCESS;
1065 }
1066 
vkGetDeviceQueue(VkDevice device,uint32_t queueNodeIndex,uint32_t queueIndex,VkQueue * pQueue)1067 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex,
1068                                                           VkQueue *pQueue) {
1069     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1070     if (NULL == disp) {
1071         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1072                    "vkGetDeviceQueue: Invalid device [VUID-vkGetDeviceQueue-device-parameter]");
1073         abort(); /* Intentionally fail so user can correct issue. */
1074     }
1075 
1076     disp->GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
1077     if (pQueue != NULL && *pQueue != NULL) {
1078         loader_set_dispatch(*pQueue, disp);
1079     }
1080 }
1081 
vkQueueSubmit(VkQueue queue,uint32_t submitCount,const VkSubmitInfo * pSubmits,VkFence fence)1082 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits,
1083                                                            VkFence fence) {
1084     const VkLayerDispatchTable *disp = loader_get_dispatch(queue);
1085     if (NULL == disp) {
1086         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1087                    "vkQueueSubmit: Invalid queue [VUID-vkQueueSubmit-queue-parameter]");
1088         abort(); /* Intentionally fail so user can correct issue. */
1089     }
1090 
1091     return disp->QueueSubmit(queue, submitCount, pSubmits, fence);
1092 }
1093 
vkQueueWaitIdle(VkQueue queue)1094 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(VkQueue queue) {
1095     const VkLayerDispatchTable *disp = loader_get_dispatch(queue);
1096     if (NULL == disp) {
1097         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1098                    "vkQueueWaitIdle: Invalid queue [VUID-vkQueueWaitIdle-queue-parameter]");
1099         abort(); /* Intentionally fail so user can correct issue. */
1100     }
1101 
1102     return disp->QueueWaitIdle(queue);
1103 }
1104 
vkDeviceWaitIdle(VkDevice device)1105 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(VkDevice device) {
1106     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1107     if (NULL == disp) {
1108         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1109                    "vkDeviceWaitIdle: Invalid device [VUID-vkDeviceWaitIdle-device-parameter]");
1110         abort(); /* Intentionally fail so user can correct issue. */
1111     }
1112 
1113     return disp->DeviceWaitIdle(device);
1114 }
1115 
vkAllocateMemory(VkDevice device,const VkMemoryAllocateInfo * pAllocateInfo,const VkAllocationCallbacks * pAllocator,VkDeviceMemory * pMemory)1116 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo *pAllocateInfo,
1117                                                               const VkAllocationCallbacks *pAllocator, VkDeviceMemory *pMemory) {
1118     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1119     if (NULL == disp) {
1120         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1121                    "vkAllocateMemory: Invalid device [VUID-vkAllocateMemory-device-parameter]");
1122         abort(); /* Intentionally fail so user can correct issue. */
1123     }
1124 
1125     return disp->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
1126 }
1127 
vkFreeMemory(VkDevice device,VkDeviceMemory mem,const VkAllocationCallbacks * pAllocator)1128 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkFreeMemory(VkDevice device, VkDeviceMemory mem,
1129                                                       const VkAllocationCallbacks *pAllocator) {
1130     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1131     if (NULL == disp) {
1132         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1133                    "vkFreeMemory: Invalid device [VUID-vkFreeMemory-device-parameter]");
1134         abort(); /* Intentionally fail so user can correct issue. */
1135     }
1136 
1137     disp->FreeMemory(device, mem, pAllocator);
1138 }
1139 
vkMapMemory(VkDevice device,VkDeviceMemory mem,VkDeviceSize offset,VkDeviceSize size,VkFlags flags,void ** ppData)1140 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset,
1141                                                          VkDeviceSize size, VkFlags flags, void **ppData) {
1142     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1143     if (NULL == disp) {
1144         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1145                    "vkMapMemory: Invalid device [VUID-vkMapMemory-device-parameter]");
1146         abort(); /* Intentionally fail so user can correct issue. */
1147     }
1148 
1149     return disp->MapMemory(device, mem, offset, size, flags, ppData);
1150 }
1151 
vkUnmapMemory(VkDevice device,VkDeviceMemory mem)1152 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(VkDevice device, VkDeviceMemory mem) {
1153     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1154     if (NULL == disp) {
1155         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1156                    "vkUnmapMemory: Invalid device [VUID-vkUnmapMemory-device-parameter]");
1157         abort(); /* Intentionally fail so user can correct issue. */
1158     }
1159 
1160     disp->UnmapMemory(device, mem);
1161 }
1162 
vkFlushMappedMemoryRanges(VkDevice device,uint32_t memoryRangeCount,const VkMappedMemoryRange * pMemoryRanges)1163 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount,
1164                                                                        const VkMappedMemoryRange *pMemoryRanges) {
1165     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1166     if (NULL == disp) {
1167         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1168                    "vkFlushMappedMemoryRanges: Invalid device [VUID-vkFlushMappedMemoryRanges-device-parameter]");
1169         abort(); /* Intentionally fail so user can correct issue. */
1170     }
1171 
1172     return disp->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1173 }
1174 
vkInvalidateMappedMemoryRanges(VkDevice device,uint32_t memoryRangeCount,const VkMappedMemoryRange * pMemoryRanges)1175 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount,
1176                                                                             const VkMappedMemoryRange *pMemoryRanges) {
1177     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1178     if (NULL == disp) {
1179         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1180                    "vkInvalidateMappedMemoryRanges: Invalid device [VUID-vkInvalidateMappedMemoryRanges-device-parameter]");
1181         abort(); /* Intentionally fail so user can correct issue. */
1182     }
1183 
1184     return disp->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1185 }
1186 
vkGetDeviceMemoryCommitment(VkDevice device,VkDeviceMemory memory,VkDeviceSize * pCommittedMemoryInBytes)1187 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory,
1188                                                                      VkDeviceSize *pCommittedMemoryInBytes) {
1189     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1190     if (NULL == disp) {
1191         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1192                    "vkGetDeviceMemoryCommitment: Invalid device [VUID-vkGetDeviceMemoryCommitment-device-parameter]");
1193         abort(); /* Intentionally fail so user can correct issue. */
1194     }
1195 
1196     disp->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
1197 }
1198 
vkBindBufferMemory(VkDevice device,VkBuffer buffer,VkDeviceMemory mem,VkDeviceSize offset)1199 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem,
1200                                                                 VkDeviceSize offset) {
1201     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1202     if (NULL == disp) {
1203         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1204                    "vkBindBufferMemory: Invalid device [VUID-vkBindBufferMemory-device-parameter]");
1205         abort(); /* Intentionally fail so user can correct issue. */
1206     }
1207 
1208     return disp->BindBufferMemory(device, buffer, mem, offset);
1209 }
1210 
vkBindImageMemory(VkDevice device,VkImage image,VkDeviceMemory mem,VkDeviceSize offset)1211 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem,
1212                                                                VkDeviceSize offset) {
1213     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1214     if (NULL == disp) {
1215         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1216                    "vkBindImageMemory: Invalid device [VUID-vkBindImageMemory-device-parameter]");
1217         abort(); /* Intentionally fail so user can correct issue. */
1218     }
1219 
1220     return disp->BindImageMemory(device, image, mem, offset);
1221 }
1222 
vkGetBufferMemoryRequirements(VkDevice device,VkBuffer buffer,VkMemoryRequirements * pMemoryRequirements)1223 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer,
1224                                                                        VkMemoryRequirements *pMemoryRequirements) {
1225     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1226     if (NULL == disp) {
1227         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1228                    "vkGetBufferMemoryRequirements: Invalid device [VUID-vkGetBufferMemoryRequirements-device-parameter]");
1229         abort(); /* Intentionally fail so user can correct issue. */
1230     }
1231 
1232     disp->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
1233 }
1234 
vkGetImageMemoryRequirements(VkDevice device,VkImage image,VkMemoryRequirements * pMemoryRequirements)1235 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(VkDevice device, VkImage image,
1236                                                                       VkMemoryRequirements *pMemoryRequirements) {
1237     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1238     if (NULL == disp) {
1239         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1240                    "vkGetImageMemoryRequirements: Invalid device [VUID-vkGetImageMemoryRequirements-device-parameter]");
1241         abort(); /* Intentionally fail so user can correct issue. */
1242     }
1243 
1244     disp->GetImageMemoryRequirements(device, image, pMemoryRequirements);
1245 }
1246 
1247 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL
vkGetImageSparseMemoryRequirements(VkDevice device,VkImage image,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements * pSparseMemoryRequirements)1248 vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t *pSparseMemoryRequirementCount,
1249                                    VkSparseImageMemoryRequirements *pSparseMemoryRequirements) {
1250     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1251     if (NULL == disp) {
1252         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1253                    "vkGetImageSparseMemoryRequirements: Invalid device [VUID-vkGetImageSparseMemoryRequirements-device-parameter]");
1254         abort(); /* Intentionally fail so user can correct issue. */
1255     }
1256 
1257     disp->GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
1258 }
1259 
vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkSampleCountFlagBits samples,VkImageUsageFlags usage,VkImageTiling tiling,uint32_t * pPropertyCount,VkSparseImageFormatProperties * pProperties)1260 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
1261     VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage,
1262     VkImageTiling tiling, uint32_t *pPropertyCount, VkSparseImageFormatProperties *pProperties) {
1263     const VkLayerInstanceDispatchTable *disp;
1264     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
1265     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
1266         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1267                    "vkGetPhysicalDeviceSparseImageFormatProperties: Invalid physicalDevice "
1268                    "[VUID-vkGetPhysicalDeviceSparseImageFormatProperties-physicalDevice-parameter]");
1269         abort(); /* Intentionally fail so user can correct issue. */
1270     }
1271 
1272     disp = loader_get_instance_layer_dispatch(physicalDevice);
1273     disp->GetPhysicalDeviceSparseImageFormatProperties(unwrapped_phys_dev, format, type, samples, usage, tiling, pPropertyCount,
1274                                                        pProperties);
1275 }
1276 
vkQueueBindSparse(VkQueue queue,uint32_t bindInfoCount,const VkBindSparseInfo * pBindInfo,VkFence fence)1277 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount,
1278                                                                const VkBindSparseInfo *pBindInfo, VkFence fence) {
1279     const VkLayerDispatchTable *disp = loader_get_dispatch(queue);
1280     if (NULL == disp) {
1281         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1282                    "vkQueueBindSparse: Invalid queue [VUID-vkQueueBindSparse-queue-parameter]");
1283         abort(); /* Intentionally fail so user can correct issue. */
1284     }
1285 
1286     return disp->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
1287 }
1288 
vkCreateFence(VkDevice device,const VkFenceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkFence * pFence)1289 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(VkDevice device, const VkFenceCreateInfo *pCreateInfo,
1290                                                            const VkAllocationCallbacks *pAllocator, VkFence *pFence) {
1291     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1292     if (NULL == disp) {
1293         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1294                    "vkCreateFence: Invalid device [VUID-vkCreateFence-device-parameter]");
1295         abort(); /* Intentionally fail so user can correct issue. */
1296     }
1297 
1298     return disp->CreateFence(device, pCreateInfo, pAllocator, pFence);
1299 }
1300 
vkDestroyFence(VkDevice device,VkFence fence,const VkAllocationCallbacks * pAllocator)1301 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks *pAllocator) {
1302     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1303     if (NULL == disp) {
1304         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1305                    "vkDestroyFence: Invalid device [VUID-vkDestroyFence-device-parameter]");
1306         abort(); /* Intentionally fail so user can correct issue. */
1307     }
1308 
1309     disp->DestroyFence(device, fence, pAllocator);
1310 }
1311 
vkResetFences(VkDevice device,uint32_t fenceCount,const VkFence * pFences)1312 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence *pFences) {
1313     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1314     if (NULL == disp) {
1315         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1316                    "vkResetFences: Invalid device [VUID-vkResetFences-device-parameter]");
1317         abort(); /* Intentionally fail so user can correct issue. */
1318     }
1319 
1320     return disp->ResetFences(device, fenceCount, pFences);
1321 }
1322 
vkGetFenceStatus(VkDevice device,VkFence fence)1323 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(VkDevice device, VkFence fence) {
1324     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1325     if (NULL == disp) {
1326         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1327                    "vkGetFenceStatus: Invalid device [VUID-vkGetFenceStatus-device-parameter]");
1328         abort(); /* Intentionally fail so user can correct issue. */
1329     }
1330 
1331     return disp->GetFenceStatus(device, fence);
1332 }
1333 
vkWaitForFences(VkDevice device,uint32_t fenceCount,const VkFence * pFences,VkBool32 waitAll,uint64_t timeout)1334 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence *pFences,
1335                                                              VkBool32 waitAll, uint64_t timeout) {
1336     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1337     if (NULL == disp) {
1338         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1339                    "vkWaitForFences: Invalid device [VUID-vkWaitForFences-device-parameter]");
1340         abort(); /* Intentionally fail so user can correct issue. */
1341     }
1342 
1343     return disp->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
1344 }
1345 
vkCreateSemaphore(VkDevice device,const VkSemaphoreCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSemaphore * pSemaphore)1346 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo *pCreateInfo,
1347                                                                const VkAllocationCallbacks *pAllocator, VkSemaphore *pSemaphore) {
1348     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1349     if (NULL == disp) {
1350         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1351                    "vkCreateSemaphore: Invalid device [VUID-vkCreateSemaphore-device-parameter]");
1352         abort(); /* Intentionally fail so user can correct issue. */
1353     }
1354 
1355     return disp->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
1356 }
1357 
vkDestroySemaphore(VkDevice device,VkSemaphore semaphore,const VkAllocationCallbacks * pAllocator)1358 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(VkDevice device, VkSemaphore semaphore,
1359                                                             const VkAllocationCallbacks *pAllocator) {
1360     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1361     if (NULL == disp) {
1362         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1363                    "vkDestroySemaphore: Invalid device [VUID-vkDestroySemaphore-device-parameter]");
1364         abort(); /* Intentionally fail so user can correct issue. */
1365     }
1366 
1367     disp->DestroySemaphore(device, semaphore, pAllocator);
1368 }
1369 
vkCreateEvent(VkDevice device,const VkEventCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkEvent * pEvent)1370 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(VkDevice device, const VkEventCreateInfo *pCreateInfo,
1371                                                            const VkAllocationCallbacks *pAllocator, VkEvent *pEvent) {
1372     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1373     if (NULL == disp) {
1374         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1375                    "vkCreateEvent: Invalid device [VUID-vkCreateEvent-device-parameter]");
1376         abort(); /* Intentionally fail so user can correct issue. */
1377     }
1378 
1379     return disp->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
1380 }
1381 
vkDestroyEvent(VkDevice device,VkEvent event,const VkAllocationCallbacks * pAllocator)1382 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks *pAllocator) {
1383     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1384     if (NULL == disp) {
1385         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1386                    "vkDestroyEvent: Invalid device [VUID-vkDestroyEvent-device-parameter]");
1387         abort(); /* Intentionally fail so user can correct issue. */
1388     }
1389 
1390     disp->DestroyEvent(device, event, pAllocator);
1391 }
1392 
vkGetEventStatus(VkDevice device,VkEvent event)1393 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(VkDevice device, VkEvent event) {
1394     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1395     if (NULL == disp) {
1396         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1397                    "vkGetEventStatus: Invalid device [VUID-vkGetEventStatus-device-parameter]");
1398         abort(); /* Intentionally fail so user can correct issue. */
1399     }
1400 
1401     return disp->GetEventStatus(device, event);
1402 }
1403 
vkSetEvent(VkDevice device,VkEvent event)1404 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(VkDevice device, VkEvent event) {
1405     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1406     if (NULL == disp) {
1407         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1408                    "vkSetEvent: Invalid device [VUID-vkSetEvent-device-parameter]");
1409         abort(); /* Intentionally fail so user can correct issue. */
1410     }
1411 
1412     return disp->SetEvent(device, event);
1413 }
1414 
vkResetEvent(VkDevice device,VkEvent event)1415 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(VkDevice device, VkEvent event) {
1416     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1417     if (NULL == disp) {
1418         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1419                    "vkResetEvent: Invalid device [VUID-vkResetEvent-device-parameter]");
1420         abort(); /* Intentionally fail so user can correct issue. */
1421     }
1422 
1423     return disp->ResetEvent(device, event);
1424 }
1425 
vkCreateQueryPool(VkDevice device,const VkQueryPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkQueryPool * pQueryPool)1426 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo *pCreateInfo,
1427                                                                const VkAllocationCallbacks *pAllocator, VkQueryPool *pQueryPool) {
1428     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1429     if (NULL == disp) {
1430         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1431                    "vkCreateQueryPool: Invalid device [VUID-vkCreateQueryPool-device-parameter]");
1432         abort(); /* Intentionally fail so user can correct issue. */
1433     }
1434 
1435     return disp->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
1436 }
1437 
vkDestroyQueryPool(VkDevice device,VkQueryPool queryPool,const VkAllocationCallbacks * pAllocator)1438 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool,
1439                                                             const VkAllocationCallbacks *pAllocator) {
1440     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1441     if (NULL == disp) {
1442         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1443                    "vkDestroyQueryPool: Invalid device [VUID-vkDestroyQueryPool-device-parameter]");
1444         abort(); /* Intentionally fail so user can correct issue. */
1445     }
1446 
1447     disp->DestroyQueryPool(device, queryPool, pAllocator);
1448 }
1449 
vkGetQueryPoolResults(VkDevice device,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,size_t dataSize,void * pData,VkDeviceSize stride,VkQueryResultFlags flags)1450 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery,
1451                                                                    uint32_t queryCount, size_t dataSize, void *pData,
1452                                                                    VkDeviceSize stride, VkQueryResultFlags flags) {
1453     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1454     if (NULL == disp) {
1455         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1456                    "vkGetQueryPoolResults: Invalid device [VUID-vkGetQueryPoolResults-device-parameter]");
1457         abort(); /* Intentionally fail so user can correct issue. */
1458     }
1459 
1460     return disp->GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
1461 }
1462 
vkCreateBuffer(VkDevice device,const VkBufferCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkBuffer * pBuffer)1463 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(VkDevice device, const VkBufferCreateInfo *pCreateInfo,
1464                                                             const VkAllocationCallbacks *pAllocator, VkBuffer *pBuffer) {
1465     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1466     if (NULL == disp) {
1467         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1468                    "vkCreateBuffer: Invalid device [VUID-vkCreateBuffer-device-parameter]");
1469         abort(); /* Intentionally fail so user can correct issue. */
1470     }
1471 
1472     return disp->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
1473 }
1474 
vkDestroyBuffer(VkDevice device,VkBuffer buffer,const VkAllocationCallbacks * pAllocator)1475 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(VkDevice device, VkBuffer buffer,
1476                                                          const VkAllocationCallbacks *pAllocator) {
1477     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1478     if (NULL == disp) {
1479         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1480                    "vkDestroyBuffer: Invalid device [VUID-vkDestroyBuffer-device-parameter]");
1481         abort(); /* Intentionally fail so user can correct issue. */
1482     }
1483 
1484     disp->DestroyBuffer(device, buffer, pAllocator);
1485 }
1486 
vkCreateBufferView(VkDevice device,const VkBufferViewCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkBufferView * pView)1487 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo *pCreateInfo,
1488                                                                 const VkAllocationCallbacks *pAllocator, VkBufferView *pView) {
1489     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1490     if (NULL == disp) {
1491         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1492                    "vkCreateBufferView: Invalid device [VUID-vkCreateBufferView-device-parameter]");
1493         abort(); /* Intentionally fail so user can correct issue. */
1494     }
1495 
1496     return disp->CreateBufferView(device, pCreateInfo, pAllocator, pView);
1497 }
1498 
vkDestroyBufferView(VkDevice device,VkBufferView bufferView,const VkAllocationCallbacks * pAllocator)1499 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(VkDevice device, VkBufferView bufferView,
1500                                                              const VkAllocationCallbacks *pAllocator) {
1501     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1502     if (NULL == disp) {
1503         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1504                    "vkDestroyBufferView: Invalid device [VUID-vkDestroyBufferView-device-parameter]");
1505         abort(); /* Intentionally fail so user can correct issue. */
1506     }
1507 
1508     disp->DestroyBufferView(device, bufferView, pAllocator);
1509 }
1510 
vkCreateImage(VkDevice device,const VkImageCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkImage * pImage)1511 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(VkDevice device, const VkImageCreateInfo *pCreateInfo,
1512                                                            const VkAllocationCallbacks *pAllocator, VkImage *pImage) {
1513     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1514     if (NULL == disp) {
1515         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1516                    "vkCreateImage: Invalid device [VUID-vkCreateImage-device-parameter]");
1517         abort(); /* Intentionally fail so user can correct issue. */
1518     }
1519 
1520     return disp->CreateImage(device, pCreateInfo, pAllocator, pImage);
1521 }
1522 
vkDestroyImage(VkDevice device,VkImage image,const VkAllocationCallbacks * pAllocator)1523 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks *pAllocator) {
1524     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1525     if (NULL == disp) {
1526         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1527                    "vkDestroyImage: Invalid device [VUID-vkDestroyImage-device-parameter]");
1528         abort(); /* Intentionally fail so user can correct issue. */
1529     }
1530 
1531     disp->DestroyImage(device, image, pAllocator);
1532 }
1533 
vkGetImageSubresourceLayout(VkDevice device,VkImage image,const VkImageSubresource * pSubresource,VkSubresourceLayout * pLayout)1534 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(VkDevice device, VkImage image,
1535                                                                      const VkImageSubresource *pSubresource,
1536                                                                      VkSubresourceLayout *pLayout) {
1537     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1538     if (NULL == disp) {
1539         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1540                    "vkGetImageSubresourceLayout: Invalid device [VUID-vkGetImageSubresourceLayout-device-parameter]");
1541         abort(); /* Intentionally fail so user can correct issue. */
1542     }
1543 
1544     disp->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
1545 }
1546 
vkCreateImageView(VkDevice device,const VkImageViewCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkImageView * pView)1547 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(VkDevice device, const VkImageViewCreateInfo *pCreateInfo,
1548                                                                const VkAllocationCallbacks *pAllocator, VkImageView *pView) {
1549     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1550     if (NULL == disp) {
1551         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1552                    "vkCreateImageView: Invalid device [VUID-vkCreateImageView-device-parameter]");
1553         abort(); /* Intentionally fail so user can correct issue. */
1554     }
1555 
1556     return disp->CreateImageView(device, pCreateInfo, pAllocator, pView);
1557 }
1558 
vkDestroyImageView(VkDevice device,VkImageView imageView,const VkAllocationCallbacks * pAllocator)1559 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(VkDevice device, VkImageView imageView,
1560                                                             const VkAllocationCallbacks *pAllocator) {
1561     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1562     if (NULL == disp) {
1563         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1564                    "vkDestroyImageView: Invalid device [VUID-vkDestroyImageView-device-parameter]");
1565         abort(); /* Intentionally fail so user can correct issue. */
1566     }
1567 
1568     disp->DestroyImageView(device, imageView, pAllocator);
1569 }
1570 
vkCreateShaderModule(VkDevice device,const VkShaderModuleCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkShaderModule * pShader)1571 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo *pCreateInfo,
1572                                                                   const VkAllocationCallbacks *pAllocator,
1573                                                                   VkShaderModule *pShader) {
1574     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1575     if (NULL == disp) {
1576         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1577                    "vkCreateShaderModule: Invalid device [VUID-vkCreateShaderModule-device-parameter]");
1578         abort(); /* Intentionally fail so user can correct issue. */
1579     }
1580 
1581     return disp->CreateShaderModule(device, pCreateInfo, pAllocator, pShader);
1582 }
1583 
vkDestroyShaderModule(VkDevice device,VkShaderModule shaderModule,const VkAllocationCallbacks * pAllocator)1584 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule,
1585                                                                const VkAllocationCallbacks *pAllocator) {
1586     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1587     if (NULL == disp) {
1588         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1589                    "vkDestroyShaderModule: Invalid device [VUID-vkDestroyShaderModule-device-parameter]");
1590         abort(); /* Intentionally fail so user can correct issue. */
1591     }
1592 
1593     disp->DestroyShaderModule(device, shaderModule, pAllocator);
1594 }
1595 
vkCreatePipelineCache(VkDevice device,const VkPipelineCacheCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineCache * pPipelineCache)1596 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo *pCreateInfo,
1597                                                                    const VkAllocationCallbacks *pAllocator,
1598                                                                    VkPipelineCache *pPipelineCache) {
1599     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1600     if (NULL == disp) {
1601         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1602                    "vkCreatePipelineCache: Invalid device [VUID-vkCreatePipelineCache-device-parameter]");
1603         abort(); /* Intentionally fail so user can correct issue. */
1604     }
1605 
1606     return disp->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
1607 }
1608 
vkDestroyPipelineCache(VkDevice device,VkPipelineCache pipelineCache,const VkAllocationCallbacks * pAllocator)1609 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache,
1610                                                                 const VkAllocationCallbacks *pAllocator) {
1611     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1612     if (NULL == disp) {
1613         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1614                    "vkDestroyPipelineCache: Invalid device [VUID-vkDestroyPipelineCache-device-parameter]");
1615         abort(); /* Intentionally fail so user can correct issue. */
1616     }
1617 
1618     disp->DestroyPipelineCache(device, pipelineCache, pAllocator);
1619 }
1620 
vkGetPipelineCacheData(VkDevice device,VkPipelineCache pipelineCache,size_t * pDataSize,void * pData)1621 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache,
1622                                                                     size_t *pDataSize, void *pData) {
1623     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1624     if (NULL == disp) {
1625         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1626                    "vkGetPipelineCacheData: Invalid device [VUID-vkGetPipelineCacheData-device-parameter]");
1627         abort(); /* Intentionally fail so user can correct issue. */
1628     }
1629 
1630     return disp->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
1631 }
1632 
vkMergePipelineCaches(VkDevice device,VkPipelineCache dstCache,uint32_t srcCacheCount,const VkPipelineCache * pSrcCaches)1633 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(VkDevice device, VkPipelineCache dstCache,
1634                                                                    uint32_t srcCacheCount, const VkPipelineCache *pSrcCaches) {
1635     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1636     if (NULL == disp) {
1637         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1638                    "vkMergePipelineCaches: Invalid device [VUID-vkMergePipelineCaches-device-parameter]");
1639         abort(); /* Intentionally fail so user can correct issue. */
1640     }
1641 
1642     return disp->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
1643 }
1644 
vkCreateGraphicsPipelines(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const VkGraphicsPipelineCreateInfo * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkPipeline * pPipelines)1645 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache,
1646                                                                        uint32_t createInfoCount,
1647                                                                        const VkGraphicsPipelineCreateInfo *pCreateInfos,
1648                                                                        const VkAllocationCallbacks *pAllocator,
1649                                                                        VkPipeline *pPipelines) {
1650     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1651     if (NULL == disp) {
1652         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1653                    "vkCreateGraphicsPipelines: Invalid device [VUID-vkCreateGraphicsPipelines-device-parameter]");
1654         abort(); /* Intentionally fail so user can correct issue. */
1655     }
1656 
1657     return disp->CreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
1658 }
1659 
vkCreateComputePipelines(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const VkComputePipelineCreateInfo * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkPipeline * pPipelines)1660 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache,
1661                                                                       uint32_t createInfoCount,
1662                                                                       const VkComputePipelineCreateInfo *pCreateInfos,
1663                                                                       const VkAllocationCallbacks *pAllocator,
1664                                                                       VkPipeline *pPipelines) {
1665     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1666     if (NULL == disp) {
1667         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1668                    "vkCreateComputePipelines: Invalid device [VUID-vkCreateComputePipelines-device-parameter]");
1669         abort(); /* Intentionally fail so user can correct issue. */
1670     }
1671 
1672     return disp->CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
1673 }
1674 
vkDestroyPipeline(VkDevice device,VkPipeline pipeline,const VkAllocationCallbacks * pAllocator)1675 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(VkDevice device, VkPipeline pipeline,
1676                                                            const VkAllocationCallbacks *pAllocator) {
1677     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1678     if (NULL == disp) {
1679         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1680                    "vkDestroyPipeline: Invalid device [VUID-vkDestroyPipeline-device-parameter]");
1681         abort(); /* Intentionally fail so user can correct issue. */
1682     }
1683 
1684     disp->DestroyPipeline(device, pipeline, pAllocator);
1685 }
1686 
vkCreatePipelineLayout(VkDevice device,const VkPipelineLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineLayout * pPipelineLayout)1687 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo *pCreateInfo,
1688                                                                     const VkAllocationCallbacks *pAllocator,
1689                                                                     VkPipelineLayout *pPipelineLayout) {
1690     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1691     if (NULL == disp) {
1692         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1693                    "vkCreatePipelineLayout: Invalid device [VUID-vkCreatePipelineLayout-device-parameter]");
1694         abort(); /* Intentionally fail so user can correct issue. */
1695     }
1696 
1697     return disp->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
1698 }
1699 
vkDestroyPipelineLayout(VkDevice device,VkPipelineLayout pipelineLayout,const VkAllocationCallbacks * pAllocator)1700 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout,
1701                                                                  const VkAllocationCallbacks *pAllocator) {
1702     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1703     if (NULL == disp) {
1704         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1705                    "vkDestroyPipelineLayout: Invalid device [VUID-vkDestroyPipelineLayout-device-parameter]");
1706         abort(); /* Intentionally fail so user can correct issue. */
1707     }
1708 
1709     disp->DestroyPipelineLayout(device, pipelineLayout, pAllocator);
1710 }
1711 
vkCreateSampler(VkDevice device,const VkSamplerCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSampler * pSampler)1712 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(VkDevice device, const VkSamplerCreateInfo *pCreateInfo,
1713                                                              const VkAllocationCallbacks *pAllocator, VkSampler *pSampler) {
1714     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1715     if (NULL == disp) {
1716         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1717                    "vkCreateSampler: Invalid device [VUID-vkCreateSampler-device-parameter]");
1718         abort(); /* Intentionally fail so user can correct issue. */
1719     }
1720 
1721     return disp->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
1722 }
1723 
vkDestroySampler(VkDevice device,VkSampler sampler,const VkAllocationCallbacks * pAllocator)1724 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySampler(VkDevice device, VkSampler sampler,
1725                                                           const VkAllocationCallbacks *pAllocator) {
1726     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1727     if (NULL == disp) {
1728         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1729                    "vkDestroySampler: Invalid device [VUID-vkDestroySampler-device-parameter]");
1730         abort(); /* Intentionally fail so user can correct issue. */
1731     }
1732 
1733     disp->DestroySampler(device, sampler, pAllocator);
1734 }
1735 
vkCreateDescriptorSetLayout(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorSetLayout * pSetLayout)1736 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(VkDevice device,
1737                                                                          const VkDescriptorSetLayoutCreateInfo *pCreateInfo,
1738                                                                          const VkAllocationCallbacks *pAllocator,
1739                                                                          VkDescriptorSetLayout *pSetLayout) {
1740     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1741     if (NULL == disp) {
1742         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1743                    "vkCreateDescriptorSetLayout: Invalid device [VUID-vkCreateDescriptorSetLayout-device-parameter]");
1744         abort(); /* Intentionally fail so user can correct issue. */
1745     }
1746 
1747     return disp->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
1748 }
1749 
vkDestroyDescriptorSetLayout(VkDevice device,VkDescriptorSetLayout descriptorSetLayout,const VkAllocationCallbacks * pAllocator)1750 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout,
1751                                                                       const VkAllocationCallbacks *pAllocator) {
1752     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1753     if (NULL == disp) {
1754         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1755                    "vkDestroyDescriptorSetLayout: Invalid device [VUID-vkDestroyDescriptorSetLayout-device-parameter]");
1756         abort(); /* Intentionally fail so user can correct issue. */
1757     }
1758 
1759     disp->DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
1760 }
1761 
vkCreateDescriptorPool(VkDevice device,const VkDescriptorPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorPool * pDescriptorPool)1762 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo *pCreateInfo,
1763                                                                     const VkAllocationCallbacks *pAllocator,
1764                                                                     VkDescriptorPool *pDescriptorPool) {
1765     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1766     if (NULL == disp) {
1767         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1768                    "vkCreateDescriptorPool: Invalid device [VUID-vkCreateDescriptorPool-device-parameter]");
1769         abort(); /* Intentionally fail so user can correct issue. */
1770     }
1771 
1772     return disp->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
1773 }
1774 
vkDestroyDescriptorPool(VkDevice device,VkDescriptorPool descriptorPool,const VkAllocationCallbacks * pAllocator)1775 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool,
1776                                                                  const VkAllocationCallbacks *pAllocator) {
1777     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1778     if (NULL == disp) {
1779         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1780                    "vkDestroyDescriptorPool: Invalid device [VUID-vkDestroyDescriptorPool-device-parameter]");
1781         abort(); /* Intentionally fail so user can correct issue. */
1782     }
1783 
1784     disp->DestroyDescriptorPool(device, descriptorPool, pAllocator);
1785 }
1786 
vkResetDescriptorPool(VkDevice device,VkDescriptorPool descriptorPool,VkDescriptorPoolResetFlags flags)1787 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool,
1788                                                                    VkDescriptorPoolResetFlags flags) {
1789     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1790     if (NULL == disp) {
1791         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1792                    "vkResetDescriptorPool: Invalid device [VUID-vkResetDescriptorPool-device-parameter]");
1793         abort(); /* Intentionally fail so user can correct issue. */
1794     }
1795 
1796     return disp->ResetDescriptorPool(device, descriptorPool, flags);
1797 }
1798 
vkAllocateDescriptorSets(VkDevice device,const VkDescriptorSetAllocateInfo * pAllocateInfo,VkDescriptorSet * pDescriptorSets)1799 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(VkDevice device,
1800                                                                       const VkDescriptorSetAllocateInfo *pAllocateInfo,
1801                                                                       VkDescriptorSet *pDescriptorSets) {
1802     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1803     if (NULL == disp) {
1804         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1805                    "vkAllocateDescriptorSets: Invalid device [VUID-vkAllocateDescriptorSets-device-parameter]");
1806         abort(); /* Intentionally fail so user can correct issue. */
1807     }
1808 
1809     return disp->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
1810 }
1811 
vkFreeDescriptorSets(VkDevice device,VkDescriptorPool descriptorPool,uint32_t descriptorSetCount,const VkDescriptorSet * pDescriptorSets)1812 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool,
1813                                                                   uint32_t descriptorSetCount,
1814                                                                   const VkDescriptorSet *pDescriptorSets) {
1815     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1816     if (NULL == disp) {
1817         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1818                    "vkFreeDescriptorSets: Invalid device [VUID-vkFreeDescriptorSets-device-parameter]");
1819         abort(); /* Intentionally fail so user can correct issue. */
1820     }
1821 
1822     return disp->FreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
1823 }
1824 
vkUpdateDescriptorSets(VkDevice device,uint32_t descriptorWriteCount,const VkWriteDescriptorSet * pDescriptorWrites,uint32_t descriptorCopyCount,const VkCopyDescriptorSet * pDescriptorCopies)1825 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount,
1826                                                                 const VkWriteDescriptorSet *pDescriptorWrites,
1827                                                                 uint32_t descriptorCopyCount,
1828                                                                 const VkCopyDescriptorSet *pDescriptorCopies) {
1829     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1830     if (NULL == disp) {
1831         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1832                    "vkUpdateDescriptorSets: Invalid device [VUID-vkUpdateDescriptorSets-device-parameter]");
1833         abort(); /* Intentionally fail so user can correct issue. */
1834     }
1835 
1836     disp->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
1837 }
1838 
vkCreateFramebuffer(VkDevice device,const VkFramebufferCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkFramebuffer * pFramebuffer)1839 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo *pCreateInfo,
1840                                                                  const VkAllocationCallbacks *pAllocator,
1841                                                                  VkFramebuffer *pFramebuffer) {
1842     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1843     if (NULL == disp) {
1844         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1845                    "vkCreateFramebuffer: Invalid device [VUID-vkCreateFramebuffer-device-parameter]");
1846         abort(); /* Intentionally fail so user can correct issue. */
1847     }
1848 
1849     return disp->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
1850 }
1851 
vkDestroyFramebuffer(VkDevice device,VkFramebuffer framebuffer,const VkAllocationCallbacks * pAllocator)1852 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer,
1853                                                               const VkAllocationCallbacks *pAllocator) {
1854     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1855     if (NULL == disp) {
1856         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1857                    "vkDestroyFramebuffer: Invalid device [VUID-vkDestroyFramebuffer-device-parameter]");
1858         abort(); /* Intentionally fail so user can correct issue. */
1859     }
1860 
1861     disp->DestroyFramebuffer(device, framebuffer, pAllocator);
1862 }
1863 
vkCreateRenderPass(VkDevice device,const VkRenderPassCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkRenderPass * pRenderPass)1864 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo,
1865                                                                 const VkAllocationCallbacks *pAllocator,
1866                                                                 VkRenderPass *pRenderPass) {
1867     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1868     if (NULL == disp) {
1869         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1870                    "vkCreateRenderPass: Invalid device [VUID-vkCreateRenderPass-device-parameter]");
1871         abort(); /* Intentionally fail so user can correct issue. */
1872     }
1873 
1874     return disp->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
1875 }
1876 
vkDestroyRenderPass(VkDevice device,VkRenderPass renderPass,const VkAllocationCallbacks * pAllocator)1877 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass,
1878                                                              const VkAllocationCallbacks *pAllocator) {
1879     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1880     if (NULL == disp) {
1881         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1882                    "vkDestroyRenderPass: Invalid device [VUID-vkDestroyRenderPass-device-parameter]");
1883         abort(); /* Intentionally fail so user can correct issue. */
1884     }
1885 
1886     disp->DestroyRenderPass(device, renderPass, pAllocator);
1887 }
1888 
vkGetRenderAreaGranularity(VkDevice device,VkRenderPass renderPass,VkExtent2D * pGranularity)1889 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass,
1890                                                                     VkExtent2D *pGranularity) {
1891     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1892     if (NULL == disp) {
1893         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1894                    "vkGetRenderAreaGranularity: Invalid device [VUID-vkGetRenderAreaGranularity-device-parameter]");
1895         abort(); /* Intentionally fail so user can correct issue. */
1896     }
1897 
1898     disp->GetRenderAreaGranularity(device, renderPass, pGranularity);
1899 }
1900 
vkCreateCommandPool(VkDevice device,const VkCommandPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkCommandPool * pCommandPool)1901 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo *pCreateInfo,
1902                                                                  const VkAllocationCallbacks *pAllocator,
1903                                                                  VkCommandPool *pCommandPool) {
1904     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1905     if (NULL == disp) {
1906         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1907                    "vkCreateCommandPool: Invalid device [VUID-vkCreateCommandPool-device-parameter]");
1908         abort(); /* Intentionally fail so user can correct issue. */
1909     }
1910 
1911     return disp->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
1912 }
1913 
vkDestroyCommandPool(VkDevice device,VkCommandPool commandPool,const VkAllocationCallbacks * pAllocator)1914 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool,
1915                                                               const VkAllocationCallbacks *pAllocator) {
1916     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1917     if (NULL == disp) {
1918         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1919                    "vkDestroyCommandPool: Invalid device [VUID-vkDestroyCommandPool-device-parameter]");
1920         abort(); /* Intentionally fail so user can correct issue. */
1921     }
1922 
1923     disp->DestroyCommandPool(device, commandPool, pAllocator);
1924 }
1925 
vkResetCommandPool(VkDevice device,VkCommandPool commandPool,VkCommandPoolResetFlags flags)1926 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(VkDevice device, VkCommandPool commandPool,
1927                                                                 VkCommandPoolResetFlags flags) {
1928     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1929     if (NULL == disp) {
1930         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1931                    "vkResetCommandPool: Invalid device [VUID-vkResetCommandPool-device-parameter]");
1932         abort(); /* Intentionally fail so user can correct issue. */
1933     }
1934 
1935     return disp->ResetCommandPool(device, commandPool, flags);
1936 }
1937 
vkAllocateCommandBuffers(VkDevice device,const VkCommandBufferAllocateInfo * pAllocateInfo,VkCommandBuffer * pCommandBuffers)1938 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(VkDevice device,
1939                                                                       const VkCommandBufferAllocateInfo *pAllocateInfo,
1940                                                                       VkCommandBuffer *pCommandBuffers) {
1941     VkResult res;
1942     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1943     if (NULL == disp) {
1944         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1945                    "vkAllocateCommandBuffers: Invalid device [VUID-vkAllocateCommandBuffers-device-parameter]");
1946         abort(); /* Intentionally fail so user can correct issue. */
1947     }
1948 
1949     res = disp->AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
1950     if (res == VK_SUCCESS) {
1951         for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; i++) {
1952             if (pCommandBuffers[i]) {
1953                 loader_set_dispatch(pCommandBuffers[i], disp);
1954             }
1955         }
1956     }
1957 
1958     return res;
1959 }
1960 
vkFreeCommandBuffers(VkDevice device,VkCommandPool commandPool,uint32_t commandBufferCount,const VkCommandBuffer * pCommandBuffers)1961 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool,
1962                                                               uint32_t commandBufferCount, const VkCommandBuffer *pCommandBuffers) {
1963     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
1964     if (NULL == disp) {
1965         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1966                    "vkFreeCommandBuffers: Invalid device [VUID-vkFreeCommandBuffers-device-parameter]");
1967         abort(); /* Intentionally fail so user can correct issue. */
1968     }
1969 
1970     disp->FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
1971 }
1972 
vkBeginCommandBuffer(VkCommandBuffer commandBuffer,const VkCommandBufferBeginInfo * pBeginInfo)1973 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(VkCommandBuffer commandBuffer,
1974                                                                   const VkCommandBufferBeginInfo *pBeginInfo) {
1975     const VkLayerDispatchTable *disp;
1976 
1977     disp = loader_get_dispatch(commandBuffer);
1978     if (NULL == disp) {
1979         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1980                    "vkBeginCommandBuffer: Invalid commandBuffer [VUID-vkBeginCommandBuffer-commandBuffer-parameter]");
1981         abort(); /* Intentionally fail so user can correct issue. */
1982     }
1983 
1984     return disp->BeginCommandBuffer(commandBuffer, pBeginInfo);
1985 }
1986 
vkEndCommandBuffer(VkCommandBuffer commandBuffer)1987 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(VkCommandBuffer commandBuffer) {
1988     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
1989     if (NULL == disp) {
1990         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
1991                    "vkEndCommandBuffer: Invalid commandBuffer [VUID-vkEndCommandBuffer-commandBuffer-parameter]");
1992         abort(); /* Intentionally fail so user can correct issue. */
1993     }
1994 
1995     return disp->EndCommandBuffer(commandBuffer);
1996 }
1997 
vkResetCommandBuffer(VkCommandBuffer commandBuffer,VkCommandBufferResetFlags flags)1998 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) {
1999     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2000     if (NULL == disp) {
2001         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2002                    "vkResetCommandBuffer: Invalid commandBuffer [VUID-vkResetCommandBuffer-commandBuffer-parameter]");
2003         abort(); /* Intentionally fail so user can correct issue. */
2004     }
2005 
2006     return disp->ResetCommandBuffer(commandBuffer, flags);
2007 }
2008 
vkCmdBindPipeline(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipeline pipeline)2009 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint,
2010                                                            VkPipeline pipeline) {
2011     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2012     if (NULL == disp) {
2013         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2014                    "vkCmdBindPipeline: Invalid commandBuffer [VUID-vkCmdBindPipeline-commandBuffer-parameter]");
2015         abort(); /* Intentionally fail so user can correct issue. */
2016     }
2017 
2018     disp->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
2019 }
2020 
vkCmdSetViewport(VkCommandBuffer commandBuffer,uint32_t firstViewport,uint32_t viewportCount,const VkViewport * pViewports)2021 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport,
2022                                                           uint32_t viewportCount, const VkViewport *pViewports) {
2023     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2024     if (NULL == disp) {
2025         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2026                    "vkCmdSetViewport: Invalid commandBuffer [VUID-vkCmdSetViewport-commandBuffer-parameter]");
2027         abort(); /* Intentionally fail so user can correct issue. */
2028     }
2029 
2030     disp->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
2031 }
2032 
vkCmdSetScissor(VkCommandBuffer commandBuffer,uint32_t firstScissor,uint32_t scissorCount,const VkRect2D * pScissors)2033 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor,
2034                                                          uint32_t scissorCount, const VkRect2D *pScissors) {
2035     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2036     if (NULL == disp) {
2037         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2038                    "vkCmdSetScissor: Invalid commandBuffer [VUID-vkCmdSetScissor-commandBuffer-parameter]");
2039         abort(); /* Intentionally fail so user can correct issue. */
2040     }
2041 
2042     disp->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
2043 }
2044 
vkCmdSetLineWidth(VkCommandBuffer commandBuffer,float lineWidth)2045 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth) {
2046     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2047     if (NULL == disp) {
2048         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2049                    "vkCmdSetLineWidth: Invalid commandBuffer [VUID-vkCmdSetLineWidth-commandBuffer-parameter]");
2050         abort(); /* Intentionally fail so user can correct issue. */
2051     }
2052 
2053     disp->CmdSetLineWidth(commandBuffer, lineWidth);
2054 }
2055 
vkCmdSetDepthBias(VkCommandBuffer commandBuffer,float depthBiasConstantFactor,float depthBiasClamp,float depthBiasSlopeFactor)2056 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor,
2057                                                            float depthBiasClamp, float depthBiasSlopeFactor) {
2058     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2059     if (NULL == disp) {
2060         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2061                    "vkCmdSetDepthBias: Invalid commandBuffer [VUID-vkCmdSetDepthBias-commandBuffer-parameter]");
2062         abort(); /* Intentionally fail so user can correct issue. */
2063     }
2064 
2065     disp->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
2066 }
2067 
vkCmdSetBlendConstants(VkCommandBuffer commandBuffer,const float blendConstants[4])2068 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4]) {
2069     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2070     if (NULL == disp) {
2071         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2072                    "vkCmdSetBlendConstants: Invalid commandBuffer [VUID-vkCmdSetBlendConstants-commandBuffer-parameter]");
2073         abort(); /* Intentionally fail so user can correct issue. */
2074     }
2075 
2076     disp->CmdSetBlendConstants(commandBuffer, blendConstants);
2077 }
2078 
vkCmdSetDepthBounds(VkCommandBuffer commandBuffer,float minDepthBounds,float maxDepthBounds)2079 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds,
2080                                                              float maxDepthBounds) {
2081     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2082     if (NULL == disp) {
2083         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2084                    "vkCmdSetDepthBounds: Invalid commandBuffer [VUID-vkCmdSetDepthBounds-commandBuffer-parameter]");
2085         abort(); /* Intentionally fail so user can correct issue. */
2086     }
2087 
2088     disp->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
2089 }
2090 
vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t compareMask)2091 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
2092                                                                     uint32_t compareMask) {
2093     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2094     if (NULL == disp) {
2095         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2096                    "vkCmdSetStencilCompareMask: Invalid commandBuffer [VUID-vkCmdSetStencilCompareMask-commandBuffer-parameter]");
2097         abort(); /* Intentionally fail so user can correct issue. */
2098     }
2099 
2100     disp->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
2101 }
2102 
vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t writeMask)2103 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
2104                                                                   uint32_t writeMask) {
2105     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2106     if (NULL == disp) {
2107         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2108                    "vkCmdSetStencilWriteMask: Invalid commandBuffer [VUID-vkCmdSetStencilWriteMask-commandBuffer-parameter]");
2109         abort(); /* Intentionally fail so user can correct issue. */
2110     }
2111 
2112     disp->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
2113 }
2114 
vkCmdSetStencilReference(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t reference)2115 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
2116                                                                   uint32_t reference) {
2117     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2118     if (NULL == disp) {
2119         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2120                    "vkCmdSetStencilReference: Invalid commandBuffer [VUID-vkCmdSetStencilReference-commandBuffer-parameter]");
2121         abort(); /* Intentionally fail so user can correct issue. */
2122     }
2123 
2124     disp->CmdSetStencilReference(commandBuffer, faceMask, reference);
2125 }
2126 
vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipelineLayout layout,uint32_t firstSet,uint32_t descriptorSetCount,const VkDescriptorSet * pDescriptorSets,uint32_t dynamicOffsetCount,const uint32_t * pDynamicOffsets)2127 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer,
2128                                                                  VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout,
2129                                                                  uint32_t firstSet, uint32_t descriptorSetCount,
2130                                                                  const VkDescriptorSet *pDescriptorSets,
2131                                                                  uint32_t dynamicOffsetCount, const uint32_t *pDynamicOffsets) {
2132     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2133     if (NULL == disp) {
2134         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2135                    "vkCmdBindDescriptorSets: Invalid commandBuffer [VUID-vkCmdBindDescriptorSets-commandBuffer-parameter]");
2136         abort(); /* Intentionally fail so user can correct issue. */
2137     }
2138 
2139     disp->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets,
2140                                 dynamicOffsetCount, pDynamicOffsets);
2141 }
2142 
vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkIndexType indexType)2143 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
2144                                                               VkIndexType indexType) {
2145     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2146     if (NULL == disp) {
2147         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2148                    "vkCmdBindIndexBuffer: Invalid commandBuffer [VUID-vkCmdBindIndexBuffer-commandBuffer-parameter]");
2149         abort(); /* Intentionally fail so user can correct issue. */
2150     }
2151 
2152     disp->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
2153 }
2154 
vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const VkBuffer * pBuffers,const VkDeviceSize * pOffsets)2155 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding,
2156                                                                 uint32_t bindingCount, const VkBuffer *pBuffers,
2157                                                                 const VkDeviceSize *pOffsets) {
2158     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2159     if (NULL == disp) {
2160         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2161                    "vkCmdBindVertexBuffers: Invalid commandBuffer [VUID-vkCmdBindVertexBuffers-commandBuffer-parameter]");
2162         abort(); /* Intentionally fail so user can correct issue. */
2163     }
2164 
2165     disp->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
2166 }
2167 
vkCmdDraw(VkCommandBuffer commandBuffer,uint32_t vertexCount,uint32_t instanceCount,uint32_t firstVertex,uint32_t firstInstance)2168 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount,
2169                                                    uint32_t firstVertex, uint32_t firstInstance) {
2170     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2171     if (NULL == disp) {
2172         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2173                    "vkCmdDraw: Invalid commandBuffer [VUID-vkCmdDraw-commandBuffer-parameter]");
2174         abort(); /* Intentionally fail so user can correct issue. */
2175     }
2176 
2177     disp->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
2178 }
2179 
vkCmdDrawIndexed(VkCommandBuffer commandBuffer,uint32_t indexCount,uint32_t instanceCount,uint32_t firstIndex,int32_t vertexOffset,uint32_t firstInstance)2180 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount,
2181                                                           uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset,
2182                                                           uint32_t firstInstance) {
2183     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2184     if (NULL == disp) {
2185         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2186                    "vkCmdDrawIndexed: Invalid commandBuffer [VUID-vkCmdDrawIndexed-commandBuffer-parameter]");
2187         abort(); /* Intentionally fail so user can correct issue. */
2188     }
2189 
2190     disp->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
2191 }
2192 
vkCmdDrawIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride)2193 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
2194                                                            uint32_t drawCount, uint32_t stride) {
2195     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2196     if (NULL == disp) {
2197         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2198                    "vkCmdDrawIndirect: Invalid commandBuffer [VUID-vkCmdDrawIndirect-commandBuffer-parameter]");
2199         abort(); /* Intentionally fail so user can correct issue. */
2200     }
2201 
2202     disp->CmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
2203 }
2204 
vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride)2205 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer,
2206                                                                   VkDeviceSize offset, uint32_t drawCount, uint32_t stride) {
2207     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2208     if (NULL == disp) {
2209         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2210                    "vkCmdDrawIndexedIndirect: Invalid commandBuffer [VUID-vkCmdDrawIndexedIndirect-commandBuffer-parameter]");
2211         abort(); /* Intentionally fail so user can correct issue. */
2212     }
2213 
2214     disp->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
2215 }
2216 
vkCmdDispatch(VkCommandBuffer commandBuffer,uint32_t x,uint32_t y,uint32_t z)2217 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) {
2218     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2219     if (NULL == disp) {
2220         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2221                    "vkCmdDispatch: Invalid commandBuffer [VUID-vkCmdDispatch-commandBuffer-parameter]");
2222         abort(); /* Intentionally fail so user can correct issue. */
2223     }
2224 
2225     disp->CmdDispatch(commandBuffer, x, y, z);
2226 }
2227 
vkCmdDispatchIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset)2228 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer,
2229                                                                VkDeviceSize offset) {
2230     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2231     if (NULL == disp) {
2232         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2233                    "vkCmdDispatchIndirect: Invalid commandBuffer [VUID-vkCmdDispatchIndirect-commandBuffer-parameter]");
2234         abort(); /* Intentionally fail so user can correct issue. */
2235     }
2236 
2237     disp->CmdDispatchIndirect(commandBuffer, buffer, offset);
2238 }
2239 
vkCmdCopyBuffer(VkCommandBuffer commandBuffer,VkBuffer srcBuffer,VkBuffer dstBuffer,uint32_t regionCount,const VkBufferCopy * pRegions)2240 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer,
2241                                                          uint32_t regionCount, const VkBufferCopy *pRegions) {
2242     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2243     if (NULL == disp) {
2244         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2245                    "vkCmdCopyBuffer: Invalid commandBuffer [VUID-vkCmdCopyBuffer-commandBuffer-parameter]");
2246         abort(); /* Intentionally fail so user can correct issue. */
2247     }
2248 
2249     disp->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
2250 }
2251 
vkCmdCopyImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageCopy * pRegions)2252 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage,
2253                                                         VkImageLayout srcImageLayout, VkImage dstImage,
2254                                                         VkImageLayout dstImageLayout, uint32_t regionCount,
2255                                                         const VkImageCopy *pRegions) {
2256     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2257     if (NULL == disp) {
2258         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2259                    "vkCmdCopyImage: Invalid commandBuffer [VUID-vkCmdCopyImage-commandBuffer-parameter]");
2260         abort(); /* Intentionally fail so user can correct issue. */
2261     }
2262 
2263     disp->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
2264 }
2265 
vkCmdBlitImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageBlit * pRegions,VkFilter filter)2266 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage,
2267                                                         VkImageLayout srcImageLayout, VkImage dstImage,
2268                                                         VkImageLayout dstImageLayout, uint32_t regionCount,
2269                                                         const VkImageBlit *pRegions, VkFilter filter) {
2270     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2271     if (NULL == disp) {
2272         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2273                    "vkCmdBlitImage: Invalid commandBuffer [VUID-vkCmdBlitImage-commandBuffer-parameter]");
2274         abort(); /* Intentionally fail so user can correct issue. */
2275     }
2276 
2277     disp->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
2278 }
2279 
vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer,VkBuffer srcBuffer,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkBufferImageCopy * pRegions)2280 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage,
2281                                                                 VkImageLayout dstImageLayout, uint32_t regionCount,
2282                                                                 const VkBufferImageCopy *pRegions) {
2283     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2284     if (NULL == disp) {
2285         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2286                    "vkCmdCopyBufferToImage: Invalid commandBuffer [VUID-vkCmdCopyBufferToImage-commandBuffer-parameter]");
2287         abort(); /* Intentionally fail so user can correct issue. */
2288     }
2289 
2290     disp->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
2291 }
2292 
vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkBuffer dstBuffer,uint32_t regionCount,const VkBufferImageCopy * pRegions)2293 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage,
2294                                                                 VkImageLayout srcImageLayout, VkBuffer dstBuffer,
2295                                                                 uint32_t regionCount, const VkBufferImageCopy *pRegions) {
2296     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2297     if (NULL == disp) {
2298         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2299                    "vkCmdCopyImageToBuffer: Invalid commandBuffer [VUID-vkCmdCopyImageToBuffer-commandBuffer-parameter]");
2300         abort(); /* Intentionally fail so user can correct issue. */
2301     }
2302 
2303     disp->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
2304 }
2305 
vkCmdUpdateBuffer(VkCommandBuffer commandBuffer,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize dataSize,const void * pData)2306 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer,
2307                                                            VkDeviceSize dstOffset, VkDeviceSize dataSize, const void *pData) {
2308     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2309     if (NULL == disp) {
2310         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2311                    "vkCmdUpdateBuffer: Invalid commandBuffer [VUID-vkCmdUpdateBuffer-commandBuffer-parameter]");
2312         abort(); /* Intentionally fail so user can correct issue. */
2313     }
2314 
2315     disp->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
2316 }
2317 
vkCmdFillBuffer(VkCommandBuffer commandBuffer,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize size,uint32_t data)2318 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset,
2319                                                          VkDeviceSize size, uint32_t data) {
2320     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2321     if (NULL == disp) {
2322         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2323                    "vkCmdFillBuffer: Invalid commandBuffer [VUID-vkCmdFillBuffer-commandBuffer-parameter]");
2324         abort(); /* Intentionally fail so user can correct issue. */
2325     }
2326 
2327     disp->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
2328 }
2329 
vkCmdClearColorImage(VkCommandBuffer commandBuffer,VkImage image,VkImageLayout imageLayout,const VkClearColorValue * pColor,uint32_t rangeCount,const VkImageSubresourceRange * pRanges)2330 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image,
2331                                                               VkImageLayout imageLayout, const VkClearColorValue *pColor,
2332                                                               uint32_t rangeCount, const VkImageSubresourceRange *pRanges) {
2333     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2334     if (NULL == disp) {
2335         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2336                    "vkCmdClearColorImage: Invalid commandBuffer [VUID-vkCmdClearColorImage-commandBuffer-parameter]");
2337         abort(); /* Intentionally fail so user can correct issue. */
2338     }
2339 
2340     disp->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
2341 }
2342 
vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer,VkImage image,VkImageLayout imageLayout,const VkClearDepthStencilValue * pDepthStencil,uint32_t rangeCount,const VkImageSubresourceRange * pRanges)2343 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image,
2344                                                                      VkImageLayout imageLayout,
2345                                                                      const VkClearDepthStencilValue *pDepthStencil,
2346                                                                      uint32_t rangeCount, const VkImageSubresourceRange *pRanges) {
2347     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2348     if (NULL == disp) {
2349         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2350                    "vkCmdClearDepthStencilImage: Invalid commandBuffer [VUID-vkCmdClearDepthStencilImage-commandBuffer-parameter]");
2351         abort(); /* Intentionally fail so user can correct issue. */
2352     }
2353 
2354     disp->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
2355 }
2356 
vkCmdClearAttachments(VkCommandBuffer commandBuffer,uint32_t attachmentCount,const VkClearAttachment * pAttachments,uint32_t rectCount,const VkClearRect * pRects)2357 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount,
2358                                                                const VkClearAttachment *pAttachments, uint32_t rectCount,
2359                                                                const VkClearRect *pRects) {
2360     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2361     if (NULL == disp) {
2362         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2363                    "vkCmdClearAttachments: Invalid commandBuffer [VUID-vkCmdClearAttachments-commandBuffer-parameter]");
2364         abort(); /* Intentionally fail so user can correct issue. */
2365     }
2366 
2367     disp->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
2368 }
2369 
vkCmdResolveImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageResolve * pRegions)2370 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage,
2371                                                            VkImageLayout srcImageLayout, VkImage dstImage,
2372                                                            VkImageLayout dstImageLayout, uint32_t regionCount,
2373                                                            const VkImageResolve *pRegions) {
2374     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2375     if (NULL == disp) {
2376         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2377                    "vkCmdResolveImage: Invalid commandBuffer [VUID-vkCmdResolveImage-commandBuffer-parameter]");
2378         abort(); /* Intentionally fail so user can correct issue. */
2379     }
2380 
2381     disp->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
2382 }
2383 
vkCmdSetEvent(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags stageMask)2384 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event,
2385                                                        VkPipelineStageFlags stageMask) {
2386     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2387     if (NULL == disp) {
2388         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2389                    "vkCmdSetEvent: Invalid commandBuffer [VUID-vkCmdSetEvent-commandBuffer-parameter]");
2390         abort(); /* Intentionally fail so user can correct issue. */
2391     }
2392 
2393     disp->CmdSetEvent(commandBuffer, event, stageMask);
2394 }
2395 
vkCmdResetEvent(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags stageMask)2396 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event,
2397                                                          VkPipelineStageFlags stageMask) {
2398     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2399     if (NULL == disp) {
2400         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2401                    "vkCmdResetEvent: Invalid commandBuffer [VUID-vkCmdResetEvent-commandBuffer-parameter]");
2402         abort(); /* Intentionally fail so user can correct issue. */
2403     }
2404 
2405     disp->CmdResetEvent(commandBuffer, event, stageMask);
2406 }
2407 
vkCmdWaitEvents(VkCommandBuffer commandBuffer,uint32_t eventCount,const VkEvent * pEvents,VkPipelineStageFlags sourceStageMask,VkPipelineStageFlags dstStageMask,uint32_t memoryBarrierCount,const VkMemoryBarrier * pMemoryBarriers,uint32_t bufferMemoryBarrierCount,const VkBufferMemoryBarrier * pBufferMemoryBarriers,uint32_t imageMemoryBarrierCount,const VkImageMemoryBarrier * pImageMemoryBarriers)2408 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent *pEvents,
2409                                                          VkPipelineStageFlags sourceStageMask, VkPipelineStageFlags dstStageMask,
2410                                                          uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers,
2411                                                          uint32_t bufferMemoryBarrierCount,
2412                                                          const VkBufferMemoryBarrier *pBufferMemoryBarriers,
2413                                                          uint32_t imageMemoryBarrierCount,
2414                                                          const VkImageMemoryBarrier *pImageMemoryBarriers) {
2415     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2416     if (NULL == disp) {
2417         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2418                    "vkCmdWaitEvents: Invalid commandBuffer [VUID-vkCmdWaitEvents-commandBuffer-parameter]");
2419         abort(); /* Intentionally fail so user can correct issue. */
2420     }
2421 
2422     disp->CmdWaitEvents(commandBuffer, eventCount, pEvents, sourceStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers,
2423                         bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
2424 }
2425 
vkCmdPipelineBarrier(VkCommandBuffer commandBuffer,VkPipelineStageFlags srcStageMask,VkPipelineStageFlags dstStageMask,VkDependencyFlags dependencyFlags,uint32_t memoryBarrierCount,const VkMemoryBarrier * pMemoryBarriers,uint32_t bufferMemoryBarrierCount,const VkBufferMemoryBarrier * pBufferMemoryBarriers,uint32_t imageMemoryBarrierCount,const VkImageMemoryBarrier * pImageMemoryBarriers)2426 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask,
2427                                                               VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags,
2428                                                               uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers,
2429                                                               uint32_t bufferMemoryBarrierCount,
2430                                                               const VkBufferMemoryBarrier *pBufferMemoryBarriers,
2431                                                               uint32_t imageMemoryBarrierCount,
2432                                                               const VkImageMemoryBarrier *pImageMemoryBarriers) {
2433     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2434     if (NULL == disp) {
2435         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2436                    "vkCmdPipelineBarrier: Invalid commandBuffer [VUID-vkCmdPipelineBarrier-commandBuffer-parameter]");
2437         abort(); /* Intentionally fail so user can correct issue. */
2438     }
2439 
2440     disp->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers,
2441                              bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
2442 }
2443 
vkCmdBeginQuery(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t slot,VkFlags flags)2444 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot,
2445                                                          VkFlags flags) {
2446     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2447     if (NULL == disp) {
2448         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2449                    "vkCmdBeginQuery: Invalid commandBuffer [VUID-vkCmdBeginQuery-commandBuffer-parameter]");
2450         abort(); /* Intentionally fail so user can correct issue. */
2451     }
2452 
2453     disp->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
2454 }
2455 
vkCmdEndQuery(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t slot)2456 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot) {
2457     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2458     if (NULL == disp) {
2459         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2460                    "vkCmdEndQuery: Invalid commandBuffer [VUID-vkCmdEndQuery-commandBuffer-parameter]");
2461         abort(); /* Intentionally fail so user can correct issue. */
2462     }
2463 
2464     disp->CmdEndQuery(commandBuffer, queryPool, slot);
2465 }
2466 
vkCmdResetQueryPool(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount)2467 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
2468                                                              uint32_t firstQuery, uint32_t queryCount) {
2469     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2470     if (NULL == disp) {
2471         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2472                    "vkCmdResetQueryPool: Invalid commandBuffer [VUID-vkCmdResetQueryPool-commandBuffer-parameter]");
2473         abort(); /* Intentionally fail so user can correct issue. */
2474     }
2475 
2476     disp->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
2477 }
2478 
vkCmdWriteTimestamp(VkCommandBuffer commandBuffer,VkPipelineStageFlagBits pipelineStage,VkQueryPool queryPool,uint32_t slot)2479 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage,
2480                                                              VkQueryPool queryPool, uint32_t slot) {
2481     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2482     if (NULL == disp) {
2483         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2484                    "vkCmdWriteTimestamp: Invalid commandBuffer [VUID-vkCmdWriteTimestamp-commandBuffer-parameter]");
2485         abort(); /* Intentionally fail so user can correct issue. */
2486     }
2487 
2488     disp->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
2489 }
2490 
vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize stride,VkFlags flags)2491 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
2492                                                                    uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer,
2493                                                                    VkDeviceSize dstOffset, VkDeviceSize stride, VkFlags flags) {
2494     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2495     if (NULL == disp) {
2496         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2497                    "vkCmdCopyQueryPoolResults: Invalid commandBuffer [VUID-vkCmdCopyQueryPoolResults-commandBuffer-parameter]");
2498         abort(); /* Intentionally fail so user can correct issue. */
2499     }
2500 
2501     disp->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
2502 }
2503 
vkCmdPushConstants(VkCommandBuffer commandBuffer,VkPipelineLayout layout,VkShaderStageFlags stageFlags,uint32_t offset,uint32_t size,const void * pValues)2504 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout,
2505                                                             VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size,
2506                                                             const void *pValues) {
2507     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2508     if (NULL == disp) {
2509         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2510                    "vkCmdPushConstants: Invalid commandBuffer [VUID-vkCmdPushConstants-commandBuffer-parameter]");
2511         abort(); /* Intentionally fail so user can correct issue. */
2512     }
2513 
2514     disp->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
2515 }
2516 
vkCmdBeginRenderPass(VkCommandBuffer commandBuffer,const VkRenderPassBeginInfo * pRenderPassBegin,VkSubpassContents contents)2517 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(VkCommandBuffer commandBuffer,
2518                                                               const VkRenderPassBeginInfo *pRenderPassBegin,
2519                                                               VkSubpassContents contents) {
2520     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2521     if (NULL == disp) {
2522         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2523                    "vkCmdBeginRenderPass: Invalid commandBuffer [VUID-vkCmdBeginRenderPass-commandBuffer-parameter]");
2524         abort(); /* Intentionally fail so user can correct issue. */
2525     }
2526 
2527     disp->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
2528 }
2529 
vkCmdNextSubpass(VkCommandBuffer commandBuffer,VkSubpassContents contents)2530 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents) {
2531     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2532     if (NULL == disp) {
2533         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2534                    "vkCmdNextSubpass: Invalid commandBuffer [VUID-vkCmdNextSubpass-commandBuffer-parameter]");
2535         abort(); /* Intentionally fail so user can correct issue. */
2536     }
2537 
2538     disp->CmdNextSubpass(commandBuffer, contents);
2539 }
2540 
vkCmdEndRenderPass(VkCommandBuffer commandBuffer)2541 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(VkCommandBuffer commandBuffer) {
2542     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2543     if (NULL == disp) {
2544         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2545                    "vkCmdEndRenderPass: Invalid commandBuffer [VUID-vkCmdEndRenderPass-commandBuffer-parameter]");
2546         abort(); /* Intentionally fail so user can correct issue. */
2547     }
2548 
2549     disp->CmdEndRenderPass(commandBuffer);
2550 }
2551 
vkCmdExecuteCommands(VkCommandBuffer commandBuffer,uint32_t commandBuffersCount,const VkCommandBuffer * pCommandBuffers)2552 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBuffersCount,
2553                                                               const VkCommandBuffer *pCommandBuffers) {
2554     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2555     if (NULL == disp) {
2556         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2557                    "vkCmdExecuteCommands: Invalid commandBuffer [VUID-vkCmdExecuteCommands-commandBuffer-parameter]");
2558         abort(); /* Intentionally fail so user can correct issue. */
2559     }
2560 
2561     disp->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
2562 }
2563 
2564 // ---- Vulkan core 1.1 trampolines
2565 
vkEnumeratePhysicalDeviceGroups(VkInstance instance,uint32_t * pPhysicalDeviceGroupCount,VkPhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties)2566 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups(
2567     VkInstance instance, uint32_t *pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties *pPhysicalDeviceGroupProperties) {
2568     VkResult res = VK_SUCCESS;
2569     struct loader_instance *inst = NULL;
2570 
2571     loader_platform_thread_lock_mutex(&loader_lock);
2572 
2573     inst = loader_get_instance(instance);
2574     if (NULL == inst) {
2575         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2576                    "vkEnumeratePhysicalDeviceGroups: Invalid instance [VUID-vkEnumeratePhysicalDeviceGroups-instance-parameter]");
2577         abort(); /* Intentionally fail so user can correct issue. */
2578     }
2579 
2580     if (NULL == pPhysicalDeviceGroupCount) {
2581         loader_log(inst, VULKAN_LOADER_ERROR_BIT, 0,
2582                    "vkEnumeratePhysicalDeviceGroups: Received NULL pointer for physical "
2583                    "device group count return value.");
2584         res = VK_ERROR_INITIALIZATION_FAILED;
2585         goto out;
2586     }
2587 
2588     // Call down the chain to get the physical device group info.
2589     res = inst->disp->layer_inst_disp.EnumeratePhysicalDeviceGroups(inst->instance, pPhysicalDeviceGroupCount,
2590                                                                     pPhysicalDeviceGroupProperties);
2591     if (NULL != pPhysicalDeviceGroupProperties && (VK_SUCCESS == res || VK_INCOMPLETE == res)) {
2592         // Wrap the PhysDev object for loader usage, return wrapped objects
2593         VkResult update_res = setup_loader_tramp_phys_dev_groups(inst, *pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
2594         if (VK_SUCCESS != update_res) {
2595             res = update_res;
2596         }
2597     }
2598 
2599 out:
2600 
2601     loader_platform_thread_unlock_mutex(&loader_lock);
2602     return res;
2603 }
2604 
vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures2 * pFeatures)2605 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
2606                                                                       VkPhysicalDeviceFeatures2 *pFeatures) {
2607     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
2608     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
2609         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2610                    "vkGetPhysicalDeviceFeatures2: Invalid physicalDevice "
2611                    "[VUID-vkGetPhysicalDeviceFeatures2-physicalDevice-parameter]");
2612         abort(); /* Intentionally fail so user can correct issue. */
2613     }
2614     const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice);
2615     const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance;
2616 
2617     if (inst != NULL && inst->enabled_known_extensions.khr_get_physical_device_properties2) {
2618         disp->GetPhysicalDeviceFeatures2KHR(unwrapped_phys_dev, pFeatures);
2619     } else {
2620         disp->GetPhysicalDeviceFeatures2(unwrapped_phys_dev, pFeatures);
2621     }
2622 }
2623 
vkGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties2 * pProperties)2624 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
2625                                                                         VkPhysicalDeviceProperties2 *pProperties) {
2626     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
2627     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
2628         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2629                    "vkGetPhysicalDeviceProperties2: Invalid physicalDevice "
2630                    "[VUID-vkGetPhysicalDeviceProperties2-physicalDevice-parameter]");
2631         abort(); /* Intentionally fail so user can correct issue. */
2632     }
2633     const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice);
2634     const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance;
2635 
2636     if (inst != NULL && inst->enabled_known_extensions.khr_get_physical_device_properties2) {
2637         disp->GetPhysicalDeviceProperties2KHR(unwrapped_phys_dev, pProperties);
2638     } else {
2639         disp->GetPhysicalDeviceProperties2(unwrapped_phys_dev, pProperties);
2640     }
2641 }
2642 
vkGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties2 * pFormatProperties)2643 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice, VkFormat format,
2644                                                                               VkFormatProperties2 *pFormatProperties) {
2645     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
2646     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
2647         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2648                    "vkGetPhysicalDeviceFormatProperties2: Invalid physicalDevice "
2649                    "[VUID-vkGetPhysicalDeviceFormatProperties2-physicalDevice-parameter]");
2650         abort(); /* Intentionally fail so user can correct issue. */
2651     }
2652     const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice);
2653     const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance;
2654 
2655     if (inst != NULL && inst->enabled_known_extensions.khr_get_physical_device_properties2) {
2656         disp->GetPhysicalDeviceFormatProperties2KHR(unwrapped_phys_dev, format, pFormatProperties);
2657     } else {
2658         disp->GetPhysicalDeviceFormatProperties2(unwrapped_phys_dev, format, pFormatProperties);
2659     }
2660 }
2661 
2662 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
vkGetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo,VkImageFormatProperties2 * pImageFormatProperties)2663 vkGetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2 *pImageFormatInfo,
2664                                           VkImageFormatProperties2 *pImageFormatProperties) {
2665     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
2666     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
2667         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2668                    "vkGetPhysicalDeviceImageFormatProperties2: Invalid physicalDevice "
2669                    "[VUID-vkGetPhysicalDeviceImageFormatProperties2-physicalDevice-parameter]");
2670         abort(); /* Intentionally fail so user can correct issue. */
2671     }
2672     const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice);
2673     const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance;
2674 
2675     if (inst != NULL && inst->enabled_known_extensions.khr_get_physical_device_properties2) {
2676         return disp->GetPhysicalDeviceImageFormatProperties2KHR(unwrapped_phys_dev, pImageFormatInfo, pImageFormatProperties);
2677     } else {
2678         return disp->GetPhysicalDeviceImageFormatProperties2(unwrapped_phys_dev, pImageFormatInfo, pImageFormatProperties);
2679     }
2680 }
2681 
vkGetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties2 * pQueueFamilyProperties)2682 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2(
2683     VkPhysicalDevice physicalDevice, uint32_t *pQueueFamilyPropertyCount, VkQueueFamilyProperties2 *pQueueFamilyProperties) {
2684     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
2685     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
2686         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2687                    "vkGetPhysicalDeviceQueueFamilyProperties2: Invalid physicalDevice "
2688                    "[VUID-vkGetPhysicalDeviceQueueFamilyProperties2-physicalDevice-parameter]");
2689         abort(); /* Intentionally fail so user can correct issue. */
2690     }
2691     const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice);
2692     const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance;
2693 
2694     if (inst != NULL && inst->enabled_known_extensions.khr_get_physical_device_properties2) {
2695         disp->GetPhysicalDeviceQueueFamilyProperties2KHR(unwrapped_phys_dev, pQueueFamilyPropertyCount, pQueueFamilyProperties);
2696     } else {
2697         disp->GetPhysicalDeviceQueueFamilyProperties2(unwrapped_phys_dev, pQueueFamilyPropertyCount, pQueueFamilyProperties);
2698     }
2699 }
2700 
2701 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL
vkGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties2 * pMemoryProperties)2702 vkGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2 *pMemoryProperties) {
2703     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
2704     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
2705         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2706                    "vkGetPhysicalDeviceMemoryProperties2: Invalid physicalDevice "
2707                    "[VUID-vkGetPhysicalDeviceMemoryProperties2-physicalDevice-parameter]");
2708         abort(); /* Intentionally fail so user can correct issue. */
2709     }
2710     const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice);
2711     const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance;
2712 
2713     if (inst != NULL && inst->enabled_known_extensions.khr_get_physical_device_properties2) {
2714         disp->GetPhysicalDeviceMemoryProperties2KHR(unwrapped_phys_dev, pMemoryProperties);
2715     } else {
2716         disp->GetPhysicalDeviceMemoryProperties2(unwrapped_phys_dev, pMemoryProperties);
2717     }
2718 }
2719 
vkGetPhysicalDeviceSparseImageFormatProperties2(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo,uint32_t * pPropertyCount,VkSparseImageFormatProperties2 * pProperties)2720 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2(
2721     VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2 *pFormatInfo, uint32_t *pPropertyCount,
2722     VkSparseImageFormatProperties2 *pProperties) {
2723     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
2724     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
2725         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2726                    "vkGetPhysicalDeviceSparseImageFormatProperties2: Invalid physicalDevice "
2727                    "[VUID-vkGetPhysicalDeviceSparseImageFormatProperties2-physicalDevice-parameter]");
2728         abort(); /* Intentionally fail so user can correct issue. */
2729     }
2730     const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice);
2731     const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance;
2732 
2733     if (inst != NULL && inst->enabled_known_extensions.khr_get_physical_device_properties2) {
2734         disp->GetPhysicalDeviceSparseImageFormatProperties2KHR(unwrapped_phys_dev, pFormatInfo, pPropertyCount, pProperties);
2735     } else {
2736         disp->GetPhysicalDeviceSparseImageFormatProperties2(unwrapped_phys_dev, pFormatInfo, pPropertyCount, pProperties);
2737     }
2738 }
2739 
vkGetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo,VkExternalBufferProperties * pExternalBufferProperties)2740 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties(
2741     VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo *pExternalBufferInfo,
2742     VkExternalBufferProperties *pExternalBufferProperties) {
2743     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
2744     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
2745         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2746                    "vkGetPhysicalDeviceExternalBufferProperties: Invalid physicalDevice "
2747                    "[VUID-vkGetPhysicalDeviceExternalBufferProperties-physicalDevice-parameter]");
2748         abort(); /* Intentionally fail so user can correct issue. */
2749     }
2750     const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice);
2751     const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance;
2752 
2753     if (inst != NULL && inst->enabled_known_extensions.khr_external_memory_capabilities) {
2754         disp->GetPhysicalDeviceExternalBufferPropertiesKHR(unwrapped_phys_dev, pExternalBufferInfo, pExternalBufferProperties);
2755     } else {
2756         disp->GetPhysicalDeviceExternalBufferProperties(unwrapped_phys_dev, pExternalBufferInfo, pExternalBufferProperties);
2757     }
2758 }
2759 
vkGetPhysicalDeviceExternalSemaphoreProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo,VkExternalSemaphoreProperties * pExternalSemaphoreProperties)2760 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties(
2761     VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo *pExternalSemaphoreInfo,
2762     VkExternalSemaphoreProperties *pExternalSemaphoreProperties) {
2763     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
2764     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
2765         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2766                    "vkGetPhysicalDeviceExternalSemaphoreProperties: Invalid physicalDevice "
2767                    "[VUID-vkGetPhysicalDeviceExternalSemaphoreProperties-physicalDevice-parameter]");
2768         abort(); /* Intentionally fail so user can correct issue. */
2769     }
2770     const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice);
2771     const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance;
2772 
2773     if (inst != NULL && inst->enabled_known_extensions.khr_external_semaphore_capabilities) {
2774         disp->GetPhysicalDeviceExternalSemaphorePropertiesKHR(unwrapped_phys_dev, pExternalSemaphoreInfo,
2775                                                               pExternalSemaphoreProperties);
2776     } else {
2777         disp->GetPhysicalDeviceExternalSemaphoreProperties(unwrapped_phys_dev, pExternalSemaphoreInfo,
2778                                                            pExternalSemaphoreProperties);
2779     }
2780 }
2781 
vkGetPhysicalDeviceExternalFenceProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo,VkExternalFenceProperties * pExternalFenceProperties)2782 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties(
2783     VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo *pExternalFenceInfo,
2784     VkExternalFenceProperties *pExternalFenceProperties) {
2785     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
2786     if (VK_NULL_HANDLE == unwrapped_phys_dev) {
2787         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2788                    "vkGetPhysicalDeviceExternalFenceProperties: Invalid physicalDevice "
2789                    "[VUID-vkGetPhysicalDeviceExternalFenceProperties-physicalDevice-parameter]");
2790         abort(); /* Intentionally fail so user can correct issue. */
2791     }
2792     const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice);
2793     const struct loader_instance *inst = ((struct loader_physical_device_tramp *)physicalDevice)->this_instance;
2794 
2795     if (inst != NULL && inst->enabled_known_extensions.khr_external_fence_capabilities) {
2796         disp->GetPhysicalDeviceExternalFencePropertiesKHR(unwrapped_phys_dev, pExternalFenceInfo, pExternalFenceProperties);
2797     } else {
2798         disp->GetPhysicalDeviceExternalFenceProperties(unwrapped_phys_dev, pExternalFenceInfo, pExternalFenceProperties);
2799     }
2800 }
2801 
vkBindBufferMemory2(VkDevice device,uint32_t bindInfoCount,const VkBindBufferMemoryInfo * pBindInfos)2802 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2(VkDevice device, uint32_t bindInfoCount,
2803                                                                  const VkBindBufferMemoryInfo *pBindInfos) {
2804     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2805     if (NULL == disp) {
2806         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2807                    "vkBindBufferMemory2: Invalid device [VUID-vkBindBufferMemory2-device-parameter]");
2808         abort(); /* Intentionally fail so user can correct issue. */
2809     }
2810     return disp->BindBufferMemory2(device, bindInfoCount, pBindInfos);
2811 }
2812 
vkBindImageMemory2(VkDevice device,uint32_t bindInfoCount,const VkBindImageMemoryInfo * pBindInfos)2813 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2(VkDevice device, uint32_t bindInfoCount,
2814                                                                 const VkBindImageMemoryInfo *pBindInfos) {
2815     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2816     if (NULL == disp) {
2817         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2818                    "vkBindImageMemory2: Invalid device [VUID-vkBindImageMemory2-device-parameter]");
2819         abort(); /* Intentionally fail so user can correct issue. */
2820     }
2821     return disp->BindImageMemory2(device, bindInfoCount, pBindInfos);
2822 }
2823 
vkGetDeviceGroupPeerMemoryFeatures(VkDevice device,uint32_t heapIndex,uint32_t localDeviceIndex,uint32_t remoteDeviceIndex,VkPeerMemoryFeatureFlags * pPeerMemoryFeatures)2824 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures(VkDevice device, uint32_t heapIndex,
2825                                                                             uint32_t localDeviceIndex, uint32_t remoteDeviceIndex,
2826                                                                             VkPeerMemoryFeatureFlags *pPeerMemoryFeatures) {
2827     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2828     if (NULL == disp) {
2829         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2830                    "vkGetDeviceGroupPeerMemoryFeatures: Invalid device [VUID-vkGetDeviceGroupPeerMemoryFeatures-device-parameter]");
2831         abort(); /* Intentionally fail so user can correct issue. */
2832     }
2833     disp->GetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
2834 }
2835 
vkCmdSetDeviceMask(VkCommandBuffer commandBuffer,uint32_t deviceMask)2836 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask(VkCommandBuffer commandBuffer, uint32_t deviceMask) {
2837     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2838     if (NULL == disp) {
2839         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2840                    "vkCmdSetDeviceMask: Invalid commandBuffer [VUID-vkCmdSetDeviceMask-commandBuffer-parameter]");
2841         abort(); /* Intentionally fail so user can correct issue. */
2842     }
2843     disp->CmdSetDeviceMask(commandBuffer, deviceMask);
2844 }
2845 
vkCmdDispatchBase(VkCommandBuffer commandBuffer,uint32_t baseGroupX,uint32_t baseGroupY,uint32_t baseGroupZ,uint32_t groupCountX,uint32_t groupCountY,uint32_t groupCountZ)2846 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY,
2847                                                            uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY,
2848                                                            uint32_t groupCountZ) {
2849     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
2850     if (NULL == disp) {
2851         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2852                    "vkCmdDispatchBase: Invalid commandBuffer [VUID-vkCmdDispatchBase-commandBuffer-parameter]");
2853         abort(); /* Intentionally fail so user can correct issue. */
2854     }
2855     disp->CmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
2856 }
2857 
vkGetImageMemoryRequirements2(VkDevice device,const VkImageMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements)2858 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2(VkDevice device, const VkImageMemoryRequirementsInfo2 *pInfo,
2859                                                                        VkMemoryRequirements2 *pMemoryRequirements) {
2860     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2861     if (NULL == disp) {
2862         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2863                    "vkGetImageMemoryRequirements2: Invalid device [VUID-vkGetImageMemoryRequirements2-device-parameter]");
2864         abort(); /* Intentionally fail so user can correct issue. */
2865     }
2866     disp->GetImageMemoryRequirements2(device, pInfo, pMemoryRequirements);
2867 }
2868 
vkGetBufferMemoryRequirements2(VkDevice device,const VkBufferMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements)2869 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2(VkDevice device,
2870                                                                         const VkBufferMemoryRequirementsInfo2 *pInfo,
2871                                                                         VkMemoryRequirements2 *pMemoryRequirements) {
2872     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2873     if (NULL == disp) {
2874         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2875                    "vkGetBufferMemoryRequirements2: Invalid device [VUID-vkGetBufferMemoryRequirements2-device-parameter]");
2876         abort(); /* Intentionally fail so user can correct issue. */
2877     }
2878     disp->GetBufferMemoryRequirements2(device, pInfo, pMemoryRequirements);
2879 }
2880 
vkGetImageSparseMemoryRequirements2(VkDevice device,const VkImageSparseMemoryRequirementsInfo2 * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements)2881 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2(
2882     VkDevice device, const VkImageSparseMemoryRequirementsInfo2 *pInfo, uint32_t *pSparseMemoryRequirementCount,
2883     VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements) {
2884     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2885     if (NULL == disp) {
2886         loader_log(
2887             NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2888             "vkGetImageSparseMemoryRequirements2: Invalid device [VUID-vkGetImageSparseMemoryRequirements2-device-parameter]");
2889         abort(); /* Intentionally fail so user can correct issue. */
2890     }
2891     disp->GetImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
2892 }
2893 
vkTrimCommandPool(VkDevice device,VkCommandPool commandPool,VkCommandPoolTrimFlags flags)2894 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkTrimCommandPool(VkDevice device, VkCommandPool commandPool,
2895                                                            VkCommandPoolTrimFlags flags) {
2896     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2897     if (NULL == disp) {
2898         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2899                    "vkTrimCommandPool: Invalid device [VUID-vkTrimCommandPool-device-parameter]");
2900         abort(); /* Intentionally fail so user can correct issue. */
2901     }
2902     disp->TrimCommandPool(device, commandPool, flags);
2903 }
2904 
vkGetDeviceQueue2(VkDevice device,const VkDeviceQueueInfo2 * pQueueInfo,VkQueue * pQueue)2905 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2 *pQueueInfo, VkQueue *pQueue) {
2906     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2907     if (NULL == disp) {
2908         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2909                    "vkGetDeviceQueue2: Invalid device [VUID-vkGetDeviceQueue2-device-parameter]");
2910         abort(); /* Intentionally fail so user can correct issue. */
2911     }
2912     disp->GetDeviceQueue2(device, pQueueInfo, pQueue);
2913     if (pQueue != NULL && *pQueue != NULL) {
2914         loader_set_dispatch(*pQueue, disp);
2915     }
2916 }
2917 
vkCreateSamplerYcbcrConversion(VkDevice device,const VkSamplerYcbcrConversionCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSamplerYcbcrConversion * pYcbcrConversion)2918 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion(VkDevice device,
2919                                                                             const VkSamplerYcbcrConversionCreateInfo *pCreateInfo,
2920                                                                             const VkAllocationCallbacks *pAllocator,
2921                                                                             VkSamplerYcbcrConversion *pYcbcrConversion) {
2922     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2923     if (NULL == disp) {
2924         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2925                    "vkCreateSamplerYcbcrConversion: Invalid device [VUID-vkCreateSamplerYcbcrConversion-device-parameter]");
2926         abort(); /* Intentionally fail so user can correct issue. */
2927     }
2928     return disp->CreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion);
2929 }
2930 
vkDestroySamplerYcbcrConversion(VkDevice device,VkSamplerYcbcrConversion ycbcrConversion,const VkAllocationCallbacks * pAllocator)2931 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion,
2932                                                                          const VkAllocationCallbacks *pAllocator) {
2933     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2934     if (NULL == disp) {
2935         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2936                    "vkDestroySamplerYcbcrConversion: Invalid device [VUID-vkDestroySamplerYcbcrConversion-device-parameter]");
2937         abort(); /* Intentionally fail so user can correct issue. */
2938     }
2939     disp->DestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
2940 }
2941 
vkGetDescriptorSetLayoutSupport(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,VkDescriptorSetLayoutSupport * pSupport)2942 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport(VkDevice device,
2943                                                                          const VkDescriptorSetLayoutCreateInfo *pCreateInfo,
2944                                                                          VkDescriptorSetLayoutSupport *pSupport) {
2945     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2946     if (NULL == disp) {
2947         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2948                    "vkGetDescriptorSetLayoutSupport: Invalid device [VUID-vkGetDescriptorSetLayoutSupport-device-parameter]");
2949         abort(); /* Intentionally fail so user can correct issue. */
2950     }
2951     disp->GetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
2952 }
2953 
2954 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL
vkCreateDescriptorUpdateTemplate(VkDevice device,const VkDescriptorUpdateTemplateCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorUpdateTemplate * pDescriptorUpdateTemplate)2955 vkCreateDescriptorUpdateTemplate(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo *pCreateInfo,
2956                                  const VkAllocationCallbacks *pAllocator, VkDescriptorUpdateTemplate *pDescriptorUpdateTemplate) {
2957     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2958     if (NULL == disp) {
2959         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2960                    "vkCreateDescriptorUpdateTemplate: Invalid device [VUID-vkCreateDescriptorUpdateTemplate-device-parameter]");
2961         abort(); /* Intentionally fail so user can correct issue. */
2962     }
2963     return disp->CreateDescriptorUpdateTemplate(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
2964 }
2965 
vkDestroyDescriptorUpdateTemplate(VkDevice device,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const VkAllocationCallbacks * pAllocator)2966 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate(VkDevice device,
2967                                                                            VkDescriptorUpdateTemplate descriptorUpdateTemplate,
2968                                                                            const VkAllocationCallbacks *pAllocator) {
2969     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2970     if (NULL == disp) {
2971         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2972                    "vkDestroyDescriptorUpdateTemplate: Invalid device [VUID-vkDestroyDescriptorUpdateTemplate-device-parameter]");
2973         abort(); /* Intentionally fail so user can correct issue. */
2974     }
2975     disp->DestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator);
2976 }
2977 
vkUpdateDescriptorSetWithTemplate(VkDevice device,VkDescriptorSet descriptorSet,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const void * pData)2978 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplate(VkDevice device, VkDescriptorSet descriptorSet,
2979                                                                            VkDescriptorUpdateTemplate descriptorUpdateTemplate,
2980                                                                            const void *pData) {
2981     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2982     if (NULL == disp) {
2983         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2984                    "vkUpdateDescriptorSetWithTemplate: Invalid device [VUID-vkUpdateDescriptorSetWithTemplate-device-parameter]");
2985         abort(); /* Intentionally fail so user can correct issue. */
2986     }
2987     disp->UpdateDescriptorSetWithTemplate(device, descriptorSet, descriptorUpdateTemplate, pData);
2988 }
2989 
2990 // ---- Vulkan core 1.2 trampolines
2991 
vkCreateRenderPass2(VkDevice device,const VkRenderPassCreateInfo2 * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkRenderPass * pRenderPass)2992 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2(VkDevice device, const VkRenderPassCreateInfo2 *pCreateInfo,
2993                                                                  const VkAllocationCallbacks *pAllocator,
2994                                                                  VkRenderPass *pRenderPass) {
2995     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
2996     if (NULL == disp) {
2997         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
2998                    "vkCreateRenderPass2: Invalid device [VUID-vkCreateRenderPass2-device-parameter]");
2999         abort(); /* Intentionally fail so user can correct issue. */
3000     }
3001     return disp->CreateRenderPass2(device, pCreateInfo, pAllocator, pRenderPass);
3002 }
3003 
vkCmdBeginRenderPass2(VkCommandBuffer commandBuffer,const VkRenderPassBeginInfo * pRenderPassBegin,const VkSubpassBeginInfo * pSubpassBeginInfo)3004 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2(VkCommandBuffer commandBuffer,
3005                                                                const VkRenderPassBeginInfo *pRenderPassBegin,
3006                                                                const VkSubpassBeginInfo *pSubpassBeginInfo) {
3007     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3008     if (NULL == disp) {
3009         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3010                    "vkCmdBeginRenderPass2: Invalid commandBuffer [VUID-vkCmdBeginRenderPass2-commandBuffer-parameter]");
3011         abort(); /* Intentionally fail so user can correct issue. */
3012     }
3013     disp->CmdBeginRenderPass2(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
3014 }
3015 
vkCmdNextSubpass2(VkCommandBuffer commandBuffer,const VkSubpassBeginInfo * pSubpassBeginInfo,const VkSubpassEndInfo * pSubpassEndInfo)3016 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2(VkCommandBuffer commandBuffer,
3017                                                            const VkSubpassBeginInfo *pSubpassBeginInfo,
3018                                                            const VkSubpassEndInfo *pSubpassEndInfo) {
3019     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3020     if (NULL == disp) {
3021         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3022                    "vkCmdNextSubpass2: Invalid commandBuffer [VUID-vkCmdNextSubpass2-commandBuffer-parameter]");
3023         abort(); /* Intentionally fail so user can correct issue. */
3024     }
3025     disp->CmdNextSubpass2(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
3026 }
3027 
vkCmdEndRenderPass2(VkCommandBuffer commandBuffer,const VkSubpassEndInfo * pSubpassEndInfo)3028 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2(VkCommandBuffer commandBuffer,
3029                                                              const VkSubpassEndInfo *pSubpassEndInfo) {
3030     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3031     if (NULL == disp) {
3032         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3033                    "vkCmdEndRenderPass2: Invalid commandBuffer [VUID-vkCmdEndRenderPass2-commandBuffer-parameter]");
3034         abort(); /* Intentionally fail so user can correct issue. */
3035     }
3036     disp->CmdEndRenderPass2(commandBuffer, pSubpassEndInfo);
3037 }
3038 
vkCmdDrawIndirectCount(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)3039 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
3040                                                                 VkBuffer countBuffer, VkDeviceSize countBufferOffset,
3041                                                                 uint32_t maxDrawCount, uint32_t stride) {
3042     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3043     if (NULL == disp) {
3044         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3045                    "vkCmdDrawIndirectCount: Invalid commandBuffer [VUID-vkCmdDrawIndirectCount-commandBuffer-parameter]");
3046         abort(); /* Intentionally fail so user can correct issue. */
3047     }
3048     disp->CmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
3049 }
3050 
vkCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)3051 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer,
3052                                                                        VkDeviceSize offset, VkBuffer countBuffer,
3053                                                                        VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
3054                                                                        uint32_t stride) {
3055     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3056     if (NULL == disp) {
3057         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3058                    "vkCmdDrawIndexedIndirectCount: Invalid commandBuffer "
3059                    "[VUID-vkCmdDrawIndexedIndirectCount-commandBuffer-parameter]");
3060         abort(); /* Intentionally fail so user can correct issue. */
3061     }
3062     disp->CmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
3063 }
3064 
vkGetSemaphoreCounterValue(VkDevice device,VkSemaphore semaphore,uint64_t * pValue)3065 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue(VkDevice device, VkSemaphore semaphore, uint64_t *pValue) {
3066     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3067     if (NULL == disp) {
3068         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3069                    "vkGetSemaphoreCounterValue: Invalid device [VUID-vkGetSemaphoreCounterValue-device-parameter]");
3070         abort(); /* Intentionally fail so user can correct issue. */
3071     }
3072     return disp->GetSemaphoreCounterValue(device, semaphore, pValue);
3073 }
3074 
vkWaitSemaphores(VkDevice device,const VkSemaphoreWaitInfo * pWaitInfo,uint64_t timeout)3075 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores(VkDevice device, const VkSemaphoreWaitInfo *pWaitInfo,
3076                                                               uint64_t timeout) {
3077     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3078     if (NULL == disp) {
3079         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3080                    "vkWaitSemaphores: Invalid device [VUID-vkWaitSemaphores-device-parameter]");
3081         abort(); /* Intentionally fail so user can correct issue. */
3082     }
3083     return disp->WaitSemaphores(device, pWaitInfo, timeout);
3084 }
3085 
vkSignalSemaphore(VkDevice device,const VkSemaphoreSignalInfo * pSignalInfo)3086 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore(VkDevice device, const VkSemaphoreSignalInfo *pSignalInfo) {
3087     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3088     if (NULL == disp) {
3089         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3090                    "vkSignalSemaphore: Invalid device [VUID-vkSignalSemaphore-device-parameter]");
3091         abort(); /* Intentionally fail so user can correct issue. */
3092     }
3093     return disp->SignalSemaphore(device, pSignalInfo);
3094 }
3095 
vkGetBufferDeviceAddress(VkDevice device,const VkBufferDeviceAddressInfo * pInfo)3096 LOADER_EXPORT VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress(VkDevice device,
3097                                                                              const VkBufferDeviceAddressInfo *pInfo) {
3098     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3099     if (NULL == disp) {
3100         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3101                    "vkGetBufferDeviceAddress: Invalid device [VUID-vkGetBufferDeviceAddress-device-parameter]");
3102         abort(); /* Intentionally fail so user can correct issue. */
3103     }
3104     return disp->GetBufferDeviceAddress(device, pInfo);
3105 }
3106 
vkGetBufferOpaqueCaptureAddress(VkDevice device,const VkBufferDeviceAddressInfo * pInfo)3107 LOADER_EXPORT VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress(VkDevice device,
3108                                                                              const VkBufferDeviceAddressInfo *pInfo) {
3109     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3110     if (NULL == disp) {
3111         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3112                    "vkGetBufferOpaqueCaptureAddress: Invalid device [VUID-vkGetBufferOpaqueCaptureAddress-device-parameter]");
3113         abort(); /* Intentionally fail so user can correct issue. */
3114     }
3115     return disp->GetBufferOpaqueCaptureAddress(device, pInfo);
3116 }
3117 
3118 LOADER_EXPORT VKAPI_ATTR uint64_t VKAPI_CALL
vkGetDeviceMemoryOpaqueCaptureAddress(VkDevice device,const VkDeviceMemoryOpaqueCaptureAddressInfo * pInfo)3119 vkGetDeviceMemoryOpaqueCaptureAddress(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo *pInfo) {
3120     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3121     if (NULL == disp) {
3122         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3123                    "vkGetDeviceMemoryOpaqueCaptureAddress: Invalid device "
3124                    "[VUID-vkGetDeviceMemoryOpaqueCaptureAddress-device-parameter]");
3125         abort(); /* Intentionally fail so user can correct issue. */
3126     }
3127     return disp->GetDeviceMemoryOpaqueCaptureAddress(device, pInfo);
3128 }
3129 
vkResetQueryPool(VkDevice device,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount)3130 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkResetQueryPool(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery,
3131                                                           uint32_t queryCount) {
3132     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3133     if (NULL == disp) {
3134         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3135                    "vkResetQueryPool: Invalid device [VUID-vkResetQueryPool-device-parameter]");
3136         abort(); /* Intentionally fail so user can correct issue. */
3137     }
3138     disp->ResetQueryPool(device, queryPool, firstQuery, queryCount);
3139 }
3140 
3141 // ---- Vulkan core 1.3 trampolines
3142 
3143 // Instance
3144 
vkGetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice,uint32_t * pToolCount,VkPhysicalDeviceToolProperties * pToolProperties)3145 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice,
3146                                                                                uint32_t *pToolCount,
3147                                                                                VkPhysicalDeviceToolProperties *pToolProperties) {
3148     VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
3149     const VkLayerInstanceDispatchTable *disp = loader_get_instance_layer_dispatch(physicalDevice);
3150     if (NULL == disp) {
3151         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3152                    "vkGetPhysicalDeviceToolProperties: Invalid physicalDevice "
3153                    "[VUID-vkGetPhysicalDeviceToolProperties-physicalDevice-parameter]");
3154         abort(); /* Intentionally fail so user can correct issue. */
3155     }
3156 
3157     return disp->GetPhysicalDeviceToolProperties(unwrapped_phys_dev, pToolCount, pToolProperties);
3158 }
3159 
3160 // Device
3161 
vkCmdBeginRendering(VkCommandBuffer commandBuffer,const VkRenderingInfo * pRenderingInfo)3162 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRendering(VkCommandBuffer commandBuffer, const VkRenderingInfo *pRenderingInfo) {
3163     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3164     if (NULL == disp) {
3165         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3166                    "vkCmdBeginRendering: Invalid commandBuffer "
3167                    "[VUID-vkCmdBeginRendering-commandBuffer-parameter]");
3168         abort(); /* Intentionally fail so user can correct issue. */
3169     }
3170     disp->CmdBeginRendering(commandBuffer, pRenderingInfo);
3171 }
3172 
vkCmdBindVertexBuffers2(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const VkBuffer * pBuffers,const VkDeviceSize * pOffsets,const VkDeviceSize * pSizes,const VkDeviceSize * pStrides)3173 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2(VkCommandBuffer commandBuffer, uint32_t firstBinding,
3174                                                                  uint32_t bindingCount, const VkBuffer *pBuffers,
3175                                                                  const VkDeviceSize *pOffsets, const VkDeviceSize *pSizes,
3176                                                                  const VkDeviceSize *pStrides) {
3177     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3178     if (NULL == disp) {
3179         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3180                    "vkCmdBindVertexBuffers2: Invalid commandBuffer "
3181                    "[VUID-vkCmdBindVertexBuffers2-commandBuffer-parameter]");
3182         abort(); /* Intentionally fail so user can correct issue. */
3183     }
3184     disp->CmdBindVertexBuffers2(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides);
3185 }
3186 
vkCmdBlitImage2(VkCommandBuffer commandBuffer,const VkBlitImageInfo2 * pBlitImageInfo)3187 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2(VkCommandBuffer commandBuffer, const VkBlitImageInfo2 *pBlitImageInfo) {
3188     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3189     if (NULL == disp) {
3190         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3191                    "vkCmdBlitImage2: Invalid commandBuffer "
3192                    "[VUID-vkCmdBlitImage2-commandBuffer-parameter]");
3193         abort(); /* Intentionally fail so user can correct issue. */
3194     }
3195     disp->CmdBlitImage2(commandBuffer, pBlitImageInfo);
3196 }
3197 
vkCmdCopyBuffer2(VkCommandBuffer commandBuffer,const VkCopyBufferInfo2 * pCopyBufferInfo)3198 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2 *pCopyBufferInfo) {
3199     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3200     if (NULL == disp) {
3201         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3202                    "vkCmdCopyBuffer2: Invalid commandBuffer "
3203                    "[VUID-vkCmdCopyBuffer2-commandBuffer-parameter]");
3204         abort(); /* Intentionally fail so user can correct issue. */
3205     }
3206     disp->CmdCopyBuffer2(commandBuffer, pCopyBufferInfo);
3207 }
3208 
vkCmdCopyBufferToImage2(VkCommandBuffer commandBuffer,const VkCopyBufferToImageInfo2 * pCopyBufferToImageInfo)3209 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2(VkCommandBuffer commandBuffer,
3210                                                                  const VkCopyBufferToImageInfo2 *pCopyBufferToImageInfo) {
3211     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3212     if (NULL == disp) {
3213         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3214                    "vkCmdCopyBufferToImage2: Invalid commandBuffer "
3215                    "[VUID-vkCmdCopyBufferToImage2-commandBuffer-parameter]");
3216         abort(); /* Intentionally fail so user can correct issue. */
3217     }
3218     disp->CmdCopyBufferToImage2(commandBuffer, pCopyBufferToImageInfo);
3219 }
3220 
vkCmdCopyImage2(VkCommandBuffer commandBuffer,const VkCopyImageInfo2 * pCopyImageInfo)3221 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2(VkCommandBuffer commandBuffer, const VkCopyImageInfo2 *pCopyImageInfo) {
3222     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3223     if (NULL == disp) {
3224         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3225                    "vkCmdCopyImage2: Invalid commandBuffer "
3226                    "[VUID-vkCmdCopyImage2-commandBuffer-parameter]");
3227         abort(); /* Intentionally fail so user can correct issue. */
3228     }
3229     disp->CmdCopyImage2(commandBuffer, pCopyImageInfo);
3230 }
3231 
vkCmdCopyImageToBuffer2(VkCommandBuffer commandBuffer,const VkCopyImageToBufferInfo2 * pCopyImageToBufferInfo)3232 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2(VkCommandBuffer commandBuffer,
3233                                                                  const VkCopyImageToBufferInfo2 *pCopyImageToBufferInfo) {
3234     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3235     if (NULL == disp) {
3236         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3237                    "vkCmdCopyImageToBuffer2: Invalid commandBuffer "
3238                    "[VUID-vkCmdCopyImageToBuffer2-commandBuffer-parameter]");
3239         abort(); /* Intentionally fail so user can correct issue. */
3240     }
3241     disp->CmdCopyImageToBuffer2(commandBuffer, pCopyImageToBufferInfo);
3242 }
3243 
vkCmdEndRendering(VkCommandBuffer commandBuffer)3244 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering(VkCommandBuffer commandBuffer) {
3245     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3246     if (NULL == disp) {
3247         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3248                    "vkCmdEndRendering: Invalid commandBuffer "
3249                    "[VUID-vkCmdEndRendering-commandBuffer-parameter]");
3250         abort(); /* Intentionally fail so user can correct issue. */
3251     }
3252     disp->CmdEndRendering(commandBuffer);
3253 }
3254 
vkCmdPipelineBarrier2(VkCommandBuffer commandBuffer,const VkDependencyInfo * pDependencyInfo)3255 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2(VkCommandBuffer commandBuffer,
3256                                                                const VkDependencyInfo *pDependencyInfo) {
3257     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3258     if (NULL == disp) {
3259         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3260                    "vkCmdPipelineBarrier2: Invalid commandBuffer "
3261                    "[VUID-vkCmdPipelineBarrier2-commandBuffer-parameter]");
3262         abort(); /* Intentionally fail so user can correct issue. */
3263     }
3264     disp->CmdPipelineBarrier2(commandBuffer, pDependencyInfo);
3265 }
3266 
vkCmdResetEvent2(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags2 stageMask)3267 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2(VkCommandBuffer commandBuffer, VkEvent event,
3268                                                           VkPipelineStageFlags2 stageMask) {
3269     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3270     if (NULL == disp) {
3271         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3272                    "vkCmdResetEvent2: Invalid commandBuffer "
3273                    "[VUID-vkCmdResetEvent2-commandBuffer-parameter]");
3274         abort(); /* Intentionally fail so user can correct issue. */
3275     }
3276     disp->CmdResetEvent2(commandBuffer, event, stageMask);
3277 }
3278 
vkCmdResolveImage2(VkCommandBuffer commandBuffer,const VkResolveImageInfo2 * pResolveImageInfo)3279 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2(VkCommandBuffer commandBuffer,
3280                                                             const VkResolveImageInfo2 *pResolveImageInfo) {
3281     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3282     if (NULL == disp) {
3283         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3284                    "vkCmdResolveImage2: Invalid commandBuffer "
3285                    "[VUID-vkCmdResolveImage2-commandBuffer-parameter]");
3286         abort(); /* Intentionally fail so user can correct issue. */
3287     }
3288     disp->CmdResolveImage2(commandBuffer, pResolveImageInfo);
3289 }
3290 
vkCmdSetCullMode(VkCommandBuffer commandBuffer,VkCullModeFlags cullMode)3291 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetCullMode(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode) {
3292     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3293     if (NULL == disp) {
3294         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3295                    "vkCmdSetCullMode: Invalid commandBuffer "
3296                    "[VUID-vkCmdSetCullMode-commandBuffer-parameter]");
3297         abort(); /* Intentionally fail so user can correct issue. */
3298     }
3299     disp->CmdSetCullMode(commandBuffer, cullMode);
3300 }
3301 
vkCmdSetDepthBiasEnable(VkCommandBuffer commandBuffer,VkBool32 depthBiasEnable)3302 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnable(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable) {
3303     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3304     if (NULL == disp) {
3305         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3306                    "vkCmdSetDepthBiasEnable: Invalid commandBuffer "
3307                    "[VUID-vkCmdSetDepthBiasEnable-commandBuffer-parameter]");
3308         abort(); /* Intentionally fail so user can correct issue. */
3309     }
3310     disp->CmdSetDepthBiasEnable(commandBuffer, depthBiasEnable);
3311 }
3312 
vkCmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer,VkBool32 depthBoundsTestEnable)3313 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer,
3314                                                                        VkBool32 depthBoundsTestEnable) {
3315     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3316     if (NULL == disp) {
3317         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3318                    "vkCmdSetDepthBoundsTestEnable: Invalid commandBuffer "
3319                    "[VUID-vkCmdSetDepthBoundsTestEnable-commandBuffer-parameter]");
3320         abort(); /* Intentionally fail so user can correct issue. */
3321     }
3322     disp->CmdSetDepthBoundsTestEnable(commandBuffer, depthBoundsTestEnable);
3323 }
3324 
vkCmdSetDepthCompareOp(VkCommandBuffer commandBuffer,VkCompareOp depthCompareOp)3325 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOp(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp) {
3326     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3327     if (NULL == disp) {
3328         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3329                    "vkCmdSetDepthCompareOp: Invalid commandBuffer "
3330                    "[VUID-vkCmdSetDepthCompareOp-commandBuffer-parameter]");
3331         abort(); /* Intentionally fail so user can correct issue. */
3332     }
3333     disp->CmdSetDepthCompareOp(commandBuffer, depthCompareOp);
3334 }
3335 
vkCmdSetDepthTestEnable(VkCommandBuffer commandBuffer,VkBool32 depthTestEnable)3336 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable) {
3337     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3338     if (NULL == disp) {
3339         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3340                    "vkCmdSetDepthTestEnable: Invalid commandBuffer "
3341                    "[VUID-vkCmdSetDepthTestEnable-commandBuffer-parameter]");
3342         abort(); /* Intentionally fail so user can correct issue. */
3343     }
3344     disp->CmdSetDepthTestEnable(commandBuffer, depthTestEnable);
3345 }
3346 
vkCmdSetDepthWriteEnable(VkCommandBuffer commandBuffer,VkBool32 depthWriteEnable)3347 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnable(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable) {
3348     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3349     if (NULL == disp) {
3350         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3351                    "vkCmdSetDepthWriteEnable: Invalid commandBuffer "
3352                    "[VUID-vkCmdSetDepthWriteEnable-commandBuffer-parameter]");
3353         abort(); /* Intentionally fail so user can correct issue. */
3354     }
3355     disp->CmdSetDepthWriteEnable(commandBuffer, depthWriteEnable);
3356 }
3357 
vkCmdSetEvent2(VkCommandBuffer commandBuffer,VkEvent event,const VkDependencyInfo * pDependencyInfo)3358 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2(VkCommandBuffer commandBuffer, VkEvent event,
3359                                                         const VkDependencyInfo *pDependencyInfo) {
3360     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3361     if (NULL == disp) {
3362         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3363                    "vkCmdSetEvent2: Invalid commandBuffer "
3364                    "[VUID-vkCmdSetEvent2-commandBuffer-parameter]");
3365         abort(); /* Intentionally fail so user can correct issue. */
3366     }
3367     disp->CmdSetEvent2(commandBuffer, event, pDependencyInfo);
3368 }
3369 
vkCmdSetFrontFace(VkCommandBuffer commandBuffer,VkFrontFace frontFace)3370 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFace(VkCommandBuffer commandBuffer, VkFrontFace frontFace) {
3371     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3372     if (NULL == disp) {
3373         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3374                    "vkCmdSetFrontFace: Invalid commandBuffer "
3375                    "[VUID-vkCmdSetFrontFace-commandBuffer-parameter]");
3376         abort(); /* Intentionally fail so user can correct issue. */
3377     }
3378     disp->CmdSetFrontFace(commandBuffer, frontFace);
3379 }
3380 
vkCmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer,VkBool32 primitiveRestartEnable)3381 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer,
3382                                                                         VkBool32 primitiveRestartEnable) {
3383     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3384     if (NULL == disp) {
3385         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3386                    "vkCmdSetPrimitiveRestartEnable: Invalid commandBuffer "
3387                    "[VUID-vkCmdSetPrimitiveRestartEnable-commandBuffer-parameter]");
3388         abort(); /* Intentionally fail so user can correct issue. */
3389     }
3390     disp->CmdSetPrimitiveRestartEnable(commandBuffer, primitiveRestartEnable);
3391 }
3392 
vkCmdSetPrimitiveTopology(VkCommandBuffer commandBuffer,VkPrimitiveTopology primitiveTopology)3393 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopology(VkCommandBuffer commandBuffer,
3394                                                                    VkPrimitiveTopology primitiveTopology) {
3395     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3396     if (NULL == disp) {
3397         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3398                    "vkCmdSetPrimitiveTopology: Invalid commandBuffer "
3399                    "[VUID-vkCmdSetPrimitiveTopology-commandBuffer-parameter]");
3400         abort(); /* Intentionally fail so user can correct issue. */
3401     }
3402     disp->CmdSetPrimitiveTopology(commandBuffer, primitiveTopology);
3403 }
3404 
vkCmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer,VkBool32 rasterizerDiscardEnable)3405 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer,
3406                                                                          VkBool32 rasterizerDiscardEnable) {
3407     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3408     if (NULL == disp) {
3409         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3410                    "vkCmdSetRasterizerDiscardEnable: Invalid commandBuffer "
3411                    "[VUID-vkCmdSetRasterizerDiscardEnable-commandBuffer-parameter]");
3412         abort(); /* Intentionally fail so user can correct issue. */
3413     }
3414     disp->CmdSetRasterizerDiscardEnable(commandBuffer, rasterizerDiscardEnable);
3415 }
3416 
vkCmdSetScissorWithCount(VkCommandBuffer commandBuffer,uint32_t scissorCount,const VkRect2D * pScissors)3417 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCount(VkCommandBuffer commandBuffer, uint32_t scissorCount,
3418                                                                   const VkRect2D *pScissors) {
3419     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3420     if (NULL == disp) {
3421         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3422                    "vkCmdSetScissorWithCount: Invalid commandBuffer "
3423                    "[VUID-vkCmdSetScissorWithCount-commandBuffer-parameter]");
3424         abort(); /* Intentionally fail so user can correct issue. */
3425     }
3426     disp->CmdSetScissorWithCount(commandBuffer, scissorCount, pScissors);
3427 }
3428 
vkCmdSetStencilOp(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,VkStencilOp failOp,VkStencilOp passOp,VkStencilOp depthFailOp,VkCompareOp compareOp)3429 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOp(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
3430                                                            VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp,
3431                                                            VkCompareOp compareOp) {
3432     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3433     if (NULL == disp) {
3434         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3435                    "vkCmdSetStencilOp: Invalid commandBuffer "
3436                    "[VUID-vkCmdSetStencilOp-commandBuffer-parameter]");
3437         abort(); /* Intentionally fail so user can correct issue. */
3438     }
3439     disp->CmdSetStencilOp(commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp);
3440 }
3441 
vkCmdSetStencilTestEnable(VkCommandBuffer commandBuffer,VkBool32 stencilTestEnable)3442 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnable(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable) {
3443     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3444     if (NULL == disp) {
3445         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3446                    "vkCmdSetStencilTestEnable: Invalid commandBuffer "
3447                    "[VUID-vkCmdSetStencilTestEnable-commandBuffer-parameter]");
3448         abort(); /* Intentionally fail so user can correct issue. */
3449     }
3450     disp->CmdSetStencilTestEnable(commandBuffer, stencilTestEnable);
3451 }
3452 
vkCmdSetViewportWithCount(VkCommandBuffer commandBuffer,uint32_t viewportCount,const VkViewport * pViewports)3453 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCount(VkCommandBuffer commandBuffer, uint32_t viewportCount,
3454                                                                    const VkViewport *pViewports) {
3455     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3456     if (NULL == disp) {
3457         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3458                    "vkCmdSetViewportWithCount: Invalid commandBuffer "
3459                    "[VUID-vkCmdSetViewportWithCount-commandBuffer-parameter]");
3460         abort(); /* Intentionally fail so user can correct issue. */
3461     }
3462     disp->CmdSetViewportWithCount(commandBuffer, viewportCount, pViewports);
3463 }
3464 
vkCmdWaitEvents2(VkCommandBuffer commandBuffer,uint32_t eventCount,const VkEvent * pEvents,const VkDependencyInfo * pDependencyInfos)3465 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount,
3466                                                           const VkEvent *pEvents, const VkDependencyInfo *pDependencyInfos) {
3467     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3468     if (NULL == disp) {
3469         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3470                    "vkCmdWaitEvents2: Invalid commandBuffer "
3471                    "[VUID-vkCmdWaitEvents2-commandBuffer-parameter]");
3472         abort(); /* Intentionally fail so user can correct issue. */
3473     }
3474     disp->CmdWaitEvents2(commandBuffer, eventCount, pEvents, pDependencyInfos);
3475 }
3476 
vkCmdWriteTimestamp2(VkCommandBuffer commandBuffer,VkPipelineStageFlags2 stage,VkQueryPool queryPool,uint32_t query)3477 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage,
3478                                                               VkQueryPool queryPool, uint32_t query) {
3479     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3480     if (NULL == disp) {
3481         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3482                    "vkCmdWriteTimestamp2: Invalid commandBuffer "
3483                    "[VUID-vkCmdWriteTimestamp2-commandBuffer-parameter]");
3484         abort(); /* Intentionally fail so user can correct issue. */
3485     }
3486     disp->CmdWriteTimestamp2(commandBuffer, stage, queryPool, query);
3487 }
3488 
vkCreatePrivateDataSlot(VkDevice device,const VkPrivateDataSlotCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPrivateDataSlot * pPrivateDataSlot)3489 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlot(VkDevice device,
3490                                                                      const VkPrivateDataSlotCreateInfo *pCreateInfo,
3491                                                                      const VkAllocationCallbacks *pAllocator,
3492                                                                      VkPrivateDataSlot *pPrivateDataSlot) {
3493     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3494     if (NULL == disp) {
3495         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3496                    "vkCreatePrivateDataSlot: Invalid device "
3497                    "[VUID-vkCreatePrivateDataSlot-device-parameter]");
3498         abort(); /* Intentionally fail so user can correct issue. */
3499     }
3500     return disp->CreatePrivateDataSlot(device, pCreateInfo, pAllocator, pPrivateDataSlot);
3501 }
3502 
vkDestroyPrivateDataSlot(VkDevice device,VkPrivateDataSlot privateDataSlot,const VkAllocationCallbacks * pAllocator)3503 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlot(VkDevice device, VkPrivateDataSlot privateDataSlot,
3504                                                                   const VkAllocationCallbacks *pAllocator) {
3505     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3506     if (NULL == disp) {
3507         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3508                    "vkDestroyPrivateDataSlot: Invalid device "
3509                    "[VUID-vkDestroyPrivateDataSlot-device-parameter]");
3510         abort(); /* Intentionally fail so user can correct issue. */
3511     }
3512     disp->DestroyPrivateDataSlot(device, privateDataSlot, pAllocator);
3513 }
3514 
vkGetDeviceBufferMemoryRequirements(VkDevice device,const VkDeviceBufferMemoryRequirements * pInfo,VkMemoryRequirements2 * pMemoryRequirements)3515 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements(VkDevice device,
3516                                                                              const VkDeviceBufferMemoryRequirements *pInfo,
3517                                                                              VkMemoryRequirements2 *pMemoryRequirements) {
3518     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3519     if (NULL == disp) {
3520         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3521                    "vkGetDeviceBufferMemoryRequirements: Invalid device "
3522                    "[VUID-vkGetDeviceBufferMemoryRequirements-device-parameter]");
3523         abort(); /* Intentionally fail so user can correct issue. */
3524     }
3525     disp->GetDeviceBufferMemoryRequirements(device, pInfo, pMemoryRequirements);
3526 }
3527 
vkGetDeviceImageMemoryRequirements(VkDevice device,const VkDeviceImageMemoryRequirements * pInfo,VkMemoryRequirements2 * pMemoryRequirements)3528 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements(VkDevice device,
3529                                                                             const VkDeviceImageMemoryRequirements *pInfo,
3530                                                                             VkMemoryRequirements2 *pMemoryRequirements) {
3531     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3532     if (NULL == disp) {
3533         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3534                    "vkGetDeviceImageMemoryRequirements: Invalid device "
3535                    "[VUID-vkGetDeviceImageMemoryRequirements-device-parameter]");
3536         abort(); /* Intentionally fail so user can correct issue. */
3537     }
3538     disp->GetDeviceImageMemoryRequirements(device, pInfo, pMemoryRequirements);
3539 }
3540 
vkGetDeviceImageSparseMemoryRequirements(VkDevice device,const VkDeviceImageMemoryRequirements * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements)3541 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements(
3542     VkDevice device, const VkDeviceImageMemoryRequirements *pInfo, uint32_t *pSparseMemoryRequirementCount,
3543     VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements) {
3544     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3545     if (NULL == disp) {
3546         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3547                    "vkGetDeviceImageSparseMemoryRequirements: Invalid device "
3548                    "[VUID-vkGetDeviceImageSparseMemoryRequirements-device-parameter]");
3549         abort(); /* Intentionally fail so user can correct issue. */
3550     }
3551     disp->GetDeviceImageSparseMemoryRequirements(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
3552 }
3553 
vkGetPrivateData(VkDevice device,VkObjectType objectType,uint64_t objectHandle,VkPrivateDataSlot privateDataSlot,uint64_t * pData)3554 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle,
3555                                                           VkPrivateDataSlot privateDataSlot, uint64_t *pData) {
3556     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3557     if (NULL == disp) {
3558         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3559                    "vkGetPrivateData: Invalid device "
3560                    "[VUID-vkGetPrivateData-device-parameter]");
3561         abort(); /* Intentionally fail so user can correct issue. */
3562     }
3563     disp->GetPrivateData(device, objectType, objectHandle, privateDataSlot, pData);
3564 }
3565 
vkSetPrivateData(VkDevice device,VkObjectType objectType,uint64_t objectHandle,VkPrivateDataSlot privateDataSlot,uint64_t data)3566 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle,
3567                                                               VkPrivateDataSlot privateDataSlot, uint64_t data) {
3568     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3569     if (NULL == disp) {
3570         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3571                    "vkSetPrivateData: Invalid device "
3572                    "[VUID-vkSetPrivateData-device-parameter]");
3573         abort(); /* Intentionally fail so user can correct issue. */
3574     }
3575     return disp->SetPrivateData(device, objectType, objectHandle, privateDataSlot, data);
3576 }
3577 
vkQueueSubmit2(VkQueue queue,uint32_t submitCount,const VkSubmitInfo2 * pSubmits,VkFence fence)3578 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2 *pSubmits,
3579                                                             VkFence fence) {
3580     const VkLayerDispatchTable *disp = loader_get_dispatch(queue);
3581     if (NULL == disp) {
3582         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3583                    "vkQueueSubmit2: Invalid queue "
3584                    "[VUID-vkQueueSubmit2-queue-parameter]");
3585         abort(); /* Intentionally fail so user can correct issue. */
3586     }
3587     return disp->QueueSubmit2(queue, submitCount, pSubmits, fence);
3588 }
3589 
3590 // ---- Vulkan core 1.4 trampolines
3591 
3592 // Instance
3593 
3594 // Device
3595 
vkGetRenderingAreaGranularity(VkDevice device,const VkRenderingAreaInfo * pRenderingAreaInfo,VkExtent2D * pGranularity)3596 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularity(VkDevice device,
3597                                                                        const VkRenderingAreaInfo *pRenderingAreaInfo,
3598                                                                        VkExtent2D *pGranularity) {
3599     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3600     if (NULL == disp) {
3601         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3602                    "vkGetRenderingAreaGranularity: Invalid device "
3603                    "[VUID-vkGetRenderingAreaGranularity-device-parameter]");
3604         abort(); /* Intentionally fail so user can correct issue. */
3605     }
3606     disp->GetRenderingAreaGranularity(device, pRenderingAreaInfo, pGranularity);
3607 }
3608 
vkCmdPushDescriptorSet(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipelineLayout layout,uint32_t set,uint32_t descriptorWriteCount,const VkWriteDescriptorSet * pDescriptorWrites)3609 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet(VkCommandBuffer commandBuffer,
3610                                                                 VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout,
3611                                                                 uint32_t set, uint32_t descriptorWriteCount,
3612                                                                 const VkWriteDescriptorSet *pDescriptorWrites) {
3613     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3614     if (NULL == disp) {
3615         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3616                    "vkCmdPushDescriptorSet: Invalid commandBuffer "
3617                    "[VUID-vkCmdPushDescriptorSet-commandBuffer-parameter]");
3618         abort(); /* Intentionally fail so user can correct issue. */
3619     }
3620     disp->CmdPushDescriptorSet(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
3621 }
3622 
vkCmdPushDescriptorSetWithTemplate(VkCommandBuffer commandBuffer,VkDescriptorUpdateTemplate descriptorUpdateTemplate,VkPipelineLayout layout,uint32_t set,const void * pData)3623 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate(VkCommandBuffer commandBuffer,
3624                                                                             VkDescriptorUpdateTemplate descriptorUpdateTemplate,
3625                                                                             VkPipelineLayout layout, uint32_t set,
3626                                                                             const void *pData) {
3627     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3628     if (NULL == disp) {
3629         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3630                    "vkCmdPushDescriptorSetWithTemplate: Invalid commandBuffer "
3631                    "[VUID-vkCmdPushDescriptorSetWithTemplate-commandBuffer-parameter]");
3632         abort(); /* Intentionally fail so user can correct issue. */
3633     }
3634     disp->CmdPushDescriptorSetWithTemplate(commandBuffer, descriptorUpdateTemplate, layout, set, pData);
3635 }
3636 
vkCmdSetLineStipple(VkCommandBuffer commandBuffer,uint32_t lineStippleFactor,uint16_t lineStipplePattern)3637 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStipple(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor,
3638                                                              uint16_t lineStipplePattern) {
3639     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3640     if (NULL == disp) {
3641         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3642                    "vkCmdSetLineStipple: Invalid commandBuffer "
3643                    "[VUID-vkCmdSetLineStipple-commandBuffer-parameter]");
3644         abort(); /* Intentionally fail so user can correct issue. */
3645     }
3646     disp->CmdSetLineStipple(commandBuffer, lineStippleFactor, lineStipplePattern);
3647 }
3648 
vkCmdBindIndexBuffer2(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkDeviceSize size,VkIndexType indexType)3649 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
3650                                                                VkDeviceSize size, VkIndexType indexType) {
3651     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3652     if (NULL == disp) {
3653         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3654                    "vkCmdBindIndexBuffer2: Invalid commandBuffer "
3655                    "[VUID-vkCmdBindIndexBuffer2-commandBuffer-parameter]");
3656         abort(); /* Intentionally fail so user can correct issue. */
3657     }
3658     disp->CmdBindIndexBuffer2(commandBuffer, buffer, offset, size, indexType);
3659 }
3660 
vkCopyMemoryToImage(VkDevice device,const VkCopyMemoryToImageInfo * pCopyMemoryToImageInfo)3661 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImage(VkDevice device,
3662                                                                  const VkCopyMemoryToImageInfo *pCopyMemoryToImageInfo) {
3663     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3664     if (NULL == disp) {
3665         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3666                    "vkCopyMemoryToImage: Invalid device "
3667                    "[VUID-vkCopyMemoryToImage-device-parameter]");
3668         abort(); /* Intentionally fail so user can correct issue. */
3669     }
3670     return disp->CopyMemoryToImage(device, pCopyMemoryToImageInfo);
3671 }
3672 
vkCopyImageToMemory(VkDevice device,const VkCopyImageToMemoryInfo * pCopyImageToMemoryInfo)3673 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemory(VkDevice device,
3674                                                                  const VkCopyImageToMemoryInfo *pCopyImageToMemoryInfo) {
3675     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3676     if (NULL == disp) {
3677         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3678                    "vkCopyImageToMemory: Invalid device "
3679                    "[VUID-vkCopyImageToMemory-device-parameter]");
3680         abort(); /* Intentionally fail so user can correct issue. */
3681     }
3682     return disp->CopyImageToMemory(device, pCopyImageToMemoryInfo);
3683 }
3684 
vkCopyImageToImage(VkDevice device,const VkCopyImageToImageInfo * pCopyImageToImageInfo)3685 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImage(VkDevice device,
3686                                                                 const VkCopyImageToImageInfo *pCopyImageToImageInfo) {
3687     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3688     if (NULL == disp) {
3689         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3690                    "vkCopyImageToImage: Invalid device "
3691                    "[VUID-vkCopyImageToImage-device-parameter]");
3692         abort(); /* Intentionally fail so user can correct issue. */
3693     }
3694     return disp->CopyImageToImage(device, pCopyImageToImageInfo);
3695 }
3696 
vkTransitionImageLayout(VkDevice device,uint32_t transitionCount,const VkHostImageLayoutTransitionInfo * pTransitions)3697 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayout(VkDevice device, uint32_t transitionCount,
3698                                                                      const VkHostImageLayoutTransitionInfo *pTransitions) {
3699     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3700     if (NULL == disp) {
3701         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3702                    "vkTransitionImageLayout: Invalid device "
3703                    "[VUID-vkTransitionImageLayout-device-parameter]");
3704         abort(); /* Intentionally fail so user can correct issue. */
3705     }
3706     return disp->TransitionImageLayout(device, transitionCount, pTransitions);
3707 }
3708 
vkGetDeviceImageSubresourceLayout(VkDevice device,const VkDeviceImageSubresourceInfo * pInfo,VkSubresourceLayout2 * pLayout)3709 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayout(VkDevice device,
3710                                                                            const VkDeviceImageSubresourceInfo *pInfo,
3711                                                                            VkSubresourceLayout2 *pLayout) {
3712     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3713     if (NULL == disp) {
3714         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3715                    "vkGetDeviceImageSubresourceLayout: Invalid device "
3716                    "[VUID-vkGetDeviceImageSubresourceLayout-device-parameter]");
3717         abort(); /* Intentionally fail so user can correct issue. */
3718     }
3719     disp->GetDeviceImageSubresourceLayout(device, pInfo, pLayout);
3720 }
3721 
vkGetImageSubresourceLayout2(VkDevice device,VkImage image,const VkImageSubresource2 * pSubresource,VkSubresourceLayout2 * pLayout)3722 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2(VkDevice device, VkImage image,
3723                                                                       const VkImageSubresource2 *pSubresource,
3724                                                                       VkSubresourceLayout2 *pLayout) {
3725     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3726     if (NULL == disp) {
3727         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3728                    "vkGetImageSubresourceLayout2: Invalid device "
3729                    "[VUID-vkGetImageSubresourceLayout2-device-parameter]");
3730         abort(); /* Intentionally fail so user can correct issue. */
3731     }
3732     disp->GetImageSubresourceLayout2(device, image, pSubresource, pLayout);
3733 }
3734 
vkMapMemory2(VkDevice device,const VkMemoryMapInfo * pMemoryMapInfo,void ** ppData)3735 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2(VkDevice device, const VkMemoryMapInfo *pMemoryMapInfo, void **ppData) {
3736     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3737     if (NULL == disp) {
3738         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3739                    "vkMapMemory2: Invalid device "
3740                    "[VUID-vkMapMemory2-device-parameter]");
3741         abort(); /* Intentionally fail so user can correct issue. */
3742     }
3743     return disp->MapMemory2(device, pMemoryMapInfo, ppData);
3744 }
3745 
vkUnmapMemory2(VkDevice device,const VkMemoryUnmapInfo * pMemoryUnmapInfo)3746 LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2(VkDevice device, const VkMemoryUnmapInfo *pMemoryUnmapInfo) {
3747     const VkLayerDispatchTable *disp = loader_get_dispatch(device);
3748     if (NULL == disp) {
3749         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3750                    "vkUnmapMemory2: Invalid device "
3751                    "[VUID-vkUnmapMemory2-device-parameter]");
3752         abort(); /* Intentionally fail so user can correct issue. */
3753     }
3754     return disp->UnmapMemory2(device, pMemoryUnmapInfo);
3755 }
3756 
vkCmdBindDescriptorSets2(VkCommandBuffer commandBuffer,const VkBindDescriptorSetsInfo * pBindDescriptorSetsInfo)3757 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2(VkCommandBuffer commandBuffer,
3758                                                                   const VkBindDescriptorSetsInfo *pBindDescriptorSetsInfo) {
3759     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3760     if (NULL == disp) {
3761         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3762                    "vkCmdBindDescriptorSets2: Invalid commandBuffer "
3763                    "[VUID-vkCmdBindDescriptorSets2-commandBuffer-parameter]");
3764         abort(); /* Intentionally fail so user can correct issue. */
3765     }
3766     disp->CmdBindDescriptorSets2(commandBuffer, pBindDescriptorSetsInfo);
3767 }
3768 
vkCmdPushConstants2(VkCommandBuffer commandBuffer,const VkPushConstantsInfo * pPushConstantsInfo)3769 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2(VkCommandBuffer commandBuffer,
3770                                                              const VkPushConstantsInfo *pPushConstantsInfo) {
3771     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3772     if (NULL == disp) {
3773         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3774                    "vkCmdPushConstants2: Invalid commandBuffer "
3775                    "[VUID-vkCmdPushConstants2-commandBuffer-parameter]");
3776         abort(); /* Intentionally fail so user can correct issue. */
3777     }
3778     disp->CmdPushConstants2(commandBuffer, pPushConstantsInfo);
3779 }
3780 
vkCmdPushDescriptorSet2(VkCommandBuffer commandBuffer,const VkPushDescriptorSetInfo * pPushDescriptorSetInfo)3781 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2(VkCommandBuffer commandBuffer,
3782                                                                  const VkPushDescriptorSetInfo *pPushDescriptorSetInfo) {
3783     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3784     if (NULL == disp) {
3785         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3786                    "vkCmdPushDescriptorSet2: Invalid commandBuffer "
3787                    "[VUID-vkCmdPushDescriptorSet2-commandBuffer-parameter]");
3788         abort(); /* Intentionally fail so user can correct issue. */
3789     }
3790     disp->CmdPushDescriptorSet2(commandBuffer, pPushDescriptorSetInfo);
3791 }
3792 
vkCmdPushDescriptorSetWithTemplate2(VkCommandBuffer commandBuffer,const VkPushDescriptorSetWithTemplateInfo * pPushDescriptorSetWithTemplateInfo)3793 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate2(
3794     VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo *pPushDescriptorSetWithTemplateInfo) {
3795     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3796     if (NULL == disp) {
3797         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3798                    "vkCmdPushDescriptorSetWithTemplate2: Invalid commandBuffer "
3799                    "[VUID-vkCmdPushDescriptorSetWithTemplate2-commandBuffer-parameter]");
3800         abort(); /* Intentionally fail so user can correct issue. */
3801     }
3802     disp->CmdPushDescriptorSetWithTemplate2(commandBuffer, pPushDescriptorSetWithTemplateInfo);
3803 }
3804 
3805 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL
vkCmdSetRenderingAttachmentLocations(VkCommandBuffer commandBuffer,const VkRenderingAttachmentLocationInfo * pLocationInfo)3806 vkCmdSetRenderingAttachmentLocations(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo *pLocationInfo) {
3807     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3808     if (NULL == disp) {
3809         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3810                    "vkCmdSetRenderingAttachmentLocations: Invalid commandBuffer "
3811                    "[VUID-vkCmdSetRenderingAttachmentLocations-commandBuffer-parameter]");
3812         abort(); /* Intentionally fail so user can correct issue. */
3813     }
3814     disp->CmdSetRenderingAttachmentLocations(commandBuffer, pLocationInfo);
3815 }
3816 
vkCmdSetRenderingInputAttachmentIndices(VkCommandBuffer commandBuffer,const VkRenderingInputAttachmentIndexInfo * pInputAttachmentIndexInfo)3817 LOADER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndices(
3818     VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo *pInputAttachmentIndexInfo) {
3819     const VkLayerDispatchTable *disp = loader_get_dispatch(commandBuffer);
3820     if (NULL == disp) {
3821         loader_log(NULL, VULKAN_LOADER_FATAL_ERROR_BIT | VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0,
3822                    "vkCmdSetRenderingInputAttachmentIndices: Invalid commandBuffer "
3823                    "[VUID-vkCmdSetRenderingInputAttachmentIndices-commandBuffer-parameter]");
3824         abort(); /* Intentionally fail so user can correct issue. */
3825     }
3826     disp->CmdSetRenderingInputAttachmentIndices(commandBuffer, pInputAttachmentIndexInfo);
3827 }
3828