Coverage Report

Created: 2026-04-01 06:45

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