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