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