blob: e90e39ca932fa0e4feef8b5515f7145f51d97468 [file] [log] [blame]
Mike Schuchardt440d4642019-06-20 17:14:57 -07001
2// This file is ***GENERATED***. Do Not Edit.
3// See layer_chassis_generator.py for modifications.
4
5/* Copyright (c) 2015-2019 The Khronos Group Inc.
6 * Copyright (c) 2015-2019 Valve Corporation
7 * Copyright (c) 2015-2019 LunarG, Inc.
8 * Copyright (c) 2015-2019 Google Inc.
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: Mark Lobodzinski <mark@lunarg.com>
23 */
24
25
26#include <string.h>
27#include <mutex>
28
29#define VALIDATION_ERROR_MAP_IMPL
30
31#include "chassis.h"
32#include "layer_chassis_dispatch.h"
33
34std::unordered_map<void*, ValidationObject*> layer_data_map;
35
36// Global unique object identifier. All increments must be guarded by a lock.
37uint64_t global_unique_id = 1;
38// Map uniqueID to actual object handle
39std::unordered_map<uint64_t, uint64_t> unique_id_mapping;
40
41// TODO: This variable controls handle wrapping -- in the future it should be hooked
42// up to the new VALIDATION_FEATURES extension. Temporarily, control with a compile-time flag.
43#if defined(LAYER_CHASSIS_CAN_WRAP_HANDLES)
44bool wrap_handles = true;
45#else
46bool wrap_handles = false;
47#endif
48
49// Set layer name -- Khronos layer name overrides any other defined names
50#if BUILD_KHRONOS_VALIDATION
51#define OBJECT_LAYER_NAME "VK_LAYER_KHRONOS_validation"
52#define OBJECT_LAYER_DESCRIPTION "khronos_validation"
53#elif BUILD_OBJECT_TRACKER
54#define OBJECT_LAYER_NAME "VK_LAYER_LUNARG_object_tracker"
55#define OBJECT_LAYER_DESCRIPTION "lunarg_object_tracker"
56#elif BUILD_THREAD_SAFETY
57#define OBJECT_LAYER_NAME "VK_LAYER_GOOGLE_threading"
58#define OBJECT_LAYER_DESCRIPTION "google_thread_checker"
59#elif BUILD_PARAMETER_VALIDATION
60#define OBJECT_LAYER_NAME "VK_LAYER_LUNARG_parameter_validation"
61#define OBJECT_LAYER_DESCRIPTION "lunarg_parameter_validation"
62#elif BUILD_CORE_VALIDATION
63#define OBJECT_LAYER_NAME "VK_LAYER_LUNARG_core_validation"
64#define OBJECT_LAYER_DESCRIPTION "lunarg_core_validation"
65#else
66#define OBJECT_LAYER_NAME "VK_LAYER_GOOGLE_unique_objects"
67#define OBJECT_LAYER_DESCRIPTION "lunarg_unique_objects"
68#endif
69
70// Include layer validation object definitions
71#if BUILD_OBJECT_TRACKER
72#include "object_lifetime_validation.h"
73#endif
74#if BUILD_THREAD_SAFETY
75#include "thread_safety.h"
76#endif
77#if BUILD_PARAMETER_VALIDATION
78#include "stateless_validation.h"
79#endif
80#if BUILD_CORE_VALIDATION
81#include "core_validation.h"
82#endif
83
84namespace vulkan_layer_chassis {
85
86using std::unordered_map;
87
88static const VkLayerProperties global_layer = {
89 OBJECT_LAYER_NAME, VK_LAYER_API_VERSION, 1, "LunarG validation Layer",
90};
91
92static const VkExtensionProperties instance_extensions[] = {{VK_EXT_DEBUG_REPORT_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_SPEC_VERSION},
93 {VK_EXT_DEBUG_UTILS_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_SPEC_VERSION}};
94static const VkExtensionProperties device_extensions[] = {
95 {VK_EXT_VALIDATION_CACHE_EXTENSION_NAME, VK_EXT_VALIDATION_CACHE_SPEC_VERSION},
96 {VK_EXT_DEBUG_MARKER_EXTENSION_NAME, VK_EXT_DEBUG_MARKER_SPEC_VERSION},
97};
98
99typedef struct {
100 bool is_instance_api;
101 void* funcptr;
102} function_data;
103
104extern const std::unordered_map<std::string, function_data> name_to_funcptr_map;
105
106// Manually written functions
107
108// Check enabled instance extensions against supported instance extension whitelist
109static void InstanceExtensionWhitelist(ValidationObject *layer_data, const VkInstanceCreateInfo *pCreateInfo, VkInstance instance) {
110 for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
111 // Check for recognized instance extensions
112 if (!white_list(pCreateInfo->ppEnabledExtensionNames[i], kInstanceExtensionNames)) {
113 log_msg(layer_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0,
114 kVUIDUndefined,
115 "Instance Extension %s is not supported by this layer. Using this extension may adversely affect validation "
116 "results and/or produce undefined behavior.",
117 pCreateInfo->ppEnabledExtensionNames[i]);
118 }
119 }
120}
121
122// Check enabled device extensions against supported device extension whitelist
123static void DeviceExtensionWhitelist(ValidationObject *layer_data, const VkDeviceCreateInfo *pCreateInfo, VkDevice device) {
124 for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
125 // Check for recognized device extensions
126 if (!white_list(pCreateInfo->ppEnabledExtensionNames[i], kDeviceExtensionNames)) {
127 log_msg(layer_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0,
128 kVUIDUndefined,
129 "Device Extension %s is not supported by this layer. Using this extension may adversely affect validation "
130 "results and/or produce undefined behavior.",
131 pCreateInfo->ppEnabledExtensionNames[i]);
132 }
133 }
134}
135
136
137// Process validation features, flags and settings specified through extensions, a layer settings file, or environment variables
138
139static const std::unordered_map<std::string, VkValidationFeatureDisableEXT> VkValFeatureDisableLookup = {
140 {"VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT", VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT},
141 {"VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT},
142 {"VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT},
143 {"VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT},
144 {"VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT", VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT},
145 {"VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT},
146 {"VK_VALIDATION_FEATURE_DISABLE_ALL_EXT", VK_VALIDATION_FEATURE_DISABLE_ALL_EXT},
147};
148
149static const std::unordered_map<std::string, VkValidationFeatureEnableEXT> VkValFeatureEnableLookup = {
150 {"VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT", VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT},
151 {"VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT", VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT},
152};
153
154static const std::unordered_map<std::string, ValidationCheckDisables> ValidationDisableLookup = {
155 {"VALIDATION_CHECK_DISABLE_COMMAND_BUFFER_STATE", VALIDATION_CHECK_DISABLE_COMMAND_BUFFER_STATE},
156 {"VALIDATION_CHECK_DISABLE_OBJECT_IN_USE", VALIDATION_CHECK_DISABLE_OBJECT_IN_USE},
157 {"VALIDATION_CHECK_DISABLE_IDLE_DESCRIPTOR_SET", VALIDATION_CHECK_DISABLE_IDLE_DESCRIPTOR_SET},
158 {"VALIDATION_CHECK_DISABLE_PUSH_CONSTANT_RANGE", VALIDATION_CHECK_DISABLE_PUSH_CONSTANT_RANGE},
159 {"VALIDATION_CHECK_DISABLE_QUERY_VALIDATION", VALIDATION_CHECK_DISABLE_QUERY_VALIDATION},
160};
161
162// Set the local disable flag for the appropriate VALIDATION_CHECK_DISABLE enum
163void SetValidationDisable(CHECK_DISABLED* disable_data, const ValidationCheckDisables disable_id) {
164 switch (disable_id) {
165 case VALIDATION_CHECK_DISABLE_COMMAND_BUFFER_STATE:
166 disable_data->command_buffer_state = true;
167 break;
168 case VALIDATION_CHECK_DISABLE_OBJECT_IN_USE:
169 disable_data->object_in_use = true;
170 break;
171 case VALIDATION_CHECK_DISABLE_IDLE_DESCRIPTOR_SET:
172 disable_data->idle_descriptor_set = true;
173 break;
174 case VALIDATION_CHECK_DISABLE_PUSH_CONSTANT_RANGE:
175 disable_data->push_constant_range = true;
176 break;
177 case VALIDATION_CHECK_DISABLE_QUERY_VALIDATION:
178 disable_data->query_validation = true;
179 break;
180 default:
181 assert(true);
182 }
183}
184
185// Set the local disable flag for a single VK_VALIDATION_FEATURE_DISABLE_* flag
186void SetValidationFeatureDisable(CHECK_DISABLED* disable_data, const VkValidationFeatureDisableEXT feature_disable) {
187 switch (feature_disable) {
188 case VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT:
189 disable_data->shader_validation = true;
190 break;
191 case VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT:
192 disable_data->thread_safety = true;
193 break;
194 case VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT:
195 disable_data->stateless_checks = true;
196 break;
197 case VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT:
198 disable_data->object_tracking = true;
199 break;
200 case VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT:
201 disable_data->core_checks = true;
202 break;
203 case VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT:
204 disable_data->handle_wrapping = true;
205 break;
206 case VK_VALIDATION_FEATURE_DISABLE_ALL_EXT:
207 // Set all disabled flags to true
208 disable_data->SetAll(true);
209 break;
210 default:
211 break;
212 }
213}
214
215// Set the local enable flag for a single VK_VALIDATION_FEATURE_ENABLE_* flag
216void SetValidationFeatureEnable(CHECK_ENABLED *enable_data, const VkValidationFeatureEnableEXT feature_enable) {
217 switch (feature_enable) {
218 case VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT:
219 enable_data->gpu_validation = true;
220 break;
221 case VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT:
222 enable_data->gpu_validation_reserve_binding_slot = true;
223 break;
224 default:
225 break;
226 }
227}
228
229// Set the local disable flag for settings specified through the VK_EXT_validation_flags extension
230void SetValidationFlags(CHECK_DISABLED* disables, const VkValidationFlagsEXT* val_flags_struct) {
231 for (uint32_t i = 0; i < val_flags_struct->disabledValidationCheckCount; ++i) {
232 switch (val_flags_struct->pDisabledValidationChecks[i]) {
233 case VK_VALIDATION_CHECK_SHADERS_EXT:
234 disables->shader_validation = true;
235 break;
236 case VK_VALIDATION_CHECK_ALL_EXT:
237 // Set all disabled flags to true
238 disables->SetAll(true);
239 break;
240 default:
241 break;
242 }
243 }
244}
245
246// Process Validation Features flags specified through the ValidationFeature extension
247void SetValidationFeatures(CHECK_DISABLED *disable_data, CHECK_ENABLED *enable_data,
248 const VkValidationFeaturesEXT *val_features_struct) {
249 for (uint32_t i = 0; i < val_features_struct->disabledValidationFeatureCount; ++i) {
250 SetValidationFeatureDisable(disable_data, val_features_struct->pDisabledValidationFeatures[i]);
251 }
252 for (uint32_t i = 0; i < val_features_struct->enabledValidationFeatureCount; ++i) {
253 SetValidationFeatureEnable(enable_data, val_features_struct->pEnabledValidationFeatures[i]);
254 }
255}
256
257// Given a string representation of a list of enable enum values, call the appropriate setter function
258void SetLocalEnableSetting(std::string list_of_enables, std::string delimiter, CHECK_ENABLED* enables) {
259 size_t pos = 0;
260 std::string token;
261 while (list_of_enables.length() != 0) {
262 pos = list_of_enables.find(delimiter);
263 if (pos != std::string::npos) {
264 token = list_of_enables.substr(0, pos);
265 } else {
266 pos = list_of_enables.length() - delimiter.length();
267 token = list_of_enables;
268 }
269 if (token.find("VK_VALIDATION_FEATURE_ENABLE_") != std::string::npos) {
270 auto result = VkValFeatureEnableLookup.find(token);
271 if (result != VkValFeatureEnableLookup.end()) {
272 SetValidationFeatureEnable(enables, result->second);
273 }
274 }
275 list_of_enables.erase(0, pos + delimiter.length());
276 }
277}
278
279// Given a string representation of a list of disable enum values, call the appropriate setter function
280void SetLocalDisableSetting(std::string list_of_disables, std::string delimiter, CHECK_DISABLED* disables) {
281 size_t pos = 0;
282 std::string token;
283 while (list_of_disables.length() != 0) {
284 pos = list_of_disables.find(delimiter);
285 if (pos != std::string::npos) {
286 token = list_of_disables.substr(0, pos);
287 } else {
288 pos = list_of_disables.length() - delimiter.length();
289 token = list_of_disables;
290 }
291 if (token.find("VK_VALIDATION_FEATURE_DISABLE_") != std::string::npos) {
292 auto result = VkValFeatureDisableLookup.find(token);
293 if (result != VkValFeatureDisableLookup.end()) {
294 SetValidationFeatureDisable(disables, result->second);
295 }
296 }
297 if (token.find("VALIDATION_CHECK_DISABLE_") != std::string::npos) {
298 auto result = ValidationDisableLookup.find(token);
299 if (result != ValidationDisableLookup.end()) {
300 SetValidationDisable(disables, result->second);
301 }
302 }
303 list_of_disables.erase(0, pos + delimiter.length());
304 }
305}
306
307// Process enables and disables set though the vk_layer_settings.txt config file or through an environment variable
308void ProcessConfigAndEnvSettings(const char* layer_description, CHECK_ENABLED* enables, CHECK_DISABLED* disables) {
309 std::string enable_key = layer_description;
310 std::string disable_key = layer_description;
311 enable_key.append(".enables");
312 disable_key.append(".disables");
313 std::string list_of_config_enables = getLayerOption(enable_key.c_str());
314 std::string list_of_env_enables = GetLayerEnvVar("VK_LAYER_ENABLES");
315 std::string list_of_config_disables = getLayerOption(disable_key.c_str());
316 std::string list_of_env_disables = GetLayerEnvVar("VK_LAYER_DISABLES");
317#if defined(_WIN32)
318 std::string env_delimiter = ";";
319#else
320 std::string env_delimiter = ":";
321#endif
322 SetLocalEnableSetting(list_of_config_enables, ",", enables);
323 SetLocalEnableSetting(list_of_env_enables, env_delimiter, enables);
324 SetLocalDisableSetting(list_of_config_disables, ",", disables);
325 SetLocalDisableSetting(list_of_env_disables, env_delimiter, disables);
326}
327
328
329// Non-code-generated chassis API functions
330
331VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char *funcName) {
332 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
Mark Lobodzinskif94196f2019-07-11 11:46:09 -0600333 if (!ApiParentExtensionEnabled(funcName, &layer_data->device_extensions)) {
Mike Schuchardt440d4642019-06-20 17:14:57 -0700334 return nullptr;
335 }
336 const auto &item = name_to_funcptr_map.find(funcName);
337 if (item != name_to_funcptr_map.end()) {
338 if (item->second.is_instance_api) {
339 return nullptr;
340 } else {
341 return reinterpret_cast<PFN_vkVoidFunction>(item->second.funcptr);
342 }
343 }
344 auto &table = layer_data->device_dispatch_table;
345 if (!table.GetDeviceProcAddr) return nullptr;
346 return table.GetDeviceProcAddr(device, funcName);
347}
348
349VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char *funcName) {
350 const auto &item = name_to_funcptr_map.find(funcName);
351 if (item != name_to_funcptr_map.end()) {
352 return reinterpret_cast<PFN_vkVoidFunction>(item->second.funcptr);
353 }
354 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
355 auto &table = layer_data->instance_dispatch_table;
356 if (!table.GetInstanceProcAddr) return nullptr;
357 return table.GetInstanceProcAddr(instance, funcName);
358}
359
360VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(uint32_t *pCount, VkLayerProperties *pProperties) {
361 return util_GetLayerProperties(1, &global_layer, pCount, pProperties);
362}
363
364VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount,
365 VkLayerProperties *pProperties) {
366 return util_GetLayerProperties(1, &global_layer, pCount, pProperties);
367}
368
369VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount,
370 VkExtensionProperties *pProperties) {
371 if (pLayerName && !strcmp(pLayerName, global_layer.layerName))
372 return util_GetExtensionProperties(ARRAY_SIZE(instance_extensions), instance_extensions, pCount, pProperties);
373
374 return VK_ERROR_LAYER_NOT_PRESENT;
375}
376
377VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName,
378 uint32_t *pCount, VkExtensionProperties *pProperties) {
379 if (pLayerName && !strcmp(pLayerName, global_layer.layerName)) return util_GetExtensionProperties(ARRAY_SIZE(device_extensions), device_extensions, pCount, pProperties);
380 assert(physicalDevice);
381 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
382 return layer_data->instance_dispatch_table.EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pCount, pProperties);
383}
384
385VKAPI_ATTR VkResult VKAPI_CALL CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator,
386 VkInstance *pInstance) {
387 VkLayerInstanceCreateInfo* chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
388
389 assert(chain_info->u.pLayerInfo);
390 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
391 PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance)fpGetInstanceProcAddr(NULL, "vkCreateInstance");
392 if (fpCreateInstance == NULL) return VK_ERROR_INITIALIZATION_FAILED;
393 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
394 uint32_t specified_version = (pCreateInfo->pApplicationInfo ? pCreateInfo->pApplicationInfo->apiVersion : VK_API_VERSION_1_0);
395 uint32_t api_version = (specified_version < VK_API_VERSION_1_1) ? VK_API_VERSION_1_0 : VK_API_VERSION_1_1;
396
397 CHECK_ENABLED local_enables {};
398 CHECK_DISABLED local_disables {};
399 const auto *validation_features_ext = lvl_find_in_chain<VkValidationFeaturesEXT>(pCreateInfo->pNext);
400 if (validation_features_ext) {
401 SetValidationFeatures(&local_disables, &local_enables, validation_features_ext);
402 }
403 const auto *validation_flags_ext = lvl_find_in_chain<VkValidationFlagsEXT>(pCreateInfo->pNext);
404 if (validation_flags_ext) {
405 SetValidationFlags(&local_disables, validation_flags_ext);
406 }
407 ProcessConfigAndEnvSettings(OBJECT_LAYER_DESCRIPTION, &local_enables, &local_disables);
408
409 // Create temporary dispatch vector for pre-calls until instance is created
410 std::vector<ValidationObject*> local_object_dispatch;
411 // Add VOs to dispatch vector. Order here will be the validation dispatch order!
412#if BUILD_THREAD_SAFETY
413 auto thread_checker = new ThreadSafety;
414 if (!local_disables.thread_safety) {
415 local_object_dispatch.emplace_back(thread_checker);
416 }
417 thread_checker->container_type = LayerObjectTypeThreading;
418 thread_checker->api_version = api_version;
419#endif
420#if BUILD_PARAMETER_VALIDATION
421 auto parameter_validation = new StatelessValidation;
422 if (!local_disables.stateless_checks) {
423 local_object_dispatch.emplace_back(parameter_validation);
424 }
425 parameter_validation->container_type = LayerObjectTypeParameterValidation;
426 parameter_validation->api_version = api_version;
427#endif
428#if BUILD_OBJECT_TRACKER
429 auto object_tracker = new ObjectLifetimes;
430 if (!local_disables.object_tracking) {
431 local_object_dispatch.emplace_back(object_tracker);
432 }
433 object_tracker->container_type = LayerObjectTypeObjectTracker;
434 object_tracker->api_version = api_version;
435#endif
436#if BUILD_CORE_VALIDATION
437 auto core_checks = new CoreChecks;
438 if (!local_disables.core_checks) {
439 local_object_dispatch.emplace_back(core_checks);
440 }
441 core_checks->container_type = LayerObjectTypeCoreValidation;
442 core_checks->api_version = api_version;
443#endif
444
445 // If handle wrapping is disabled via the ValidationFeatures extension, override build flag
446 if (local_disables.handle_wrapping) {
447 wrap_handles = false;
448 }
449
450 // Init dispatch array and call registration functions
451 for (auto intercept : local_object_dispatch) {
452 intercept->PreCallValidateCreateInstance(pCreateInfo, pAllocator, pInstance);
453 }
454 for (auto intercept : local_object_dispatch) {
455 intercept->PreCallRecordCreateInstance(pCreateInfo, pAllocator, pInstance);
456 }
457
458 VkResult result = fpCreateInstance(pCreateInfo, pAllocator, pInstance);
459 if (result != VK_SUCCESS) return result;
460
461 auto framework = GetLayerDataPtr(get_dispatch_key(*pInstance), layer_data_map);
462
463 framework->object_dispatch = local_object_dispatch;
464 framework->container_type = LayerObjectTypeInstance;
465 framework->disabled = local_disables;
466 framework->enabled = local_enables;
467
468 framework->instance = *pInstance;
469 layer_init_instance_dispatch_table(*pInstance, &framework->instance_dispatch_table, fpGetInstanceProcAddr);
470 framework->report_data = debug_utils_create_instance(&framework->instance_dispatch_table, *pInstance, pCreateInfo->enabledExtensionCount,
471 pCreateInfo->ppEnabledExtensionNames);
472 framework->api_version = api_version;
473 framework->instance_extensions.InitFromInstanceCreateInfo(specified_version, pCreateInfo);
474
475 layer_debug_messenger_actions(framework->report_data, framework->logging_messenger, pAllocator, OBJECT_LAYER_DESCRIPTION);
476
477#if BUILD_OBJECT_TRACKER
478 object_tracker->report_data = framework->report_data;
479 object_tracker->instance_dispatch_table = framework->instance_dispatch_table;
480 object_tracker->enabled = framework->enabled;
481 object_tracker->disabled = framework->disabled;
482#endif
483#if BUILD_THREAD_SAFETY
484 thread_checker->report_data = framework->report_data;
485 thread_checker->instance_dispatch_table = framework->instance_dispatch_table;
486 thread_checker->enabled = framework->enabled;
487 thread_checker->disabled = framework->disabled;
488#endif
489#if BUILD_PARAMETER_VALIDATION
490 parameter_validation->report_data = framework->report_data;
491 parameter_validation->instance_dispatch_table = framework->instance_dispatch_table;
492 parameter_validation->enabled = framework->enabled;
493 parameter_validation->disabled = framework->disabled;
494#endif
495#if BUILD_CORE_VALIDATION
496 core_checks->report_data = framework->report_data;
497 core_checks->instance_dispatch_table = framework->instance_dispatch_table;
498 core_checks->instance = *pInstance;
499 core_checks->enabled = framework->enabled;
500 core_checks->disabled = framework->disabled;
501 core_checks->instance_state = core_checks;
502#endif
503
504 for (auto intercept : framework->object_dispatch) {
505 intercept->PostCallRecordCreateInstance(pCreateInfo, pAllocator, pInstance, result);
506 }
507
508 InstanceExtensionWhitelist(framework, pCreateInfo, *pInstance);
509
510 return result;
511}
512
513VKAPI_ATTR void VKAPI_CALL DestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) {
514 dispatch_key key = get_dispatch_key(instance);
515 auto layer_data = GetLayerDataPtr(key, layer_data_map);
516 for (auto intercept : layer_data->object_dispatch) {
517 auto lock = intercept->write_lock();
518 intercept->PreCallValidateDestroyInstance(instance, pAllocator);
519 }
520 for (auto intercept : layer_data->object_dispatch) {
521 auto lock = intercept->write_lock();
522 intercept->PreCallRecordDestroyInstance(instance, pAllocator);
523 }
524
525 layer_data->instance_dispatch_table.DestroyInstance(instance, pAllocator);
526
527 for (auto intercept : layer_data->object_dispatch) {
528 auto lock = intercept->write_lock();
529 intercept->PostCallRecordDestroyInstance(instance, pAllocator);
530 }
531 // Clean up logging callback, if any
532 while (layer_data->logging_messenger.size() > 0) {
533 VkDebugUtilsMessengerEXT messenger = layer_data->logging_messenger.back();
534 layer_destroy_messenger_callback(layer_data->report_data, messenger, pAllocator);
535 layer_data->logging_messenger.pop_back();
536 }
537 while (layer_data->logging_callback.size() > 0) {
538 VkDebugReportCallbackEXT callback = layer_data->logging_callback.back();
539 layer_destroy_report_callback(layer_data->report_data, callback, pAllocator);
540 layer_data->logging_callback.pop_back();
541 }
542
543 layer_debug_utils_destroy_instance(layer_data->report_data);
544
545 for (auto item = layer_data->object_dispatch.begin(); item != layer_data->object_dispatch.end(); item++) {
546 delete *item;
547 }
548 FreeLayerDataPtr(key, layer_data_map);
549}
550
551VKAPI_ATTR VkResult VKAPI_CALL CreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo *pCreateInfo,
552 const VkAllocationCallbacks *pAllocator, VkDevice *pDevice) {
553 VkLayerDeviceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
554
555 auto instance_interceptor = GetLayerDataPtr(get_dispatch_key(gpu), layer_data_map);
556
557 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
558 PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr;
559 PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice)fpGetInstanceProcAddr(instance_interceptor->instance, "vkCreateDevice");
560 if (fpCreateDevice == NULL) {
561 return VK_ERROR_INITIALIZATION_FAILED;
562 }
563 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
564
565 // Get physical device limits for device
566 VkPhysicalDeviceProperties device_properties = {};
567 instance_interceptor->instance_dispatch_table.GetPhysicalDeviceProperties(gpu, &device_properties);
568
569 // Setup the validation tables based on the application API version from the instance and the capabilities of the device driver
570 uint32_t effective_api_version = std::min(device_properties.apiVersion, instance_interceptor->api_version);
571
572 DeviceExtensions device_extensions = {};
573 device_extensions.InitFromDeviceCreateInfo(&instance_interceptor->instance_extensions, effective_api_version, pCreateInfo);
574 for (auto item : instance_interceptor->object_dispatch) {
575 item->device_extensions = device_extensions;
576 }
577
578 std::unique_ptr<safe_VkDeviceCreateInfo> modified_create_info(new safe_VkDeviceCreateInfo(pCreateInfo));
579
580 bool skip = false;
581 for (auto intercept : instance_interceptor->object_dispatch) {
582 auto lock = intercept->write_lock();
583 skip |= intercept->PreCallValidateCreateDevice(gpu, pCreateInfo, pAllocator, pDevice);
584 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
585 }
586 for (auto intercept : instance_interceptor->object_dispatch) {
587 auto lock = intercept->write_lock();
588 intercept->PreCallRecordCreateDevice(gpu, pCreateInfo, pAllocator, pDevice, modified_create_info);
589 }
590
591 VkResult result = fpCreateDevice(gpu, reinterpret_cast<VkDeviceCreateInfo *>(modified_create_info.get()), pAllocator, pDevice);
592 if (result != VK_SUCCESS) {
593 return result;
594 }
595
596 auto device_interceptor = GetLayerDataPtr(get_dispatch_key(*pDevice), layer_data_map);
597 device_interceptor->container_type = LayerObjectTypeDevice;
598
599 // Save local info in device object
600 device_interceptor->phys_dev_properties.properties = device_properties;
601 device_interceptor->api_version = device_interceptor->device_extensions.InitFromDeviceCreateInfo(
602 &instance_interceptor->instance_extensions, effective_api_version, pCreateInfo);
603 device_interceptor->device_extensions = device_extensions;
604
605 layer_init_device_dispatch_table(*pDevice, &device_interceptor->device_dispatch_table, fpGetDeviceProcAddr);
606
607 device_interceptor->device = *pDevice;
608 device_interceptor->physical_device = gpu;
609 device_interceptor->instance = instance_interceptor->instance;
610 device_interceptor->report_data = layer_debug_utils_create_device(instance_interceptor->report_data, *pDevice);
611
612 // Note that this defines the order in which the layer validation objects are called
613#if BUILD_THREAD_SAFETY
614 auto thread_safety = new ThreadSafety;
615 thread_safety->container_type = LayerObjectTypeThreading;
616 if (!instance_interceptor->disabled.thread_safety) {
617 device_interceptor->object_dispatch.emplace_back(thread_safety);
618 }
619#endif
620#if BUILD_PARAMETER_VALIDATION
621 auto stateless_validation = new StatelessValidation;
622 stateless_validation->container_type = LayerObjectTypeParameterValidation;
623 if (!instance_interceptor->disabled.stateless_checks) {
624 device_interceptor->object_dispatch.emplace_back(stateless_validation);
625 }
626#endif
627#if BUILD_OBJECT_TRACKER
628 auto object_tracker = new ObjectLifetimes;
629 object_tracker->container_type = LayerObjectTypeObjectTracker;
630 if (!instance_interceptor->disabled.object_tracking) {
631 device_interceptor->object_dispatch.emplace_back(object_tracker);
632 }
633#endif
634#if BUILD_CORE_VALIDATION
635 auto core_checks = new CoreChecks;
636 core_checks->container_type = LayerObjectTypeCoreValidation;
637 core_checks->instance_state = reinterpret_cast<CoreChecks *>(
638 core_checks->GetValidationObject(instance_interceptor->object_dispatch, LayerObjectTypeCoreValidation));
639 if (!instance_interceptor->disabled.core_checks) {
640 device_interceptor->object_dispatch.emplace_back(core_checks);
641 }
642#endif
643
644 // Set per-intercept common data items
645 for (auto dev_intercept : device_interceptor->object_dispatch) {
646 dev_intercept->device = *pDevice;
647 dev_intercept->physical_device = gpu;
648 dev_intercept->instance = instance_interceptor->instance;
649 dev_intercept->report_data = device_interceptor->report_data;
650 dev_intercept->device_dispatch_table = device_interceptor->device_dispatch_table;
651 dev_intercept->api_version = device_interceptor->api_version;
652 dev_intercept->disabled = instance_interceptor->disabled;
653 dev_intercept->enabled = instance_interceptor->enabled;
654 dev_intercept->instance_dispatch_table = instance_interceptor->instance_dispatch_table;
655 dev_intercept->instance_extensions = instance_interceptor->instance_extensions;
656 dev_intercept->device_extensions = device_interceptor->device_extensions;
657 }
658
659 for (auto intercept : instance_interceptor->object_dispatch) {
660 auto lock = intercept->write_lock();
661 intercept->PostCallRecordCreateDevice(gpu, pCreateInfo, pAllocator, pDevice, result);
662 }
663
664 DeviceExtensionWhitelist(device_interceptor, pCreateInfo, *pDevice);
665
666 return result;
667}
668
669VKAPI_ATTR void VKAPI_CALL DestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator) {
670 dispatch_key key = get_dispatch_key(device);
671 auto layer_data = GetLayerDataPtr(key, layer_data_map);
672 for (auto intercept : layer_data->object_dispatch) {
673 auto lock = intercept->write_lock();
674 intercept->PreCallValidateDestroyDevice(device, pAllocator);
675 }
676 for (auto intercept : layer_data->object_dispatch) {
677 auto lock = intercept->write_lock();
678 intercept->PreCallRecordDestroyDevice(device, pAllocator);
679 }
680 layer_debug_utils_destroy_device(device);
681
682 layer_data->device_dispatch_table.DestroyDevice(device, pAllocator);
683
684 for (auto intercept : layer_data->object_dispatch) {
685 auto lock = intercept->write_lock();
686 intercept->PostCallRecordDestroyDevice(device, pAllocator);
687 }
688
689 for (auto item = layer_data->object_dispatch.begin(); item != layer_data->object_dispatch.end(); item++) {
690 delete *item;
691 }
692 FreeLayerDataPtr(key, layer_data_map);
693}
694
695
696// Special-case APIs for which core_validation needs custom parameter lists and/or modifies parameters
697
698VKAPI_ATTR VkResult VKAPI_CALL CreateGraphicsPipelines(
699 VkDevice device,
700 VkPipelineCache pipelineCache,
701 uint32_t createInfoCount,
702 const VkGraphicsPipelineCreateInfo* pCreateInfos,
703 const VkAllocationCallbacks* pAllocator,
704 VkPipeline* pPipelines) {
705 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
706 bool skip = false;
707
708#ifdef BUILD_CORE_VALIDATION
709 create_graphics_pipeline_api_state cgpl_state{};
710#else
711 struct create_graphics_pipeline_api_state {
712 const VkGraphicsPipelineCreateInfo* pCreateInfos;
713 } cgpl_state;
714#endif
715 cgpl_state.pCreateInfos = pCreateInfos;
716
717 for (auto intercept : layer_data->object_dispatch) {
718 auto lock = intercept->write_lock();
719 skip |= intercept->PreCallValidateCreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, &cgpl_state);
720 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
721 }
722 for (auto intercept : layer_data->object_dispatch) {
723 auto lock = intercept->write_lock();
724 intercept->PreCallRecordCreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, &cgpl_state);
725 }
726
727 VkResult result = DispatchCreateGraphicsPipelines(device, pipelineCache, createInfoCount, cgpl_state.pCreateInfos, pAllocator, pPipelines);
728
729 for (auto intercept : layer_data->object_dispatch) {
730 auto lock = intercept->write_lock();
731 intercept->PostCallRecordCreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, result, &cgpl_state);
732 }
733 return result;
734}
735
736// This API saves some core_validation pipeline state state on the stack for performance purposes
737VKAPI_ATTR VkResult VKAPI_CALL CreateComputePipelines(
738 VkDevice device,
739 VkPipelineCache pipelineCache,
740 uint32_t createInfoCount,
741 const VkComputePipelineCreateInfo* pCreateInfos,
742 const VkAllocationCallbacks* pAllocator,
743 VkPipeline* pPipelines) {
744 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
745 bool skip = false;
746
747#ifdef BUILD_CORE_VALIDATION
748 create_compute_pipeline_api_state ccpl_state{};
749#else
750 struct create_compute_pipeline_api_state {
751 const VkComputePipelineCreateInfo* pCreateInfos;
752 } ccpl_state;
753#endif
754 ccpl_state.pCreateInfos = pCreateInfos;
755
756 for (auto intercept : layer_data->object_dispatch) {
757 auto lock = intercept->write_lock();
758 skip |= intercept->PreCallValidateCreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, &ccpl_state);
759 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
760 }
761 for (auto intercept : layer_data->object_dispatch) {
762 auto lock = intercept->write_lock();
763 intercept->PreCallRecordCreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, &ccpl_state);
764 }
765 VkResult result = DispatchCreateComputePipelines(device, pipelineCache, createInfoCount, ccpl_state.pCreateInfos, pAllocator, pPipelines);
766 for (auto intercept : layer_data->object_dispatch) {
767 auto lock = intercept->write_lock();
768 intercept->PostCallRecordCreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, result, &ccpl_state);
769 }
770 return result;
771}
772
773VKAPI_ATTR VkResult VKAPI_CALL CreateRayTracingPipelinesNV(
774 VkDevice device,
775 VkPipelineCache pipelineCache,
776 uint32_t createInfoCount,
777 const VkRayTracingPipelineCreateInfoNV* pCreateInfos,
778 const VkAllocationCallbacks* pAllocator,
779 VkPipeline* pPipelines) {
780 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
781 bool skip = false;
782
783#ifndef BUILD_CORE_VALIDATION
784 struct PIPELINE_STATE {};
785#endif
786
787 std::vector<std::unique_ptr<PIPELINE_STATE>> pipe_state;
788
789 for (auto intercept : layer_data->object_dispatch) {
790 auto lock = intercept->write_lock();
791 skip |= intercept->PreCallValidateCreateRayTracingPipelinesNV(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, &pipe_state);
792 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
793 }
794 for (auto intercept : layer_data->object_dispatch) {
795 auto lock = intercept->write_lock();
796 intercept->PreCallRecordCreateRayTracingPipelinesNV(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
797 }
798 VkResult result = DispatchCreateRayTracingPipelinesNV(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
799 for (auto intercept : layer_data->object_dispatch) {
800 auto lock = intercept->write_lock();
801 intercept->PostCallRecordCreateRayTracingPipelinesNV(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, result, &pipe_state);
802 }
803 return result;
804}
805
806// This API needs the ability to modify a down-chain parameter
807VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineLayout(
808 VkDevice device,
809 const VkPipelineLayoutCreateInfo* pCreateInfo,
810 const VkAllocationCallbacks* pAllocator,
811 VkPipelineLayout* pPipelineLayout) {
812 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
813 bool skip = false;
814
815#ifndef BUILD_CORE_VALIDATION
816 struct create_pipeline_layout_api_state {
817 VkPipelineLayoutCreateInfo modified_create_info;
818 };
819#endif
820 create_pipeline_layout_api_state cpl_state{};
821 cpl_state.modified_create_info = *pCreateInfo;
822
823 for (auto intercept : layer_data->object_dispatch) {
824 auto lock = intercept->write_lock();
825 skip |= intercept->PreCallValidateCreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
826 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
827 }
828 for (auto intercept : layer_data->object_dispatch) {
829 auto lock = intercept->write_lock();
830 intercept->PreCallRecordCreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout, &cpl_state);
831 }
832 VkResult result = DispatchCreatePipelineLayout(device, &cpl_state.modified_create_info, pAllocator, pPipelineLayout);
833 for (auto intercept : layer_data->object_dispatch) {
834 auto lock = intercept->write_lock();
835 intercept->PostCallRecordCreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout, result);
836 }
837 return result;
838}
839
840// This API needs some local stack data for performance reasons and also may modify a parameter
841VKAPI_ATTR VkResult VKAPI_CALL CreateShaderModule(
842 VkDevice device,
843 const VkShaderModuleCreateInfo* pCreateInfo,
844 const VkAllocationCallbacks* pAllocator,
845 VkShaderModule* pShaderModule) {
846 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
847 bool skip = false;
848
849#ifndef BUILD_CORE_VALIDATION
850 struct create_shader_module_api_state {
851 VkShaderModuleCreateInfo instrumented_create_info;
852 };
853#endif
854 create_shader_module_api_state csm_state{};
855 csm_state.instrumented_create_info = *pCreateInfo;
856
857 for (auto intercept : layer_data->object_dispatch) {
858 auto lock = intercept->write_lock();
859 skip |= intercept->PreCallValidateCreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule, &csm_state);
860 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
861 }
862 for (auto intercept : layer_data->object_dispatch) {
863 auto lock = intercept->write_lock();
864 intercept->PreCallRecordCreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule, &csm_state);
865 }
866 VkResult result = DispatchCreateShaderModule(device, &csm_state.instrumented_create_info, pAllocator, pShaderModule);
867 for (auto intercept : layer_data->object_dispatch) {
868 auto lock = intercept->write_lock();
869 intercept->PostCallRecordCreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule, result, &csm_state);
870 }
871 return result;
872}
873
874VKAPI_ATTR VkResult VKAPI_CALL AllocateDescriptorSets(
875 VkDevice device,
876 const VkDescriptorSetAllocateInfo* pAllocateInfo,
877 VkDescriptorSet* pDescriptorSets) {
878 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
879 bool skip = false;
880
881#ifdef BUILD_CORE_VALIDATION
882 cvdescriptorset::AllocateDescriptorSetsData ads_state(pAllocateInfo->descriptorSetCount);
883#else
884 struct ads_state {} ads_state;
885#endif
886
887 for (auto intercept : layer_data->object_dispatch) {
888 auto lock = intercept->write_lock();
889 skip |= intercept->PreCallValidateAllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets, &ads_state);
890 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
891 }
892 for (auto intercept : layer_data->object_dispatch) {
893 auto lock = intercept->write_lock();
894 intercept->PreCallRecordAllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
895 }
896 VkResult result = DispatchAllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
897 for (auto intercept : layer_data->object_dispatch) {
898 auto lock = intercept->write_lock();
899 intercept->PostCallRecordAllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets, result, &ads_state);
900 }
901 return result;
902}
903
904
905
906
907
908// ValidationCache APIs do not dispatch
909
910VKAPI_ATTR VkResult VKAPI_CALL CreateValidationCacheEXT(
911 VkDevice device,
912 const VkValidationCacheCreateInfoEXT* pCreateInfo,
913 const VkAllocationCallbacks* pAllocator,
914 VkValidationCacheEXT* pValidationCache) {
915 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
916 VkResult result = VK_SUCCESS;
917
918 ValidationObject *validation_data = layer_data->GetValidationObject(layer_data->object_dispatch, LayerObjectTypeCoreValidation);
919 if (validation_data) {
920 auto lock = validation_data->write_lock();
921 result = validation_data->CoreLayerCreateValidationCacheEXT(device, pCreateInfo, pAllocator, pValidationCache);
922 }
923 return result;
924}
925
926VKAPI_ATTR void VKAPI_CALL DestroyValidationCacheEXT(
927 VkDevice device,
928 VkValidationCacheEXT validationCache,
929 const VkAllocationCallbacks* pAllocator) {
930 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
931
932 ValidationObject *validation_data = layer_data->GetValidationObject(layer_data->object_dispatch, LayerObjectTypeCoreValidation);
933 if (validation_data) {
934 auto lock = validation_data->write_lock();
935 validation_data->CoreLayerDestroyValidationCacheEXT(device, validationCache, pAllocator);
936 }
937}
938
939VKAPI_ATTR VkResult VKAPI_CALL MergeValidationCachesEXT(
940 VkDevice device,
941 VkValidationCacheEXT dstCache,
942 uint32_t srcCacheCount,
943 const VkValidationCacheEXT* pSrcCaches) {
944 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
945 VkResult result = VK_SUCCESS;
946
947 ValidationObject *validation_data = layer_data->GetValidationObject(layer_data->object_dispatch, LayerObjectTypeCoreValidation);
948 if (validation_data) {
949 auto lock = validation_data->write_lock();
950 result = validation_data->CoreLayerMergeValidationCachesEXT(device, dstCache, srcCacheCount, pSrcCaches);
951 }
952 return result;
953}
954
955VKAPI_ATTR VkResult VKAPI_CALL GetValidationCacheDataEXT(
956 VkDevice device,
957 VkValidationCacheEXT validationCache,
958 size_t* pDataSize,
959 void* pData) {
960 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
961 VkResult result = VK_SUCCESS;
962
963 ValidationObject *validation_data = layer_data->GetValidationObject(layer_data->object_dispatch, LayerObjectTypeCoreValidation);
964 if (validation_data) {
965 auto lock = validation_data->write_lock();
966 result = validation_data->CoreLayerGetValidationCacheDataEXT(device, validationCache, pDataSize, pData);
967 }
968 return result;
969
970}
971
972
973VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDevices(
974 VkInstance instance,
975 uint32_t* pPhysicalDeviceCount,
976 VkPhysicalDevice* pPhysicalDevices) {
977 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
978 bool skip = false;
979 for (auto intercept : layer_data->object_dispatch) {
980 auto lock = intercept->write_lock();
981 skip |= intercept->PreCallValidateEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
982 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
983 }
984 for (auto intercept : layer_data->object_dispatch) {
985 auto lock = intercept->write_lock();
986 intercept->PreCallRecordEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
987 }
988 VkResult result = DispatchEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
989 for (auto intercept : layer_data->object_dispatch) {
990 auto lock = intercept->write_lock();
991 intercept->PostCallRecordEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
992 }
993 return result;
994}
995
996VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures(
997 VkPhysicalDevice physicalDevice,
998 VkPhysicalDeviceFeatures* pFeatures) {
999 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1000 bool skip = false;
1001 for (auto intercept : layer_data->object_dispatch) {
1002 auto lock = intercept->write_lock();
1003 skip |= intercept->PreCallValidateGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1004 if (skip) return;
1005 }
1006 for (auto intercept : layer_data->object_dispatch) {
1007 auto lock = intercept->write_lock();
1008 intercept->PreCallRecordGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1009 }
1010 DispatchGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1011 for (auto intercept : layer_data->object_dispatch) {
1012 auto lock = intercept->write_lock();
1013 intercept->PostCallRecordGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1014 }
1015}
1016
1017VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties(
1018 VkPhysicalDevice physicalDevice,
1019 VkFormat format,
1020 VkFormatProperties* pFormatProperties) {
1021 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1022 bool skip = false;
1023 for (auto intercept : layer_data->object_dispatch) {
1024 auto lock = intercept->write_lock();
1025 skip |= intercept->PreCallValidateGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
1026 if (skip) return;
1027 }
1028 for (auto intercept : layer_data->object_dispatch) {
1029 auto lock = intercept->write_lock();
1030 intercept->PreCallRecordGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
1031 }
1032 DispatchGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
1033 for (auto intercept : layer_data->object_dispatch) {
1034 auto lock = intercept->write_lock();
1035 intercept->PostCallRecordGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
1036 }
1037}
1038
1039VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties(
1040 VkPhysicalDevice physicalDevice,
1041 VkFormat format,
1042 VkImageType type,
1043 VkImageTiling tiling,
1044 VkImageUsageFlags usage,
1045 VkImageCreateFlags flags,
1046 VkImageFormatProperties* pImageFormatProperties) {
1047 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1048 bool skip = false;
1049 for (auto intercept : layer_data->object_dispatch) {
1050 auto lock = intercept->write_lock();
1051 skip |= intercept->PreCallValidateGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
1052 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1053 }
1054 for (auto intercept : layer_data->object_dispatch) {
1055 auto lock = intercept->write_lock();
1056 intercept->PreCallRecordGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
1057 }
1058 VkResult result = DispatchGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
1059 for (auto intercept : layer_data->object_dispatch) {
1060 auto lock = intercept->write_lock();
1061 intercept->PostCallRecordGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
1062 }
1063 return result;
1064}
1065
1066VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties(
1067 VkPhysicalDevice physicalDevice,
1068 VkPhysicalDeviceProperties* pProperties) {
1069 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1070 bool skip = false;
1071 for (auto intercept : layer_data->object_dispatch) {
1072 auto lock = intercept->write_lock();
1073 skip |= intercept->PreCallValidateGetPhysicalDeviceProperties(physicalDevice, pProperties);
1074 if (skip) return;
1075 }
1076 for (auto intercept : layer_data->object_dispatch) {
1077 auto lock = intercept->write_lock();
1078 intercept->PreCallRecordGetPhysicalDeviceProperties(physicalDevice, pProperties);
1079 }
1080 DispatchGetPhysicalDeviceProperties(physicalDevice, pProperties);
1081 for (auto intercept : layer_data->object_dispatch) {
1082 auto lock = intercept->write_lock();
1083 intercept->PostCallRecordGetPhysicalDeviceProperties(physicalDevice, pProperties);
1084 }
1085}
1086
1087VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties(
1088 VkPhysicalDevice physicalDevice,
1089 uint32_t* pQueueFamilyPropertyCount,
1090 VkQueueFamilyProperties* pQueueFamilyProperties) {
1091 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1092 bool skip = false;
1093 for (auto intercept : layer_data->object_dispatch) {
1094 auto lock = intercept->write_lock();
1095 skip |= intercept->PreCallValidateGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
1096 if (skip) return;
1097 }
1098 for (auto intercept : layer_data->object_dispatch) {
1099 auto lock = intercept->write_lock();
1100 intercept->PreCallRecordGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
1101 }
1102 DispatchGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
1103 for (auto intercept : layer_data->object_dispatch) {
1104 auto lock = intercept->write_lock();
1105 intercept->PostCallRecordGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
1106 }
1107}
1108
1109VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties(
1110 VkPhysicalDevice physicalDevice,
1111 VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
1112 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1113 bool skip = false;
1114 for (auto intercept : layer_data->object_dispatch) {
1115 auto lock = intercept->write_lock();
1116 skip |= intercept->PreCallValidateGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
1117 if (skip) return;
1118 }
1119 for (auto intercept : layer_data->object_dispatch) {
1120 auto lock = intercept->write_lock();
1121 intercept->PreCallRecordGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
1122 }
1123 DispatchGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
1124 for (auto intercept : layer_data->object_dispatch) {
1125 auto lock = intercept->write_lock();
1126 intercept->PostCallRecordGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
1127 }
1128}
1129
1130VKAPI_ATTR void VKAPI_CALL GetDeviceQueue(
1131 VkDevice device,
1132 uint32_t queueFamilyIndex,
1133 uint32_t queueIndex,
1134 VkQueue* pQueue) {
1135 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1136 bool skip = false;
1137 for (auto intercept : layer_data->object_dispatch) {
1138 auto lock = intercept->write_lock();
1139 skip |= intercept->PreCallValidateGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
1140 if (skip) return;
1141 }
1142 for (auto intercept : layer_data->object_dispatch) {
1143 auto lock = intercept->write_lock();
1144 intercept->PreCallRecordGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
1145 }
1146 DispatchGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
1147 for (auto intercept : layer_data->object_dispatch) {
1148 auto lock = intercept->write_lock();
1149 intercept->PostCallRecordGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
1150 }
1151}
1152
1153VKAPI_ATTR VkResult VKAPI_CALL QueueSubmit(
1154 VkQueue queue,
1155 uint32_t submitCount,
1156 const VkSubmitInfo* pSubmits,
1157 VkFence fence) {
1158 auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
1159 bool skip = false;
1160 for (auto intercept : layer_data->object_dispatch) {
1161 auto lock = intercept->write_lock();
1162 skip |= intercept->PreCallValidateQueueSubmit(queue, submitCount, pSubmits, fence);
1163 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1164 }
1165 for (auto intercept : layer_data->object_dispatch) {
1166 auto lock = intercept->write_lock();
1167 intercept->PreCallRecordQueueSubmit(queue, submitCount, pSubmits, fence);
1168 }
1169 VkResult result = DispatchQueueSubmit(queue, submitCount, pSubmits, fence);
1170 for (auto intercept : layer_data->object_dispatch) {
1171 auto lock = intercept->write_lock();
1172 intercept->PostCallRecordQueueSubmit(queue, submitCount, pSubmits, fence, result);
1173 }
1174 return result;
1175}
1176
1177VKAPI_ATTR VkResult VKAPI_CALL QueueWaitIdle(
1178 VkQueue queue) {
1179 auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
1180 bool skip = false;
1181 for (auto intercept : layer_data->object_dispatch) {
1182 auto lock = intercept->write_lock();
1183 skip |= intercept->PreCallValidateQueueWaitIdle(queue);
1184 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1185 }
1186 for (auto intercept : layer_data->object_dispatch) {
1187 auto lock = intercept->write_lock();
1188 intercept->PreCallRecordQueueWaitIdle(queue);
1189 }
1190 VkResult result = DispatchQueueWaitIdle(queue);
1191 for (auto intercept : layer_data->object_dispatch) {
1192 auto lock = intercept->write_lock();
1193 intercept->PostCallRecordQueueWaitIdle(queue, result);
1194 }
1195 return result;
1196}
1197
1198VKAPI_ATTR VkResult VKAPI_CALL DeviceWaitIdle(
1199 VkDevice device) {
1200 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1201 bool skip = false;
1202 for (auto intercept : layer_data->object_dispatch) {
1203 auto lock = intercept->write_lock();
1204 skip |= intercept->PreCallValidateDeviceWaitIdle(device);
1205 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1206 }
1207 for (auto intercept : layer_data->object_dispatch) {
1208 auto lock = intercept->write_lock();
1209 intercept->PreCallRecordDeviceWaitIdle(device);
1210 }
1211 VkResult result = DispatchDeviceWaitIdle(device);
1212 for (auto intercept : layer_data->object_dispatch) {
1213 auto lock = intercept->write_lock();
1214 intercept->PostCallRecordDeviceWaitIdle(device, result);
1215 }
1216 return result;
1217}
1218
1219VKAPI_ATTR VkResult VKAPI_CALL AllocateMemory(
1220 VkDevice device,
1221 const VkMemoryAllocateInfo* pAllocateInfo,
1222 const VkAllocationCallbacks* pAllocator,
1223 VkDeviceMemory* pMemory) {
1224 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1225 bool skip = false;
1226 for (auto intercept : layer_data->object_dispatch) {
1227 auto lock = intercept->write_lock();
1228 skip |= intercept->PreCallValidateAllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
1229 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1230 }
1231 for (auto intercept : layer_data->object_dispatch) {
1232 auto lock = intercept->write_lock();
1233 intercept->PreCallRecordAllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
1234 }
1235 VkResult result = DispatchAllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
1236 for (auto intercept : layer_data->object_dispatch) {
1237 auto lock = intercept->write_lock();
1238 intercept->PostCallRecordAllocateMemory(device, pAllocateInfo, pAllocator, pMemory, result);
1239 }
1240 return result;
1241}
1242
1243VKAPI_ATTR void VKAPI_CALL FreeMemory(
1244 VkDevice device,
1245 VkDeviceMemory memory,
1246 const VkAllocationCallbacks* pAllocator) {
1247 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1248 bool skip = false;
1249 for (auto intercept : layer_data->object_dispatch) {
1250 auto lock = intercept->write_lock();
1251 skip |= intercept->PreCallValidateFreeMemory(device, memory, pAllocator);
1252 if (skip) return;
1253 }
1254 for (auto intercept : layer_data->object_dispatch) {
1255 auto lock = intercept->write_lock();
1256 intercept->PreCallRecordFreeMemory(device, memory, pAllocator);
1257 }
1258 DispatchFreeMemory(device, memory, pAllocator);
1259 for (auto intercept : layer_data->object_dispatch) {
1260 auto lock = intercept->write_lock();
1261 intercept->PostCallRecordFreeMemory(device, memory, pAllocator);
1262 }
1263}
1264
1265VKAPI_ATTR VkResult VKAPI_CALL MapMemory(
1266 VkDevice device,
1267 VkDeviceMemory memory,
1268 VkDeviceSize offset,
1269 VkDeviceSize size,
1270 VkMemoryMapFlags flags,
1271 void** ppData) {
1272 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1273 bool skip = false;
1274 for (auto intercept : layer_data->object_dispatch) {
1275 auto lock = intercept->write_lock();
1276 skip |= intercept->PreCallValidateMapMemory(device, memory, offset, size, flags, ppData);
1277 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1278 }
1279 for (auto intercept : layer_data->object_dispatch) {
1280 auto lock = intercept->write_lock();
1281 intercept->PreCallRecordMapMemory(device, memory, offset, size, flags, ppData);
1282 }
1283 VkResult result = DispatchMapMemory(device, memory, offset, size, flags, ppData);
1284 for (auto intercept : layer_data->object_dispatch) {
1285 auto lock = intercept->write_lock();
1286 intercept->PostCallRecordMapMemory(device, memory, offset, size, flags, ppData, result);
1287 }
1288 return result;
1289}
1290
1291VKAPI_ATTR void VKAPI_CALL UnmapMemory(
1292 VkDevice device,
1293 VkDeviceMemory memory) {
1294 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1295 bool skip = false;
1296 for (auto intercept : layer_data->object_dispatch) {
1297 auto lock = intercept->write_lock();
1298 skip |= intercept->PreCallValidateUnmapMemory(device, memory);
1299 if (skip) return;
1300 }
1301 for (auto intercept : layer_data->object_dispatch) {
1302 auto lock = intercept->write_lock();
1303 intercept->PreCallRecordUnmapMemory(device, memory);
1304 }
1305 DispatchUnmapMemory(device, memory);
1306 for (auto intercept : layer_data->object_dispatch) {
1307 auto lock = intercept->write_lock();
1308 intercept->PostCallRecordUnmapMemory(device, memory);
1309 }
1310}
1311
1312VKAPI_ATTR VkResult VKAPI_CALL FlushMappedMemoryRanges(
1313 VkDevice device,
1314 uint32_t memoryRangeCount,
1315 const VkMappedMemoryRange* pMemoryRanges) {
1316 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1317 bool skip = false;
1318 for (auto intercept : layer_data->object_dispatch) {
1319 auto lock = intercept->write_lock();
1320 skip |= intercept->PreCallValidateFlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1321 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1322 }
1323 for (auto intercept : layer_data->object_dispatch) {
1324 auto lock = intercept->write_lock();
1325 intercept->PreCallRecordFlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1326 }
1327 VkResult result = DispatchFlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1328 for (auto intercept : layer_data->object_dispatch) {
1329 auto lock = intercept->write_lock();
1330 intercept->PostCallRecordFlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges, result);
1331 }
1332 return result;
1333}
1334
1335VKAPI_ATTR VkResult VKAPI_CALL InvalidateMappedMemoryRanges(
1336 VkDevice device,
1337 uint32_t memoryRangeCount,
1338 const VkMappedMemoryRange* pMemoryRanges) {
1339 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1340 bool skip = false;
1341 for (auto intercept : layer_data->object_dispatch) {
1342 auto lock = intercept->write_lock();
1343 skip |= intercept->PreCallValidateInvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1344 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1345 }
1346 for (auto intercept : layer_data->object_dispatch) {
1347 auto lock = intercept->write_lock();
1348 intercept->PreCallRecordInvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1349 }
1350 VkResult result = DispatchInvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1351 for (auto intercept : layer_data->object_dispatch) {
1352 auto lock = intercept->write_lock();
1353 intercept->PostCallRecordInvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges, result);
1354 }
1355 return result;
1356}
1357
1358VKAPI_ATTR void VKAPI_CALL GetDeviceMemoryCommitment(
1359 VkDevice device,
1360 VkDeviceMemory memory,
1361 VkDeviceSize* pCommittedMemoryInBytes) {
1362 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1363 bool skip = false;
1364 for (auto intercept : layer_data->object_dispatch) {
1365 auto lock = intercept->write_lock();
1366 skip |= intercept->PreCallValidateGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
1367 if (skip) return;
1368 }
1369 for (auto intercept : layer_data->object_dispatch) {
1370 auto lock = intercept->write_lock();
1371 intercept->PreCallRecordGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
1372 }
1373 DispatchGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
1374 for (auto intercept : layer_data->object_dispatch) {
1375 auto lock = intercept->write_lock();
1376 intercept->PostCallRecordGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
1377 }
1378}
1379
1380VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory(
1381 VkDevice device,
1382 VkBuffer buffer,
1383 VkDeviceMemory memory,
1384 VkDeviceSize memoryOffset) {
1385 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1386 bool skip = false;
1387 for (auto intercept : layer_data->object_dispatch) {
1388 auto lock = intercept->write_lock();
1389 skip |= intercept->PreCallValidateBindBufferMemory(device, buffer, memory, memoryOffset);
1390 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1391 }
1392 for (auto intercept : layer_data->object_dispatch) {
1393 auto lock = intercept->write_lock();
1394 intercept->PreCallRecordBindBufferMemory(device, buffer, memory, memoryOffset);
1395 }
1396 VkResult result = DispatchBindBufferMemory(device, buffer, memory, memoryOffset);
1397 for (auto intercept : layer_data->object_dispatch) {
1398 auto lock = intercept->write_lock();
1399 intercept->PostCallRecordBindBufferMemory(device, buffer, memory, memoryOffset, result);
1400 }
1401 return result;
1402}
1403
1404VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory(
1405 VkDevice device,
1406 VkImage image,
1407 VkDeviceMemory memory,
1408 VkDeviceSize memoryOffset) {
1409 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1410 bool skip = false;
1411 for (auto intercept : layer_data->object_dispatch) {
1412 auto lock = intercept->write_lock();
1413 skip |= intercept->PreCallValidateBindImageMemory(device, image, memory, memoryOffset);
1414 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1415 }
1416 for (auto intercept : layer_data->object_dispatch) {
1417 auto lock = intercept->write_lock();
1418 intercept->PreCallRecordBindImageMemory(device, image, memory, memoryOffset);
1419 }
1420 VkResult result = DispatchBindImageMemory(device, image, memory, memoryOffset);
1421 for (auto intercept : layer_data->object_dispatch) {
1422 auto lock = intercept->write_lock();
1423 intercept->PostCallRecordBindImageMemory(device, image, memory, memoryOffset, result);
1424 }
1425 return result;
1426}
1427
1428VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements(
1429 VkDevice device,
1430 VkBuffer buffer,
1431 VkMemoryRequirements* pMemoryRequirements) {
1432 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1433 bool skip = false;
1434 for (auto intercept : layer_data->object_dispatch) {
1435 auto lock = intercept->write_lock();
1436 skip |= intercept->PreCallValidateGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
1437 if (skip) return;
1438 }
1439 for (auto intercept : layer_data->object_dispatch) {
1440 auto lock = intercept->write_lock();
1441 intercept->PreCallRecordGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
1442 }
1443 DispatchGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
1444 for (auto intercept : layer_data->object_dispatch) {
1445 auto lock = intercept->write_lock();
1446 intercept->PostCallRecordGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
1447 }
1448}
1449
1450VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements(
1451 VkDevice device,
1452 VkImage image,
1453 VkMemoryRequirements* pMemoryRequirements) {
1454 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1455 bool skip = false;
1456 for (auto intercept : layer_data->object_dispatch) {
1457 auto lock = intercept->write_lock();
1458 skip |= intercept->PreCallValidateGetImageMemoryRequirements(device, image, pMemoryRequirements);
1459 if (skip) return;
1460 }
1461 for (auto intercept : layer_data->object_dispatch) {
1462 auto lock = intercept->write_lock();
1463 intercept->PreCallRecordGetImageMemoryRequirements(device, image, pMemoryRequirements);
1464 }
1465 DispatchGetImageMemoryRequirements(device, image, pMemoryRequirements);
1466 for (auto intercept : layer_data->object_dispatch) {
1467 auto lock = intercept->write_lock();
1468 intercept->PostCallRecordGetImageMemoryRequirements(device, image, pMemoryRequirements);
1469 }
1470}
1471
1472VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements(
1473 VkDevice device,
1474 VkImage image,
1475 uint32_t* pSparseMemoryRequirementCount,
1476 VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
1477 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1478 bool skip = false;
1479 for (auto intercept : layer_data->object_dispatch) {
1480 auto lock = intercept->write_lock();
1481 skip |= intercept->PreCallValidateGetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
1482 if (skip) return;
1483 }
1484 for (auto intercept : layer_data->object_dispatch) {
1485 auto lock = intercept->write_lock();
1486 intercept->PreCallRecordGetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
1487 }
1488 DispatchGetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
1489 for (auto intercept : layer_data->object_dispatch) {
1490 auto lock = intercept->write_lock();
1491 intercept->PostCallRecordGetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
1492 }
1493}
1494
1495VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties(
1496 VkPhysicalDevice physicalDevice,
1497 VkFormat format,
1498 VkImageType type,
1499 VkSampleCountFlagBits samples,
1500 VkImageUsageFlags usage,
1501 VkImageTiling tiling,
1502 uint32_t* pPropertyCount,
1503 VkSparseImageFormatProperties* pProperties) {
1504 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1505 bool skip = false;
1506 for (auto intercept : layer_data->object_dispatch) {
1507 auto lock = intercept->write_lock();
1508 skip |= intercept->PreCallValidateGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
1509 if (skip) return;
1510 }
1511 for (auto intercept : layer_data->object_dispatch) {
1512 auto lock = intercept->write_lock();
1513 intercept->PreCallRecordGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
1514 }
1515 DispatchGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
1516 for (auto intercept : layer_data->object_dispatch) {
1517 auto lock = intercept->write_lock();
1518 intercept->PostCallRecordGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
1519 }
1520}
1521
1522VKAPI_ATTR VkResult VKAPI_CALL QueueBindSparse(
1523 VkQueue queue,
1524 uint32_t bindInfoCount,
1525 const VkBindSparseInfo* pBindInfo,
1526 VkFence fence) {
1527 auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
1528 bool skip = false;
1529 for (auto intercept : layer_data->object_dispatch) {
1530 auto lock = intercept->write_lock();
1531 skip |= intercept->PreCallValidateQueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
1532 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1533 }
1534 for (auto intercept : layer_data->object_dispatch) {
1535 auto lock = intercept->write_lock();
1536 intercept->PreCallRecordQueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
1537 }
1538 VkResult result = DispatchQueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
1539 for (auto intercept : layer_data->object_dispatch) {
1540 auto lock = intercept->write_lock();
1541 intercept->PostCallRecordQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
1542 }
1543 return result;
1544}
1545
1546VKAPI_ATTR VkResult VKAPI_CALL CreateFence(
1547 VkDevice device,
1548 const VkFenceCreateInfo* pCreateInfo,
1549 const VkAllocationCallbacks* pAllocator,
1550 VkFence* pFence) {
1551 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1552 bool skip = false;
1553 for (auto intercept : layer_data->object_dispatch) {
1554 auto lock = intercept->write_lock();
1555 skip |= intercept->PreCallValidateCreateFence(device, pCreateInfo, pAllocator, pFence);
1556 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1557 }
1558 for (auto intercept : layer_data->object_dispatch) {
1559 auto lock = intercept->write_lock();
1560 intercept->PreCallRecordCreateFence(device, pCreateInfo, pAllocator, pFence);
1561 }
1562 VkResult result = DispatchCreateFence(device, pCreateInfo, pAllocator, pFence);
1563 for (auto intercept : layer_data->object_dispatch) {
1564 auto lock = intercept->write_lock();
1565 intercept->PostCallRecordCreateFence(device, pCreateInfo, pAllocator, pFence, result);
1566 }
1567 return result;
1568}
1569
1570VKAPI_ATTR void VKAPI_CALL DestroyFence(
1571 VkDevice device,
1572 VkFence fence,
1573 const VkAllocationCallbacks* pAllocator) {
1574 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1575 bool skip = false;
1576 for (auto intercept : layer_data->object_dispatch) {
1577 auto lock = intercept->write_lock();
1578 skip |= intercept->PreCallValidateDestroyFence(device, fence, pAllocator);
1579 if (skip) return;
1580 }
1581 for (auto intercept : layer_data->object_dispatch) {
1582 auto lock = intercept->write_lock();
1583 intercept->PreCallRecordDestroyFence(device, fence, pAllocator);
1584 }
1585 DispatchDestroyFence(device, fence, pAllocator);
1586 for (auto intercept : layer_data->object_dispatch) {
1587 auto lock = intercept->write_lock();
1588 intercept->PostCallRecordDestroyFence(device, fence, pAllocator);
1589 }
1590}
1591
1592VKAPI_ATTR VkResult VKAPI_CALL ResetFences(
1593 VkDevice device,
1594 uint32_t fenceCount,
1595 const VkFence* pFences) {
1596 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1597 bool skip = false;
1598 for (auto intercept : layer_data->object_dispatch) {
1599 auto lock = intercept->write_lock();
1600 skip |= intercept->PreCallValidateResetFences(device, fenceCount, pFences);
1601 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1602 }
1603 for (auto intercept : layer_data->object_dispatch) {
1604 auto lock = intercept->write_lock();
1605 intercept->PreCallRecordResetFences(device, fenceCount, pFences);
1606 }
1607 VkResult result = DispatchResetFences(device, fenceCount, pFences);
1608 for (auto intercept : layer_data->object_dispatch) {
1609 auto lock = intercept->write_lock();
1610 intercept->PostCallRecordResetFences(device, fenceCount, pFences, result);
1611 }
1612 return result;
1613}
1614
1615VKAPI_ATTR VkResult VKAPI_CALL GetFenceStatus(
1616 VkDevice device,
1617 VkFence fence) {
1618 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1619 bool skip = false;
1620 for (auto intercept : layer_data->object_dispatch) {
1621 auto lock = intercept->write_lock();
1622 skip |= intercept->PreCallValidateGetFenceStatus(device, fence);
1623 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1624 }
1625 for (auto intercept : layer_data->object_dispatch) {
1626 auto lock = intercept->write_lock();
1627 intercept->PreCallRecordGetFenceStatus(device, fence);
1628 }
1629 VkResult result = DispatchGetFenceStatus(device, fence);
1630 for (auto intercept : layer_data->object_dispatch) {
1631 auto lock = intercept->write_lock();
1632 intercept->PostCallRecordGetFenceStatus(device, fence, result);
1633 }
1634 return result;
1635}
1636
1637VKAPI_ATTR VkResult VKAPI_CALL WaitForFences(
1638 VkDevice device,
1639 uint32_t fenceCount,
1640 const VkFence* pFences,
1641 VkBool32 waitAll,
1642 uint64_t timeout) {
1643 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1644 bool skip = false;
1645 for (auto intercept : layer_data->object_dispatch) {
1646 auto lock = intercept->write_lock();
1647 skip |= intercept->PreCallValidateWaitForFences(device, fenceCount, pFences, waitAll, timeout);
1648 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1649 }
1650 for (auto intercept : layer_data->object_dispatch) {
1651 auto lock = intercept->write_lock();
1652 intercept->PreCallRecordWaitForFences(device, fenceCount, pFences, waitAll, timeout);
1653 }
1654 VkResult result = DispatchWaitForFences(device, fenceCount, pFences, waitAll, timeout);
1655 for (auto intercept : layer_data->object_dispatch) {
1656 auto lock = intercept->write_lock();
1657 intercept->PostCallRecordWaitForFences(device, fenceCount, pFences, waitAll, timeout, result);
1658 }
1659 return result;
1660}
1661
1662VKAPI_ATTR VkResult VKAPI_CALL CreateSemaphore(
1663 VkDevice device,
1664 const VkSemaphoreCreateInfo* pCreateInfo,
1665 const VkAllocationCallbacks* pAllocator,
1666 VkSemaphore* pSemaphore) {
1667 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1668 bool skip = false;
1669 for (auto intercept : layer_data->object_dispatch) {
1670 auto lock = intercept->write_lock();
1671 skip |= intercept->PreCallValidateCreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
1672 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1673 }
1674 for (auto intercept : layer_data->object_dispatch) {
1675 auto lock = intercept->write_lock();
1676 intercept->PreCallRecordCreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
1677 }
1678 VkResult result = DispatchCreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
1679 for (auto intercept : layer_data->object_dispatch) {
1680 auto lock = intercept->write_lock();
1681 intercept->PostCallRecordCreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore, result);
1682 }
1683 return result;
1684}
1685
1686VKAPI_ATTR void VKAPI_CALL DestroySemaphore(
1687 VkDevice device,
1688 VkSemaphore semaphore,
1689 const VkAllocationCallbacks* pAllocator) {
1690 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1691 bool skip = false;
1692 for (auto intercept : layer_data->object_dispatch) {
1693 auto lock = intercept->write_lock();
1694 skip |= intercept->PreCallValidateDestroySemaphore(device, semaphore, pAllocator);
1695 if (skip) return;
1696 }
1697 for (auto intercept : layer_data->object_dispatch) {
1698 auto lock = intercept->write_lock();
1699 intercept->PreCallRecordDestroySemaphore(device, semaphore, pAllocator);
1700 }
1701 DispatchDestroySemaphore(device, semaphore, pAllocator);
1702 for (auto intercept : layer_data->object_dispatch) {
1703 auto lock = intercept->write_lock();
1704 intercept->PostCallRecordDestroySemaphore(device, semaphore, pAllocator);
1705 }
1706}
1707
1708VKAPI_ATTR VkResult VKAPI_CALL CreateEvent(
1709 VkDevice device,
1710 const VkEventCreateInfo* pCreateInfo,
1711 const VkAllocationCallbacks* pAllocator,
1712 VkEvent* pEvent) {
1713 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1714 bool skip = false;
1715 for (auto intercept : layer_data->object_dispatch) {
1716 auto lock = intercept->write_lock();
1717 skip |= intercept->PreCallValidateCreateEvent(device, pCreateInfo, pAllocator, pEvent);
1718 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1719 }
1720 for (auto intercept : layer_data->object_dispatch) {
1721 auto lock = intercept->write_lock();
1722 intercept->PreCallRecordCreateEvent(device, pCreateInfo, pAllocator, pEvent);
1723 }
1724 VkResult result = DispatchCreateEvent(device, pCreateInfo, pAllocator, pEvent);
1725 for (auto intercept : layer_data->object_dispatch) {
1726 auto lock = intercept->write_lock();
1727 intercept->PostCallRecordCreateEvent(device, pCreateInfo, pAllocator, pEvent, result);
1728 }
1729 return result;
1730}
1731
1732VKAPI_ATTR void VKAPI_CALL DestroyEvent(
1733 VkDevice device,
1734 VkEvent event,
1735 const VkAllocationCallbacks* pAllocator) {
1736 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1737 bool skip = false;
1738 for (auto intercept : layer_data->object_dispatch) {
1739 auto lock = intercept->write_lock();
1740 skip |= intercept->PreCallValidateDestroyEvent(device, event, pAllocator);
1741 if (skip) return;
1742 }
1743 for (auto intercept : layer_data->object_dispatch) {
1744 auto lock = intercept->write_lock();
1745 intercept->PreCallRecordDestroyEvent(device, event, pAllocator);
1746 }
1747 DispatchDestroyEvent(device, event, pAllocator);
1748 for (auto intercept : layer_data->object_dispatch) {
1749 auto lock = intercept->write_lock();
1750 intercept->PostCallRecordDestroyEvent(device, event, pAllocator);
1751 }
1752}
1753
1754VKAPI_ATTR VkResult VKAPI_CALL GetEventStatus(
1755 VkDevice device,
1756 VkEvent event) {
1757 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1758 bool skip = false;
1759 for (auto intercept : layer_data->object_dispatch) {
1760 auto lock = intercept->write_lock();
1761 skip |= intercept->PreCallValidateGetEventStatus(device, event);
1762 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1763 }
1764 for (auto intercept : layer_data->object_dispatch) {
1765 auto lock = intercept->write_lock();
1766 intercept->PreCallRecordGetEventStatus(device, event);
1767 }
1768 VkResult result = DispatchGetEventStatus(device, event);
1769 for (auto intercept : layer_data->object_dispatch) {
1770 auto lock = intercept->write_lock();
1771 intercept->PostCallRecordGetEventStatus(device, event, result);
1772 }
1773 return result;
1774}
1775
1776VKAPI_ATTR VkResult VKAPI_CALL SetEvent(
1777 VkDevice device,
1778 VkEvent event) {
1779 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1780 bool skip = false;
1781 for (auto intercept : layer_data->object_dispatch) {
1782 auto lock = intercept->write_lock();
1783 skip |= intercept->PreCallValidateSetEvent(device, event);
1784 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1785 }
1786 for (auto intercept : layer_data->object_dispatch) {
1787 auto lock = intercept->write_lock();
1788 intercept->PreCallRecordSetEvent(device, event);
1789 }
1790 VkResult result = DispatchSetEvent(device, event);
1791 for (auto intercept : layer_data->object_dispatch) {
1792 auto lock = intercept->write_lock();
1793 intercept->PostCallRecordSetEvent(device, event, result);
1794 }
1795 return result;
1796}
1797
1798VKAPI_ATTR VkResult VKAPI_CALL ResetEvent(
1799 VkDevice device,
1800 VkEvent event) {
1801 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1802 bool skip = false;
1803 for (auto intercept : layer_data->object_dispatch) {
1804 auto lock = intercept->write_lock();
1805 skip |= intercept->PreCallValidateResetEvent(device, event);
1806 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1807 }
1808 for (auto intercept : layer_data->object_dispatch) {
1809 auto lock = intercept->write_lock();
1810 intercept->PreCallRecordResetEvent(device, event);
1811 }
1812 VkResult result = DispatchResetEvent(device, event);
1813 for (auto intercept : layer_data->object_dispatch) {
1814 auto lock = intercept->write_lock();
1815 intercept->PostCallRecordResetEvent(device, event, result);
1816 }
1817 return result;
1818}
1819
1820VKAPI_ATTR VkResult VKAPI_CALL CreateQueryPool(
1821 VkDevice device,
1822 const VkQueryPoolCreateInfo* pCreateInfo,
1823 const VkAllocationCallbacks* pAllocator,
1824 VkQueryPool* pQueryPool) {
1825 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1826 bool skip = false;
1827 for (auto intercept : layer_data->object_dispatch) {
1828 auto lock = intercept->write_lock();
1829 skip |= intercept->PreCallValidateCreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
1830 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1831 }
1832 for (auto intercept : layer_data->object_dispatch) {
1833 auto lock = intercept->write_lock();
1834 intercept->PreCallRecordCreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
1835 }
1836 VkResult result = DispatchCreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
1837 for (auto intercept : layer_data->object_dispatch) {
1838 auto lock = intercept->write_lock();
1839 intercept->PostCallRecordCreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool, result);
1840 }
1841 return result;
1842}
1843
1844VKAPI_ATTR void VKAPI_CALL DestroyQueryPool(
1845 VkDevice device,
1846 VkQueryPool queryPool,
1847 const VkAllocationCallbacks* pAllocator) {
1848 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1849 bool skip = false;
1850 for (auto intercept : layer_data->object_dispatch) {
1851 auto lock = intercept->write_lock();
1852 skip |= intercept->PreCallValidateDestroyQueryPool(device, queryPool, pAllocator);
1853 if (skip) return;
1854 }
1855 for (auto intercept : layer_data->object_dispatch) {
1856 auto lock = intercept->write_lock();
1857 intercept->PreCallRecordDestroyQueryPool(device, queryPool, pAllocator);
1858 }
1859 DispatchDestroyQueryPool(device, queryPool, pAllocator);
1860 for (auto intercept : layer_data->object_dispatch) {
1861 auto lock = intercept->write_lock();
1862 intercept->PostCallRecordDestroyQueryPool(device, queryPool, pAllocator);
1863 }
1864}
1865
1866VKAPI_ATTR VkResult VKAPI_CALL GetQueryPoolResults(
1867 VkDevice device,
1868 VkQueryPool queryPool,
1869 uint32_t firstQuery,
1870 uint32_t queryCount,
1871 size_t dataSize,
1872 void* pData,
1873 VkDeviceSize stride,
1874 VkQueryResultFlags flags) {
1875 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1876 bool skip = false;
1877 for (auto intercept : layer_data->object_dispatch) {
1878 auto lock = intercept->write_lock();
1879 skip |= intercept->PreCallValidateGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
1880 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1881 }
1882 for (auto intercept : layer_data->object_dispatch) {
1883 auto lock = intercept->write_lock();
1884 intercept->PreCallRecordGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
1885 }
1886 VkResult result = DispatchGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
1887 for (auto intercept : layer_data->object_dispatch) {
1888 auto lock = intercept->write_lock();
1889 intercept->PostCallRecordGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags, result);
1890 }
1891 return result;
1892}
1893
1894VKAPI_ATTR VkResult VKAPI_CALL CreateBuffer(
1895 VkDevice device,
1896 const VkBufferCreateInfo* pCreateInfo,
1897 const VkAllocationCallbacks* pAllocator,
1898 VkBuffer* pBuffer) {
1899 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1900 bool skip = false;
1901 for (auto intercept : layer_data->object_dispatch) {
1902 auto lock = intercept->write_lock();
1903 skip |= intercept->PreCallValidateCreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
1904 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1905 }
1906 for (auto intercept : layer_data->object_dispatch) {
1907 auto lock = intercept->write_lock();
1908 intercept->PreCallRecordCreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
1909 }
1910 VkResult result = DispatchCreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
1911 for (auto intercept : layer_data->object_dispatch) {
1912 auto lock = intercept->write_lock();
1913 intercept->PostCallRecordCreateBuffer(device, pCreateInfo, pAllocator, pBuffer, result);
1914 }
1915 return result;
1916}
1917
1918VKAPI_ATTR void VKAPI_CALL DestroyBuffer(
1919 VkDevice device,
1920 VkBuffer buffer,
1921 const VkAllocationCallbacks* pAllocator) {
1922 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1923 bool skip = false;
1924 for (auto intercept : layer_data->object_dispatch) {
1925 auto lock = intercept->write_lock();
1926 skip |= intercept->PreCallValidateDestroyBuffer(device, buffer, pAllocator);
1927 if (skip) return;
1928 }
1929 for (auto intercept : layer_data->object_dispatch) {
1930 auto lock = intercept->write_lock();
1931 intercept->PreCallRecordDestroyBuffer(device, buffer, pAllocator);
1932 }
1933 DispatchDestroyBuffer(device, buffer, pAllocator);
1934 for (auto intercept : layer_data->object_dispatch) {
1935 auto lock = intercept->write_lock();
1936 intercept->PostCallRecordDestroyBuffer(device, buffer, pAllocator);
1937 }
1938}
1939
1940VKAPI_ATTR VkResult VKAPI_CALL CreateBufferView(
1941 VkDevice device,
1942 const VkBufferViewCreateInfo* pCreateInfo,
1943 const VkAllocationCallbacks* pAllocator,
1944 VkBufferView* pView) {
1945 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1946 bool skip = false;
1947 for (auto intercept : layer_data->object_dispatch) {
1948 auto lock = intercept->write_lock();
1949 skip |= intercept->PreCallValidateCreateBufferView(device, pCreateInfo, pAllocator, pView);
1950 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1951 }
1952 for (auto intercept : layer_data->object_dispatch) {
1953 auto lock = intercept->write_lock();
1954 intercept->PreCallRecordCreateBufferView(device, pCreateInfo, pAllocator, pView);
1955 }
1956 VkResult result = DispatchCreateBufferView(device, pCreateInfo, pAllocator, pView);
1957 for (auto intercept : layer_data->object_dispatch) {
1958 auto lock = intercept->write_lock();
1959 intercept->PostCallRecordCreateBufferView(device, pCreateInfo, pAllocator, pView, result);
1960 }
1961 return result;
1962}
1963
1964VKAPI_ATTR void VKAPI_CALL DestroyBufferView(
1965 VkDevice device,
1966 VkBufferView bufferView,
1967 const VkAllocationCallbacks* pAllocator) {
1968 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1969 bool skip = false;
1970 for (auto intercept : layer_data->object_dispatch) {
1971 auto lock = intercept->write_lock();
1972 skip |= intercept->PreCallValidateDestroyBufferView(device, bufferView, pAllocator);
1973 if (skip) return;
1974 }
1975 for (auto intercept : layer_data->object_dispatch) {
1976 auto lock = intercept->write_lock();
1977 intercept->PreCallRecordDestroyBufferView(device, bufferView, pAllocator);
1978 }
1979 DispatchDestroyBufferView(device, bufferView, pAllocator);
1980 for (auto intercept : layer_data->object_dispatch) {
1981 auto lock = intercept->write_lock();
1982 intercept->PostCallRecordDestroyBufferView(device, bufferView, pAllocator);
1983 }
1984}
1985
1986VKAPI_ATTR VkResult VKAPI_CALL CreateImage(
1987 VkDevice device,
1988 const VkImageCreateInfo* pCreateInfo,
1989 const VkAllocationCallbacks* pAllocator,
1990 VkImage* pImage) {
1991 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1992 bool skip = false;
1993 for (auto intercept : layer_data->object_dispatch) {
1994 auto lock = intercept->write_lock();
1995 skip |= intercept->PreCallValidateCreateImage(device, pCreateInfo, pAllocator, pImage);
1996 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1997 }
1998 for (auto intercept : layer_data->object_dispatch) {
1999 auto lock = intercept->write_lock();
2000 intercept->PreCallRecordCreateImage(device, pCreateInfo, pAllocator, pImage);
2001 }
2002 VkResult result = DispatchCreateImage(device, pCreateInfo, pAllocator, pImage);
2003 for (auto intercept : layer_data->object_dispatch) {
2004 auto lock = intercept->write_lock();
2005 intercept->PostCallRecordCreateImage(device, pCreateInfo, pAllocator, pImage, result);
2006 }
2007 return result;
2008}
2009
2010VKAPI_ATTR void VKAPI_CALL DestroyImage(
2011 VkDevice device,
2012 VkImage image,
2013 const VkAllocationCallbacks* pAllocator) {
2014 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2015 bool skip = false;
2016 for (auto intercept : layer_data->object_dispatch) {
2017 auto lock = intercept->write_lock();
2018 skip |= intercept->PreCallValidateDestroyImage(device, image, pAllocator);
2019 if (skip) return;
2020 }
2021 for (auto intercept : layer_data->object_dispatch) {
2022 auto lock = intercept->write_lock();
2023 intercept->PreCallRecordDestroyImage(device, image, pAllocator);
2024 }
2025 DispatchDestroyImage(device, image, pAllocator);
2026 for (auto intercept : layer_data->object_dispatch) {
2027 auto lock = intercept->write_lock();
2028 intercept->PostCallRecordDestroyImage(device, image, pAllocator);
2029 }
2030}
2031
2032VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout(
2033 VkDevice device,
2034 VkImage image,
2035 const VkImageSubresource* pSubresource,
2036 VkSubresourceLayout* pLayout) {
2037 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2038 bool skip = false;
2039 for (auto intercept : layer_data->object_dispatch) {
2040 auto lock = intercept->write_lock();
2041 skip |= intercept->PreCallValidateGetImageSubresourceLayout(device, image, pSubresource, pLayout);
2042 if (skip) return;
2043 }
2044 for (auto intercept : layer_data->object_dispatch) {
2045 auto lock = intercept->write_lock();
2046 intercept->PreCallRecordGetImageSubresourceLayout(device, image, pSubresource, pLayout);
2047 }
2048 DispatchGetImageSubresourceLayout(device, image, pSubresource, pLayout);
2049 for (auto intercept : layer_data->object_dispatch) {
2050 auto lock = intercept->write_lock();
2051 intercept->PostCallRecordGetImageSubresourceLayout(device, image, pSubresource, pLayout);
2052 }
2053}
2054
2055VKAPI_ATTR VkResult VKAPI_CALL CreateImageView(
2056 VkDevice device,
2057 const VkImageViewCreateInfo* pCreateInfo,
2058 const VkAllocationCallbacks* pAllocator,
2059 VkImageView* pView) {
2060 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2061 bool skip = false;
2062 for (auto intercept : layer_data->object_dispatch) {
2063 auto lock = intercept->write_lock();
2064 skip |= intercept->PreCallValidateCreateImageView(device, pCreateInfo, pAllocator, pView);
2065 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2066 }
2067 for (auto intercept : layer_data->object_dispatch) {
2068 auto lock = intercept->write_lock();
2069 intercept->PreCallRecordCreateImageView(device, pCreateInfo, pAllocator, pView);
2070 }
2071 VkResult result = DispatchCreateImageView(device, pCreateInfo, pAllocator, pView);
2072 for (auto intercept : layer_data->object_dispatch) {
2073 auto lock = intercept->write_lock();
2074 intercept->PostCallRecordCreateImageView(device, pCreateInfo, pAllocator, pView, result);
2075 }
2076 return result;
2077}
2078
2079VKAPI_ATTR void VKAPI_CALL DestroyImageView(
2080 VkDevice device,
2081 VkImageView imageView,
2082 const VkAllocationCallbacks* pAllocator) {
2083 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2084 bool skip = false;
2085 for (auto intercept : layer_data->object_dispatch) {
2086 auto lock = intercept->write_lock();
2087 skip |= intercept->PreCallValidateDestroyImageView(device, imageView, pAllocator);
2088 if (skip) return;
2089 }
2090 for (auto intercept : layer_data->object_dispatch) {
2091 auto lock = intercept->write_lock();
2092 intercept->PreCallRecordDestroyImageView(device, imageView, pAllocator);
2093 }
2094 DispatchDestroyImageView(device, imageView, pAllocator);
2095 for (auto intercept : layer_data->object_dispatch) {
2096 auto lock = intercept->write_lock();
2097 intercept->PostCallRecordDestroyImageView(device, imageView, pAllocator);
2098 }
2099}
2100
2101VKAPI_ATTR void VKAPI_CALL DestroyShaderModule(
2102 VkDevice device,
2103 VkShaderModule shaderModule,
2104 const VkAllocationCallbacks* pAllocator) {
2105 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2106 bool skip = false;
2107 for (auto intercept : layer_data->object_dispatch) {
2108 auto lock = intercept->write_lock();
2109 skip |= intercept->PreCallValidateDestroyShaderModule(device, shaderModule, pAllocator);
2110 if (skip) return;
2111 }
2112 for (auto intercept : layer_data->object_dispatch) {
2113 auto lock = intercept->write_lock();
2114 intercept->PreCallRecordDestroyShaderModule(device, shaderModule, pAllocator);
2115 }
2116 DispatchDestroyShaderModule(device, shaderModule, pAllocator);
2117 for (auto intercept : layer_data->object_dispatch) {
2118 auto lock = intercept->write_lock();
2119 intercept->PostCallRecordDestroyShaderModule(device, shaderModule, pAllocator);
2120 }
2121}
2122
2123VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineCache(
2124 VkDevice device,
2125 const VkPipelineCacheCreateInfo* pCreateInfo,
2126 const VkAllocationCallbacks* pAllocator,
2127 VkPipelineCache* pPipelineCache) {
2128 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2129 bool skip = false;
2130 for (auto intercept : layer_data->object_dispatch) {
2131 auto lock = intercept->write_lock();
2132 skip |= intercept->PreCallValidateCreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
2133 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2134 }
2135 for (auto intercept : layer_data->object_dispatch) {
2136 auto lock = intercept->write_lock();
2137 intercept->PreCallRecordCreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
2138 }
2139 VkResult result = DispatchCreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
2140 for (auto intercept : layer_data->object_dispatch) {
2141 auto lock = intercept->write_lock();
2142 intercept->PostCallRecordCreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache, result);
2143 }
2144 return result;
2145}
2146
2147VKAPI_ATTR void VKAPI_CALL DestroyPipelineCache(
2148 VkDevice device,
2149 VkPipelineCache pipelineCache,
2150 const VkAllocationCallbacks* pAllocator) {
2151 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2152 bool skip = false;
2153 for (auto intercept : layer_data->object_dispatch) {
2154 auto lock = intercept->write_lock();
2155 skip |= intercept->PreCallValidateDestroyPipelineCache(device, pipelineCache, pAllocator);
2156 if (skip) return;
2157 }
2158 for (auto intercept : layer_data->object_dispatch) {
2159 auto lock = intercept->write_lock();
2160 intercept->PreCallRecordDestroyPipelineCache(device, pipelineCache, pAllocator);
2161 }
2162 DispatchDestroyPipelineCache(device, pipelineCache, pAllocator);
2163 for (auto intercept : layer_data->object_dispatch) {
2164 auto lock = intercept->write_lock();
2165 intercept->PostCallRecordDestroyPipelineCache(device, pipelineCache, pAllocator);
2166 }
2167}
2168
2169VKAPI_ATTR VkResult VKAPI_CALL GetPipelineCacheData(
2170 VkDevice device,
2171 VkPipelineCache pipelineCache,
2172 size_t* pDataSize,
2173 void* pData) {
2174 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2175 bool skip = false;
2176 for (auto intercept : layer_data->object_dispatch) {
2177 auto lock = intercept->write_lock();
2178 skip |= intercept->PreCallValidateGetPipelineCacheData(device, pipelineCache, pDataSize, pData);
2179 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2180 }
2181 for (auto intercept : layer_data->object_dispatch) {
2182 auto lock = intercept->write_lock();
2183 intercept->PreCallRecordGetPipelineCacheData(device, pipelineCache, pDataSize, pData);
2184 }
2185 VkResult result = DispatchGetPipelineCacheData(device, pipelineCache, pDataSize, pData);
2186 for (auto intercept : layer_data->object_dispatch) {
2187 auto lock = intercept->write_lock();
2188 intercept->PostCallRecordGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
2189 }
2190 return result;
2191}
2192
2193VKAPI_ATTR VkResult VKAPI_CALL MergePipelineCaches(
2194 VkDevice device,
2195 VkPipelineCache dstCache,
2196 uint32_t srcCacheCount,
2197 const VkPipelineCache* pSrcCaches) {
2198 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2199 bool skip = false;
2200 for (auto intercept : layer_data->object_dispatch) {
2201 auto lock = intercept->write_lock();
2202 skip |= intercept->PreCallValidateMergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
2203 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2204 }
2205 for (auto intercept : layer_data->object_dispatch) {
2206 auto lock = intercept->write_lock();
2207 intercept->PreCallRecordMergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
2208 }
2209 VkResult result = DispatchMergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
2210 for (auto intercept : layer_data->object_dispatch) {
2211 auto lock = intercept->write_lock();
2212 intercept->PostCallRecordMergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches, result);
2213 }
2214 return result;
2215}
2216
2217VKAPI_ATTR void VKAPI_CALL DestroyPipeline(
2218 VkDevice device,
2219 VkPipeline pipeline,
2220 const VkAllocationCallbacks* pAllocator) {
2221 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2222 bool skip = false;
2223 for (auto intercept : layer_data->object_dispatch) {
2224 auto lock = intercept->write_lock();
2225 skip |= intercept->PreCallValidateDestroyPipeline(device, pipeline, pAllocator);
2226 if (skip) return;
2227 }
2228 for (auto intercept : layer_data->object_dispatch) {
2229 auto lock = intercept->write_lock();
2230 intercept->PreCallRecordDestroyPipeline(device, pipeline, pAllocator);
2231 }
2232 DispatchDestroyPipeline(device, pipeline, pAllocator);
2233 for (auto intercept : layer_data->object_dispatch) {
2234 auto lock = intercept->write_lock();
2235 intercept->PostCallRecordDestroyPipeline(device, pipeline, pAllocator);
2236 }
2237}
2238
2239VKAPI_ATTR void VKAPI_CALL DestroyPipelineLayout(
2240 VkDevice device,
2241 VkPipelineLayout pipelineLayout,
2242 const VkAllocationCallbacks* pAllocator) {
2243 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2244 bool skip = false;
2245 for (auto intercept : layer_data->object_dispatch) {
2246 auto lock = intercept->write_lock();
2247 skip |= intercept->PreCallValidateDestroyPipelineLayout(device, pipelineLayout, pAllocator);
2248 if (skip) return;
2249 }
2250 for (auto intercept : layer_data->object_dispatch) {
2251 auto lock = intercept->write_lock();
2252 intercept->PreCallRecordDestroyPipelineLayout(device, pipelineLayout, pAllocator);
2253 }
2254 DispatchDestroyPipelineLayout(device, pipelineLayout, pAllocator);
2255 for (auto intercept : layer_data->object_dispatch) {
2256 auto lock = intercept->write_lock();
2257 intercept->PostCallRecordDestroyPipelineLayout(device, pipelineLayout, pAllocator);
2258 }
2259}
2260
2261VKAPI_ATTR VkResult VKAPI_CALL CreateSampler(
2262 VkDevice device,
2263 const VkSamplerCreateInfo* pCreateInfo,
2264 const VkAllocationCallbacks* pAllocator,
2265 VkSampler* pSampler) {
2266 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2267 bool skip = false;
2268 for (auto intercept : layer_data->object_dispatch) {
2269 auto lock = intercept->write_lock();
2270 skip |= intercept->PreCallValidateCreateSampler(device, pCreateInfo, pAllocator, pSampler);
2271 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2272 }
2273 for (auto intercept : layer_data->object_dispatch) {
2274 auto lock = intercept->write_lock();
2275 intercept->PreCallRecordCreateSampler(device, pCreateInfo, pAllocator, pSampler);
2276 }
2277 VkResult result = DispatchCreateSampler(device, pCreateInfo, pAllocator, pSampler);
2278 for (auto intercept : layer_data->object_dispatch) {
2279 auto lock = intercept->write_lock();
2280 intercept->PostCallRecordCreateSampler(device, pCreateInfo, pAllocator, pSampler, result);
2281 }
2282 return result;
2283}
2284
2285VKAPI_ATTR void VKAPI_CALL DestroySampler(
2286 VkDevice device,
2287 VkSampler sampler,
2288 const VkAllocationCallbacks* pAllocator) {
2289 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2290 bool skip = false;
2291 for (auto intercept : layer_data->object_dispatch) {
2292 auto lock = intercept->write_lock();
2293 skip |= intercept->PreCallValidateDestroySampler(device, sampler, pAllocator);
2294 if (skip) return;
2295 }
2296 for (auto intercept : layer_data->object_dispatch) {
2297 auto lock = intercept->write_lock();
2298 intercept->PreCallRecordDestroySampler(device, sampler, pAllocator);
2299 }
2300 DispatchDestroySampler(device, sampler, pAllocator);
2301 for (auto intercept : layer_data->object_dispatch) {
2302 auto lock = intercept->write_lock();
2303 intercept->PostCallRecordDestroySampler(device, sampler, pAllocator);
2304 }
2305}
2306
2307VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorSetLayout(
2308 VkDevice device,
2309 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
2310 const VkAllocationCallbacks* pAllocator,
2311 VkDescriptorSetLayout* pSetLayout) {
2312 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2313 bool skip = false;
2314 for (auto intercept : layer_data->object_dispatch) {
2315 auto lock = intercept->write_lock();
2316 skip |= intercept->PreCallValidateCreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
2317 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2318 }
2319 for (auto intercept : layer_data->object_dispatch) {
2320 auto lock = intercept->write_lock();
2321 intercept->PreCallRecordCreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
2322 }
2323 VkResult result = DispatchCreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
2324 for (auto intercept : layer_data->object_dispatch) {
2325 auto lock = intercept->write_lock();
2326 intercept->PostCallRecordCreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout, result);
2327 }
2328 return result;
2329}
2330
2331VKAPI_ATTR void VKAPI_CALL DestroyDescriptorSetLayout(
2332 VkDevice device,
2333 VkDescriptorSetLayout descriptorSetLayout,
2334 const VkAllocationCallbacks* pAllocator) {
2335 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2336 bool skip = false;
2337 for (auto intercept : layer_data->object_dispatch) {
2338 auto lock = intercept->write_lock();
2339 skip |= intercept->PreCallValidateDestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
2340 if (skip) return;
2341 }
2342 for (auto intercept : layer_data->object_dispatch) {
2343 auto lock = intercept->write_lock();
2344 intercept->PreCallRecordDestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
2345 }
2346 DispatchDestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
2347 for (auto intercept : layer_data->object_dispatch) {
2348 auto lock = intercept->write_lock();
2349 intercept->PostCallRecordDestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
2350 }
2351}
2352
2353VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorPool(
2354 VkDevice device,
2355 const VkDescriptorPoolCreateInfo* pCreateInfo,
2356 const VkAllocationCallbacks* pAllocator,
2357 VkDescriptorPool* pDescriptorPool) {
2358 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2359 bool skip = false;
2360 for (auto intercept : layer_data->object_dispatch) {
2361 auto lock = intercept->write_lock();
2362 skip |= intercept->PreCallValidateCreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
2363 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2364 }
2365 for (auto intercept : layer_data->object_dispatch) {
2366 auto lock = intercept->write_lock();
2367 intercept->PreCallRecordCreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
2368 }
2369 VkResult result = DispatchCreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
2370 for (auto intercept : layer_data->object_dispatch) {
2371 auto lock = intercept->write_lock();
2372 intercept->PostCallRecordCreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool, result);
2373 }
2374 return result;
2375}
2376
2377VKAPI_ATTR void VKAPI_CALL DestroyDescriptorPool(
2378 VkDevice device,
2379 VkDescriptorPool descriptorPool,
2380 const VkAllocationCallbacks* pAllocator) {
2381 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2382 bool skip = false;
2383 for (auto intercept : layer_data->object_dispatch) {
2384 auto lock = intercept->write_lock();
2385 skip |= intercept->PreCallValidateDestroyDescriptorPool(device, descriptorPool, pAllocator);
2386 if (skip) return;
2387 }
2388 for (auto intercept : layer_data->object_dispatch) {
2389 auto lock = intercept->write_lock();
2390 intercept->PreCallRecordDestroyDescriptorPool(device, descriptorPool, pAllocator);
2391 }
2392 DispatchDestroyDescriptorPool(device, descriptorPool, pAllocator);
2393 for (auto intercept : layer_data->object_dispatch) {
2394 auto lock = intercept->write_lock();
2395 intercept->PostCallRecordDestroyDescriptorPool(device, descriptorPool, pAllocator);
2396 }
2397}
2398
2399VKAPI_ATTR VkResult VKAPI_CALL ResetDescriptorPool(
2400 VkDevice device,
2401 VkDescriptorPool descriptorPool,
2402 VkDescriptorPoolResetFlags flags) {
2403 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2404 bool skip = false;
2405 for (auto intercept : layer_data->object_dispatch) {
2406 auto lock = intercept->write_lock();
2407 skip |= intercept->PreCallValidateResetDescriptorPool(device, descriptorPool, flags);
2408 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2409 }
2410 for (auto intercept : layer_data->object_dispatch) {
2411 auto lock = intercept->write_lock();
2412 intercept->PreCallRecordResetDescriptorPool(device, descriptorPool, flags);
2413 }
2414 VkResult result = DispatchResetDescriptorPool(device, descriptorPool, flags);
2415 for (auto intercept : layer_data->object_dispatch) {
2416 auto lock = intercept->write_lock();
2417 intercept->PostCallRecordResetDescriptorPool(device, descriptorPool, flags, result);
2418 }
2419 return result;
2420}
2421
2422VKAPI_ATTR VkResult VKAPI_CALL FreeDescriptorSets(
2423 VkDevice device,
2424 VkDescriptorPool descriptorPool,
2425 uint32_t descriptorSetCount,
2426 const VkDescriptorSet* pDescriptorSets) {
2427 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2428 bool skip = false;
2429 for (auto intercept : layer_data->object_dispatch) {
2430 auto lock = intercept->write_lock();
2431 skip |= intercept->PreCallValidateFreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
2432 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2433 }
2434 for (auto intercept : layer_data->object_dispatch) {
2435 auto lock = intercept->write_lock();
2436 intercept->PreCallRecordFreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
2437 }
2438 VkResult result = DispatchFreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
2439 for (auto intercept : layer_data->object_dispatch) {
2440 auto lock = intercept->write_lock();
2441 intercept->PostCallRecordFreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets, result);
2442 }
2443 return result;
2444}
2445
2446VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSets(
2447 VkDevice device,
2448 uint32_t descriptorWriteCount,
2449 const VkWriteDescriptorSet* pDescriptorWrites,
2450 uint32_t descriptorCopyCount,
2451 const VkCopyDescriptorSet* pDescriptorCopies) {
2452 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2453 bool skip = false;
2454 for (auto intercept : layer_data->object_dispatch) {
2455 auto lock = intercept->write_lock();
2456 skip |= intercept->PreCallValidateUpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
2457 if (skip) return;
2458 }
2459 for (auto intercept : layer_data->object_dispatch) {
2460 auto lock = intercept->write_lock();
2461 intercept->PreCallRecordUpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
2462 }
2463 DispatchUpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
2464 for (auto intercept : layer_data->object_dispatch) {
2465 auto lock = intercept->write_lock();
2466 intercept->PostCallRecordUpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
2467 }
2468}
2469
2470VKAPI_ATTR VkResult VKAPI_CALL CreateFramebuffer(
2471 VkDevice device,
2472 const VkFramebufferCreateInfo* pCreateInfo,
2473 const VkAllocationCallbacks* pAllocator,
2474 VkFramebuffer* pFramebuffer) {
2475 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2476 bool skip = false;
2477 for (auto intercept : layer_data->object_dispatch) {
2478 auto lock = intercept->write_lock();
2479 skip |= intercept->PreCallValidateCreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
2480 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2481 }
2482 for (auto intercept : layer_data->object_dispatch) {
2483 auto lock = intercept->write_lock();
2484 intercept->PreCallRecordCreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
2485 }
2486 VkResult result = DispatchCreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
2487 for (auto intercept : layer_data->object_dispatch) {
2488 auto lock = intercept->write_lock();
2489 intercept->PostCallRecordCreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer, result);
2490 }
2491 return result;
2492}
2493
2494VKAPI_ATTR void VKAPI_CALL DestroyFramebuffer(
2495 VkDevice device,
2496 VkFramebuffer framebuffer,
2497 const VkAllocationCallbacks* pAllocator) {
2498 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2499 bool skip = false;
2500 for (auto intercept : layer_data->object_dispatch) {
2501 auto lock = intercept->write_lock();
2502 skip |= intercept->PreCallValidateDestroyFramebuffer(device, framebuffer, pAllocator);
2503 if (skip) return;
2504 }
2505 for (auto intercept : layer_data->object_dispatch) {
2506 auto lock = intercept->write_lock();
2507 intercept->PreCallRecordDestroyFramebuffer(device, framebuffer, pAllocator);
2508 }
2509 DispatchDestroyFramebuffer(device, framebuffer, pAllocator);
2510 for (auto intercept : layer_data->object_dispatch) {
2511 auto lock = intercept->write_lock();
2512 intercept->PostCallRecordDestroyFramebuffer(device, framebuffer, pAllocator);
2513 }
2514}
2515
2516VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass(
2517 VkDevice device,
2518 const VkRenderPassCreateInfo* pCreateInfo,
2519 const VkAllocationCallbacks* pAllocator,
2520 VkRenderPass* pRenderPass) {
2521 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2522 bool skip = false;
2523 for (auto intercept : layer_data->object_dispatch) {
2524 auto lock = intercept->write_lock();
2525 skip |= intercept->PreCallValidateCreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
2526 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2527 }
2528 for (auto intercept : layer_data->object_dispatch) {
2529 auto lock = intercept->write_lock();
2530 intercept->PreCallRecordCreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
2531 }
2532 VkResult result = DispatchCreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
2533 for (auto intercept : layer_data->object_dispatch) {
2534 auto lock = intercept->write_lock();
2535 intercept->PostCallRecordCreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass, result);
2536 }
2537 return result;
2538}
2539
2540VKAPI_ATTR void VKAPI_CALL DestroyRenderPass(
2541 VkDevice device,
2542 VkRenderPass renderPass,
2543 const VkAllocationCallbacks* pAllocator) {
2544 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2545 bool skip = false;
2546 for (auto intercept : layer_data->object_dispatch) {
2547 auto lock = intercept->write_lock();
2548 skip |= intercept->PreCallValidateDestroyRenderPass(device, renderPass, pAllocator);
2549 if (skip) return;
2550 }
2551 for (auto intercept : layer_data->object_dispatch) {
2552 auto lock = intercept->write_lock();
2553 intercept->PreCallRecordDestroyRenderPass(device, renderPass, pAllocator);
2554 }
2555 DispatchDestroyRenderPass(device, renderPass, pAllocator);
2556 for (auto intercept : layer_data->object_dispatch) {
2557 auto lock = intercept->write_lock();
2558 intercept->PostCallRecordDestroyRenderPass(device, renderPass, pAllocator);
2559 }
2560}
2561
2562VKAPI_ATTR void VKAPI_CALL GetRenderAreaGranularity(
2563 VkDevice device,
2564 VkRenderPass renderPass,
2565 VkExtent2D* pGranularity) {
2566 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2567 bool skip = false;
2568 for (auto intercept : layer_data->object_dispatch) {
2569 auto lock = intercept->write_lock();
2570 skip |= intercept->PreCallValidateGetRenderAreaGranularity(device, renderPass, pGranularity);
2571 if (skip) return;
2572 }
2573 for (auto intercept : layer_data->object_dispatch) {
2574 auto lock = intercept->write_lock();
2575 intercept->PreCallRecordGetRenderAreaGranularity(device, renderPass, pGranularity);
2576 }
2577 DispatchGetRenderAreaGranularity(device, renderPass, pGranularity);
2578 for (auto intercept : layer_data->object_dispatch) {
2579 auto lock = intercept->write_lock();
2580 intercept->PostCallRecordGetRenderAreaGranularity(device, renderPass, pGranularity);
2581 }
2582}
2583
2584VKAPI_ATTR VkResult VKAPI_CALL CreateCommandPool(
2585 VkDevice device,
2586 const VkCommandPoolCreateInfo* pCreateInfo,
2587 const VkAllocationCallbacks* pAllocator,
2588 VkCommandPool* pCommandPool) {
2589 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2590 bool skip = false;
2591 for (auto intercept : layer_data->object_dispatch) {
2592 auto lock = intercept->write_lock();
2593 skip |= intercept->PreCallValidateCreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
2594 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2595 }
2596 for (auto intercept : layer_data->object_dispatch) {
2597 auto lock = intercept->write_lock();
2598 intercept->PreCallRecordCreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
2599 }
2600 VkResult result = DispatchCreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
2601 for (auto intercept : layer_data->object_dispatch) {
2602 auto lock = intercept->write_lock();
2603 intercept->PostCallRecordCreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool, result);
2604 }
2605 return result;
2606}
2607
2608VKAPI_ATTR void VKAPI_CALL DestroyCommandPool(
2609 VkDevice device,
2610 VkCommandPool commandPool,
2611 const VkAllocationCallbacks* pAllocator) {
2612 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2613 bool skip = false;
2614 for (auto intercept : layer_data->object_dispatch) {
2615 auto lock = intercept->write_lock();
2616 skip |= intercept->PreCallValidateDestroyCommandPool(device, commandPool, pAllocator);
2617 if (skip) return;
2618 }
2619 for (auto intercept : layer_data->object_dispatch) {
2620 auto lock = intercept->write_lock();
2621 intercept->PreCallRecordDestroyCommandPool(device, commandPool, pAllocator);
2622 }
2623 DispatchDestroyCommandPool(device, commandPool, pAllocator);
2624 for (auto intercept : layer_data->object_dispatch) {
2625 auto lock = intercept->write_lock();
2626 intercept->PostCallRecordDestroyCommandPool(device, commandPool, pAllocator);
2627 }
2628}
2629
2630VKAPI_ATTR VkResult VKAPI_CALL ResetCommandPool(
2631 VkDevice device,
2632 VkCommandPool commandPool,
2633 VkCommandPoolResetFlags flags) {
2634 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2635 bool skip = false;
2636 for (auto intercept : layer_data->object_dispatch) {
2637 auto lock = intercept->write_lock();
2638 skip |= intercept->PreCallValidateResetCommandPool(device, commandPool, flags);
2639 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2640 }
2641 for (auto intercept : layer_data->object_dispatch) {
2642 auto lock = intercept->write_lock();
2643 intercept->PreCallRecordResetCommandPool(device, commandPool, flags);
2644 }
2645 VkResult result = DispatchResetCommandPool(device, commandPool, flags);
2646 for (auto intercept : layer_data->object_dispatch) {
2647 auto lock = intercept->write_lock();
2648 intercept->PostCallRecordResetCommandPool(device, commandPool, flags, result);
2649 }
2650 return result;
2651}
2652
2653VKAPI_ATTR VkResult VKAPI_CALL AllocateCommandBuffers(
2654 VkDevice device,
2655 const VkCommandBufferAllocateInfo* pAllocateInfo,
2656 VkCommandBuffer* pCommandBuffers) {
2657 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2658 bool skip = false;
2659 for (auto intercept : layer_data->object_dispatch) {
2660 auto lock = intercept->write_lock();
2661 skip |= intercept->PreCallValidateAllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
2662 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2663 }
2664 for (auto intercept : layer_data->object_dispatch) {
2665 auto lock = intercept->write_lock();
2666 intercept->PreCallRecordAllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
2667 }
2668 VkResult result = DispatchAllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
2669 for (auto intercept : layer_data->object_dispatch) {
2670 auto lock = intercept->write_lock();
2671 intercept->PostCallRecordAllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers, result);
2672 }
2673 return result;
2674}
2675
2676VKAPI_ATTR void VKAPI_CALL FreeCommandBuffers(
2677 VkDevice device,
2678 VkCommandPool commandPool,
2679 uint32_t commandBufferCount,
2680 const VkCommandBuffer* pCommandBuffers) {
2681 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2682 bool skip = false;
2683 for (auto intercept : layer_data->object_dispatch) {
2684 auto lock = intercept->write_lock();
2685 skip |= intercept->PreCallValidateFreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
2686 if (skip) return;
2687 }
2688 for (auto intercept : layer_data->object_dispatch) {
2689 auto lock = intercept->write_lock();
2690 intercept->PreCallRecordFreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
2691 }
2692 DispatchFreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
2693 for (auto intercept : layer_data->object_dispatch) {
2694 auto lock = intercept->write_lock();
2695 intercept->PostCallRecordFreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
2696 }
2697}
2698
2699VKAPI_ATTR VkResult VKAPI_CALL BeginCommandBuffer(
2700 VkCommandBuffer commandBuffer,
2701 const VkCommandBufferBeginInfo* pBeginInfo) {
2702 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2703 bool skip = false;
2704 for (auto intercept : layer_data->object_dispatch) {
2705 auto lock = intercept->write_lock();
2706 skip |= intercept->PreCallValidateBeginCommandBuffer(commandBuffer, pBeginInfo);
2707 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2708 }
2709 for (auto intercept : layer_data->object_dispatch) {
2710 auto lock = intercept->write_lock();
2711 intercept->PreCallRecordBeginCommandBuffer(commandBuffer, pBeginInfo);
2712 }
2713 VkResult result = DispatchBeginCommandBuffer(commandBuffer, pBeginInfo);
2714 for (auto intercept : layer_data->object_dispatch) {
2715 auto lock = intercept->write_lock();
2716 intercept->PostCallRecordBeginCommandBuffer(commandBuffer, pBeginInfo, result);
2717 }
2718 return result;
2719}
2720
2721VKAPI_ATTR VkResult VKAPI_CALL EndCommandBuffer(
2722 VkCommandBuffer commandBuffer) {
2723 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2724 bool skip = false;
2725 for (auto intercept : layer_data->object_dispatch) {
2726 auto lock = intercept->write_lock();
2727 skip |= intercept->PreCallValidateEndCommandBuffer(commandBuffer);
2728 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2729 }
2730 for (auto intercept : layer_data->object_dispatch) {
2731 auto lock = intercept->write_lock();
2732 intercept->PreCallRecordEndCommandBuffer(commandBuffer);
2733 }
2734 VkResult result = DispatchEndCommandBuffer(commandBuffer);
2735 for (auto intercept : layer_data->object_dispatch) {
2736 auto lock = intercept->write_lock();
2737 intercept->PostCallRecordEndCommandBuffer(commandBuffer, result);
2738 }
2739 return result;
2740}
2741
2742VKAPI_ATTR VkResult VKAPI_CALL ResetCommandBuffer(
2743 VkCommandBuffer commandBuffer,
2744 VkCommandBufferResetFlags flags) {
2745 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2746 bool skip = false;
2747 for (auto intercept : layer_data->object_dispatch) {
2748 auto lock = intercept->write_lock();
2749 skip |= intercept->PreCallValidateResetCommandBuffer(commandBuffer, flags);
2750 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2751 }
2752 for (auto intercept : layer_data->object_dispatch) {
2753 auto lock = intercept->write_lock();
2754 intercept->PreCallRecordResetCommandBuffer(commandBuffer, flags);
2755 }
2756 VkResult result = DispatchResetCommandBuffer(commandBuffer, flags);
2757 for (auto intercept : layer_data->object_dispatch) {
2758 auto lock = intercept->write_lock();
2759 intercept->PostCallRecordResetCommandBuffer(commandBuffer, flags, result);
2760 }
2761 return result;
2762}
2763
2764VKAPI_ATTR void VKAPI_CALL CmdBindPipeline(
2765 VkCommandBuffer commandBuffer,
2766 VkPipelineBindPoint pipelineBindPoint,
2767 VkPipeline pipeline) {
2768 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2769 bool skip = false;
2770 for (auto intercept : layer_data->object_dispatch) {
2771 auto lock = intercept->write_lock();
2772 skip |= intercept->PreCallValidateCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
2773 if (skip) return;
2774 }
2775 for (auto intercept : layer_data->object_dispatch) {
2776 auto lock = intercept->write_lock();
2777 intercept->PreCallRecordCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
2778 }
2779 DispatchCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
2780 for (auto intercept : layer_data->object_dispatch) {
2781 auto lock = intercept->write_lock();
2782 intercept->PostCallRecordCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
2783 }
2784}
2785
2786VKAPI_ATTR void VKAPI_CALL CmdSetViewport(
2787 VkCommandBuffer commandBuffer,
2788 uint32_t firstViewport,
2789 uint32_t viewportCount,
2790 const VkViewport* pViewports) {
2791 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2792 bool skip = false;
2793 for (auto intercept : layer_data->object_dispatch) {
2794 auto lock = intercept->write_lock();
2795 skip |= intercept->PreCallValidateCmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
2796 if (skip) return;
2797 }
2798 for (auto intercept : layer_data->object_dispatch) {
2799 auto lock = intercept->write_lock();
2800 intercept->PreCallRecordCmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
2801 }
2802 DispatchCmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
2803 for (auto intercept : layer_data->object_dispatch) {
2804 auto lock = intercept->write_lock();
2805 intercept->PostCallRecordCmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
2806 }
2807}
2808
2809VKAPI_ATTR void VKAPI_CALL CmdSetScissor(
2810 VkCommandBuffer commandBuffer,
2811 uint32_t firstScissor,
2812 uint32_t scissorCount,
2813 const VkRect2D* pScissors) {
2814 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2815 bool skip = false;
2816 for (auto intercept : layer_data->object_dispatch) {
2817 auto lock = intercept->write_lock();
2818 skip |= intercept->PreCallValidateCmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
2819 if (skip) return;
2820 }
2821 for (auto intercept : layer_data->object_dispatch) {
2822 auto lock = intercept->write_lock();
2823 intercept->PreCallRecordCmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
2824 }
2825 DispatchCmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
2826 for (auto intercept : layer_data->object_dispatch) {
2827 auto lock = intercept->write_lock();
2828 intercept->PostCallRecordCmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
2829 }
2830}
2831
2832VKAPI_ATTR void VKAPI_CALL CmdSetLineWidth(
2833 VkCommandBuffer commandBuffer,
2834 float lineWidth) {
2835 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2836 bool skip = false;
2837 for (auto intercept : layer_data->object_dispatch) {
2838 auto lock = intercept->write_lock();
2839 skip |= intercept->PreCallValidateCmdSetLineWidth(commandBuffer, lineWidth);
2840 if (skip) return;
2841 }
2842 for (auto intercept : layer_data->object_dispatch) {
2843 auto lock = intercept->write_lock();
2844 intercept->PreCallRecordCmdSetLineWidth(commandBuffer, lineWidth);
2845 }
2846 DispatchCmdSetLineWidth(commandBuffer, lineWidth);
2847 for (auto intercept : layer_data->object_dispatch) {
2848 auto lock = intercept->write_lock();
2849 intercept->PostCallRecordCmdSetLineWidth(commandBuffer, lineWidth);
2850 }
2851}
2852
2853VKAPI_ATTR void VKAPI_CALL CmdSetDepthBias(
2854 VkCommandBuffer commandBuffer,
2855 float depthBiasConstantFactor,
2856 float depthBiasClamp,
2857 float depthBiasSlopeFactor) {
2858 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2859 bool skip = false;
2860 for (auto intercept : layer_data->object_dispatch) {
2861 auto lock = intercept->write_lock();
2862 skip |= intercept->PreCallValidateCmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
2863 if (skip) return;
2864 }
2865 for (auto intercept : layer_data->object_dispatch) {
2866 auto lock = intercept->write_lock();
2867 intercept->PreCallRecordCmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
2868 }
2869 DispatchCmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
2870 for (auto intercept : layer_data->object_dispatch) {
2871 auto lock = intercept->write_lock();
2872 intercept->PostCallRecordCmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
2873 }
2874}
2875
2876VKAPI_ATTR void VKAPI_CALL CmdSetBlendConstants(
2877 VkCommandBuffer commandBuffer,
2878 const float blendConstants[4]) {
2879 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2880 bool skip = false;
2881 for (auto intercept : layer_data->object_dispatch) {
2882 auto lock = intercept->write_lock();
2883 skip |= intercept->PreCallValidateCmdSetBlendConstants(commandBuffer, blendConstants);
2884 if (skip) return;
2885 }
2886 for (auto intercept : layer_data->object_dispatch) {
2887 auto lock = intercept->write_lock();
2888 intercept->PreCallRecordCmdSetBlendConstants(commandBuffer, blendConstants);
2889 }
2890 DispatchCmdSetBlendConstants(commandBuffer, blendConstants);
2891 for (auto intercept : layer_data->object_dispatch) {
2892 auto lock = intercept->write_lock();
2893 intercept->PostCallRecordCmdSetBlendConstants(commandBuffer, blendConstants);
2894 }
2895}
2896
2897VKAPI_ATTR void VKAPI_CALL CmdSetDepthBounds(
2898 VkCommandBuffer commandBuffer,
2899 float minDepthBounds,
2900 float maxDepthBounds) {
2901 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2902 bool skip = false;
2903 for (auto intercept : layer_data->object_dispatch) {
2904 auto lock = intercept->write_lock();
2905 skip |= intercept->PreCallValidateCmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
2906 if (skip) return;
2907 }
2908 for (auto intercept : layer_data->object_dispatch) {
2909 auto lock = intercept->write_lock();
2910 intercept->PreCallRecordCmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
2911 }
2912 DispatchCmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
2913 for (auto intercept : layer_data->object_dispatch) {
2914 auto lock = intercept->write_lock();
2915 intercept->PostCallRecordCmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
2916 }
2917}
2918
2919VKAPI_ATTR void VKAPI_CALL CmdSetStencilCompareMask(
2920 VkCommandBuffer commandBuffer,
2921 VkStencilFaceFlags faceMask,
2922 uint32_t compareMask) {
2923 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2924 bool skip = false;
2925 for (auto intercept : layer_data->object_dispatch) {
2926 auto lock = intercept->write_lock();
2927 skip |= intercept->PreCallValidateCmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
2928 if (skip) return;
2929 }
2930 for (auto intercept : layer_data->object_dispatch) {
2931 auto lock = intercept->write_lock();
2932 intercept->PreCallRecordCmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
2933 }
2934 DispatchCmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
2935 for (auto intercept : layer_data->object_dispatch) {
2936 auto lock = intercept->write_lock();
2937 intercept->PostCallRecordCmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
2938 }
2939}
2940
2941VKAPI_ATTR void VKAPI_CALL CmdSetStencilWriteMask(
2942 VkCommandBuffer commandBuffer,
2943 VkStencilFaceFlags faceMask,
2944 uint32_t writeMask) {
2945 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2946 bool skip = false;
2947 for (auto intercept : layer_data->object_dispatch) {
2948 auto lock = intercept->write_lock();
2949 skip |= intercept->PreCallValidateCmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
2950 if (skip) return;
2951 }
2952 for (auto intercept : layer_data->object_dispatch) {
2953 auto lock = intercept->write_lock();
2954 intercept->PreCallRecordCmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
2955 }
2956 DispatchCmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
2957 for (auto intercept : layer_data->object_dispatch) {
2958 auto lock = intercept->write_lock();
2959 intercept->PostCallRecordCmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
2960 }
2961}
2962
2963VKAPI_ATTR void VKAPI_CALL CmdSetStencilReference(
2964 VkCommandBuffer commandBuffer,
2965 VkStencilFaceFlags faceMask,
2966 uint32_t reference) {
2967 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2968 bool skip = false;
2969 for (auto intercept : layer_data->object_dispatch) {
2970 auto lock = intercept->write_lock();
2971 skip |= intercept->PreCallValidateCmdSetStencilReference(commandBuffer, faceMask, reference);
2972 if (skip) return;
2973 }
2974 for (auto intercept : layer_data->object_dispatch) {
2975 auto lock = intercept->write_lock();
2976 intercept->PreCallRecordCmdSetStencilReference(commandBuffer, faceMask, reference);
2977 }
2978 DispatchCmdSetStencilReference(commandBuffer, faceMask, reference);
2979 for (auto intercept : layer_data->object_dispatch) {
2980 auto lock = intercept->write_lock();
2981 intercept->PostCallRecordCmdSetStencilReference(commandBuffer, faceMask, reference);
2982 }
2983}
2984
2985VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets(
2986 VkCommandBuffer commandBuffer,
2987 VkPipelineBindPoint pipelineBindPoint,
2988 VkPipelineLayout layout,
2989 uint32_t firstSet,
2990 uint32_t descriptorSetCount,
2991 const VkDescriptorSet* pDescriptorSets,
2992 uint32_t dynamicOffsetCount,
2993 const uint32_t* pDynamicOffsets) {
2994 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2995 bool skip = false;
2996 for (auto intercept : layer_data->object_dispatch) {
2997 auto lock = intercept->write_lock();
2998 skip |= intercept->PreCallValidateCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
2999 if (skip) return;
3000 }
3001 for (auto intercept : layer_data->object_dispatch) {
3002 auto lock = intercept->write_lock();
3003 intercept->PreCallRecordCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
3004 }
3005 DispatchCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
3006 for (auto intercept : layer_data->object_dispatch) {
3007 auto lock = intercept->write_lock();
3008 intercept->PostCallRecordCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
3009 }
3010}
3011
3012VKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer(
3013 VkCommandBuffer commandBuffer,
3014 VkBuffer buffer,
3015 VkDeviceSize offset,
3016 VkIndexType indexType) {
3017 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3018 bool skip = false;
3019 for (auto intercept : layer_data->object_dispatch) {
3020 auto lock = intercept->write_lock();
3021 skip |= intercept->PreCallValidateCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
3022 if (skip) return;
3023 }
3024 for (auto intercept : layer_data->object_dispatch) {
3025 auto lock = intercept->write_lock();
3026 intercept->PreCallRecordCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
3027 }
3028 DispatchCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
3029 for (auto intercept : layer_data->object_dispatch) {
3030 auto lock = intercept->write_lock();
3031 intercept->PostCallRecordCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
3032 }
3033}
3034
3035VKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers(
3036 VkCommandBuffer commandBuffer,
3037 uint32_t firstBinding,
3038 uint32_t bindingCount,
3039 const VkBuffer* pBuffers,
3040 const VkDeviceSize* pOffsets) {
3041 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3042 bool skip = false;
3043 for (auto intercept : layer_data->object_dispatch) {
3044 auto lock = intercept->write_lock();
3045 skip |= intercept->PreCallValidateCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
3046 if (skip) return;
3047 }
3048 for (auto intercept : layer_data->object_dispatch) {
3049 auto lock = intercept->write_lock();
3050 intercept->PreCallRecordCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
3051 }
3052 DispatchCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
3053 for (auto intercept : layer_data->object_dispatch) {
3054 auto lock = intercept->write_lock();
3055 intercept->PostCallRecordCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
3056 }
3057}
3058
3059VKAPI_ATTR void VKAPI_CALL CmdDraw(
3060 VkCommandBuffer commandBuffer,
3061 uint32_t vertexCount,
3062 uint32_t instanceCount,
3063 uint32_t firstVertex,
3064 uint32_t firstInstance) {
3065 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3066 bool skip = false;
3067 for (auto intercept : layer_data->object_dispatch) {
3068 auto lock = intercept->write_lock();
3069 skip |= intercept->PreCallValidateCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
3070 if (skip) return;
3071 }
3072 for (auto intercept : layer_data->object_dispatch) {
3073 auto lock = intercept->write_lock();
3074 intercept->PreCallRecordCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
3075 }
3076 DispatchCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
3077 for (auto intercept : layer_data->object_dispatch) {
3078 auto lock = intercept->write_lock();
3079 intercept->PostCallRecordCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
3080 }
3081}
3082
3083VKAPI_ATTR void VKAPI_CALL CmdDrawIndexed(
3084 VkCommandBuffer commandBuffer,
3085 uint32_t indexCount,
3086 uint32_t instanceCount,
3087 uint32_t firstIndex,
3088 int32_t vertexOffset,
3089 uint32_t firstInstance) {
3090 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3091 bool skip = false;
3092 for (auto intercept : layer_data->object_dispatch) {
3093 auto lock = intercept->write_lock();
3094 skip |= intercept->PreCallValidateCmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
3095 if (skip) return;
3096 }
3097 for (auto intercept : layer_data->object_dispatch) {
3098 auto lock = intercept->write_lock();
3099 intercept->PreCallRecordCmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
3100 }
3101 DispatchCmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
3102 for (auto intercept : layer_data->object_dispatch) {
3103 auto lock = intercept->write_lock();
3104 intercept->PostCallRecordCmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
3105 }
3106}
3107
3108VKAPI_ATTR void VKAPI_CALL CmdDrawIndirect(
3109 VkCommandBuffer commandBuffer,
3110 VkBuffer buffer,
3111 VkDeviceSize offset,
3112 uint32_t drawCount,
3113 uint32_t stride) {
3114 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3115 bool skip = false;
3116 for (auto intercept : layer_data->object_dispatch) {
3117 auto lock = intercept->write_lock();
3118 skip |= intercept->PreCallValidateCmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
3119 if (skip) return;
3120 }
3121 for (auto intercept : layer_data->object_dispatch) {
3122 auto lock = intercept->write_lock();
3123 intercept->PreCallRecordCmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
3124 }
3125 DispatchCmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
3126 for (auto intercept : layer_data->object_dispatch) {
3127 auto lock = intercept->write_lock();
3128 intercept->PostCallRecordCmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
3129 }
3130}
3131
3132VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirect(
3133 VkCommandBuffer commandBuffer,
3134 VkBuffer buffer,
3135 VkDeviceSize offset,
3136 uint32_t drawCount,
3137 uint32_t stride) {
3138 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3139 bool skip = false;
3140 for (auto intercept : layer_data->object_dispatch) {
3141 auto lock = intercept->write_lock();
3142 skip |= intercept->PreCallValidateCmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
3143 if (skip) return;
3144 }
3145 for (auto intercept : layer_data->object_dispatch) {
3146 auto lock = intercept->write_lock();
3147 intercept->PreCallRecordCmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
3148 }
3149 DispatchCmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
3150 for (auto intercept : layer_data->object_dispatch) {
3151 auto lock = intercept->write_lock();
3152 intercept->PostCallRecordCmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
3153 }
3154}
3155
3156VKAPI_ATTR void VKAPI_CALL CmdDispatch(
3157 VkCommandBuffer commandBuffer,
3158 uint32_t groupCountX,
3159 uint32_t groupCountY,
3160 uint32_t groupCountZ) {
3161 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3162 bool skip = false;
3163 for (auto intercept : layer_data->object_dispatch) {
3164 auto lock = intercept->write_lock();
3165 skip |= intercept->PreCallValidateCmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
3166 if (skip) return;
3167 }
3168 for (auto intercept : layer_data->object_dispatch) {
3169 auto lock = intercept->write_lock();
3170 intercept->PreCallRecordCmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
3171 }
3172 DispatchCmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
3173 for (auto intercept : layer_data->object_dispatch) {
3174 auto lock = intercept->write_lock();
3175 intercept->PostCallRecordCmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
3176 }
3177}
3178
3179VKAPI_ATTR void VKAPI_CALL CmdDispatchIndirect(
3180 VkCommandBuffer commandBuffer,
3181 VkBuffer buffer,
3182 VkDeviceSize offset) {
3183 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3184 bool skip = false;
3185 for (auto intercept : layer_data->object_dispatch) {
3186 auto lock = intercept->write_lock();
3187 skip |= intercept->PreCallValidateCmdDispatchIndirect(commandBuffer, buffer, offset);
3188 if (skip) return;
3189 }
3190 for (auto intercept : layer_data->object_dispatch) {
3191 auto lock = intercept->write_lock();
3192 intercept->PreCallRecordCmdDispatchIndirect(commandBuffer, buffer, offset);
3193 }
3194 DispatchCmdDispatchIndirect(commandBuffer, buffer, offset);
3195 for (auto intercept : layer_data->object_dispatch) {
3196 auto lock = intercept->write_lock();
3197 intercept->PostCallRecordCmdDispatchIndirect(commandBuffer, buffer, offset);
3198 }
3199}
3200
3201VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer(
3202 VkCommandBuffer commandBuffer,
3203 VkBuffer srcBuffer,
3204 VkBuffer dstBuffer,
3205 uint32_t regionCount,
3206 const VkBufferCopy* pRegions) {
3207 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3208 bool skip = false;
3209 for (auto intercept : layer_data->object_dispatch) {
3210 auto lock = intercept->write_lock();
3211 skip |= intercept->PreCallValidateCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
3212 if (skip) return;
3213 }
3214 for (auto intercept : layer_data->object_dispatch) {
3215 auto lock = intercept->write_lock();
3216 intercept->PreCallRecordCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
3217 }
3218 DispatchCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
3219 for (auto intercept : layer_data->object_dispatch) {
3220 auto lock = intercept->write_lock();
3221 intercept->PostCallRecordCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
3222 }
3223}
3224
3225VKAPI_ATTR void VKAPI_CALL CmdCopyImage(
3226 VkCommandBuffer commandBuffer,
3227 VkImage srcImage,
3228 VkImageLayout srcImageLayout,
3229 VkImage dstImage,
3230 VkImageLayout dstImageLayout,
3231 uint32_t regionCount,
3232 const VkImageCopy* pRegions) {
3233 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3234 bool skip = false;
3235 for (auto intercept : layer_data->object_dispatch) {
3236 auto lock = intercept->write_lock();
3237 skip |= intercept->PreCallValidateCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3238 if (skip) return;
3239 }
3240 for (auto intercept : layer_data->object_dispatch) {
3241 auto lock = intercept->write_lock();
3242 intercept->PreCallRecordCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3243 }
3244 DispatchCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3245 for (auto intercept : layer_data->object_dispatch) {
3246 auto lock = intercept->write_lock();
3247 intercept->PostCallRecordCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3248 }
3249}
3250
3251VKAPI_ATTR void VKAPI_CALL CmdBlitImage(
3252 VkCommandBuffer commandBuffer,
3253 VkImage srcImage,
3254 VkImageLayout srcImageLayout,
3255 VkImage dstImage,
3256 VkImageLayout dstImageLayout,
3257 uint32_t regionCount,
3258 const VkImageBlit* pRegions,
3259 VkFilter filter) {
3260 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3261 bool skip = false;
3262 for (auto intercept : layer_data->object_dispatch) {
3263 auto lock = intercept->write_lock();
3264 skip |= intercept->PreCallValidateCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
3265 if (skip) return;
3266 }
3267 for (auto intercept : layer_data->object_dispatch) {
3268 auto lock = intercept->write_lock();
3269 intercept->PreCallRecordCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
3270 }
3271 DispatchCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
3272 for (auto intercept : layer_data->object_dispatch) {
3273 auto lock = intercept->write_lock();
3274 intercept->PostCallRecordCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
3275 }
3276}
3277
3278VKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage(
3279 VkCommandBuffer commandBuffer,
3280 VkBuffer srcBuffer,
3281 VkImage dstImage,
3282 VkImageLayout dstImageLayout,
3283 uint32_t regionCount,
3284 const VkBufferImageCopy* pRegions) {
3285 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3286 bool skip = false;
3287 for (auto intercept : layer_data->object_dispatch) {
3288 auto lock = intercept->write_lock();
3289 skip |= intercept->PreCallValidateCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
3290 if (skip) return;
3291 }
3292 for (auto intercept : layer_data->object_dispatch) {
3293 auto lock = intercept->write_lock();
3294 intercept->PreCallRecordCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
3295 }
3296 DispatchCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
3297 for (auto intercept : layer_data->object_dispatch) {
3298 auto lock = intercept->write_lock();
3299 intercept->PostCallRecordCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
3300 }
3301}
3302
3303VKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer(
3304 VkCommandBuffer commandBuffer,
3305 VkImage srcImage,
3306 VkImageLayout srcImageLayout,
3307 VkBuffer dstBuffer,
3308 uint32_t regionCount,
3309 const VkBufferImageCopy* pRegions) {
3310 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3311 bool skip = false;
3312 for (auto intercept : layer_data->object_dispatch) {
3313 auto lock = intercept->write_lock();
3314 skip |= intercept->PreCallValidateCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
3315 if (skip) return;
3316 }
3317 for (auto intercept : layer_data->object_dispatch) {
3318 auto lock = intercept->write_lock();
3319 intercept->PreCallRecordCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
3320 }
3321 DispatchCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
3322 for (auto intercept : layer_data->object_dispatch) {
3323 auto lock = intercept->write_lock();
3324 intercept->PostCallRecordCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
3325 }
3326}
3327
3328VKAPI_ATTR void VKAPI_CALL CmdUpdateBuffer(
3329 VkCommandBuffer commandBuffer,
3330 VkBuffer dstBuffer,
3331 VkDeviceSize dstOffset,
3332 VkDeviceSize dataSize,
3333 const void* pData) {
3334 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3335 bool skip = false;
3336 for (auto intercept : layer_data->object_dispatch) {
3337 auto lock = intercept->write_lock();
3338 skip |= intercept->PreCallValidateCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
3339 if (skip) return;
3340 }
3341 for (auto intercept : layer_data->object_dispatch) {
3342 auto lock = intercept->write_lock();
3343 intercept->PreCallRecordCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
3344 }
3345 DispatchCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
3346 for (auto intercept : layer_data->object_dispatch) {
3347 auto lock = intercept->write_lock();
3348 intercept->PostCallRecordCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
3349 }
3350}
3351
3352VKAPI_ATTR void VKAPI_CALL CmdFillBuffer(
3353 VkCommandBuffer commandBuffer,
3354 VkBuffer dstBuffer,
3355 VkDeviceSize dstOffset,
3356 VkDeviceSize size,
3357 uint32_t data) {
3358 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3359 bool skip = false;
3360 for (auto intercept : layer_data->object_dispatch) {
3361 auto lock = intercept->write_lock();
3362 skip |= intercept->PreCallValidateCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
3363 if (skip) return;
3364 }
3365 for (auto intercept : layer_data->object_dispatch) {
3366 auto lock = intercept->write_lock();
3367 intercept->PreCallRecordCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
3368 }
3369 DispatchCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
3370 for (auto intercept : layer_data->object_dispatch) {
3371 auto lock = intercept->write_lock();
3372 intercept->PostCallRecordCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
3373 }
3374}
3375
3376VKAPI_ATTR void VKAPI_CALL CmdClearColorImage(
3377 VkCommandBuffer commandBuffer,
3378 VkImage image,
3379 VkImageLayout imageLayout,
3380 const VkClearColorValue* pColor,
3381 uint32_t rangeCount,
3382 const VkImageSubresourceRange* pRanges) {
3383 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3384 bool skip = false;
3385 for (auto intercept : layer_data->object_dispatch) {
3386 auto lock = intercept->write_lock();
3387 skip |= intercept->PreCallValidateCmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
3388 if (skip) return;
3389 }
3390 for (auto intercept : layer_data->object_dispatch) {
3391 auto lock = intercept->write_lock();
3392 intercept->PreCallRecordCmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
3393 }
3394 DispatchCmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
3395 for (auto intercept : layer_data->object_dispatch) {
3396 auto lock = intercept->write_lock();
3397 intercept->PostCallRecordCmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
3398 }
3399}
3400
3401VKAPI_ATTR void VKAPI_CALL CmdClearDepthStencilImage(
3402 VkCommandBuffer commandBuffer,
3403 VkImage image,
3404 VkImageLayout imageLayout,
3405 const VkClearDepthStencilValue* pDepthStencil,
3406 uint32_t rangeCount,
3407 const VkImageSubresourceRange* pRanges) {
3408 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3409 bool skip = false;
3410 for (auto intercept : layer_data->object_dispatch) {
3411 auto lock = intercept->write_lock();
3412 skip |= intercept->PreCallValidateCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
3413 if (skip) return;
3414 }
3415 for (auto intercept : layer_data->object_dispatch) {
3416 auto lock = intercept->write_lock();
3417 intercept->PreCallRecordCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
3418 }
3419 DispatchCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
3420 for (auto intercept : layer_data->object_dispatch) {
3421 auto lock = intercept->write_lock();
3422 intercept->PostCallRecordCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
3423 }
3424}
3425
3426VKAPI_ATTR void VKAPI_CALL CmdClearAttachments(
3427 VkCommandBuffer commandBuffer,
3428 uint32_t attachmentCount,
3429 const VkClearAttachment* pAttachments,
3430 uint32_t rectCount,
3431 const VkClearRect* pRects) {
3432 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3433 bool skip = false;
3434 for (auto intercept : layer_data->object_dispatch) {
3435 auto lock = intercept->write_lock();
3436 skip |= intercept->PreCallValidateCmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
3437 if (skip) return;
3438 }
3439 for (auto intercept : layer_data->object_dispatch) {
3440 auto lock = intercept->write_lock();
3441 intercept->PreCallRecordCmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
3442 }
3443 DispatchCmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
3444 for (auto intercept : layer_data->object_dispatch) {
3445 auto lock = intercept->write_lock();
3446 intercept->PostCallRecordCmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
3447 }
3448}
3449
3450VKAPI_ATTR void VKAPI_CALL CmdResolveImage(
3451 VkCommandBuffer commandBuffer,
3452 VkImage srcImage,
3453 VkImageLayout srcImageLayout,
3454 VkImage dstImage,
3455 VkImageLayout dstImageLayout,
3456 uint32_t regionCount,
3457 const VkImageResolve* pRegions) {
3458 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3459 bool skip = false;
3460 for (auto intercept : layer_data->object_dispatch) {
3461 auto lock = intercept->write_lock();
3462 skip |= intercept->PreCallValidateCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3463 if (skip) return;
3464 }
3465 for (auto intercept : layer_data->object_dispatch) {
3466 auto lock = intercept->write_lock();
3467 intercept->PreCallRecordCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3468 }
3469 DispatchCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3470 for (auto intercept : layer_data->object_dispatch) {
3471 auto lock = intercept->write_lock();
3472 intercept->PostCallRecordCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3473 }
3474}
3475
3476VKAPI_ATTR void VKAPI_CALL CmdSetEvent(
3477 VkCommandBuffer commandBuffer,
3478 VkEvent event,
3479 VkPipelineStageFlags stageMask) {
3480 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3481 bool skip = false;
3482 for (auto intercept : layer_data->object_dispatch) {
3483 auto lock = intercept->write_lock();
3484 skip |= intercept->PreCallValidateCmdSetEvent(commandBuffer, event, stageMask);
3485 if (skip) return;
3486 }
3487 for (auto intercept : layer_data->object_dispatch) {
3488 auto lock = intercept->write_lock();
3489 intercept->PreCallRecordCmdSetEvent(commandBuffer, event, stageMask);
3490 }
3491 DispatchCmdSetEvent(commandBuffer, event, stageMask);
3492 for (auto intercept : layer_data->object_dispatch) {
3493 auto lock = intercept->write_lock();
3494 intercept->PostCallRecordCmdSetEvent(commandBuffer, event, stageMask);
3495 }
3496}
3497
3498VKAPI_ATTR void VKAPI_CALL CmdResetEvent(
3499 VkCommandBuffer commandBuffer,
3500 VkEvent event,
3501 VkPipelineStageFlags stageMask) {
3502 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3503 bool skip = false;
3504 for (auto intercept : layer_data->object_dispatch) {
3505 auto lock = intercept->write_lock();
3506 skip |= intercept->PreCallValidateCmdResetEvent(commandBuffer, event, stageMask);
3507 if (skip) return;
3508 }
3509 for (auto intercept : layer_data->object_dispatch) {
3510 auto lock = intercept->write_lock();
3511 intercept->PreCallRecordCmdResetEvent(commandBuffer, event, stageMask);
3512 }
3513 DispatchCmdResetEvent(commandBuffer, event, stageMask);
3514 for (auto intercept : layer_data->object_dispatch) {
3515 auto lock = intercept->write_lock();
3516 intercept->PostCallRecordCmdResetEvent(commandBuffer, event, stageMask);
3517 }
3518}
3519
3520VKAPI_ATTR void VKAPI_CALL CmdWaitEvents(
3521 VkCommandBuffer commandBuffer,
3522 uint32_t eventCount,
3523 const VkEvent* pEvents,
3524 VkPipelineStageFlags srcStageMask,
3525 VkPipelineStageFlags dstStageMask,
3526 uint32_t memoryBarrierCount,
3527 const VkMemoryBarrier* pMemoryBarriers,
3528 uint32_t bufferMemoryBarrierCount,
3529 const VkBufferMemoryBarrier* pBufferMemoryBarriers,
3530 uint32_t imageMemoryBarrierCount,
3531 const VkImageMemoryBarrier* pImageMemoryBarriers) {
3532 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3533 bool skip = false;
3534 for (auto intercept : layer_data->object_dispatch) {
3535 auto lock = intercept->write_lock();
3536 skip |= intercept->PreCallValidateCmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3537 if (skip) return;
3538 }
3539 for (auto intercept : layer_data->object_dispatch) {
3540 auto lock = intercept->write_lock();
3541 intercept->PreCallRecordCmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3542 }
3543 DispatchCmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3544 for (auto intercept : layer_data->object_dispatch) {
3545 auto lock = intercept->write_lock();
3546 intercept->PostCallRecordCmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3547 }
3548}
3549
3550VKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier(
3551 VkCommandBuffer commandBuffer,
3552 VkPipelineStageFlags srcStageMask,
3553 VkPipelineStageFlags dstStageMask,
3554 VkDependencyFlags dependencyFlags,
3555 uint32_t memoryBarrierCount,
3556 const VkMemoryBarrier* pMemoryBarriers,
3557 uint32_t bufferMemoryBarrierCount,
3558 const VkBufferMemoryBarrier* pBufferMemoryBarriers,
3559 uint32_t imageMemoryBarrierCount,
3560 const VkImageMemoryBarrier* pImageMemoryBarriers) {
3561 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3562 bool skip = false;
3563 for (auto intercept : layer_data->object_dispatch) {
3564 auto lock = intercept->write_lock();
3565 skip |= intercept->PreCallValidateCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3566 if (skip) return;
3567 }
3568 for (auto intercept : layer_data->object_dispatch) {
3569 auto lock = intercept->write_lock();
3570 intercept->PreCallRecordCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3571 }
3572 DispatchCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3573 for (auto intercept : layer_data->object_dispatch) {
3574 auto lock = intercept->write_lock();
3575 intercept->PostCallRecordCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3576 }
3577}
3578
3579VKAPI_ATTR void VKAPI_CALL CmdBeginQuery(
3580 VkCommandBuffer commandBuffer,
3581 VkQueryPool queryPool,
3582 uint32_t query,
3583 VkQueryControlFlags flags) {
3584 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3585 bool skip = false;
3586 for (auto intercept : layer_data->object_dispatch) {
3587 auto lock = intercept->write_lock();
3588 skip |= intercept->PreCallValidateCmdBeginQuery(commandBuffer, queryPool, query, flags);
3589 if (skip) return;
3590 }
3591 for (auto intercept : layer_data->object_dispatch) {
3592 auto lock = intercept->write_lock();
3593 intercept->PreCallRecordCmdBeginQuery(commandBuffer, queryPool, query, flags);
3594 }
3595 DispatchCmdBeginQuery(commandBuffer, queryPool, query, flags);
3596 for (auto intercept : layer_data->object_dispatch) {
3597 auto lock = intercept->write_lock();
3598 intercept->PostCallRecordCmdBeginQuery(commandBuffer, queryPool, query, flags);
3599 }
3600}
3601
3602VKAPI_ATTR void VKAPI_CALL CmdEndQuery(
3603 VkCommandBuffer commandBuffer,
3604 VkQueryPool queryPool,
3605 uint32_t query) {
3606 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3607 bool skip = false;
3608 for (auto intercept : layer_data->object_dispatch) {
3609 auto lock = intercept->write_lock();
3610 skip |= intercept->PreCallValidateCmdEndQuery(commandBuffer, queryPool, query);
3611 if (skip) return;
3612 }
3613 for (auto intercept : layer_data->object_dispatch) {
3614 auto lock = intercept->write_lock();
3615 intercept->PreCallRecordCmdEndQuery(commandBuffer, queryPool, query);
3616 }
3617 DispatchCmdEndQuery(commandBuffer, queryPool, query);
3618 for (auto intercept : layer_data->object_dispatch) {
3619 auto lock = intercept->write_lock();
3620 intercept->PostCallRecordCmdEndQuery(commandBuffer, queryPool, query);
3621 }
3622}
3623
3624VKAPI_ATTR void VKAPI_CALL CmdResetQueryPool(
3625 VkCommandBuffer commandBuffer,
3626 VkQueryPool queryPool,
3627 uint32_t firstQuery,
3628 uint32_t queryCount) {
3629 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3630 bool skip = false;
3631 for (auto intercept : layer_data->object_dispatch) {
3632 auto lock = intercept->write_lock();
3633 skip |= intercept->PreCallValidateCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
3634 if (skip) return;
3635 }
3636 for (auto intercept : layer_data->object_dispatch) {
3637 auto lock = intercept->write_lock();
3638 intercept->PreCallRecordCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
3639 }
3640 DispatchCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
3641 for (auto intercept : layer_data->object_dispatch) {
3642 auto lock = intercept->write_lock();
3643 intercept->PostCallRecordCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
3644 }
3645}
3646
3647VKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp(
3648 VkCommandBuffer commandBuffer,
3649 VkPipelineStageFlagBits pipelineStage,
3650 VkQueryPool queryPool,
3651 uint32_t query) {
3652 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3653 bool skip = false;
3654 for (auto intercept : layer_data->object_dispatch) {
3655 auto lock = intercept->write_lock();
3656 skip |= intercept->PreCallValidateCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
3657 if (skip) return;
3658 }
3659 for (auto intercept : layer_data->object_dispatch) {
3660 auto lock = intercept->write_lock();
3661 intercept->PreCallRecordCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
3662 }
3663 DispatchCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
3664 for (auto intercept : layer_data->object_dispatch) {
3665 auto lock = intercept->write_lock();
3666 intercept->PostCallRecordCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
3667 }
3668}
3669
3670VKAPI_ATTR void VKAPI_CALL CmdCopyQueryPoolResults(
3671 VkCommandBuffer commandBuffer,
3672 VkQueryPool queryPool,
3673 uint32_t firstQuery,
3674 uint32_t queryCount,
3675 VkBuffer dstBuffer,
3676 VkDeviceSize dstOffset,
3677 VkDeviceSize stride,
3678 VkQueryResultFlags flags) {
3679 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3680 bool skip = false;
3681 for (auto intercept : layer_data->object_dispatch) {
3682 auto lock = intercept->write_lock();
3683 skip |= intercept->PreCallValidateCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
3684 if (skip) return;
3685 }
3686 for (auto intercept : layer_data->object_dispatch) {
3687 auto lock = intercept->write_lock();
3688 intercept->PreCallRecordCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
3689 }
3690 DispatchCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
3691 for (auto intercept : layer_data->object_dispatch) {
3692 auto lock = intercept->write_lock();
3693 intercept->PostCallRecordCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
3694 }
3695}
3696
3697VKAPI_ATTR void VKAPI_CALL CmdPushConstants(
3698 VkCommandBuffer commandBuffer,
3699 VkPipelineLayout layout,
3700 VkShaderStageFlags stageFlags,
3701 uint32_t offset,
3702 uint32_t size,
3703 const void* pValues) {
3704 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3705 bool skip = false;
3706 for (auto intercept : layer_data->object_dispatch) {
3707 auto lock = intercept->write_lock();
3708 skip |= intercept->PreCallValidateCmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
3709 if (skip) return;
3710 }
3711 for (auto intercept : layer_data->object_dispatch) {
3712 auto lock = intercept->write_lock();
3713 intercept->PreCallRecordCmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
3714 }
3715 DispatchCmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
3716 for (auto intercept : layer_data->object_dispatch) {
3717 auto lock = intercept->write_lock();
3718 intercept->PostCallRecordCmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
3719 }
3720}
3721
3722VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass(
3723 VkCommandBuffer commandBuffer,
3724 const VkRenderPassBeginInfo* pRenderPassBegin,
3725 VkSubpassContents contents) {
3726 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3727 bool skip = false;
3728 for (auto intercept : layer_data->object_dispatch) {
3729 auto lock = intercept->write_lock();
3730 skip |= intercept->PreCallValidateCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
3731 if (skip) return;
3732 }
3733 for (auto intercept : layer_data->object_dispatch) {
3734 auto lock = intercept->write_lock();
3735 intercept->PreCallRecordCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
3736 }
3737 DispatchCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
3738 for (auto intercept : layer_data->object_dispatch) {
3739 auto lock = intercept->write_lock();
3740 intercept->PostCallRecordCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
3741 }
3742}
3743
3744VKAPI_ATTR void VKAPI_CALL CmdNextSubpass(
3745 VkCommandBuffer commandBuffer,
3746 VkSubpassContents contents) {
3747 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3748 bool skip = false;
3749 for (auto intercept : layer_data->object_dispatch) {
3750 auto lock = intercept->write_lock();
3751 skip |= intercept->PreCallValidateCmdNextSubpass(commandBuffer, contents);
3752 if (skip) return;
3753 }
3754 for (auto intercept : layer_data->object_dispatch) {
3755 auto lock = intercept->write_lock();
3756 intercept->PreCallRecordCmdNextSubpass(commandBuffer, contents);
3757 }
3758 DispatchCmdNextSubpass(commandBuffer, contents);
3759 for (auto intercept : layer_data->object_dispatch) {
3760 auto lock = intercept->write_lock();
3761 intercept->PostCallRecordCmdNextSubpass(commandBuffer, contents);
3762 }
3763}
3764
3765VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass(
3766 VkCommandBuffer commandBuffer) {
3767 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3768 bool skip = false;
3769 for (auto intercept : layer_data->object_dispatch) {
3770 auto lock = intercept->write_lock();
3771 skip |= intercept->PreCallValidateCmdEndRenderPass(commandBuffer);
3772 if (skip) return;
3773 }
3774 for (auto intercept : layer_data->object_dispatch) {
3775 auto lock = intercept->write_lock();
3776 intercept->PreCallRecordCmdEndRenderPass(commandBuffer);
3777 }
3778 DispatchCmdEndRenderPass(commandBuffer);
3779 for (auto intercept : layer_data->object_dispatch) {
3780 auto lock = intercept->write_lock();
3781 intercept->PostCallRecordCmdEndRenderPass(commandBuffer);
3782 }
3783}
3784
3785VKAPI_ATTR void VKAPI_CALL CmdExecuteCommands(
3786 VkCommandBuffer commandBuffer,
3787 uint32_t commandBufferCount,
3788 const VkCommandBuffer* pCommandBuffers) {
3789 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3790 bool skip = false;
3791 for (auto intercept : layer_data->object_dispatch) {
3792 auto lock = intercept->write_lock();
3793 skip |= intercept->PreCallValidateCmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
3794 if (skip) return;
3795 }
3796 for (auto intercept : layer_data->object_dispatch) {
3797 auto lock = intercept->write_lock();
3798 intercept->PreCallRecordCmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
3799 }
3800 DispatchCmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
3801 for (auto intercept : layer_data->object_dispatch) {
3802 auto lock = intercept->write_lock();
3803 intercept->PostCallRecordCmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
3804 }
3805}
3806
3807
3808VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2(
3809 VkDevice device,
3810 uint32_t bindInfoCount,
3811 const VkBindBufferMemoryInfo* pBindInfos) {
3812 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3813 bool skip = false;
3814 for (auto intercept : layer_data->object_dispatch) {
3815 auto lock = intercept->write_lock();
3816 skip |= intercept->PreCallValidateBindBufferMemory2(device, bindInfoCount, pBindInfos);
3817 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
3818 }
3819 for (auto intercept : layer_data->object_dispatch) {
3820 auto lock = intercept->write_lock();
3821 intercept->PreCallRecordBindBufferMemory2(device, bindInfoCount, pBindInfos);
3822 }
3823 VkResult result = DispatchBindBufferMemory2(device, bindInfoCount, pBindInfos);
3824 for (auto intercept : layer_data->object_dispatch) {
3825 auto lock = intercept->write_lock();
3826 intercept->PostCallRecordBindBufferMemory2(device, bindInfoCount, pBindInfos, result);
3827 }
3828 return result;
3829}
3830
3831VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory2(
3832 VkDevice device,
3833 uint32_t bindInfoCount,
3834 const VkBindImageMemoryInfo* pBindInfos) {
3835 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3836 bool skip = false;
3837 for (auto intercept : layer_data->object_dispatch) {
3838 auto lock = intercept->write_lock();
3839 skip |= intercept->PreCallValidateBindImageMemory2(device, bindInfoCount, pBindInfos);
3840 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
3841 }
3842 for (auto intercept : layer_data->object_dispatch) {
3843 auto lock = intercept->write_lock();
3844 intercept->PreCallRecordBindImageMemory2(device, bindInfoCount, pBindInfos);
3845 }
3846 VkResult result = DispatchBindImageMemory2(device, bindInfoCount, pBindInfos);
3847 for (auto intercept : layer_data->object_dispatch) {
3848 auto lock = intercept->write_lock();
3849 intercept->PostCallRecordBindImageMemory2(device, bindInfoCount, pBindInfos, result);
3850 }
3851 return result;
3852}
3853
3854VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeatures(
3855 VkDevice device,
3856 uint32_t heapIndex,
3857 uint32_t localDeviceIndex,
3858 uint32_t remoteDeviceIndex,
3859 VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) {
3860 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3861 bool skip = false;
3862 for (auto intercept : layer_data->object_dispatch) {
3863 auto lock = intercept->write_lock();
3864 skip |= intercept->PreCallValidateGetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
3865 if (skip) return;
3866 }
3867 for (auto intercept : layer_data->object_dispatch) {
3868 auto lock = intercept->write_lock();
3869 intercept->PreCallRecordGetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
3870 }
3871 DispatchGetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
3872 for (auto intercept : layer_data->object_dispatch) {
3873 auto lock = intercept->write_lock();
3874 intercept->PostCallRecordGetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
3875 }
3876}
3877
3878VKAPI_ATTR void VKAPI_CALL CmdSetDeviceMask(
3879 VkCommandBuffer commandBuffer,
3880 uint32_t deviceMask) {
3881 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3882 bool skip = false;
3883 for (auto intercept : layer_data->object_dispatch) {
3884 auto lock = intercept->write_lock();
3885 skip |= intercept->PreCallValidateCmdSetDeviceMask(commandBuffer, deviceMask);
3886 if (skip) return;
3887 }
3888 for (auto intercept : layer_data->object_dispatch) {
3889 auto lock = intercept->write_lock();
3890 intercept->PreCallRecordCmdSetDeviceMask(commandBuffer, deviceMask);
3891 }
3892 DispatchCmdSetDeviceMask(commandBuffer, deviceMask);
3893 for (auto intercept : layer_data->object_dispatch) {
3894 auto lock = intercept->write_lock();
3895 intercept->PostCallRecordCmdSetDeviceMask(commandBuffer, deviceMask);
3896 }
3897}
3898
3899VKAPI_ATTR void VKAPI_CALL CmdDispatchBase(
3900 VkCommandBuffer commandBuffer,
3901 uint32_t baseGroupX,
3902 uint32_t baseGroupY,
3903 uint32_t baseGroupZ,
3904 uint32_t groupCountX,
3905 uint32_t groupCountY,
3906 uint32_t groupCountZ) {
3907 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3908 bool skip = false;
3909 for (auto intercept : layer_data->object_dispatch) {
3910 auto lock = intercept->write_lock();
3911 skip |= intercept->PreCallValidateCmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
3912 if (skip) return;
3913 }
3914 for (auto intercept : layer_data->object_dispatch) {
3915 auto lock = intercept->write_lock();
3916 intercept->PreCallRecordCmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
3917 }
3918 DispatchCmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
3919 for (auto intercept : layer_data->object_dispatch) {
3920 auto lock = intercept->write_lock();
3921 intercept->PostCallRecordCmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
3922 }
3923}
3924
3925VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroups(
3926 VkInstance instance,
3927 uint32_t* pPhysicalDeviceGroupCount,
3928 VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties) {
3929 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
3930 bool skip = false;
3931 for (auto intercept : layer_data->object_dispatch) {
3932 auto lock = intercept->write_lock();
3933 skip |= intercept->PreCallValidateEnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
3934 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
3935 }
3936 for (auto intercept : layer_data->object_dispatch) {
3937 auto lock = intercept->write_lock();
3938 intercept->PreCallRecordEnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
3939 }
3940 VkResult result = DispatchEnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
3941 for (auto intercept : layer_data->object_dispatch) {
3942 auto lock = intercept->write_lock();
3943 intercept->PostCallRecordEnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties, result);
3944 }
3945 return result;
3946}
3947
3948VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2(
3949 VkDevice device,
3950 const VkImageMemoryRequirementsInfo2* pInfo,
3951 VkMemoryRequirements2* pMemoryRequirements) {
3952 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3953 bool skip = false;
3954 for (auto intercept : layer_data->object_dispatch) {
3955 auto lock = intercept->write_lock();
3956 skip |= intercept->PreCallValidateGetImageMemoryRequirements2(device, pInfo, pMemoryRequirements);
3957 if (skip) return;
3958 }
3959 for (auto intercept : layer_data->object_dispatch) {
3960 auto lock = intercept->write_lock();
3961 intercept->PreCallRecordGetImageMemoryRequirements2(device, pInfo, pMemoryRequirements);
3962 }
3963 DispatchGetImageMemoryRequirements2(device, pInfo, pMemoryRequirements);
3964 for (auto intercept : layer_data->object_dispatch) {
3965 auto lock = intercept->write_lock();
3966 intercept->PostCallRecordGetImageMemoryRequirements2(device, pInfo, pMemoryRequirements);
3967 }
3968}
3969
3970VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements2(
3971 VkDevice device,
3972 const VkBufferMemoryRequirementsInfo2* pInfo,
3973 VkMemoryRequirements2* pMemoryRequirements) {
3974 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3975 bool skip = false;
3976 for (auto intercept : layer_data->object_dispatch) {
3977 auto lock = intercept->write_lock();
3978 skip |= intercept->PreCallValidateGetBufferMemoryRequirements2(device, pInfo, pMemoryRequirements);
3979 if (skip) return;
3980 }
3981 for (auto intercept : layer_data->object_dispatch) {
3982 auto lock = intercept->write_lock();
3983 intercept->PreCallRecordGetBufferMemoryRequirements2(device, pInfo, pMemoryRequirements);
3984 }
3985 DispatchGetBufferMemoryRequirements2(device, pInfo, pMemoryRequirements);
3986 for (auto intercept : layer_data->object_dispatch) {
3987 auto lock = intercept->write_lock();
3988 intercept->PostCallRecordGetBufferMemoryRequirements2(device, pInfo, pMemoryRequirements);
3989 }
3990}
3991
3992VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements2(
3993 VkDevice device,
3994 const VkImageSparseMemoryRequirementsInfo2* pInfo,
3995 uint32_t* pSparseMemoryRequirementCount,
3996 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) {
3997 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3998 bool skip = false;
3999 for (auto intercept : layer_data->object_dispatch) {
4000 auto lock = intercept->write_lock();
4001 skip |= intercept->PreCallValidateGetImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
4002 if (skip) return;
4003 }
4004 for (auto intercept : layer_data->object_dispatch) {
4005 auto lock = intercept->write_lock();
4006 intercept->PreCallRecordGetImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
4007 }
4008 DispatchGetImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
4009 for (auto intercept : layer_data->object_dispatch) {
4010 auto lock = intercept->write_lock();
4011 intercept->PostCallRecordGetImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
4012 }
4013}
4014
4015VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2(
4016 VkPhysicalDevice physicalDevice,
4017 VkPhysicalDeviceFeatures2* pFeatures) {
4018 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4019 bool skip = false;
4020 for (auto intercept : layer_data->object_dispatch) {
4021 auto lock = intercept->write_lock();
4022 skip |= intercept->PreCallValidateGetPhysicalDeviceFeatures2(physicalDevice, pFeatures);
4023 if (skip) return;
4024 }
4025 for (auto intercept : layer_data->object_dispatch) {
4026 auto lock = intercept->write_lock();
4027 intercept->PreCallRecordGetPhysicalDeviceFeatures2(physicalDevice, pFeatures);
4028 }
4029 DispatchGetPhysicalDeviceFeatures2(physicalDevice, pFeatures);
4030 for (auto intercept : layer_data->object_dispatch) {
4031 auto lock = intercept->write_lock();
4032 intercept->PostCallRecordGetPhysicalDeviceFeatures2(physicalDevice, pFeatures);
4033 }
4034}
4035
4036VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2(
4037 VkPhysicalDevice physicalDevice,
4038 VkPhysicalDeviceProperties2* pProperties) {
4039 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4040 bool skip = false;
4041 for (auto intercept : layer_data->object_dispatch) {
4042 auto lock = intercept->write_lock();
4043 skip |= intercept->PreCallValidateGetPhysicalDeviceProperties2(physicalDevice, pProperties);
4044 if (skip) return;
4045 }
4046 for (auto intercept : layer_data->object_dispatch) {
4047 auto lock = intercept->write_lock();
4048 intercept->PreCallRecordGetPhysicalDeviceProperties2(physicalDevice, pProperties);
4049 }
4050 DispatchGetPhysicalDeviceProperties2(physicalDevice, pProperties);
4051 for (auto intercept : layer_data->object_dispatch) {
4052 auto lock = intercept->write_lock();
4053 intercept->PostCallRecordGetPhysicalDeviceProperties2(physicalDevice, pProperties);
4054 }
4055}
4056
4057VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2(
4058 VkPhysicalDevice physicalDevice,
4059 VkFormat format,
4060 VkFormatProperties2* pFormatProperties) {
4061 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4062 bool skip = false;
4063 for (auto intercept : layer_data->object_dispatch) {
4064 auto lock = intercept->write_lock();
4065 skip |= intercept->PreCallValidateGetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties);
4066 if (skip) return;
4067 }
4068 for (auto intercept : layer_data->object_dispatch) {
4069 auto lock = intercept->write_lock();
4070 intercept->PreCallRecordGetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties);
4071 }
4072 DispatchGetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties);
4073 for (auto intercept : layer_data->object_dispatch) {
4074 auto lock = intercept->write_lock();
4075 intercept->PostCallRecordGetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties);
4076 }
4077}
4078
4079VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties2(
4080 VkPhysicalDevice physicalDevice,
4081 const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
4082 VkImageFormatProperties2* pImageFormatProperties) {
4083 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4084 bool skip = false;
4085 for (auto intercept : layer_data->object_dispatch) {
4086 auto lock = intercept->write_lock();
4087 skip |= intercept->PreCallValidateGetPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties);
4088 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4089 }
4090 for (auto intercept : layer_data->object_dispatch) {
4091 auto lock = intercept->write_lock();
4092 intercept->PreCallRecordGetPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties);
4093 }
4094 VkResult result = DispatchGetPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties);
4095 for (auto intercept : layer_data->object_dispatch) {
4096 auto lock = intercept->write_lock();
4097 intercept->PostCallRecordGetPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties, result);
4098 }
4099 return result;
4100}
4101
4102VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties2(
4103 VkPhysicalDevice physicalDevice,
4104 uint32_t* pQueueFamilyPropertyCount,
4105 VkQueueFamilyProperties2* pQueueFamilyProperties) {
4106 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4107 bool skip = false;
4108 for (auto intercept : layer_data->object_dispatch) {
4109 auto lock = intercept->write_lock();
4110 skip |= intercept->PreCallValidateGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
4111 if (skip) return;
4112 }
4113 for (auto intercept : layer_data->object_dispatch) {
4114 auto lock = intercept->write_lock();
4115 intercept->PreCallRecordGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
4116 }
4117 DispatchGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
4118 for (auto intercept : layer_data->object_dispatch) {
4119 auto lock = intercept->write_lock();
4120 intercept->PostCallRecordGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
4121 }
4122}
4123
4124VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties2(
4125 VkPhysicalDevice physicalDevice,
4126 VkPhysicalDeviceMemoryProperties2* pMemoryProperties) {
4127 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4128 bool skip = false;
4129 for (auto intercept : layer_data->object_dispatch) {
4130 auto lock = intercept->write_lock();
4131 skip |= intercept->PreCallValidateGetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties);
4132 if (skip) return;
4133 }
4134 for (auto intercept : layer_data->object_dispatch) {
4135 auto lock = intercept->write_lock();
4136 intercept->PreCallRecordGetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties);
4137 }
4138 DispatchGetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties);
4139 for (auto intercept : layer_data->object_dispatch) {
4140 auto lock = intercept->write_lock();
4141 intercept->PostCallRecordGetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties);
4142 }
4143}
4144
4145VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties2(
4146 VkPhysicalDevice physicalDevice,
4147 const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
4148 uint32_t* pPropertyCount,
4149 VkSparseImageFormatProperties2* pProperties) {
4150 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4151 bool skip = false;
4152 for (auto intercept : layer_data->object_dispatch) {
4153 auto lock = intercept->write_lock();
4154 skip |= intercept->PreCallValidateGetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
4155 if (skip) return;
4156 }
4157 for (auto intercept : layer_data->object_dispatch) {
4158 auto lock = intercept->write_lock();
4159 intercept->PreCallRecordGetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
4160 }
4161 DispatchGetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
4162 for (auto intercept : layer_data->object_dispatch) {
4163 auto lock = intercept->write_lock();
4164 intercept->PostCallRecordGetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
4165 }
4166}
4167
4168VKAPI_ATTR void VKAPI_CALL TrimCommandPool(
4169 VkDevice device,
4170 VkCommandPool commandPool,
4171 VkCommandPoolTrimFlags flags) {
4172 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4173 bool skip = false;
4174 for (auto intercept : layer_data->object_dispatch) {
4175 auto lock = intercept->write_lock();
4176 skip |= intercept->PreCallValidateTrimCommandPool(device, commandPool, flags);
4177 if (skip) return;
4178 }
4179 for (auto intercept : layer_data->object_dispatch) {
4180 auto lock = intercept->write_lock();
4181 intercept->PreCallRecordTrimCommandPool(device, commandPool, flags);
4182 }
4183 DispatchTrimCommandPool(device, commandPool, flags);
4184 for (auto intercept : layer_data->object_dispatch) {
4185 auto lock = intercept->write_lock();
4186 intercept->PostCallRecordTrimCommandPool(device, commandPool, flags);
4187 }
4188}
4189
4190VKAPI_ATTR void VKAPI_CALL GetDeviceQueue2(
4191 VkDevice device,
4192 const VkDeviceQueueInfo2* pQueueInfo,
4193 VkQueue* pQueue) {
4194 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4195 bool skip = false;
4196 for (auto intercept : layer_data->object_dispatch) {
4197 auto lock = intercept->write_lock();
4198 skip |= intercept->PreCallValidateGetDeviceQueue2(device, pQueueInfo, pQueue);
4199 if (skip) return;
4200 }
4201 for (auto intercept : layer_data->object_dispatch) {
4202 auto lock = intercept->write_lock();
4203 intercept->PreCallRecordGetDeviceQueue2(device, pQueueInfo, pQueue);
4204 }
4205 DispatchGetDeviceQueue2(device, pQueueInfo, pQueue);
4206 for (auto intercept : layer_data->object_dispatch) {
4207 auto lock = intercept->write_lock();
4208 intercept->PostCallRecordGetDeviceQueue2(device, pQueueInfo, pQueue);
4209 }
4210}
4211
4212VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversion(
4213 VkDevice device,
4214 const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
4215 const VkAllocationCallbacks* pAllocator,
4216 VkSamplerYcbcrConversion* pYcbcrConversion) {
4217 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4218 bool skip = false;
4219 for (auto intercept : layer_data->object_dispatch) {
4220 auto lock = intercept->write_lock();
4221 skip |= intercept->PreCallValidateCreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion);
4222 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4223 }
4224 for (auto intercept : layer_data->object_dispatch) {
4225 auto lock = intercept->write_lock();
4226 intercept->PreCallRecordCreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion);
4227 }
4228 VkResult result = DispatchCreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion);
4229 for (auto intercept : layer_data->object_dispatch) {
4230 auto lock = intercept->write_lock();
4231 intercept->PostCallRecordCreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion, result);
4232 }
4233 return result;
4234}
4235
4236VKAPI_ATTR void VKAPI_CALL DestroySamplerYcbcrConversion(
4237 VkDevice device,
4238 VkSamplerYcbcrConversion ycbcrConversion,
4239 const VkAllocationCallbacks* pAllocator) {
4240 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4241 bool skip = false;
4242 for (auto intercept : layer_data->object_dispatch) {
4243 auto lock = intercept->write_lock();
4244 skip |= intercept->PreCallValidateDestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
4245 if (skip) return;
4246 }
4247 for (auto intercept : layer_data->object_dispatch) {
4248 auto lock = intercept->write_lock();
4249 intercept->PreCallRecordDestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
4250 }
4251 DispatchDestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
4252 for (auto intercept : layer_data->object_dispatch) {
4253 auto lock = intercept->write_lock();
4254 intercept->PostCallRecordDestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
4255 }
4256}
4257
4258VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplate(
4259 VkDevice device,
4260 const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
4261 const VkAllocationCallbacks* pAllocator,
4262 VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate) {
4263 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4264 bool skip = false;
4265 for (auto intercept : layer_data->object_dispatch) {
4266 auto lock = intercept->write_lock();
4267 skip |= intercept->PreCallValidateCreateDescriptorUpdateTemplate(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
4268 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4269 }
4270 for (auto intercept : layer_data->object_dispatch) {
4271 auto lock = intercept->write_lock();
4272 intercept->PreCallRecordCreateDescriptorUpdateTemplate(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
4273 }
4274 VkResult result = DispatchCreateDescriptorUpdateTemplate(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
4275 for (auto intercept : layer_data->object_dispatch) {
4276 auto lock = intercept->write_lock();
4277 intercept->PostCallRecordCreateDescriptorUpdateTemplate(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate, result);
4278 }
4279 return result;
4280}
4281
4282VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplate(
4283 VkDevice device,
4284 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
4285 const VkAllocationCallbacks* pAllocator) {
4286 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4287 bool skip = false;
4288 for (auto intercept : layer_data->object_dispatch) {
4289 auto lock = intercept->write_lock();
4290 skip |= intercept->PreCallValidateDestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator);
4291 if (skip) return;
4292 }
4293 for (auto intercept : layer_data->object_dispatch) {
4294 auto lock = intercept->write_lock();
4295 intercept->PreCallRecordDestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator);
4296 }
4297 DispatchDestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator);
4298 for (auto intercept : layer_data->object_dispatch) {
4299 auto lock = intercept->write_lock();
4300 intercept->PostCallRecordDestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator);
4301 }
4302}
4303
4304VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplate(
4305 VkDevice device,
4306 VkDescriptorSet descriptorSet,
4307 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
4308 const void* pData) {
4309 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4310 bool skip = false;
4311 for (auto intercept : layer_data->object_dispatch) {
4312 auto lock = intercept->write_lock();
4313 skip |= intercept->PreCallValidateUpdateDescriptorSetWithTemplate(device, descriptorSet, descriptorUpdateTemplate, pData);
4314 if (skip) return;
4315 }
4316 for (auto intercept : layer_data->object_dispatch) {
4317 auto lock = intercept->write_lock();
4318 intercept->PreCallRecordUpdateDescriptorSetWithTemplate(device, descriptorSet, descriptorUpdateTemplate, pData);
4319 }
4320 DispatchUpdateDescriptorSetWithTemplate(device, descriptorSet, descriptorUpdateTemplate, pData);
4321 for (auto intercept : layer_data->object_dispatch) {
4322 auto lock = intercept->write_lock();
4323 intercept->PostCallRecordUpdateDescriptorSetWithTemplate(device, descriptorSet, descriptorUpdateTemplate, pData);
4324 }
4325}
4326
4327VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferProperties(
4328 VkPhysicalDevice physicalDevice,
4329 const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
4330 VkExternalBufferProperties* pExternalBufferProperties) {
4331 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4332 bool skip = false;
4333 for (auto intercept : layer_data->object_dispatch) {
4334 auto lock = intercept->write_lock();
4335 skip |= intercept->PreCallValidateGetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
4336 if (skip) return;
4337 }
4338 for (auto intercept : layer_data->object_dispatch) {
4339 auto lock = intercept->write_lock();
4340 intercept->PreCallRecordGetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
4341 }
4342 DispatchGetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
4343 for (auto intercept : layer_data->object_dispatch) {
4344 auto lock = intercept->write_lock();
4345 intercept->PostCallRecordGetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
4346 }
4347}
4348
4349VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFenceProperties(
4350 VkPhysicalDevice physicalDevice,
4351 const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
4352 VkExternalFenceProperties* pExternalFenceProperties) {
4353 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4354 bool skip = false;
4355 for (auto intercept : layer_data->object_dispatch) {
4356 auto lock = intercept->write_lock();
4357 skip |= intercept->PreCallValidateGetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
4358 if (skip) return;
4359 }
4360 for (auto intercept : layer_data->object_dispatch) {
4361 auto lock = intercept->write_lock();
4362 intercept->PreCallRecordGetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
4363 }
4364 DispatchGetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
4365 for (auto intercept : layer_data->object_dispatch) {
4366 auto lock = intercept->write_lock();
4367 intercept->PostCallRecordGetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
4368 }
4369}
4370
4371VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphoreProperties(
4372 VkPhysicalDevice physicalDevice,
4373 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
4374 VkExternalSemaphoreProperties* pExternalSemaphoreProperties) {
4375 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4376 bool skip = false;
4377 for (auto intercept : layer_data->object_dispatch) {
4378 auto lock = intercept->write_lock();
4379 skip |= intercept->PreCallValidateGetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
4380 if (skip) return;
4381 }
4382 for (auto intercept : layer_data->object_dispatch) {
4383 auto lock = intercept->write_lock();
4384 intercept->PreCallRecordGetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
4385 }
4386 DispatchGetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
4387 for (auto intercept : layer_data->object_dispatch) {
4388 auto lock = intercept->write_lock();
4389 intercept->PostCallRecordGetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
4390 }
4391}
4392
4393VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupport(
4394 VkDevice device,
4395 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4396 VkDescriptorSetLayoutSupport* pSupport) {
4397 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4398 bool skip = false;
4399 for (auto intercept : layer_data->object_dispatch) {
4400 auto lock = intercept->write_lock();
4401 skip |= intercept->PreCallValidateGetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
4402 if (skip) return;
4403 }
4404 for (auto intercept : layer_data->object_dispatch) {
4405 auto lock = intercept->write_lock();
4406 intercept->PreCallRecordGetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
4407 }
4408 DispatchGetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
4409 for (auto intercept : layer_data->object_dispatch) {
4410 auto lock = intercept->write_lock();
4411 intercept->PostCallRecordGetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
4412 }
4413}
4414
4415
4416VKAPI_ATTR void VKAPI_CALL DestroySurfaceKHR(
4417 VkInstance instance,
4418 VkSurfaceKHR surface,
4419 const VkAllocationCallbacks* pAllocator) {
4420 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
4421 bool skip = false;
4422 for (auto intercept : layer_data->object_dispatch) {
4423 auto lock = intercept->write_lock();
4424 skip |= intercept->PreCallValidateDestroySurfaceKHR(instance, surface, pAllocator);
4425 if (skip) return;
4426 }
4427 for (auto intercept : layer_data->object_dispatch) {
4428 auto lock = intercept->write_lock();
4429 intercept->PreCallRecordDestroySurfaceKHR(instance, surface, pAllocator);
4430 }
4431 DispatchDestroySurfaceKHR(instance, surface, pAllocator);
4432 for (auto intercept : layer_data->object_dispatch) {
4433 auto lock = intercept->write_lock();
4434 intercept->PostCallRecordDestroySurfaceKHR(instance, surface, pAllocator);
4435 }
4436}
4437
4438VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceSupportKHR(
4439 VkPhysicalDevice physicalDevice,
4440 uint32_t queueFamilyIndex,
4441 VkSurfaceKHR surface,
4442 VkBool32* pSupported) {
4443 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4444 bool skip = false;
4445 for (auto intercept : layer_data->object_dispatch) {
4446 auto lock = intercept->write_lock();
4447 skip |= intercept->PreCallValidateGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
4448 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4449 }
4450 for (auto intercept : layer_data->object_dispatch) {
4451 auto lock = intercept->write_lock();
4452 intercept->PreCallRecordGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
4453 }
4454 VkResult result = DispatchGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
4455 for (auto intercept : layer_data->object_dispatch) {
4456 auto lock = intercept->write_lock();
4457 intercept->PostCallRecordGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported, result);
4458 }
4459 return result;
4460}
4461
4462VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilitiesKHR(
4463 VkPhysicalDevice physicalDevice,
4464 VkSurfaceKHR surface,
4465 VkSurfaceCapabilitiesKHR* pSurfaceCapabilities) {
4466 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4467 bool skip = false;
4468 for (auto intercept : layer_data->object_dispatch) {
4469 auto lock = intercept->write_lock();
4470 skip |= intercept->PreCallValidateGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
4471 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4472 }
4473 for (auto intercept : layer_data->object_dispatch) {
4474 auto lock = intercept->write_lock();
4475 intercept->PreCallRecordGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
4476 }
4477 VkResult result = DispatchGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
4478 for (auto intercept : layer_data->object_dispatch) {
4479 auto lock = intercept->write_lock();
4480 intercept->PostCallRecordGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities, result);
4481 }
4482 return result;
4483}
4484
4485VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormatsKHR(
4486 VkPhysicalDevice physicalDevice,
4487 VkSurfaceKHR surface,
4488 uint32_t* pSurfaceFormatCount,
4489 VkSurfaceFormatKHR* pSurfaceFormats) {
4490 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4491 bool skip = false;
4492 for (auto intercept : layer_data->object_dispatch) {
4493 auto lock = intercept->write_lock();
4494 skip |= intercept->PreCallValidateGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
4495 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4496 }
4497 for (auto intercept : layer_data->object_dispatch) {
4498 auto lock = intercept->write_lock();
4499 intercept->PreCallRecordGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
4500 }
4501 VkResult result = DispatchGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
4502 for (auto intercept : layer_data->object_dispatch) {
4503 auto lock = intercept->write_lock();
4504 intercept->PostCallRecordGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats, result);
4505 }
4506 return result;
4507}
4508
4509VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModesKHR(
4510 VkPhysicalDevice physicalDevice,
4511 VkSurfaceKHR surface,
4512 uint32_t* pPresentModeCount,
4513 VkPresentModeKHR* pPresentModes) {
4514 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4515 bool skip = false;
4516 for (auto intercept : layer_data->object_dispatch) {
4517 auto lock = intercept->write_lock();
4518 skip |= intercept->PreCallValidateGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
4519 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4520 }
4521 for (auto intercept : layer_data->object_dispatch) {
4522 auto lock = intercept->write_lock();
4523 intercept->PreCallRecordGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
4524 }
4525 VkResult result = DispatchGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
4526 for (auto intercept : layer_data->object_dispatch) {
4527 auto lock = intercept->write_lock();
4528 intercept->PostCallRecordGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes, result);
4529 }
4530 return result;
4531}
4532
4533
4534VKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(
4535 VkDevice device,
4536 const VkSwapchainCreateInfoKHR* pCreateInfo,
4537 const VkAllocationCallbacks* pAllocator,
4538 VkSwapchainKHR* pSwapchain) {
4539 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4540 bool skip = false;
4541 for (auto intercept : layer_data->object_dispatch) {
4542 auto lock = intercept->write_lock();
4543 skip |= intercept->PreCallValidateCreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
4544 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4545 }
4546 for (auto intercept : layer_data->object_dispatch) {
4547 auto lock = intercept->write_lock();
4548 intercept->PreCallRecordCreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
4549 }
4550 VkResult result = DispatchCreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
4551 for (auto intercept : layer_data->object_dispatch) {
4552 auto lock = intercept->write_lock();
4553 intercept->PostCallRecordCreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain, result);
4554 }
4555 return result;
4556}
4557
4558VKAPI_ATTR void VKAPI_CALL DestroySwapchainKHR(
4559 VkDevice device,
4560 VkSwapchainKHR swapchain,
4561 const VkAllocationCallbacks* pAllocator) {
4562 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4563 bool skip = false;
4564 for (auto intercept : layer_data->object_dispatch) {
4565 auto lock = intercept->write_lock();
4566 skip |= intercept->PreCallValidateDestroySwapchainKHR(device, swapchain, pAllocator);
4567 if (skip) return;
4568 }
4569 for (auto intercept : layer_data->object_dispatch) {
4570 auto lock = intercept->write_lock();
4571 intercept->PreCallRecordDestroySwapchainKHR(device, swapchain, pAllocator);
4572 }
4573 DispatchDestroySwapchainKHR(device, swapchain, pAllocator);
4574 for (auto intercept : layer_data->object_dispatch) {
4575 auto lock = intercept->write_lock();
4576 intercept->PostCallRecordDestroySwapchainKHR(device, swapchain, pAllocator);
4577 }
4578}
4579
4580VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainImagesKHR(
4581 VkDevice device,
4582 VkSwapchainKHR swapchain,
4583 uint32_t* pSwapchainImageCount,
4584 VkImage* pSwapchainImages) {
4585 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4586 bool skip = false;
4587 for (auto intercept : layer_data->object_dispatch) {
4588 auto lock = intercept->write_lock();
4589 skip |= intercept->PreCallValidateGetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
4590 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4591 }
4592 for (auto intercept : layer_data->object_dispatch) {
4593 auto lock = intercept->write_lock();
4594 intercept->PreCallRecordGetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
4595 }
4596 VkResult result = DispatchGetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
4597 for (auto intercept : layer_data->object_dispatch) {
4598 auto lock = intercept->write_lock();
4599 intercept->PostCallRecordGetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages, result);
4600 }
4601 return result;
4602}
4603
4604VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImageKHR(
4605 VkDevice device,
4606 VkSwapchainKHR swapchain,
4607 uint64_t timeout,
4608 VkSemaphore semaphore,
4609 VkFence fence,
4610 uint32_t* pImageIndex) {
4611 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4612 bool skip = false;
4613 for (auto intercept : layer_data->object_dispatch) {
4614 auto lock = intercept->write_lock();
4615 skip |= intercept->PreCallValidateAcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
4616 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4617 }
4618 for (auto intercept : layer_data->object_dispatch) {
4619 auto lock = intercept->write_lock();
4620 intercept->PreCallRecordAcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
4621 }
4622 VkResult result = DispatchAcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
4623 for (auto intercept : layer_data->object_dispatch) {
4624 auto lock = intercept->write_lock();
4625 intercept->PostCallRecordAcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex, result);
4626 }
4627 return result;
4628}
4629
4630VKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(
4631 VkQueue queue,
4632 const VkPresentInfoKHR* pPresentInfo) {
4633 auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
4634 bool skip = false;
4635 for (auto intercept : layer_data->object_dispatch) {
4636 auto lock = intercept->write_lock();
4637 skip |= intercept->PreCallValidateQueuePresentKHR(queue, pPresentInfo);
4638 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4639 }
4640 for (auto intercept : layer_data->object_dispatch) {
4641 auto lock = intercept->write_lock();
4642 intercept->PreCallRecordQueuePresentKHR(queue, pPresentInfo);
4643 }
4644 VkResult result = DispatchQueuePresentKHR(queue, pPresentInfo);
4645 for (auto intercept : layer_data->object_dispatch) {
4646 auto lock = intercept->write_lock();
4647 intercept->PostCallRecordQueuePresentKHR(queue, pPresentInfo, result);
4648 }
4649 return result;
4650}
4651
4652VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupPresentCapabilitiesKHR(
4653 VkDevice device,
4654 VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities) {
4655 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4656 bool skip = false;
4657 for (auto intercept : layer_data->object_dispatch) {
4658 auto lock = intercept->write_lock();
4659 skip |= intercept->PreCallValidateGetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities);
4660 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4661 }
4662 for (auto intercept : layer_data->object_dispatch) {
4663 auto lock = intercept->write_lock();
4664 intercept->PreCallRecordGetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities);
4665 }
4666 VkResult result = DispatchGetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities);
4667 for (auto intercept : layer_data->object_dispatch) {
4668 auto lock = intercept->write_lock();
4669 intercept->PostCallRecordGetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities, result);
4670 }
4671 return result;
4672}
4673
4674VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModesKHR(
4675 VkDevice device,
4676 VkSurfaceKHR surface,
4677 VkDeviceGroupPresentModeFlagsKHR* pModes) {
4678 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4679 bool skip = false;
4680 for (auto intercept : layer_data->object_dispatch) {
4681 auto lock = intercept->write_lock();
4682 skip |= intercept->PreCallValidateGetDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
4683 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4684 }
4685 for (auto intercept : layer_data->object_dispatch) {
4686 auto lock = intercept->write_lock();
4687 intercept->PreCallRecordGetDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
4688 }
4689 VkResult result = DispatchGetDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
4690 for (auto intercept : layer_data->object_dispatch) {
4691 auto lock = intercept->write_lock();
4692 intercept->PostCallRecordGetDeviceGroupSurfacePresentModesKHR(device, surface, pModes, result);
4693 }
4694 return result;
4695}
4696
4697VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDevicePresentRectanglesKHR(
4698 VkPhysicalDevice physicalDevice,
4699 VkSurfaceKHR surface,
4700 uint32_t* pRectCount,
4701 VkRect2D* pRects) {
4702 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4703 bool skip = false;
4704 for (auto intercept : layer_data->object_dispatch) {
4705 auto lock = intercept->write_lock();
4706 skip |= intercept->PreCallValidateGetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects);
4707 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4708 }
4709 for (auto intercept : layer_data->object_dispatch) {
4710 auto lock = intercept->write_lock();
4711 intercept->PreCallRecordGetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects);
4712 }
4713 VkResult result = DispatchGetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects);
4714 for (auto intercept : layer_data->object_dispatch) {
4715 auto lock = intercept->write_lock();
4716 intercept->PostCallRecordGetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects, result);
4717 }
4718 return result;
4719}
4720
4721VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImage2KHR(
4722 VkDevice device,
4723 const VkAcquireNextImageInfoKHR* pAcquireInfo,
4724 uint32_t* pImageIndex) {
4725 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4726 bool skip = false;
4727 for (auto intercept : layer_data->object_dispatch) {
4728 auto lock = intercept->write_lock();
4729 skip |= intercept->PreCallValidateAcquireNextImage2KHR(device, pAcquireInfo, pImageIndex);
4730 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4731 }
4732 for (auto intercept : layer_data->object_dispatch) {
4733 auto lock = intercept->write_lock();
4734 intercept->PreCallRecordAcquireNextImage2KHR(device, pAcquireInfo, pImageIndex);
4735 }
4736 VkResult result = DispatchAcquireNextImage2KHR(device, pAcquireInfo, pImageIndex);
4737 for (auto intercept : layer_data->object_dispatch) {
4738 auto lock = intercept->write_lock();
4739 intercept->PostCallRecordAcquireNextImage2KHR(device, pAcquireInfo, pImageIndex, result);
4740 }
4741 return result;
4742}
4743
4744
4745VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPropertiesKHR(
4746 VkPhysicalDevice physicalDevice,
4747 uint32_t* pPropertyCount,
4748 VkDisplayPropertiesKHR* pProperties) {
4749 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4750 bool skip = false;
4751 for (auto intercept : layer_data->object_dispatch) {
4752 auto lock = intercept->write_lock();
4753 skip |= intercept->PreCallValidateGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties);
4754 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4755 }
4756 for (auto intercept : layer_data->object_dispatch) {
4757 auto lock = intercept->write_lock();
4758 intercept->PreCallRecordGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties);
4759 }
4760 VkResult result = DispatchGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties);
4761 for (auto intercept : layer_data->object_dispatch) {
4762 auto lock = intercept->write_lock();
4763 intercept->PostCallRecordGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties, result);
4764 }
4765 return result;
4766}
4767
4768VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlanePropertiesKHR(
4769 VkPhysicalDevice physicalDevice,
4770 uint32_t* pPropertyCount,
4771 VkDisplayPlanePropertiesKHR* pProperties) {
4772 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4773 bool skip = false;
4774 for (auto intercept : layer_data->object_dispatch) {
4775 auto lock = intercept->write_lock();
4776 skip |= intercept->PreCallValidateGetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties);
4777 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4778 }
4779 for (auto intercept : layer_data->object_dispatch) {
4780 auto lock = intercept->write_lock();
4781 intercept->PreCallRecordGetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties);
4782 }
4783 VkResult result = DispatchGetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties);
4784 for (auto intercept : layer_data->object_dispatch) {
4785 auto lock = intercept->write_lock();
4786 intercept->PostCallRecordGetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties, result);
4787 }
4788 return result;
4789}
4790
4791VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneSupportedDisplaysKHR(
4792 VkPhysicalDevice physicalDevice,
4793 uint32_t planeIndex,
4794 uint32_t* pDisplayCount,
4795 VkDisplayKHR* pDisplays) {
4796 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4797 bool skip = false;
4798 for (auto intercept : layer_data->object_dispatch) {
4799 auto lock = intercept->write_lock();
4800 skip |= intercept->PreCallValidateGetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays);
4801 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4802 }
4803 for (auto intercept : layer_data->object_dispatch) {
4804 auto lock = intercept->write_lock();
4805 intercept->PreCallRecordGetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays);
4806 }
4807 VkResult result = DispatchGetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays);
4808 for (auto intercept : layer_data->object_dispatch) {
4809 auto lock = intercept->write_lock();
4810 intercept->PostCallRecordGetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays, result);
4811 }
4812 return result;
4813}
4814
4815VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModePropertiesKHR(
4816 VkPhysicalDevice physicalDevice,
4817 VkDisplayKHR display,
4818 uint32_t* pPropertyCount,
4819 VkDisplayModePropertiesKHR* pProperties) {
4820 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4821 bool skip = false;
4822 for (auto intercept : layer_data->object_dispatch) {
4823 auto lock = intercept->write_lock();
4824 skip |= intercept->PreCallValidateGetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties);
4825 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4826 }
4827 for (auto intercept : layer_data->object_dispatch) {
4828 auto lock = intercept->write_lock();
4829 intercept->PreCallRecordGetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties);
4830 }
4831 VkResult result = DispatchGetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties);
4832 for (auto intercept : layer_data->object_dispatch) {
4833 auto lock = intercept->write_lock();
4834 intercept->PostCallRecordGetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties, result);
4835 }
4836 return result;
4837}
4838
4839VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayModeKHR(
4840 VkPhysicalDevice physicalDevice,
4841 VkDisplayKHR display,
4842 const VkDisplayModeCreateInfoKHR* pCreateInfo,
4843 const VkAllocationCallbacks* pAllocator,
4844 VkDisplayModeKHR* pMode) {
4845 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4846 bool skip = false;
4847 for (auto intercept : layer_data->object_dispatch) {
4848 auto lock = intercept->write_lock();
4849 skip |= intercept->PreCallValidateCreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode);
4850 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4851 }
4852 for (auto intercept : layer_data->object_dispatch) {
4853 auto lock = intercept->write_lock();
4854 intercept->PreCallRecordCreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode);
4855 }
4856 VkResult result = DispatchCreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode);
4857 for (auto intercept : layer_data->object_dispatch) {
4858 auto lock = intercept->write_lock();
4859 intercept->PostCallRecordCreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode, result);
4860 }
4861 return result;
4862}
4863
4864VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilitiesKHR(
4865 VkPhysicalDevice physicalDevice,
4866 VkDisplayModeKHR mode,
4867 uint32_t planeIndex,
4868 VkDisplayPlaneCapabilitiesKHR* pCapabilities) {
4869 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4870 bool skip = false;
4871 for (auto intercept : layer_data->object_dispatch) {
4872 auto lock = intercept->write_lock();
4873 skip |= intercept->PreCallValidateGetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities);
4874 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4875 }
4876 for (auto intercept : layer_data->object_dispatch) {
4877 auto lock = intercept->write_lock();
4878 intercept->PreCallRecordGetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities);
4879 }
4880 VkResult result = DispatchGetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities);
4881 for (auto intercept : layer_data->object_dispatch) {
4882 auto lock = intercept->write_lock();
4883 intercept->PostCallRecordGetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities, result);
4884 }
4885 return result;
4886}
4887
4888VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayPlaneSurfaceKHR(
4889 VkInstance instance,
4890 const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
4891 const VkAllocationCallbacks* pAllocator,
4892 VkSurfaceKHR* pSurface) {
4893 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
4894 bool skip = false;
4895 for (auto intercept : layer_data->object_dispatch) {
4896 auto lock = intercept->write_lock();
4897 skip |= intercept->PreCallValidateCreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4898 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4899 }
4900 for (auto intercept : layer_data->object_dispatch) {
4901 auto lock = intercept->write_lock();
4902 intercept->PreCallRecordCreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4903 }
4904 VkResult result = DispatchCreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4905 for (auto intercept : layer_data->object_dispatch) {
4906 auto lock = intercept->write_lock();
4907 intercept->PostCallRecordCreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface, result);
4908 }
4909 return result;
4910}
4911
4912
4913VKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(
4914 VkDevice device,
4915 uint32_t swapchainCount,
4916 const VkSwapchainCreateInfoKHR* pCreateInfos,
4917 const VkAllocationCallbacks* pAllocator,
4918 VkSwapchainKHR* pSwapchains) {
4919 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4920 bool skip = false;
4921 for (auto intercept : layer_data->object_dispatch) {
4922 auto lock = intercept->write_lock();
4923 skip |= intercept->PreCallValidateCreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains);
4924 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4925 }
4926 for (auto intercept : layer_data->object_dispatch) {
4927 auto lock = intercept->write_lock();
4928 intercept->PreCallRecordCreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains);
4929 }
4930 VkResult result = DispatchCreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains);
4931 for (auto intercept : layer_data->object_dispatch) {
4932 auto lock = intercept->write_lock();
4933 intercept->PostCallRecordCreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains, result);
4934 }
4935 return result;
4936}
4937
4938#ifdef VK_USE_PLATFORM_XLIB_KHR
4939
4940VKAPI_ATTR VkResult VKAPI_CALL CreateXlibSurfaceKHR(
4941 VkInstance instance,
4942 const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
4943 const VkAllocationCallbacks* pAllocator,
4944 VkSurfaceKHR* pSurface) {
4945 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
4946 bool skip = false;
4947 for (auto intercept : layer_data->object_dispatch) {
4948 auto lock = intercept->write_lock();
4949 skip |= intercept->PreCallValidateCreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4950 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4951 }
4952 for (auto intercept : layer_data->object_dispatch) {
4953 auto lock = intercept->write_lock();
4954 intercept->PreCallRecordCreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4955 }
4956 VkResult result = DispatchCreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4957 for (auto intercept : layer_data->object_dispatch) {
4958 auto lock = intercept->write_lock();
4959 intercept->PostCallRecordCreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface, result);
4960 }
4961 return result;
4962}
4963
4964VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXlibPresentationSupportKHR(
4965 VkPhysicalDevice physicalDevice,
4966 uint32_t queueFamilyIndex,
4967 Display* dpy,
4968 VisualID visualID) {
4969 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4970 bool skip = false;
4971 for (auto intercept : layer_data->object_dispatch) {
4972 auto lock = intercept->write_lock();
4973 skip |= intercept->PreCallValidateGetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID);
4974 if (skip) return VK_FALSE;
4975 }
4976 for (auto intercept : layer_data->object_dispatch) {
4977 auto lock = intercept->write_lock();
4978 intercept->PreCallRecordGetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID);
4979 }
4980 VkBool32 result = DispatchGetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID);
4981 for (auto intercept : layer_data->object_dispatch) {
4982 auto lock = intercept->write_lock();
4983 intercept->PostCallRecordGetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID);
4984 }
4985 return result;
4986}
4987#endif // VK_USE_PLATFORM_XLIB_KHR
4988
4989#ifdef VK_USE_PLATFORM_XCB_KHR
4990
4991VKAPI_ATTR VkResult VKAPI_CALL CreateXcbSurfaceKHR(
4992 VkInstance instance,
4993 const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
4994 const VkAllocationCallbacks* pAllocator,
4995 VkSurfaceKHR* pSurface) {
4996 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
4997 bool skip = false;
4998 for (auto intercept : layer_data->object_dispatch) {
4999 auto lock = intercept->write_lock();
5000 skip |= intercept->PreCallValidateCreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5001 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5002 }
5003 for (auto intercept : layer_data->object_dispatch) {
5004 auto lock = intercept->write_lock();
5005 intercept->PreCallRecordCreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5006 }
5007 VkResult result = DispatchCreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5008 for (auto intercept : layer_data->object_dispatch) {
5009 auto lock = intercept->write_lock();
5010 intercept->PostCallRecordCreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface, result);
5011 }
5012 return result;
5013}
5014
5015VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXcbPresentationSupportKHR(
5016 VkPhysicalDevice physicalDevice,
5017 uint32_t queueFamilyIndex,
5018 xcb_connection_t* connection,
5019 xcb_visualid_t visual_id) {
5020 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5021 bool skip = false;
5022 for (auto intercept : layer_data->object_dispatch) {
5023 auto lock = intercept->write_lock();
5024 skip |= intercept->PreCallValidateGetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id);
5025 if (skip) return VK_FALSE;
5026 }
5027 for (auto intercept : layer_data->object_dispatch) {
5028 auto lock = intercept->write_lock();
5029 intercept->PreCallRecordGetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id);
5030 }
5031 VkBool32 result = DispatchGetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id);
5032 for (auto intercept : layer_data->object_dispatch) {
5033 auto lock = intercept->write_lock();
5034 intercept->PostCallRecordGetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id);
5035 }
5036 return result;
5037}
5038#endif // VK_USE_PLATFORM_XCB_KHR
5039
5040#ifdef VK_USE_PLATFORM_WAYLAND_KHR
5041
5042VKAPI_ATTR VkResult VKAPI_CALL CreateWaylandSurfaceKHR(
5043 VkInstance instance,
5044 const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
5045 const VkAllocationCallbacks* pAllocator,
5046 VkSurfaceKHR* pSurface) {
5047 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5048 bool skip = false;
5049 for (auto intercept : layer_data->object_dispatch) {
5050 auto lock = intercept->write_lock();
5051 skip |= intercept->PreCallValidateCreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5052 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5053 }
5054 for (auto intercept : layer_data->object_dispatch) {
5055 auto lock = intercept->write_lock();
5056 intercept->PreCallRecordCreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5057 }
5058 VkResult result = DispatchCreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5059 for (auto intercept : layer_data->object_dispatch) {
5060 auto lock = intercept->write_lock();
5061 intercept->PostCallRecordCreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface, result);
5062 }
5063 return result;
5064}
5065
5066VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWaylandPresentationSupportKHR(
5067 VkPhysicalDevice physicalDevice,
5068 uint32_t queueFamilyIndex,
5069 struct wl_display* display) {
5070 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5071 bool skip = false;
5072 for (auto intercept : layer_data->object_dispatch) {
5073 auto lock = intercept->write_lock();
5074 skip |= intercept->PreCallValidateGetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display);
5075 if (skip) return VK_FALSE;
5076 }
5077 for (auto intercept : layer_data->object_dispatch) {
5078 auto lock = intercept->write_lock();
5079 intercept->PreCallRecordGetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display);
5080 }
5081 VkBool32 result = DispatchGetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display);
5082 for (auto intercept : layer_data->object_dispatch) {
5083 auto lock = intercept->write_lock();
5084 intercept->PostCallRecordGetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display);
5085 }
5086 return result;
5087}
5088#endif // VK_USE_PLATFORM_WAYLAND_KHR
5089
5090#ifdef VK_USE_PLATFORM_ANDROID_KHR
5091
5092VKAPI_ATTR VkResult VKAPI_CALL CreateAndroidSurfaceKHR(
5093 VkInstance instance,
5094 const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
5095 const VkAllocationCallbacks* pAllocator,
5096 VkSurfaceKHR* pSurface) {
5097 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5098 bool skip = false;
5099 for (auto intercept : layer_data->object_dispatch) {
5100 auto lock = intercept->write_lock();
5101 skip |= intercept->PreCallValidateCreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5102 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5103 }
5104 for (auto intercept : layer_data->object_dispatch) {
5105 auto lock = intercept->write_lock();
5106 intercept->PreCallRecordCreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5107 }
5108 VkResult result = DispatchCreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5109 for (auto intercept : layer_data->object_dispatch) {
5110 auto lock = intercept->write_lock();
5111 intercept->PostCallRecordCreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface, result);
5112 }
5113 return result;
5114}
5115#endif // VK_USE_PLATFORM_ANDROID_KHR
5116
5117#ifdef VK_USE_PLATFORM_WIN32_KHR
5118
5119VKAPI_ATTR VkResult VKAPI_CALL CreateWin32SurfaceKHR(
5120 VkInstance instance,
5121 const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
5122 const VkAllocationCallbacks* pAllocator,
5123 VkSurfaceKHR* pSurface) {
5124 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5125 bool skip = false;
5126 for (auto intercept : layer_data->object_dispatch) {
5127 auto lock = intercept->write_lock();
5128 skip |= intercept->PreCallValidateCreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5129 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5130 }
5131 for (auto intercept : layer_data->object_dispatch) {
5132 auto lock = intercept->write_lock();
5133 intercept->PreCallRecordCreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5134 }
5135 VkResult result = DispatchCreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5136 for (auto intercept : layer_data->object_dispatch) {
5137 auto lock = intercept->write_lock();
5138 intercept->PostCallRecordCreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface, result);
5139 }
5140 return result;
5141}
5142
5143VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWin32PresentationSupportKHR(
5144 VkPhysicalDevice physicalDevice,
5145 uint32_t queueFamilyIndex) {
5146 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5147 bool skip = false;
5148 for (auto intercept : layer_data->object_dispatch) {
5149 auto lock = intercept->write_lock();
5150 skip |= intercept->PreCallValidateGetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex);
5151 if (skip) return VK_FALSE;
5152 }
5153 for (auto intercept : layer_data->object_dispatch) {
5154 auto lock = intercept->write_lock();
5155 intercept->PreCallRecordGetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex);
5156 }
5157 VkBool32 result = DispatchGetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex);
5158 for (auto intercept : layer_data->object_dispatch) {
5159 auto lock = intercept->write_lock();
5160 intercept->PostCallRecordGetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex);
5161 }
5162 return result;
5163}
5164#endif // VK_USE_PLATFORM_WIN32_KHR
5165
5166
5167
5168
5169VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2KHR(
5170 VkPhysicalDevice physicalDevice,
5171 VkPhysicalDeviceFeatures2* pFeatures) {
5172 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5173 bool skip = false;
5174 for (auto intercept : layer_data->object_dispatch) {
5175 auto lock = intercept->write_lock();
5176 skip |= intercept->PreCallValidateGetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
5177 if (skip) return;
5178 }
5179 for (auto intercept : layer_data->object_dispatch) {
5180 auto lock = intercept->write_lock();
5181 intercept->PreCallRecordGetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
5182 }
5183 DispatchGetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
5184 for (auto intercept : layer_data->object_dispatch) {
5185 auto lock = intercept->write_lock();
5186 intercept->PostCallRecordGetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
5187 }
5188}
5189
5190VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2KHR(
5191 VkPhysicalDevice physicalDevice,
5192 VkPhysicalDeviceProperties2* pProperties) {
5193 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5194 bool skip = false;
5195 for (auto intercept : layer_data->object_dispatch) {
5196 auto lock = intercept->write_lock();
5197 skip |= intercept->PreCallValidateGetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
5198 if (skip) return;
5199 }
5200 for (auto intercept : layer_data->object_dispatch) {
5201 auto lock = intercept->write_lock();
5202 intercept->PreCallRecordGetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
5203 }
5204 DispatchGetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
5205 for (auto intercept : layer_data->object_dispatch) {
5206 auto lock = intercept->write_lock();
5207 intercept->PostCallRecordGetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
5208 }
5209}
5210
5211VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2KHR(
5212 VkPhysicalDevice physicalDevice,
5213 VkFormat format,
5214 VkFormatProperties2* pFormatProperties) {
5215 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5216 bool skip = false;
5217 for (auto intercept : layer_data->object_dispatch) {
5218 auto lock = intercept->write_lock();
5219 skip |= intercept->PreCallValidateGetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
5220 if (skip) return;
5221 }
5222 for (auto intercept : layer_data->object_dispatch) {
5223 auto lock = intercept->write_lock();
5224 intercept->PreCallRecordGetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
5225 }
5226 DispatchGetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
5227 for (auto intercept : layer_data->object_dispatch) {
5228 auto lock = intercept->write_lock();
5229 intercept->PostCallRecordGetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
5230 }
5231}
5232
5233VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties2KHR(
5234 VkPhysicalDevice physicalDevice,
5235 const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
5236 VkImageFormatProperties2* pImageFormatProperties) {
5237 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5238 bool skip = false;
5239 for (auto intercept : layer_data->object_dispatch) {
5240 auto lock = intercept->write_lock();
5241 skip |= intercept->PreCallValidateGetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties);
5242 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5243 }
5244 for (auto intercept : layer_data->object_dispatch) {
5245 auto lock = intercept->write_lock();
5246 intercept->PreCallRecordGetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties);
5247 }
5248 VkResult result = DispatchGetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties);
5249 for (auto intercept : layer_data->object_dispatch) {
5250 auto lock = intercept->write_lock();
5251 intercept->PostCallRecordGetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties, result);
5252 }
5253 return result;
5254}
5255
5256VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties2KHR(
5257 VkPhysicalDevice physicalDevice,
5258 uint32_t* pQueueFamilyPropertyCount,
5259 VkQueueFamilyProperties2* pQueueFamilyProperties) {
5260 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5261 bool skip = false;
5262 for (auto intercept : layer_data->object_dispatch) {
5263 auto lock = intercept->write_lock();
5264 skip |= intercept->PreCallValidateGetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
5265 if (skip) return;
5266 }
5267 for (auto intercept : layer_data->object_dispatch) {
5268 auto lock = intercept->write_lock();
5269 intercept->PreCallRecordGetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
5270 }
5271 DispatchGetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
5272 for (auto intercept : layer_data->object_dispatch) {
5273 auto lock = intercept->write_lock();
5274 intercept->PostCallRecordGetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
5275 }
5276}
5277
5278VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties2KHR(
5279 VkPhysicalDevice physicalDevice,
5280 VkPhysicalDeviceMemoryProperties2* pMemoryProperties) {
5281 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5282 bool skip = false;
5283 for (auto intercept : layer_data->object_dispatch) {
5284 auto lock = intercept->write_lock();
5285 skip |= intercept->PreCallValidateGetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
5286 if (skip) return;
5287 }
5288 for (auto intercept : layer_data->object_dispatch) {
5289 auto lock = intercept->write_lock();
5290 intercept->PreCallRecordGetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
5291 }
5292 DispatchGetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
5293 for (auto intercept : layer_data->object_dispatch) {
5294 auto lock = intercept->write_lock();
5295 intercept->PostCallRecordGetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
5296 }
5297}
5298
5299VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties2KHR(
5300 VkPhysicalDevice physicalDevice,
5301 const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
5302 uint32_t* pPropertyCount,
5303 VkSparseImageFormatProperties2* pProperties) {
5304 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5305 bool skip = false;
5306 for (auto intercept : layer_data->object_dispatch) {
5307 auto lock = intercept->write_lock();
5308 skip |= intercept->PreCallValidateGetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
5309 if (skip) return;
5310 }
5311 for (auto intercept : layer_data->object_dispatch) {
5312 auto lock = intercept->write_lock();
5313 intercept->PreCallRecordGetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
5314 }
5315 DispatchGetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
5316 for (auto intercept : layer_data->object_dispatch) {
5317 auto lock = intercept->write_lock();
5318 intercept->PostCallRecordGetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
5319 }
5320}
5321
5322
5323VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeaturesKHR(
5324 VkDevice device,
5325 uint32_t heapIndex,
5326 uint32_t localDeviceIndex,
5327 uint32_t remoteDeviceIndex,
5328 VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) {
5329 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5330 bool skip = false;
5331 for (auto intercept : layer_data->object_dispatch) {
5332 auto lock = intercept->write_lock();
5333 skip |= intercept->PreCallValidateGetDeviceGroupPeerMemoryFeaturesKHR(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
5334 if (skip) return;
5335 }
5336 for (auto intercept : layer_data->object_dispatch) {
5337 auto lock = intercept->write_lock();
5338 intercept->PreCallRecordGetDeviceGroupPeerMemoryFeaturesKHR(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
5339 }
5340 DispatchGetDeviceGroupPeerMemoryFeaturesKHR(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
5341 for (auto intercept : layer_data->object_dispatch) {
5342 auto lock = intercept->write_lock();
5343 intercept->PostCallRecordGetDeviceGroupPeerMemoryFeaturesKHR(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
5344 }
5345}
5346
5347VKAPI_ATTR void VKAPI_CALL CmdSetDeviceMaskKHR(
5348 VkCommandBuffer commandBuffer,
5349 uint32_t deviceMask) {
5350 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5351 bool skip = false;
5352 for (auto intercept : layer_data->object_dispatch) {
5353 auto lock = intercept->write_lock();
5354 skip |= intercept->PreCallValidateCmdSetDeviceMaskKHR(commandBuffer, deviceMask);
5355 if (skip) return;
5356 }
5357 for (auto intercept : layer_data->object_dispatch) {
5358 auto lock = intercept->write_lock();
5359 intercept->PreCallRecordCmdSetDeviceMaskKHR(commandBuffer, deviceMask);
5360 }
5361 DispatchCmdSetDeviceMaskKHR(commandBuffer, deviceMask);
5362 for (auto intercept : layer_data->object_dispatch) {
5363 auto lock = intercept->write_lock();
5364 intercept->PostCallRecordCmdSetDeviceMaskKHR(commandBuffer, deviceMask);
5365 }
5366}
5367
5368VKAPI_ATTR void VKAPI_CALL CmdDispatchBaseKHR(
5369 VkCommandBuffer commandBuffer,
5370 uint32_t baseGroupX,
5371 uint32_t baseGroupY,
5372 uint32_t baseGroupZ,
5373 uint32_t groupCountX,
5374 uint32_t groupCountY,
5375 uint32_t groupCountZ) {
5376 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5377 bool skip = false;
5378 for (auto intercept : layer_data->object_dispatch) {
5379 auto lock = intercept->write_lock();
5380 skip |= intercept->PreCallValidateCmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
5381 if (skip) return;
5382 }
5383 for (auto intercept : layer_data->object_dispatch) {
5384 auto lock = intercept->write_lock();
5385 intercept->PreCallRecordCmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
5386 }
5387 DispatchCmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
5388 for (auto intercept : layer_data->object_dispatch) {
5389 auto lock = intercept->write_lock();
5390 intercept->PostCallRecordCmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
5391 }
5392}
5393
5394
5395
5396VKAPI_ATTR void VKAPI_CALL TrimCommandPoolKHR(
5397 VkDevice device,
5398 VkCommandPool commandPool,
5399 VkCommandPoolTrimFlags flags) {
5400 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5401 bool skip = false;
5402 for (auto intercept : layer_data->object_dispatch) {
5403 auto lock = intercept->write_lock();
5404 skip |= intercept->PreCallValidateTrimCommandPoolKHR(device, commandPool, flags);
5405 if (skip) return;
5406 }
5407 for (auto intercept : layer_data->object_dispatch) {
5408 auto lock = intercept->write_lock();
5409 intercept->PreCallRecordTrimCommandPoolKHR(device, commandPool, flags);
5410 }
5411 DispatchTrimCommandPoolKHR(device, commandPool, flags);
5412 for (auto intercept : layer_data->object_dispatch) {
5413 auto lock = intercept->write_lock();
5414 intercept->PostCallRecordTrimCommandPoolKHR(device, commandPool, flags);
5415 }
5416}
5417
5418
5419VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroupsKHR(
5420 VkInstance instance,
5421 uint32_t* pPhysicalDeviceGroupCount,
5422 VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties) {
5423 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5424 bool skip = false;
5425 for (auto intercept : layer_data->object_dispatch) {
5426 auto lock = intercept->write_lock();
5427 skip |= intercept->PreCallValidateEnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
5428 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5429 }
5430 for (auto intercept : layer_data->object_dispatch) {
5431 auto lock = intercept->write_lock();
5432 intercept->PreCallRecordEnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
5433 }
5434 VkResult result = DispatchEnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
5435 for (auto intercept : layer_data->object_dispatch) {
5436 auto lock = intercept->write_lock();
5437 intercept->PostCallRecordEnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties, result);
5438 }
5439 return result;
5440}
5441
5442
5443VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferPropertiesKHR(
5444 VkPhysicalDevice physicalDevice,
5445 const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
5446 VkExternalBufferProperties* pExternalBufferProperties) {
5447 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5448 bool skip = false;
5449 for (auto intercept : layer_data->object_dispatch) {
5450 auto lock = intercept->write_lock();
5451 skip |= intercept->PreCallValidateGetPhysicalDeviceExternalBufferPropertiesKHR(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
5452 if (skip) return;
5453 }
5454 for (auto intercept : layer_data->object_dispatch) {
5455 auto lock = intercept->write_lock();
5456 intercept->PreCallRecordGetPhysicalDeviceExternalBufferPropertiesKHR(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
5457 }
5458 DispatchGetPhysicalDeviceExternalBufferPropertiesKHR(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
5459 for (auto intercept : layer_data->object_dispatch) {
5460 auto lock = intercept->write_lock();
5461 intercept->PostCallRecordGetPhysicalDeviceExternalBufferPropertiesKHR(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
5462 }
5463}
5464
5465
5466#ifdef VK_USE_PLATFORM_WIN32_KHR
5467
5468VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleKHR(
5469 VkDevice device,
5470 const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo,
5471 HANDLE* pHandle) {
5472 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5473 bool skip = false;
5474 for (auto intercept : layer_data->object_dispatch) {
5475 auto lock = intercept->write_lock();
5476 skip |= intercept->PreCallValidateGetMemoryWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5477 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5478 }
5479 for (auto intercept : layer_data->object_dispatch) {
5480 auto lock = intercept->write_lock();
5481 intercept->PreCallRecordGetMemoryWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5482 }
5483 VkResult result = DispatchGetMemoryWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5484 for (auto intercept : layer_data->object_dispatch) {
5485 auto lock = intercept->write_lock();
5486 intercept->PostCallRecordGetMemoryWin32HandleKHR(device, pGetWin32HandleInfo, pHandle, result);
5487 }
5488 return result;
5489}
5490
5491VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandlePropertiesKHR(
5492 VkDevice device,
5493 VkExternalMemoryHandleTypeFlagBits handleType,
5494 HANDLE handle,
5495 VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties) {
5496 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5497 bool skip = false;
5498 for (auto intercept : layer_data->object_dispatch) {
5499 auto lock = intercept->write_lock();
5500 skip |= intercept->PreCallValidateGetMemoryWin32HandlePropertiesKHR(device, handleType, handle, pMemoryWin32HandleProperties);
5501 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5502 }
5503 for (auto intercept : layer_data->object_dispatch) {
5504 auto lock = intercept->write_lock();
5505 intercept->PreCallRecordGetMemoryWin32HandlePropertiesKHR(device, handleType, handle, pMemoryWin32HandleProperties);
5506 }
5507 VkResult result = DispatchGetMemoryWin32HandlePropertiesKHR(device, handleType, handle, pMemoryWin32HandleProperties);
5508 for (auto intercept : layer_data->object_dispatch) {
5509 auto lock = intercept->write_lock();
5510 intercept->PostCallRecordGetMemoryWin32HandlePropertiesKHR(device, handleType, handle, pMemoryWin32HandleProperties, result);
5511 }
5512 return result;
5513}
5514#endif // VK_USE_PLATFORM_WIN32_KHR
5515
5516
5517VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdKHR(
5518 VkDevice device,
5519 const VkMemoryGetFdInfoKHR* pGetFdInfo,
5520 int* pFd) {
5521 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5522 bool skip = false;
5523 for (auto intercept : layer_data->object_dispatch) {
5524 auto lock = intercept->write_lock();
5525 skip |= intercept->PreCallValidateGetMemoryFdKHR(device, pGetFdInfo, pFd);
5526 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5527 }
5528 for (auto intercept : layer_data->object_dispatch) {
5529 auto lock = intercept->write_lock();
5530 intercept->PreCallRecordGetMemoryFdKHR(device, pGetFdInfo, pFd);
5531 }
5532 VkResult result = DispatchGetMemoryFdKHR(device, pGetFdInfo, pFd);
5533 for (auto intercept : layer_data->object_dispatch) {
5534 auto lock = intercept->write_lock();
5535 intercept->PostCallRecordGetMemoryFdKHR(device, pGetFdInfo, pFd, result);
5536 }
5537 return result;
5538}
5539
5540VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdPropertiesKHR(
5541 VkDevice device,
5542 VkExternalMemoryHandleTypeFlagBits handleType,
5543 int fd,
5544 VkMemoryFdPropertiesKHR* pMemoryFdProperties) {
5545 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5546 bool skip = false;
5547 for (auto intercept : layer_data->object_dispatch) {
5548 auto lock = intercept->write_lock();
5549 skip |= intercept->PreCallValidateGetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties);
5550 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5551 }
5552 for (auto intercept : layer_data->object_dispatch) {
5553 auto lock = intercept->write_lock();
5554 intercept->PreCallRecordGetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties);
5555 }
5556 VkResult result = DispatchGetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties);
5557 for (auto intercept : layer_data->object_dispatch) {
5558 auto lock = intercept->write_lock();
5559 intercept->PostCallRecordGetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties, result);
5560 }
5561 return result;
5562}
5563
5564#ifdef VK_USE_PLATFORM_WIN32_KHR
5565#endif // VK_USE_PLATFORM_WIN32_KHR
5566
5567
5568VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphorePropertiesKHR(
5569 VkPhysicalDevice physicalDevice,
5570 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
5571 VkExternalSemaphoreProperties* pExternalSemaphoreProperties) {
5572 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5573 bool skip = false;
5574 for (auto intercept : layer_data->object_dispatch) {
5575 auto lock = intercept->write_lock();
5576 skip |= intercept->PreCallValidateGetPhysicalDeviceExternalSemaphorePropertiesKHR(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
5577 if (skip) return;
5578 }
5579 for (auto intercept : layer_data->object_dispatch) {
5580 auto lock = intercept->write_lock();
5581 intercept->PreCallRecordGetPhysicalDeviceExternalSemaphorePropertiesKHR(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
5582 }
5583 DispatchGetPhysicalDeviceExternalSemaphorePropertiesKHR(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
5584 for (auto intercept : layer_data->object_dispatch) {
5585 auto lock = intercept->write_lock();
5586 intercept->PostCallRecordGetPhysicalDeviceExternalSemaphorePropertiesKHR(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
5587 }
5588}
5589
5590
5591#ifdef VK_USE_PLATFORM_WIN32_KHR
5592
5593VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreWin32HandleKHR(
5594 VkDevice device,
5595 const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo) {
5596 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5597 bool skip = false;
5598 for (auto intercept : layer_data->object_dispatch) {
5599 auto lock = intercept->write_lock();
5600 skip |= intercept->PreCallValidateImportSemaphoreWin32HandleKHR(device, pImportSemaphoreWin32HandleInfo);
5601 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5602 }
5603 for (auto intercept : layer_data->object_dispatch) {
5604 auto lock = intercept->write_lock();
5605 intercept->PreCallRecordImportSemaphoreWin32HandleKHR(device, pImportSemaphoreWin32HandleInfo);
5606 }
5607 VkResult result = DispatchImportSemaphoreWin32HandleKHR(device, pImportSemaphoreWin32HandleInfo);
5608 for (auto intercept : layer_data->object_dispatch) {
5609 auto lock = intercept->write_lock();
5610 intercept->PostCallRecordImportSemaphoreWin32HandleKHR(device, pImportSemaphoreWin32HandleInfo, result);
5611 }
5612 return result;
5613}
5614
5615VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreWin32HandleKHR(
5616 VkDevice device,
5617 const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo,
5618 HANDLE* pHandle) {
5619 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5620 bool skip = false;
5621 for (auto intercept : layer_data->object_dispatch) {
5622 auto lock = intercept->write_lock();
5623 skip |= intercept->PreCallValidateGetSemaphoreWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5624 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5625 }
5626 for (auto intercept : layer_data->object_dispatch) {
5627 auto lock = intercept->write_lock();
5628 intercept->PreCallRecordGetSemaphoreWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5629 }
5630 VkResult result = DispatchGetSemaphoreWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5631 for (auto intercept : layer_data->object_dispatch) {
5632 auto lock = intercept->write_lock();
5633 intercept->PostCallRecordGetSemaphoreWin32HandleKHR(device, pGetWin32HandleInfo, pHandle, result);
5634 }
5635 return result;
5636}
5637#endif // VK_USE_PLATFORM_WIN32_KHR
5638
5639
5640VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreFdKHR(
5641 VkDevice device,
5642 const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) {
5643 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5644 bool skip = false;
5645 for (auto intercept : layer_data->object_dispatch) {
5646 auto lock = intercept->write_lock();
5647 skip |= intercept->PreCallValidateImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo);
5648 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5649 }
5650 for (auto intercept : layer_data->object_dispatch) {
5651 auto lock = intercept->write_lock();
5652 intercept->PreCallRecordImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo);
5653 }
5654 VkResult result = DispatchImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo);
5655 for (auto intercept : layer_data->object_dispatch) {
5656 auto lock = intercept->write_lock();
5657 intercept->PostCallRecordImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo, result);
5658 }
5659 return result;
5660}
5661
5662VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreFdKHR(
5663 VkDevice device,
5664 const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
5665 int* pFd) {
5666 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5667 bool skip = false;
5668 for (auto intercept : layer_data->object_dispatch) {
5669 auto lock = intercept->write_lock();
5670 skip |= intercept->PreCallValidateGetSemaphoreFdKHR(device, pGetFdInfo, pFd);
5671 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5672 }
5673 for (auto intercept : layer_data->object_dispatch) {
5674 auto lock = intercept->write_lock();
5675 intercept->PreCallRecordGetSemaphoreFdKHR(device, pGetFdInfo, pFd);
5676 }
5677 VkResult result = DispatchGetSemaphoreFdKHR(device, pGetFdInfo, pFd);
5678 for (auto intercept : layer_data->object_dispatch) {
5679 auto lock = intercept->write_lock();
5680 intercept->PostCallRecordGetSemaphoreFdKHR(device, pGetFdInfo, pFd, result);
5681 }
5682 return result;
5683}
5684
5685
5686VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetKHR(
5687 VkCommandBuffer commandBuffer,
5688 VkPipelineBindPoint pipelineBindPoint,
5689 VkPipelineLayout layout,
5690 uint32_t set,
5691 uint32_t descriptorWriteCount,
5692 const VkWriteDescriptorSet* pDescriptorWrites) {
5693 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5694 bool skip = false;
5695 for (auto intercept : layer_data->object_dispatch) {
5696 auto lock = intercept->write_lock();
5697 skip |= intercept->PreCallValidateCmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
5698 if (skip) return;
5699 }
5700 for (auto intercept : layer_data->object_dispatch) {
5701 auto lock = intercept->write_lock();
5702 intercept->PreCallRecordCmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
5703 }
5704 DispatchCmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
5705 for (auto intercept : layer_data->object_dispatch) {
5706 auto lock = intercept->write_lock();
5707 intercept->PostCallRecordCmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
5708 }
5709}
5710
5711VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplateKHR(
5712 VkCommandBuffer commandBuffer,
5713 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
5714 VkPipelineLayout layout,
5715 uint32_t set,
5716 const void* pData) {
5717 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5718 bool skip = false;
5719 for (auto intercept : layer_data->object_dispatch) {
5720 auto lock = intercept->write_lock();
5721 skip |= intercept->PreCallValidateCmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, pData);
5722 if (skip) return;
5723 }
5724 for (auto intercept : layer_data->object_dispatch) {
5725 auto lock = intercept->write_lock();
5726 intercept->PreCallRecordCmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, pData);
5727 }
5728 DispatchCmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, pData);
5729 for (auto intercept : layer_data->object_dispatch) {
5730 auto lock = intercept->write_lock();
5731 intercept->PostCallRecordCmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, pData);
5732 }
5733}
5734
5735
5736
5737
5738
5739VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplateKHR(
5740 VkDevice device,
5741 const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
5742 const VkAllocationCallbacks* pAllocator,
5743 VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate) {
5744 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5745 bool skip = false;
5746 for (auto intercept : layer_data->object_dispatch) {
5747 auto lock = intercept->write_lock();
5748 skip |= intercept->PreCallValidateCreateDescriptorUpdateTemplateKHR(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
5749 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5750 }
5751 for (auto intercept : layer_data->object_dispatch) {
5752 auto lock = intercept->write_lock();
5753 intercept->PreCallRecordCreateDescriptorUpdateTemplateKHR(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
5754 }
5755 VkResult result = DispatchCreateDescriptorUpdateTemplateKHR(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
5756 for (auto intercept : layer_data->object_dispatch) {
5757 auto lock = intercept->write_lock();
5758 intercept->PostCallRecordCreateDescriptorUpdateTemplateKHR(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate, result);
5759 }
5760 return result;
5761}
5762
5763VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplateKHR(
5764 VkDevice device,
5765 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
5766 const VkAllocationCallbacks* pAllocator) {
5767 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5768 bool skip = false;
5769 for (auto intercept : layer_data->object_dispatch) {
5770 auto lock = intercept->write_lock();
5771 skip |= intercept->PreCallValidateDestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator);
5772 if (skip) return;
5773 }
5774 for (auto intercept : layer_data->object_dispatch) {
5775 auto lock = intercept->write_lock();
5776 intercept->PreCallRecordDestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator);
5777 }
5778 DispatchDestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator);
5779 for (auto intercept : layer_data->object_dispatch) {
5780 auto lock = intercept->write_lock();
5781 intercept->PostCallRecordDestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator);
5782 }
5783}
5784
5785VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplateKHR(
5786 VkDevice device,
5787 VkDescriptorSet descriptorSet,
5788 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
5789 const void* pData) {
5790 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5791 bool skip = false;
5792 for (auto intercept : layer_data->object_dispatch) {
5793 auto lock = intercept->write_lock();
5794 skip |= intercept->PreCallValidateUpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, pData);
5795 if (skip) return;
5796 }
5797 for (auto intercept : layer_data->object_dispatch) {
5798 auto lock = intercept->write_lock();
5799 intercept->PreCallRecordUpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, pData);
5800 }
5801 DispatchUpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, pData);
5802 for (auto intercept : layer_data->object_dispatch) {
5803 auto lock = intercept->write_lock();
5804 intercept->PostCallRecordUpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, pData);
5805 }
5806}
5807
5808
5809VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass2KHR(
5810 VkDevice device,
5811 const VkRenderPassCreateInfo2KHR* pCreateInfo,
5812 const VkAllocationCallbacks* pAllocator,
5813 VkRenderPass* pRenderPass) {
5814 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5815 bool skip = false;
5816 for (auto intercept : layer_data->object_dispatch) {
5817 auto lock = intercept->write_lock();
5818 skip |= intercept->PreCallValidateCreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass);
5819 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5820 }
5821 for (auto intercept : layer_data->object_dispatch) {
5822 auto lock = intercept->write_lock();
5823 intercept->PreCallRecordCreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass);
5824 }
5825 VkResult result = DispatchCreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass);
5826 for (auto intercept : layer_data->object_dispatch) {
5827 auto lock = intercept->write_lock();
5828 intercept->PostCallRecordCreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass, result);
5829 }
5830 return result;
5831}
5832
5833VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass2KHR(
5834 VkCommandBuffer commandBuffer,
5835 const VkRenderPassBeginInfo* pRenderPassBegin,
5836 const VkSubpassBeginInfoKHR* pSubpassBeginInfo) {
5837 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5838 bool skip = false;
5839 for (auto intercept : layer_data->object_dispatch) {
5840 auto lock = intercept->write_lock();
5841 skip |= intercept->PreCallValidateCmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
5842 if (skip) return;
5843 }
5844 for (auto intercept : layer_data->object_dispatch) {
5845 auto lock = intercept->write_lock();
5846 intercept->PreCallRecordCmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
5847 }
5848 DispatchCmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
5849 for (auto intercept : layer_data->object_dispatch) {
5850 auto lock = intercept->write_lock();
5851 intercept->PostCallRecordCmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
5852 }
5853}
5854
5855VKAPI_ATTR void VKAPI_CALL CmdNextSubpass2KHR(
5856 VkCommandBuffer commandBuffer,
5857 const VkSubpassBeginInfoKHR* pSubpassBeginInfo,
5858 const VkSubpassEndInfoKHR* pSubpassEndInfo) {
5859 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5860 bool skip = false;
5861 for (auto intercept : layer_data->object_dispatch) {
5862 auto lock = intercept->write_lock();
5863 skip |= intercept->PreCallValidateCmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
5864 if (skip) return;
5865 }
5866 for (auto intercept : layer_data->object_dispatch) {
5867 auto lock = intercept->write_lock();
5868 intercept->PreCallRecordCmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
5869 }
5870 DispatchCmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
5871 for (auto intercept : layer_data->object_dispatch) {
5872 auto lock = intercept->write_lock();
5873 intercept->PostCallRecordCmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
5874 }
5875}
5876
5877VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass2KHR(
5878 VkCommandBuffer commandBuffer,
5879 const VkSubpassEndInfoKHR* pSubpassEndInfo) {
5880 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5881 bool skip = false;
5882 for (auto intercept : layer_data->object_dispatch) {
5883 auto lock = intercept->write_lock();
5884 skip |= intercept->PreCallValidateCmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo);
5885 if (skip) return;
5886 }
5887 for (auto intercept : layer_data->object_dispatch) {
5888 auto lock = intercept->write_lock();
5889 intercept->PreCallRecordCmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo);
5890 }
5891 DispatchCmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo);
5892 for (auto intercept : layer_data->object_dispatch) {
5893 auto lock = intercept->write_lock();
5894 intercept->PostCallRecordCmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo);
5895 }
5896}
5897
5898
5899VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainStatusKHR(
5900 VkDevice device,
5901 VkSwapchainKHR swapchain) {
5902 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5903 bool skip = false;
5904 for (auto intercept : layer_data->object_dispatch) {
5905 auto lock = intercept->write_lock();
5906 skip |= intercept->PreCallValidateGetSwapchainStatusKHR(device, swapchain);
5907 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5908 }
5909 for (auto intercept : layer_data->object_dispatch) {
5910 auto lock = intercept->write_lock();
5911 intercept->PreCallRecordGetSwapchainStatusKHR(device, swapchain);
5912 }
5913 VkResult result = DispatchGetSwapchainStatusKHR(device, swapchain);
5914 for (auto intercept : layer_data->object_dispatch) {
5915 auto lock = intercept->write_lock();
5916 intercept->PostCallRecordGetSwapchainStatusKHR(device, swapchain, result);
5917 }
5918 return result;
5919}
5920
5921
5922VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFencePropertiesKHR(
5923 VkPhysicalDevice physicalDevice,
5924 const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
5925 VkExternalFenceProperties* pExternalFenceProperties) {
5926 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5927 bool skip = false;
5928 for (auto intercept : layer_data->object_dispatch) {
5929 auto lock = intercept->write_lock();
5930 skip |= intercept->PreCallValidateGetPhysicalDeviceExternalFencePropertiesKHR(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
5931 if (skip) return;
5932 }
5933 for (auto intercept : layer_data->object_dispatch) {
5934 auto lock = intercept->write_lock();
5935 intercept->PreCallRecordGetPhysicalDeviceExternalFencePropertiesKHR(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
5936 }
5937 DispatchGetPhysicalDeviceExternalFencePropertiesKHR(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
5938 for (auto intercept : layer_data->object_dispatch) {
5939 auto lock = intercept->write_lock();
5940 intercept->PostCallRecordGetPhysicalDeviceExternalFencePropertiesKHR(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
5941 }
5942}
5943
5944
5945#ifdef VK_USE_PLATFORM_WIN32_KHR
5946
5947VKAPI_ATTR VkResult VKAPI_CALL ImportFenceWin32HandleKHR(
5948 VkDevice device,
5949 const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo) {
5950 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5951 bool skip = false;
5952 for (auto intercept : layer_data->object_dispatch) {
5953 auto lock = intercept->write_lock();
5954 skip |= intercept->PreCallValidateImportFenceWin32HandleKHR(device, pImportFenceWin32HandleInfo);
5955 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5956 }
5957 for (auto intercept : layer_data->object_dispatch) {
5958 auto lock = intercept->write_lock();
5959 intercept->PreCallRecordImportFenceWin32HandleKHR(device, pImportFenceWin32HandleInfo);
5960 }
5961 VkResult result = DispatchImportFenceWin32HandleKHR(device, pImportFenceWin32HandleInfo);
5962 for (auto intercept : layer_data->object_dispatch) {
5963 auto lock = intercept->write_lock();
5964 intercept->PostCallRecordImportFenceWin32HandleKHR(device, pImportFenceWin32HandleInfo, result);
5965 }
5966 return result;
5967}
5968
5969VKAPI_ATTR VkResult VKAPI_CALL GetFenceWin32HandleKHR(
5970 VkDevice device,
5971 const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo,
5972 HANDLE* pHandle) {
5973 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5974 bool skip = false;
5975 for (auto intercept : layer_data->object_dispatch) {
5976 auto lock = intercept->write_lock();
5977 skip |= intercept->PreCallValidateGetFenceWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5978 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5979 }
5980 for (auto intercept : layer_data->object_dispatch) {
5981 auto lock = intercept->write_lock();
5982 intercept->PreCallRecordGetFenceWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5983 }
5984 VkResult result = DispatchGetFenceWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5985 for (auto intercept : layer_data->object_dispatch) {
5986 auto lock = intercept->write_lock();
5987 intercept->PostCallRecordGetFenceWin32HandleKHR(device, pGetWin32HandleInfo, pHandle, result);
5988 }
5989 return result;
5990}
5991#endif // VK_USE_PLATFORM_WIN32_KHR
5992
5993
5994VKAPI_ATTR VkResult VKAPI_CALL ImportFenceFdKHR(
5995 VkDevice device,
5996 const VkImportFenceFdInfoKHR* pImportFenceFdInfo) {
5997 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5998 bool skip = false;
5999 for (auto intercept : layer_data->object_dispatch) {
6000 auto lock = intercept->write_lock();
6001 skip |= intercept->PreCallValidateImportFenceFdKHR(device, pImportFenceFdInfo);
6002 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6003 }
6004 for (auto intercept : layer_data->object_dispatch) {
6005 auto lock = intercept->write_lock();
6006 intercept->PreCallRecordImportFenceFdKHR(device, pImportFenceFdInfo);
6007 }
6008 VkResult result = DispatchImportFenceFdKHR(device, pImportFenceFdInfo);
6009 for (auto intercept : layer_data->object_dispatch) {
6010 auto lock = intercept->write_lock();
6011 intercept->PostCallRecordImportFenceFdKHR(device, pImportFenceFdInfo, result);
6012 }
6013 return result;
6014}
6015
6016VKAPI_ATTR VkResult VKAPI_CALL GetFenceFdKHR(
6017 VkDevice device,
6018 const VkFenceGetFdInfoKHR* pGetFdInfo,
6019 int* pFd) {
6020 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6021 bool skip = false;
6022 for (auto intercept : layer_data->object_dispatch) {
6023 auto lock = intercept->write_lock();
6024 skip |= intercept->PreCallValidateGetFenceFdKHR(device, pGetFdInfo, pFd);
6025 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6026 }
6027 for (auto intercept : layer_data->object_dispatch) {
6028 auto lock = intercept->write_lock();
6029 intercept->PreCallRecordGetFenceFdKHR(device, pGetFdInfo, pFd);
6030 }
6031 VkResult result = DispatchGetFenceFdKHR(device, pGetFdInfo, pFd);
6032 for (auto intercept : layer_data->object_dispatch) {
6033 auto lock = intercept->write_lock();
6034 intercept->PostCallRecordGetFenceFdKHR(device, pGetFdInfo, pFd, result);
6035 }
6036 return result;
6037}
6038
6039
6040
6041VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2KHR(
6042 VkPhysicalDevice physicalDevice,
6043 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
6044 VkSurfaceCapabilities2KHR* pSurfaceCapabilities) {
6045 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6046 bool skip = false;
6047 for (auto intercept : layer_data->object_dispatch) {
6048 auto lock = intercept->write_lock();
6049 skip |= intercept->PreCallValidateGetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, pSurfaceInfo, pSurfaceCapabilities);
6050 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6051 }
6052 for (auto intercept : layer_data->object_dispatch) {
6053 auto lock = intercept->write_lock();
6054 intercept->PreCallRecordGetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, pSurfaceInfo, pSurfaceCapabilities);
6055 }
6056 VkResult result = DispatchGetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, pSurfaceInfo, pSurfaceCapabilities);
6057 for (auto intercept : layer_data->object_dispatch) {
6058 auto lock = intercept->write_lock();
6059 intercept->PostCallRecordGetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, pSurfaceInfo, pSurfaceCapabilities, result);
6060 }
6061 return result;
6062}
6063
6064VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormats2KHR(
6065 VkPhysicalDevice physicalDevice,
6066 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
6067 uint32_t* pSurfaceFormatCount,
6068 VkSurfaceFormat2KHR* pSurfaceFormats) {
6069 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6070 bool skip = false;
6071 for (auto intercept : layer_data->object_dispatch) {
6072 auto lock = intercept->write_lock();
6073 skip |= intercept->PreCallValidateGetPhysicalDeviceSurfaceFormats2KHR(physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats);
6074 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6075 }
6076 for (auto intercept : layer_data->object_dispatch) {
6077 auto lock = intercept->write_lock();
6078 intercept->PreCallRecordGetPhysicalDeviceSurfaceFormats2KHR(physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats);
6079 }
6080 VkResult result = DispatchGetPhysicalDeviceSurfaceFormats2KHR(physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats);
6081 for (auto intercept : layer_data->object_dispatch) {
6082 auto lock = intercept->write_lock();
6083 intercept->PostCallRecordGetPhysicalDeviceSurfaceFormats2KHR(physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats, result);
6084 }
6085 return result;
6086}
6087
6088
6089
6090VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayProperties2KHR(
6091 VkPhysicalDevice physicalDevice,
6092 uint32_t* pPropertyCount,
6093 VkDisplayProperties2KHR* pProperties) {
6094 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6095 bool skip = false;
6096 for (auto intercept : layer_data->object_dispatch) {
6097 auto lock = intercept->write_lock();
6098 skip |= intercept->PreCallValidateGetPhysicalDeviceDisplayProperties2KHR(physicalDevice, pPropertyCount, pProperties);
6099 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6100 }
6101 for (auto intercept : layer_data->object_dispatch) {
6102 auto lock = intercept->write_lock();
6103 intercept->PreCallRecordGetPhysicalDeviceDisplayProperties2KHR(physicalDevice, pPropertyCount, pProperties);
6104 }
6105 VkResult result = DispatchGetPhysicalDeviceDisplayProperties2KHR(physicalDevice, pPropertyCount, pProperties);
6106 for (auto intercept : layer_data->object_dispatch) {
6107 auto lock = intercept->write_lock();
6108 intercept->PostCallRecordGetPhysicalDeviceDisplayProperties2KHR(physicalDevice, pPropertyCount, pProperties, result);
6109 }
6110 return result;
6111}
6112
6113VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlaneProperties2KHR(
6114 VkPhysicalDevice physicalDevice,
6115 uint32_t* pPropertyCount,
6116 VkDisplayPlaneProperties2KHR* pProperties) {
6117 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6118 bool skip = false;
6119 for (auto intercept : layer_data->object_dispatch) {
6120 auto lock = intercept->write_lock();
6121 skip |= intercept->PreCallValidateGetPhysicalDeviceDisplayPlaneProperties2KHR(physicalDevice, pPropertyCount, pProperties);
6122 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6123 }
6124 for (auto intercept : layer_data->object_dispatch) {
6125 auto lock = intercept->write_lock();
6126 intercept->PreCallRecordGetPhysicalDeviceDisplayPlaneProperties2KHR(physicalDevice, pPropertyCount, pProperties);
6127 }
6128 VkResult result = DispatchGetPhysicalDeviceDisplayPlaneProperties2KHR(physicalDevice, pPropertyCount, pProperties);
6129 for (auto intercept : layer_data->object_dispatch) {
6130 auto lock = intercept->write_lock();
6131 intercept->PostCallRecordGetPhysicalDeviceDisplayPlaneProperties2KHR(physicalDevice, pPropertyCount, pProperties, result);
6132 }
6133 return result;
6134}
6135
6136VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModeProperties2KHR(
6137 VkPhysicalDevice physicalDevice,
6138 VkDisplayKHR display,
6139 uint32_t* pPropertyCount,
6140 VkDisplayModeProperties2KHR* pProperties) {
6141 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6142 bool skip = false;
6143 for (auto intercept : layer_data->object_dispatch) {
6144 auto lock = intercept->write_lock();
6145 skip |= intercept->PreCallValidateGetDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount, pProperties);
6146 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6147 }
6148 for (auto intercept : layer_data->object_dispatch) {
6149 auto lock = intercept->write_lock();
6150 intercept->PreCallRecordGetDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount, pProperties);
6151 }
6152 VkResult result = DispatchGetDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount, pProperties);
6153 for (auto intercept : layer_data->object_dispatch) {
6154 auto lock = intercept->write_lock();
6155 intercept->PostCallRecordGetDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount, pProperties, result);
6156 }
6157 return result;
6158}
6159
6160VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilities2KHR(
6161 VkPhysicalDevice physicalDevice,
6162 const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo,
6163 VkDisplayPlaneCapabilities2KHR* pCapabilities) {
6164 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6165 bool skip = false;
6166 for (auto intercept : layer_data->object_dispatch) {
6167 auto lock = intercept->write_lock();
6168 skip |= intercept->PreCallValidateGetDisplayPlaneCapabilities2KHR(physicalDevice, pDisplayPlaneInfo, pCapabilities);
6169 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6170 }
6171 for (auto intercept : layer_data->object_dispatch) {
6172 auto lock = intercept->write_lock();
6173 intercept->PreCallRecordGetDisplayPlaneCapabilities2KHR(physicalDevice, pDisplayPlaneInfo, pCapabilities);
6174 }
6175 VkResult result = DispatchGetDisplayPlaneCapabilities2KHR(physicalDevice, pDisplayPlaneInfo, pCapabilities);
6176 for (auto intercept : layer_data->object_dispatch) {
6177 auto lock = intercept->write_lock();
6178 intercept->PostCallRecordGetDisplayPlaneCapabilities2KHR(physicalDevice, pDisplayPlaneInfo, pCapabilities, result);
6179 }
6180 return result;
6181}
6182
6183
6184
6185
6186
6187VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2KHR(
6188 VkDevice device,
6189 const VkImageMemoryRequirementsInfo2* pInfo,
6190 VkMemoryRequirements2* pMemoryRequirements) {
6191 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6192 bool skip = false;
6193 for (auto intercept : layer_data->object_dispatch) {
6194 auto lock = intercept->write_lock();
6195 skip |= intercept->PreCallValidateGetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6196 if (skip) return;
6197 }
6198 for (auto intercept : layer_data->object_dispatch) {
6199 auto lock = intercept->write_lock();
6200 intercept->PreCallRecordGetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6201 }
6202 DispatchGetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6203 for (auto intercept : layer_data->object_dispatch) {
6204 auto lock = intercept->write_lock();
6205 intercept->PostCallRecordGetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6206 }
6207}
6208
6209VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements2KHR(
6210 VkDevice device,
6211 const VkBufferMemoryRequirementsInfo2* pInfo,
6212 VkMemoryRequirements2* pMemoryRequirements) {
6213 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6214 bool skip = false;
6215 for (auto intercept : layer_data->object_dispatch) {
6216 auto lock = intercept->write_lock();
6217 skip |= intercept->PreCallValidateGetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6218 if (skip) return;
6219 }
6220 for (auto intercept : layer_data->object_dispatch) {
6221 auto lock = intercept->write_lock();
6222 intercept->PreCallRecordGetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6223 }
6224 DispatchGetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6225 for (auto intercept : layer_data->object_dispatch) {
6226 auto lock = intercept->write_lock();
6227 intercept->PostCallRecordGetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6228 }
6229}
6230
6231VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements2KHR(
6232 VkDevice device,
6233 const VkImageSparseMemoryRequirementsInfo2* pInfo,
6234 uint32_t* pSparseMemoryRequirementCount,
6235 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) {
6236 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6237 bool skip = false;
6238 for (auto intercept : layer_data->object_dispatch) {
6239 auto lock = intercept->write_lock();
6240 skip |= intercept->PreCallValidateGetImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
6241 if (skip) return;
6242 }
6243 for (auto intercept : layer_data->object_dispatch) {
6244 auto lock = intercept->write_lock();
6245 intercept->PreCallRecordGetImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
6246 }
6247 DispatchGetImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
6248 for (auto intercept : layer_data->object_dispatch) {
6249 auto lock = intercept->write_lock();
6250 intercept->PostCallRecordGetImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
6251 }
6252}
6253
6254
6255
6256VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversionKHR(
6257 VkDevice device,
6258 const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
6259 const VkAllocationCallbacks* pAllocator,
6260 VkSamplerYcbcrConversion* pYcbcrConversion) {
6261 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6262 bool skip = false;
6263 for (auto intercept : layer_data->object_dispatch) {
6264 auto lock = intercept->write_lock();
6265 skip |= intercept->PreCallValidateCreateSamplerYcbcrConversionKHR(device, pCreateInfo, pAllocator, pYcbcrConversion);
6266 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6267 }
6268 for (auto intercept : layer_data->object_dispatch) {
6269 auto lock = intercept->write_lock();
6270 intercept->PreCallRecordCreateSamplerYcbcrConversionKHR(device, pCreateInfo, pAllocator, pYcbcrConversion);
6271 }
6272 VkResult result = DispatchCreateSamplerYcbcrConversionKHR(device, pCreateInfo, pAllocator, pYcbcrConversion);
6273 for (auto intercept : layer_data->object_dispatch) {
6274 auto lock = intercept->write_lock();
6275 intercept->PostCallRecordCreateSamplerYcbcrConversionKHR(device, pCreateInfo, pAllocator, pYcbcrConversion, result);
6276 }
6277 return result;
6278}
6279
6280VKAPI_ATTR void VKAPI_CALL DestroySamplerYcbcrConversionKHR(
6281 VkDevice device,
6282 VkSamplerYcbcrConversion ycbcrConversion,
6283 const VkAllocationCallbacks* pAllocator) {
6284 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6285 bool skip = false;
6286 for (auto intercept : layer_data->object_dispatch) {
6287 auto lock = intercept->write_lock();
6288 skip |= intercept->PreCallValidateDestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator);
6289 if (skip) return;
6290 }
6291 for (auto intercept : layer_data->object_dispatch) {
6292 auto lock = intercept->write_lock();
6293 intercept->PreCallRecordDestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator);
6294 }
6295 DispatchDestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator);
6296 for (auto intercept : layer_data->object_dispatch) {
6297 auto lock = intercept->write_lock();
6298 intercept->PostCallRecordDestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator);
6299 }
6300}
6301
6302
6303VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2KHR(
6304 VkDevice device,
6305 uint32_t bindInfoCount,
6306 const VkBindBufferMemoryInfo* pBindInfos) {
6307 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6308 bool skip = false;
6309 for (auto intercept : layer_data->object_dispatch) {
6310 auto lock = intercept->write_lock();
6311 skip |= intercept->PreCallValidateBindBufferMemory2KHR(device, bindInfoCount, pBindInfos);
6312 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6313 }
6314 for (auto intercept : layer_data->object_dispatch) {
6315 auto lock = intercept->write_lock();
6316 intercept->PreCallRecordBindBufferMemory2KHR(device, bindInfoCount, pBindInfos);
6317 }
6318 VkResult result = DispatchBindBufferMemory2KHR(device, bindInfoCount, pBindInfos);
6319 for (auto intercept : layer_data->object_dispatch) {
6320 auto lock = intercept->write_lock();
6321 intercept->PostCallRecordBindBufferMemory2KHR(device, bindInfoCount, pBindInfos, result);
6322 }
6323 return result;
6324}
6325
6326VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory2KHR(
6327 VkDevice device,
6328 uint32_t bindInfoCount,
6329 const VkBindImageMemoryInfo* pBindInfos) {
6330 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6331 bool skip = false;
6332 for (auto intercept : layer_data->object_dispatch) {
6333 auto lock = intercept->write_lock();
6334 skip |= intercept->PreCallValidateBindImageMemory2KHR(device, bindInfoCount, pBindInfos);
6335 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6336 }
6337 for (auto intercept : layer_data->object_dispatch) {
6338 auto lock = intercept->write_lock();
6339 intercept->PreCallRecordBindImageMemory2KHR(device, bindInfoCount, pBindInfos);
6340 }
6341 VkResult result = DispatchBindImageMemory2KHR(device, bindInfoCount, pBindInfos);
6342 for (auto intercept : layer_data->object_dispatch) {
6343 auto lock = intercept->write_lock();
6344 intercept->PostCallRecordBindImageMemory2KHR(device, bindInfoCount, pBindInfos, result);
6345 }
6346 return result;
6347}
6348
6349
6350VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupportKHR(
6351 VkDevice device,
6352 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
6353 VkDescriptorSetLayoutSupport* pSupport) {
6354 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6355 bool skip = false;
6356 for (auto intercept : layer_data->object_dispatch) {
6357 auto lock = intercept->write_lock();
6358 skip |= intercept->PreCallValidateGetDescriptorSetLayoutSupportKHR(device, pCreateInfo, pSupport);
6359 if (skip) return;
6360 }
6361 for (auto intercept : layer_data->object_dispatch) {
6362 auto lock = intercept->write_lock();
6363 intercept->PreCallRecordGetDescriptorSetLayoutSupportKHR(device, pCreateInfo, pSupport);
6364 }
6365 DispatchGetDescriptorSetLayoutSupportKHR(device, pCreateInfo, pSupport);
6366 for (auto intercept : layer_data->object_dispatch) {
6367 auto lock = intercept->write_lock();
6368 intercept->PostCallRecordGetDescriptorSetLayoutSupportKHR(device, pCreateInfo, pSupport);
6369 }
6370}
6371
6372
6373VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountKHR(
6374 VkCommandBuffer commandBuffer,
6375 VkBuffer buffer,
6376 VkDeviceSize offset,
6377 VkBuffer countBuffer,
6378 VkDeviceSize countBufferOffset,
6379 uint32_t maxDrawCount,
6380 uint32_t stride) {
6381 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6382 bool skip = false;
6383 for (auto intercept : layer_data->object_dispatch) {
6384 auto lock = intercept->write_lock();
6385 skip |= intercept->PreCallValidateCmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6386 if (skip) return;
6387 }
6388 for (auto intercept : layer_data->object_dispatch) {
6389 auto lock = intercept->write_lock();
6390 intercept->PreCallRecordCmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6391 }
6392 DispatchCmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6393 for (auto intercept : layer_data->object_dispatch) {
6394 auto lock = intercept->write_lock();
6395 intercept->PostCallRecordCmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6396 }
6397}
6398
6399VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountKHR(
6400 VkCommandBuffer commandBuffer,
6401 VkBuffer buffer,
6402 VkDeviceSize offset,
6403 VkBuffer countBuffer,
6404 VkDeviceSize countBufferOffset,
6405 uint32_t maxDrawCount,
6406 uint32_t stride) {
6407 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6408 bool skip = false;
6409 for (auto intercept : layer_data->object_dispatch) {
6410 auto lock = intercept->write_lock();
6411 skip |= intercept->PreCallValidateCmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6412 if (skip) return;
6413 }
6414 for (auto intercept : layer_data->object_dispatch) {
6415 auto lock = intercept->write_lock();
6416 intercept->PreCallRecordCmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6417 }
6418 DispatchCmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6419 for (auto intercept : layer_data->object_dispatch) {
6420 auto lock = intercept->write_lock();
6421 intercept->PostCallRecordCmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6422 }
6423}
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435VKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(
6436 VkInstance instance,
6437 const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
6438 const VkAllocationCallbacks* pAllocator,
6439 VkDebugReportCallbackEXT* pCallback) {
6440 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
6441 bool skip = false;
6442 for (auto intercept : layer_data->object_dispatch) {
6443 auto lock = intercept->write_lock();
6444 skip |= intercept->PreCallValidateCreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback);
6445 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6446 }
6447 for (auto intercept : layer_data->object_dispatch) {
6448 auto lock = intercept->write_lock();
6449 intercept->PreCallRecordCreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback);
6450 }
6451 VkResult result = DispatchCreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback);
6452 layer_create_report_callback(layer_data->report_data, false, pCreateInfo, pAllocator, pCallback);
6453 for (auto intercept : layer_data->object_dispatch) {
6454 auto lock = intercept->write_lock();
6455 intercept->PostCallRecordCreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback, result);
6456 }
6457 return result;
6458}
6459
6460VKAPI_ATTR void VKAPI_CALL DestroyDebugReportCallbackEXT(
6461 VkInstance instance,
6462 VkDebugReportCallbackEXT callback,
6463 const VkAllocationCallbacks* pAllocator) {
6464 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
6465 bool skip = false;
6466 for (auto intercept : layer_data->object_dispatch) {
6467 auto lock = intercept->write_lock();
6468 skip |= intercept->PreCallValidateDestroyDebugReportCallbackEXT(instance, callback, pAllocator);
6469 if (skip) return;
6470 }
6471 for (auto intercept : layer_data->object_dispatch) {
6472 auto lock = intercept->write_lock();
6473 intercept->PreCallRecordDestroyDebugReportCallbackEXT(instance, callback, pAllocator);
6474 }
6475 DispatchDestroyDebugReportCallbackEXT(instance, callback, pAllocator);
6476 layer_destroy_report_callback(layer_data->report_data, callback, pAllocator);
6477 for (auto intercept : layer_data->object_dispatch) {
6478 auto lock = intercept->write_lock();
6479 intercept->PostCallRecordDestroyDebugReportCallbackEXT(instance, callback, pAllocator);
6480 }
6481}
6482
6483VKAPI_ATTR void VKAPI_CALL DebugReportMessageEXT(
6484 VkInstance instance,
6485 VkDebugReportFlagsEXT flags,
6486 VkDebugReportObjectTypeEXT objectType,
6487 uint64_t object,
6488 size_t location,
6489 int32_t messageCode,
6490 const char* pLayerPrefix,
6491 const char* pMessage) {
6492 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
6493 bool skip = false;
6494 for (auto intercept : layer_data->object_dispatch) {
6495 auto lock = intercept->write_lock();
6496 skip |= intercept->PreCallValidateDebugReportMessageEXT(instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage);
6497 if (skip) return;
6498 }
6499 for (auto intercept : layer_data->object_dispatch) {
6500 auto lock = intercept->write_lock();
6501 intercept->PreCallRecordDebugReportMessageEXT(instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage);
6502 }
6503 DispatchDebugReportMessageEXT(instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage);
6504 for (auto intercept : layer_data->object_dispatch) {
6505 auto lock = intercept->write_lock();
6506 intercept->PostCallRecordDebugReportMessageEXT(instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage);
6507 }
6508}
6509
6510
6511
6512
6513
6514
6515
6516
6517VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(
6518 VkDevice device,
6519 const VkDebugMarkerObjectTagInfoEXT* pTagInfo) {
6520 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6521 bool skip = false;
6522 for (auto intercept : layer_data->object_dispatch) {
6523 auto lock = intercept->write_lock();
6524 skip |= intercept->PreCallValidateDebugMarkerSetObjectTagEXT(device, pTagInfo);
6525 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6526 }
6527 for (auto intercept : layer_data->object_dispatch) {
6528 auto lock = intercept->write_lock();
6529 intercept->PreCallRecordDebugMarkerSetObjectTagEXT(device, pTagInfo);
6530 }
6531 VkResult result = DispatchDebugMarkerSetObjectTagEXT(device, pTagInfo);
6532 for (auto intercept : layer_data->object_dispatch) {
6533 auto lock = intercept->write_lock();
6534 intercept->PostCallRecordDebugMarkerSetObjectTagEXT(device, pTagInfo, result);
6535 }
6536 return result;
6537}
6538
6539VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(
6540 VkDevice device,
6541 const VkDebugMarkerObjectNameInfoEXT* pNameInfo) {
6542 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6543 bool skip = false;
6544 for (auto intercept : layer_data->object_dispatch) {
6545 auto lock = intercept->write_lock();
6546 skip |= intercept->PreCallValidateDebugMarkerSetObjectNameEXT(device, pNameInfo);
6547 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6548 }
6549 for (auto intercept : layer_data->object_dispatch) {
6550 auto lock = intercept->write_lock();
6551 intercept->PreCallRecordDebugMarkerSetObjectNameEXT(device, pNameInfo);
6552 }
6553 layer_data->report_data->DebugReportSetMarkerObjectName(pNameInfo);
6554 VkResult result = DispatchDebugMarkerSetObjectNameEXT(device, pNameInfo);
6555 for (auto intercept : layer_data->object_dispatch) {
6556 auto lock = intercept->write_lock();
6557 intercept->PostCallRecordDebugMarkerSetObjectNameEXT(device, pNameInfo, result);
6558 }
6559 return result;
6560}
6561
6562VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerBeginEXT(
6563 VkCommandBuffer commandBuffer,
6564 const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) {
6565 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6566 bool skip = false;
6567 for (auto intercept : layer_data->object_dispatch) {
6568 auto lock = intercept->write_lock();
6569 skip |= intercept->PreCallValidateCmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
6570 if (skip) return;
6571 }
6572 for (auto intercept : layer_data->object_dispatch) {
6573 auto lock = intercept->write_lock();
6574 intercept->PreCallRecordCmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
6575 }
6576 DispatchCmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
6577 for (auto intercept : layer_data->object_dispatch) {
6578 auto lock = intercept->write_lock();
6579 intercept->PostCallRecordCmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
6580 }
6581}
6582
6583VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerEndEXT(
6584 VkCommandBuffer commandBuffer) {
6585 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6586 bool skip = false;
6587 for (auto intercept : layer_data->object_dispatch) {
6588 auto lock = intercept->write_lock();
6589 skip |= intercept->PreCallValidateCmdDebugMarkerEndEXT(commandBuffer);
6590 if (skip) return;
6591 }
6592 for (auto intercept : layer_data->object_dispatch) {
6593 auto lock = intercept->write_lock();
6594 intercept->PreCallRecordCmdDebugMarkerEndEXT(commandBuffer);
6595 }
6596 DispatchCmdDebugMarkerEndEXT(commandBuffer);
6597 for (auto intercept : layer_data->object_dispatch) {
6598 auto lock = intercept->write_lock();
6599 intercept->PostCallRecordCmdDebugMarkerEndEXT(commandBuffer);
6600 }
6601}
6602
6603VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerInsertEXT(
6604 VkCommandBuffer commandBuffer,
6605 const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) {
6606 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6607 bool skip = false;
6608 for (auto intercept : layer_data->object_dispatch) {
6609 auto lock = intercept->write_lock();
6610 skip |= intercept->PreCallValidateCmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
6611 if (skip) return;
6612 }
6613 for (auto intercept : layer_data->object_dispatch) {
6614 auto lock = intercept->write_lock();
6615 intercept->PreCallRecordCmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
6616 }
6617 DispatchCmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
6618 for (auto intercept : layer_data->object_dispatch) {
6619 auto lock = intercept->write_lock();
6620 intercept->PostCallRecordCmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
6621 }
6622}
6623
6624
6625
6626
6627VKAPI_ATTR void VKAPI_CALL CmdBindTransformFeedbackBuffersEXT(
6628 VkCommandBuffer commandBuffer,
6629 uint32_t firstBinding,
6630 uint32_t bindingCount,
6631 const VkBuffer* pBuffers,
6632 const VkDeviceSize* pOffsets,
6633 const VkDeviceSize* pSizes) {
6634 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6635 bool skip = false;
6636 for (auto intercept : layer_data->object_dispatch) {
6637 auto lock = intercept->write_lock();
6638 skip |= intercept->PreCallValidateCmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes);
6639 if (skip) return;
6640 }
6641 for (auto intercept : layer_data->object_dispatch) {
6642 auto lock = intercept->write_lock();
6643 intercept->PreCallRecordCmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes);
6644 }
6645 DispatchCmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes);
6646 for (auto intercept : layer_data->object_dispatch) {
6647 auto lock = intercept->write_lock();
6648 intercept->PostCallRecordCmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes);
6649 }
6650}
6651
6652VKAPI_ATTR void VKAPI_CALL CmdBeginTransformFeedbackEXT(
6653 VkCommandBuffer commandBuffer,
6654 uint32_t firstCounterBuffer,
6655 uint32_t counterBufferCount,
6656 const VkBuffer* pCounterBuffers,
6657 const VkDeviceSize* pCounterBufferOffsets) {
6658 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6659 bool skip = false;
6660 for (auto intercept : layer_data->object_dispatch) {
6661 auto lock = intercept->write_lock();
6662 skip |= intercept->PreCallValidateCmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6663 if (skip) return;
6664 }
6665 for (auto intercept : layer_data->object_dispatch) {
6666 auto lock = intercept->write_lock();
6667 intercept->PreCallRecordCmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6668 }
6669 DispatchCmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6670 for (auto intercept : layer_data->object_dispatch) {
6671 auto lock = intercept->write_lock();
6672 intercept->PostCallRecordCmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6673 }
6674}
6675
6676VKAPI_ATTR void VKAPI_CALL CmdEndTransformFeedbackEXT(
6677 VkCommandBuffer commandBuffer,
6678 uint32_t firstCounterBuffer,
6679 uint32_t counterBufferCount,
6680 const VkBuffer* pCounterBuffers,
6681 const VkDeviceSize* pCounterBufferOffsets) {
6682 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6683 bool skip = false;
6684 for (auto intercept : layer_data->object_dispatch) {
6685 auto lock = intercept->write_lock();
6686 skip |= intercept->PreCallValidateCmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6687 if (skip) return;
6688 }
6689 for (auto intercept : layer_data->object_dispatch) {
6690 auto lock = intercept->write_lock();
6691 intercept->PreCallRecordCmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6692 }
6693 DispatchCmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6694 for (auto intercept : layer_data->object_dispatch) {
6695 auto lock = intercept->write_lock();
6696 intercept->PostCallRecordCmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6697 }
6698}
6699
6700VKAPI_ATTR void VKAPI_CALL CmdBeginQueryIndexedEXT(
6701 VkCommandBuffer commandBuffer,
6702 VkQueryPool queryPool,
6703 uint32_t query,
6704 VkQueryControlFlags flags,
6705 uint32_t index) {
6706 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6707 bool skip = false;
6708 for (auto intercept : layer_data->object_dispatch) {
6709 auto lock = intercept->write_lock();
6710 skip |= intercept->PreCallValidateCmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index);
6711 if (skip) return;
6712 }
6713 for (auto intercept : layer_data->object_dispatch) {
6714 auto lock = intercept->write_lock();
6715 intercept->PreCallRecordCmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index);
6716 }
6717 DispatchCmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index);
6718 for (auto intercept : layer_data->object_dispatch) {
6719 auto lock = intercept->write_lock();
6720 intercept->PostCallRecordCmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index);
6721 }
6722}
6723
6724VKAPI_ATTR void VKAPI_CALL CmdEndQueryIndexedEXT(
6725 VkCommandBuffer commandBuffer,
6726 VkQueryPool queryPool,
6727 uint32_t query,
6728 uint32_t index) {
6729 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6730 bool skip = false;
6731 for (auto intercept : layer_data->object_dispatch) {
6732 auto lock = intercept->write_lock();
6733 skip |= intercept->PreCallValidateCmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index);
6734 if (skip) return;
6735 }
6736 for (auto intercept : layer_data->object_dispatch) {
6737 auto lock = intercept->write_lock();
6738 intercept->PreCallRecordCmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index);
6739 }
6740 DispatchCmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index);
6741 for (auto intercept : layer_data->object_dispatch) {
6742 auto lock = intercept->write_lock();
6743 intercept->PostCallRecordCmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index);
6744 }
6745}
6746
6747VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectByteCountEXT(
6748 VkCommandBuffer commandBuffer,
6749 uint32_t instanceCount,
6750 uint32_t firstInstance,
6751 VkBuffer counterBuffer,
6752 VkDeviceSize counterBufferOffset,
6753 uint32_t counterOffset,
6754 uint32_t vertexStride) {
6755 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6756 bool skip = false;
6757 for (auto intercept : layer_data->object_dispatch) {
6758 auto lock = intercept->write_lock();
6759 skip |= intercept->PreCallValidateCmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride);
6760 if (skip) return;
6761 }
6762 for (auto intercept : layer_data->object_dispatch) {
6763 auto lock = intercept->write_lock();
6764 intercept->PreCallRecordCmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride);
6765 }
6766 DispatchCmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride);
6767 for (auto intercept : layer_data->object_dispatch) {
6768 auto lock = intercept->write_lock();
6769 intercept->PostCallRecordCmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride);
6770 }
6771}
6772
6773
6774VKAPI_ATTR uint32_t VKAPI_CALL GetImageViewHandleNVX(
6775 VkDevice device,
6776 const VkImageViewHandleInfoNVX* pInfo) {
6777 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6778 bool skip = false;
6779 for (auto intercept : layer_data->object_dispatch) {
6780 auto lock = intercept->write_lock();
6781 skip |= intercept->PreCallValidateGetImageViewHandleNVX(device, pInfo);
6782 if (skip) return 0;
6783 }
6784 for (auto intercept : layer_data->object_dispatch) {
6785 auto lock = intercept->write_lock();
6786 intercept->PreCallRecordGetImageViewHandleNVX(device, pInfo);
6787 }
6788 uint32_t result = DispatchGetImageViewHandleNVX(device, pInfo);
6789 for (auto intercept : layer_data->object_dispatch) {
6790 auto lock = intercept->write_lock();
6791 intercept->PostCallRecordGetImageViewHandleNVX(device, pInfo);
6792 }
6793 return result;
6794}
6795
6796
6797VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountAMD(
6798 VkCommandBuffer commandBuffer,
6799 VkBuffer buffer,
6800 VkDeviceSize offset,
6801 VkBuffer countBuffer,
6802 VkDeviceSize countBufferOffset,
6803 uint32_t maxDrawCount,
6804 uint32_t stride) {
6805 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6806 bool skip = false;
6807 for (auto intercept : layer_data->object_dispatch) {
6808 auto lock = intercept->write_lock();
6809 skip |= intercept->PreCallValidateCmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6810 if (skip) return;
6811 }
6812 for (auto intercept : layer_data->object_dispatch) {
6813 auto lock = intercept->write_lock();
6814 intercept->PreCallRecordCmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6815 }
6816 DispatchCmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6817 for (auto intercept : layer_data->object_dispatch) {
6818 auto lock = intercept->write_lock();
6819 intercept->PostCallRecordCmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6820 }
6821}
6822
6823VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountAMD(
6824 VkCommandBuffer commandBuffer,
6825 VkBuffer buffer,
6826 VkDeviceSize offset,
6827 VkBuffer countBuffer,
6828 VkDeviceSize countBufferOffset,
6829 uint32_t maxDrawCount,
6830 uint32_t stride) {
6831 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6832 bool skip = false;
6833 for (auto intercept : layer_data->object_dispatch) {
6834 auto lock = intercept->write_lock();
6835 skip |= intercept->PreCallValidateCmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6836 if (skip) return;
6837 }
6838 for (auto intercept : layer_data->object_dispatch) {
6839 auto lock = intercept->write_lock();
6840 intercept->PreCallRecordCmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6841 }
6842 DispatchCmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6843 for (auto intercept : layer_data->object_dispatch) {
6844 auto lock = intercept->write_lock();
6845 intercept->PostCallRecordCmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6846 }
6847}
6848
6849
6850
6851
6852
6853
6854VKAPI_ATTR VkResult VKAPI_CALL GetShaderInfoAMD(
6855 VkDevice device,
6856 VkPipeline pipeline,
6857 VkShaderStageFlagBits shaderStage,
6858 VkShaderInfoTypeAMD infoType,
6859 size_t* pInfoSize,
6860 void* pInfo) {
6861 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6862 bool skip = false;
6863 for (auto intercept : layer_data->object_dispatch) {
6864 auto lock = intercept->write_lock();
6865 skip |= intercept->PreCallValidateGetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo);
6866 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6867 }
6868 for (auto intercept : layer_data->object_dispatch) {
6869 auto lock = intercept->write_lock();
6870 intercept->PreCallRecordGetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo);
6871 }
6872 VkResult result = DispatchGetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo);
6873 for (auto intercept : layer_data->object_dispatch) {
6874 auto lock = intercept->write_lock();
6875 intercept->PostCallRecordGetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo, result);
6876 }
6877 return result;
6878}
6879
6880
6881#ifdef VK_USE_PLATFORM_GGP
6882
6883VKAPI_ATTR VkResult VKAPI_CALL CreateStreamDescriptorSurfaceGGP(
6884 VkInstance instance,
6885 const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
6886 const VkAllocationCallbacks* pAllocator,
6887 VkSurfaceKHR* pSurface) {
6888 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
6889 bool skip = false;
6890 for (auto intercept : layer_data->object_dispatch) {
6891 auto lock = intercept->write_lock();
6892 skip |= intercept->PreCallValidateCreateStreamDescriptorSurfaceGGP(instance, pCreateInfo, pAllocator, pSurface);
6893 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6894 }
6895 for (auto intercept : layer_data->object_dispatch) {
6896 auto lock = intercept->write_lock();
6897 intercept->PreCallRecordCreateStreamDescriptorSurfaceGGP(instance, pCreateInfo, pAllocator, pSurface);
6898 }
6899 VkResult result = DispatchCreateStreamDescriptorSurfaceGGP(instance, pCreateInfo, pAllocator, pSurface);
6900 for (auto intercept : layer_data->object_dispatch) {
6901 auto lock = intercept->write_lock();
6902 intercept->PostCallRecordCreateStreamDescriptorSurfaceGGP(instance, pCreateInfo, pAllocator, pSurface, result);
6903 }
6904 return result;
6905}
6906#endif // VK_USE_PLATFORM_GGP
6907
6908
6909
6910
6911VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceExternalImageFormatPropertiesNV(
6912 VkPhysicalDevice physicalDevice,
6913 VkFormat format,
6914 VkImageType type,
6915 VkImageTiling tiling,
6916 VkImageUsageFlags usage,
6917 VkImageCreateFlags flags,
6918 VkExternalMemoryHandleTypeFlagsNV externalHandleType,
6919 VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties) {
6920 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6921 bool skip = false;
6922 for (auto intercept : layer_data->object_dispatch) {
6923 auto lock = intercept->write_lock();
6924 skip |= intercept->PreCallValidateGetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties);
6925 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6926 }
6927 for (auto intercept : layer_data->object_dispatch) {
6928 auto lock = intercept->write_lock();
6929 intercept->PreCallRecordGetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties);
6930 }
6931 VkResult result = DispatchGetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties);
6932 for (auto intercept : layer_data->object_dispatch) {
6933 auto lock = intercept->write_lock();
6934 intercept->PostCallRecordGetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties, result);
6935 }
6936 return result;
6937}
6938
6939
6940#ifdef VK_USE_PLATFORM_WIN32_KHR
6941
6942VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleNV(
6943 VkDevice device,
6944 VkDeviceMemory memory,
6945 VkExternalMemoryHandleTypeFlagsNV handleType,
6946 HANDLE* pHandle) {
6947 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6948 bool skip = false;
6949 for (auto intercept : layer_data->object_dispatch) {
6950 auto lock = intercept->write_lock();
6951 skip |= intercept->PreCallValidateGetMemoryWin32HandleNV(device, memory, handleType, pHandle);
6952 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6953 }
6954 for (auto intercept : layer_data->object_dispatch) {
6955 auto lock = intercept->write_lock();
6956 intercept->PreCallRecordGetMemoryWin32HandleNV(device, memory, handleType, pHandle);
6957 }
6958 VkResult result = DispatchGetMemoryWin32HandleNV(device, memory, handleType, pHandle);
6959 for (auto intercept : layer_data->object_dispatch) {
6960 auto lock = intercept->write_lock();
6961 intercept->PostCallRecordGetMemoryWin32HandleNV(device, memory, handleType, pHandle, result);
6962 }
6963 return result;
6964}
6965#endif // VK_USE_PLATFORM_WIN32_KHR
6966
6967#ifdef VK_USE_PLATFORM_WIN32_KHR
6968#endif // VK_USE_PLATFORM_WIN32_KHR
6969
6970
6971#ifdef VK_USE_PLATFORM_VI_NN
6972
6973VKAPI_ATTR VkResult VKAPI_CALL CreateViSurfaceNN(
6974 VkInstance instance,
6975 const VkViSurfaceCreateInfoNN* pCreateInfo,
6976 const VkAllocationCallbacks* pAllocator,
6977 VkSurfaceKHR* pSurface) {
6978 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
6979 bool skip = false;
6980 for (auto intercept : layer_data->object_dispatch) {
6981 auto lock = intercept->write_lock();
6982 skip |= intercept->PreCallValidateCreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface);
6983 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6984 }
6985 for (auto intercept : layer_data->object_dispatch) {
6986 auto lock = intercept->write_lock();
6987 intercept->PreCallRecordCreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface);
6988 }
6989 VkResult result = DispatchCreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface);
6990 for (auto intercept : layer_data->object_dispatch) {
6991 auto lock = intercept->write_lock();
6992 intercept->PostCallRecordCreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface, result);
6993 }
6994 return result;
6995}
6996#endif // VK_USE_PLATFORM_VI_NN
6997
6998
6999
7000
7001
7002VKAPI_ATTR void VKAPI_CALL CmdBeginConditionalRenderingEXT(
7003 VkCommandBuffer commandBuffer,
7004 const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin) {
7005 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7006 bool skip = false;
7007 for (auto intercept : layer_data->object_dispatch) {
7008 auto lock = intercept->write_lock();
7009 skip |= intercept->PreCallValidateCmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin);
7010 if (skip) return;
7011 }
7012 for (auto intercept : layer_data->object_dispatch) {
7013 auto lock = intercept->write_lock();
7014 intercept->PreCallRecordCmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin);
7015 }
7016 DispatchCmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin);
7017 for (auto intercept : layer_data->object_dispatch) {
7018 auto lock = intercept->write_lock();
7019 intercept->PostCallRecordCmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin);
7020 }
7021}
7022
7023VKAPI_ATTR void VKAPI_CALL CmdEndConditionalRenderingEXT(
7024 VkCommandBuffer commandBuffer) {
7025 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7026 bool skip = false;
7027 for (auto intercept : layer_data->object_dispatch) {
7028 auto lock = intercept->write_lock();
7029 skip |= intercept->PreCallValidateCmdEndConditionalRenderingEXT(commandBuffer);
7030 if (skip) return;
7031 }
7032 for (auto intercept : layer_data->object_dispatch) {
7033 auto lock = intercept->write_lock();
7034 intercept->PreCallRecordCmdEndConditionalRenderingEXT(commandBuffer);
7035 }
7036 DispatchCmdEndConditionalRenderingEXT(commandBuffer);
7037 for (auto intercept : layer_data->object_dispatch) {
7038 auto lock = intercept->write_lock();
7039 intercept->PostCallRecordCmdEndConditionalRenderingEXT(commandBuffer);
7040 }
7041}
7042
7043
7044VKAPI_ATTR void VKAPI_CALL CmdProcessCommandsNVX(
7045 VkCommandBuffer commandBuffer,
7046 const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo) {
7047 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7048 bool skip = false;
7049 for (auto intercept : layer_data->object_dispatch) {
7050 auto lock = intercept->write_lock();
7051 skip |= intercept->PreCallValidateCmdProcessCommandsNVX(commandBuffer, pProcessCommandsInfo);
7052 if (skip) return;
7053 }
7054 for (auto intercept : layer_data->object_dispatch) {
7055 auto lock = intercept->write_lock();
7056 intercept->PreCallRecordCmdProcessCommandsNVX(commandBuffer, pProcessCommandsInfo);
7057 }
7058 DispatchCmdProcessCommandsNVX(commandBuffer, pProcessCommandsInfo);
7059 for (auto intercept : layer_data->object_dispatch) {
7060 auto lock = intercept->write_lock();
7061 intercept->PostCallRecordCmdProcessCommandsNVX(commandBuffer, pProcessCommandsInfo);
7062 }
7063}
7064
7065VKAPI_ATTR void VKAPI_CALL CmdReserveSpaceForCommandsNVX(
7066 VkCommandBuffer commandBuffer,
7067 const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo) {
7068 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7069 bool skip = false;
7070 for (auto intercept : layer_data->object_dispatch) {
7071 auto lock = intercept->write_lock();
7072 skip |= intercept->PreCallValidateCmdReserveSpaceForCommandsNVX(commandBuffer, pReserveSpaceInfo);
7073 if (skip) return;
7074 }
7075 for (auto intercept : layer_data->object_dispatch) {
7076 auto lock = intercept->write_lock();
7077 intercept->PreCallRecordCmdReserveSpaceForCommandsNVX(commandBuffer, pReserveSpaceInfo);
7078 }
7079 DispatchCmdReserveSpaceForCommandsNVX(commandBuffer, pReserveSpaceInfo);
7080 for (auto intercept : layer_data->object_dispatch) {
7081 auto lock = intercept->write_lock();
7082 intercept->PostCallRecordCmdReserveSpaceForCommandsNVX(commandBuffer, pReserveSpaceInfo);
7083 }
7084}
7085
7086VKAPI_ATTR VkResult VKAPI_CALL CreateIndirectCommandsLayoutNVX(
7087 VkDevice device,
7088 const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo,
7089 const VkAllocationCallbacks* pAllocator,
7090 VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout) {
7091 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7092 bool skip = false;
7093 for (auto intercept : layer_data->object_dispatch) {
7094 auto lock = intercept->write_lock();
7095 skip |= intercept->PreCallValidateCreateIndirectCommandsLayoutNVX(device, pCreateInfo, pAllocator, pIndirectCommandsLayout);
7096 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7097 }
7098 for (auto intercept : layer_data->object_dispatch) {
7099 auto lock = intercept->write_lock();
7100 intercept->PreCallRecordCreateIndirectCommandsLayoutNVX(device, pCreateInfo, pAllocator, pIndirectCommandsLayout);
7101 }
7102 VkResult result = DispatchCreateIndirectCommandsLayoutNVX(device, pCreateInfo, pAllocator, pIndirectCommandsLayout);
7103 for (auto intercept : layer_data->object_dispatch) {
7104 auto lock = intercept->write_lock();
7105 intercept->PostCallRecordCreateIndirectCommandsLayoutNVX(device, pCreateInfo, pAllocator, pIndirectCommandsLayout, result);
7106 }
7107 return result;
7108}
7109
7110VKAPI_ATTR void VKAPI_CALL DestroyIndirectCommandsLayoutNVX(
7111 VkDevice device,
7112 VkIndirectCommandsLayoutNVX indirectCommandsLayout,
7113 const VkAllocationCallbacks* pAllocator) {
7114 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7115 bool skip = false;
7116 for (auto intercept : layer_data->object_dispatch) {
7117 auto lock = intercept->write_lock();
7118 skip |= intercept->PreCallValidateDestroyIndirectCommandsLayoutNVX(device, indirectCommandsLayout, pAllocator);
7119 if (skip) return;
7120 }
7121 for (auto intercept : layer_data->object_dispatch) {
7122 auto lock = intercept->write_lock();
7123 intercept->PreCallRecordDestroyIndirectCommandsLayoutNVX(device, indirectCommandsLayout, pAllocator);
7124 }
7125 DispatchDestroyIndirectCommandsLayoutNVX(device, indirectCommandsLayout, pAllocator);
7126 for (auto intercept : layer_data->object_dispatch) {
7127 auto lock = intercept->write_lock();
7128 intercept->PostCallRecordDestroyIndirectCommandsLayoutNVX(device, indirectCommandsLayout, pAllocator);
7129 }
7130}
7131
7132VKAPI_ATTR VkResult VKAPI_CALL CreateObjectTableNVX(
7133 VkDevice device,
7134 const VkObjectTableCreateInfoNVX* pCreateInfo,
7135 const VkAllocationCallbacks* pAllocator,
7136 VkObjectTableNVX* pObjectTable) {
7137 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7138 bool skip = false;
7139 for (auto intercept : layer_data->object_dispatch) {
7140 auto lock = intercept->write_lock();
7141 skip |= intercept->PreCallValidateCreateObjectTableNVX(device, pCreateInfo, pAllocator, pObjectTable);
7142 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7143 }
7144 for (auto intercept : layer_data->object_dispatch) {
7145 auto lock = intercept->write_lock();
7146 intercept->PreCallRecordCreateObjectTableNVX(device, pCreateInfo, pAllocator, pObjectTable);
7147 }
7148 VkResult result = DispatchCreateObjectTableNVX(device, pCreateInfo, pAllocator, pObjectTable);
7149 for (auto intercept : layer_data->object_dispatch) {
7150 auto lock = intercept->write_lock();
7151 intercept->PostCallRecordCreateObjectTableNVX(device, pCreateInfo, pAllocator, pObjectTable, result);
7152 }
7153 return result;
7154}
7155
7156VKAPI_ATTR void VKAPI_CALL DestroyObjectTableNVX(
7157 VkDevice device,
7158 VkObjectTableNVX objectTable,
7159 const VkAllocationCallbacks* pAllocator) {
7160 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7161 bool skip = false;
7162 for (auto intercept : layer_data->object_dispatch) {
7163 auto lock = intercept->write_lock();
7164 skip |= intercept->PreCallValidateDestroyObjectTableNVX(device, objectTable, pAllocator);
7165 if (skip) return;
7166 }
7167 for (auto intercept : layer_data->object_dispatch) {
7168 auto lock = intercept->write_lock();
7169 intercept->PreCallRecordDestroyObjectTableNVX(device, objectTable, pAllocator);
7170 }
7171 DispatchDestroyObjectTableNVX(device, objectTable, pAllocator);
7172 for (auto intercept : layer_data->object_dispatch) {
7173 auto lock = intercept->write_lock();
7174 intercept->PostCallRecordDestroyObjectTableNVX(device, objectTable, pAllocator);
7175 }
7176}
7177
7178VKAPI_ATTR VkResult VKAPI_CALL RegisterObjectsNVX(
7179 VkDevice device,
7180 VkObjectTableNVX objectTable,
7181 uint32_t objectCount,
7182 const VkObjectTableEntryNVX* const* ppObjectTableEntries,
7183 const uint32_t* pObjectIndices) {
7184 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7185 bool skip = false;
7186 for (auto intercept : layer_data->object_dispatch) {
7187 auto lock = intercept->write_lock();
7188 skip |= intercept->PreCallValidateRegisterObjectsNVX(device, objectTable, objectCount, ppObjectTableEntries, pObjectIndices);
7189 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7190 }
7191 for (auto intercept : layer_data->object_dispatch) {
7192 auto lock = intercept->write_lock();
7193 intercept->PreCallRecordRegisterObjectsNVX(device, objectTable, objectCount, ppObjectTableEntries, pObjectIndices);
7194 }
7195 VkResult result = DispatchRegisterObjectsNVX(device, objectTable, objectCount, ppObjectTableEntries, pObjectIndices);
7196 for (auto intercept : layer_data->object_dispatch) {
7197 auto lock = intercept->write_lock();
7198 intercept->PostCallRecordRegisterObjectsNVX(device, objectTable, objectCount, ppObjectTableEntries, pObjectIndices, result);
7199 }
7200 return result;
7201}
7202
7203VKAPI_ATTR VkResult VKAPI_CALL UnregisterObjectsNVX(
7204 VkDevice device,
7205 VkObjectTableNVX objectTable,
7206 uint32_t objectCount,
7207 const VkObjectEntryTypeNVX* pObjectEntryTypes,
7208 const uint32_t* pObjectIndices) {
7209 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7210 bool skip = false;
7211 for (auto intercept : layer_data->object_dispatch) {
7212 auto lock = intercept->write_lock();
7213 skip |= intercept->PreCallValidateUnregisterObjectsNVX(device, objectTable, objectCount, pObjectEntryTypes, pObjectIndices);
7214 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7215 }
7216 for (auto intercept : layer_data->object_dispatch) {
7217 auto lock = intercept->write_lock();
7218 intercept->PreCallRecordUnregisterObjectsNVX(device, objectTable, objectCount, pObjectEntryTypes, pObjectIndices);
7219 }
7220 VkResult result = DispatchUnregisterObjectsNVX(device, objectTable, objectCount, pObjectEntryTypes, pObjectIndices);
7221 for (auto intercept : layer_data->object_dispatch) {
7222 auto lock = intercept->write_lock();
7223 intercept->PostCallRecordUnregisterObjectsNVX(device, objectTable, objectCount, pObjectEntryTypes, pObjectIndices, result);
7224 }
7225 return result;
7226}
7227
7228VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceGeneratedCommandsPropertiesNVX(
7229 VkPhysicalDevice physicalDevice,
7230 VkDeviceGeneratedCommandsFeaturesNVX* pFeatures,
7231 VkDeviceGeneratedCommandsLimitsNVX* pLimits) {
7232 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
7233 bool skip = false;
7234 for (auto intercept : layer_data->object_dispatch) {
7235 auto lock = intercept->write_lock();
7236 skip |= intercept->PreCallValidateGetPhysicalDeviceGeneratedCommandsPropertiesNVX(physicalDevice, pFeatures, pLimits);
7237 if (skip) return;
7238 }
7239 for (auto intercept : layer_data->object_dispatch) {
7240 auto lock = intercept->write_lock();
7241 intercept->PreCallRecordGetPhysicalDeviceGeneratedCommandsPropertiesNVX(physicalDevice, pFeatures, pLimits);
7242 }
7243 DispatchGetPhysicalDeviceGeneratedCommandsPropertiesNVX(physicalDevice, pFeatures, pLimits);
7244 for (auto intercept : layer_data->object_dispatch) {
7245 auto lock = intercept->write_lock();
7246 intercept->PostCallRecordGetPhysicalDeviceGeneratedCommandsPropertiesNVX(physicalDevice, pFeatures, pLimits);
7247 }
7248}
7249
7250
7251VKAPI_ATTR void VKAPI_CALL CmdSetViewportWScalingNV(
7252 VkCommandBuffer commandBuffer,
7253 uint32_t firstViewport,
7254 uint32_t viewportCount,
7255 const VkViewportWScalingNV* pViewportWScalings) {
7256 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7257 bool skip = false;
7258 for (auto intercept : layer_data->object_dispatch) {
7259 auto lock = intercept->write_lock();
7260 skip |= intercept->PreCallValidateCmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings);
7261 if (skip) return;
7262 }
7263 for (auto intercept : layer_data->object_dispatch) {
7264 auto lock = intercept->write_lock();
7265 intercept->PreCallRecordCmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings);
7266 }
7267 DispatchCmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings);
7268 for (auto intercept : layer_data->object_dispatch) {
7269 auto lock = intercept->write_lock();
7270 intercept->PostCallRecordCmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings);
7271 }
7272}
7273
7274
7275VKAPI_ATTR VkResult VKAPI_CALL ReleaseDisplayEXT(
7276 VkPhysicalDevice physicalDevice,
7277 VkDisplayKHR display) {
7278 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
7279 bool skip = false;
7280 for (auto intercept : layer_data->object_dispatch) {
7281 auto lock = intercept->write_lock();
7282 skip |= intercept->PreCallValidateReleaseDisplayEXT(physicalDevice, display);
7283 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7284 }
7285 for (auto intercept : layer_data->object_dispatch) {
7286 auto lock = intercept->write_lock();
7287 intercept->PreCallRecordReleaseDisplayEXT(physicalDevice, display);
7288 }
7289 VkResult result = DispatchReleaseDisplayEXT(physicalDevice, display);
7290 for (auto intercept : layer_data->object_dispatch) {
7291 auto lock = intercept->write_lock();
7292 intercept->PostCallRecordReleaseDisplayEXT(physicalDevice, display, result);
7293 }
7294 return result;
7295}
7296
7297#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
7298
7299VKAPI_ATTR VkResult VKAPI_CALL AcquireXlibDisplayEXT(
7300 VkPhysicalDevice physicalDevice,
7301 Display* dpy,
7302 VkDisplayKHR display) {
7303 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
7304 bool skip = false;
7305 for (auto intercept : layer_data->object_dispatch) {
7306 auto lock = intercept->write_lock();
7307 skip |= intercept->PreCallValidateAcquireXlibDisplayEXT(physicalDevice, dpy, display);
7308 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7309 }
7310 for (auto intercept : layer_data->object_dispatch) {
7311 auto lock = intercept->write_lock();
7312 intercept->PreCallRecordAcquireXlibDisplayEXT(physicalDevice, dpy, display);
7313 }
7314 VkResult result = DispatchAcquireXlibDisplayEXT(physicalDevice, dpy, display);
7315 for (auto intercept : layer_data->object_dispatch) {
7316 auto lock = intercept->write_lock();
7317 intercept->PostCallRecordAcquireXlibDisplayEXT(physicalDevice, dpy, display, result);
7318 }
7319 return result;
7320}
7321
7322VKAPI_ATTR VkResult VKAPI_CALL GetRandROutputDisplayEXT(
7323 VkPhysicalDevice physicalDevice,
7324 Display* dpy,
7325 RROutput rrOutput,
7326 VkDisplayKHR* pDisplay) {
7327 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
7328 bool skip = false;
7329 for (auto intercept : layer_data->object_dispatch) {
7330 auto lock = intercept->write_lock();
7331 skip |= intercept->PreCallValidateGetRandROutputDisplayEXT(physicalDevice, dpy, rrOutput, pDisplay);
7332 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7333 }
7334 for (auto intercept : layer_data->object_dispatch) {
7335 auto lock = intercept->write_lock();
7336 intercept->PreCallRecordGetRandROutputDisplayEXT(physicalDevice, dpy, rrOutput, pDisplay);
7337 }
7338 VkResult result = DispatchGetRandROutputDisplayEXT(physicalDevice, dpy, rrOutput, pDisplay);
7339 for (auto intercept : layer_data->object_dispatch) {
7340 auto lock = intercept->write_lock();
7341 intercept->PostCallRecordGetRandROutputDisplayEXT(physicalDevice, dpy, rrOutput, pDisplay, result);
7342 }
7343 return result;
7344}
7345#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
7346
7347
7348VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2EXT(
7349 VkPhysicalDevice physicalDevice,
7350 VkSurfaceKHR surface,
7351 VkSurfaceCapabilities2EXT* pSurfaceCapabilities) {
7352 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
7353 bool skip = false;
7354 for (auto intercept : layer_data->object_dispatch) {
7355 auto lock = intercept->write_lock();
7356 skip |= intercept->PreCallValidateGetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities);
7357 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7358 }
7359 for (auto intercept : layer_data->object_dispatch) {
7360 auto lock = intercept->write_lock();
7361 intercept->PreCallRecordGetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities);
7362 }
7363 VkResult result = DispatchGetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities);
7364 for (auto intercept : layer_data->object_dispatch) {
7365 auto lock = intercept->write_lock();
7366 intercept->PostCallRecordGetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities, result);
7367 }
7368 return result;
7369}
7370
7371
7372VKAPI_ATTR VkResult VKAPI_CALL DisplayPowerControlEXT(
7373 VkDevice device,
7374 VkDisplayKHR display,
7375 const VkDisplayPowerInfoEXT* pDisplayPowerInfo) {
7376 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7377 bool skip = false;
7378 for (auto intercept : layer_data->object_dispatch) {
7379 auto lock = intercept->write_lock();
7380 skip |= intercept->PreCallValidateDisplayPowerControlEXT(device, display, pDisplayPowerInfo);
7381 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7382 }
7383 for (auto intercept : layer_data->object_dispatch) {
7384 auto lock = intercept->write_lock();
7385 intercept->PreCallRecordDisplayPowerControlEXT(device, display, pDisplayPowerInfo);
7386 }
7387 VkResult result = DispatchDisplayPowerControlEXT(device, display, pDisplayPowerInfo);
7388 for (auto intercept : layer_data->object_dispatch) {
7389 auto lock = intercept->write_lock();
7390 intercept->PostCallRecordDisplayPowerControlEXT(device, display, pDisplayPowerInfo, result);
7391 }
7392 return result;
7393}
7394
7395VKAPI_ATTR VkResult VKAPI_CALL RegisterDeviceEventEXT(
7396 VkDevice device,
7397 const VkDeviceEventInfoEXT* pDeviceEventInfo,
7398 const VkAllocationCallbacks* pAllocator,
7399 VkFence* pFence) {
7400 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7401 bool skip = false;
7402 for (auto intercept : layer_data->object_dispatch) {
7403 auto lock = intercept->write_lock();
7404 skip |= intercept->PreCallValidateRegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence);
7405 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7406 }
7407 for (auto intercept : layer_data->object_dispatch) {
7408 auto lock = intercept->write_lock();
7409 intercept->PreCallRecordRegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence);
7410 }
7411 VkResult result = DispatchRegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence);
7412 for (auto intercept : layer_data->object_dispatch) {
7413 auto lock = intercept->write_lock();
7414 intercept->PostCallRecordRegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence, result);
7415 }
7416 return result;
7417}
7418
7419VKAPI_ATTR VkResult VKAPI_CALL RegisterDisplayEventEXT(
7420 VkDevice device,
7421 VkDisplayKHR display,
7422 const VkDisplayEventInfoEXT* pDisplayEventInfo,
7423 const VkAllocationCallbacks* pAllocator,
7424 VkFence* pFence) {
7425 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7426 bool skip = false;
7427 for (auto intercept : layer_data->object_dispatch) {
7428 auto lock = intercept->write_lock();
7429 skip |= intercept->PreCallValidateRegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence);
7430 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7431 }
7432 for (auto intercept : layer_data->object_dispatch) {
7433 auto lock = intercept->write_lock();
7434 intercept->PreCallRecordRegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence);
7435 }
7436 VkResult result = DispatchRegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence);
7437 for (auto intercept : layer_data->object_dispatch) {
7438 auto lock = intercept->write_lock();
7439 intercept->PostCallRecordRegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence, result);
7440 }
7441 return result;
7442}
7443
7444VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainCounterEXT(
7445 VkDevice device,
7446 VkSwapchainKHR swapchain,
7447 VkSurfaceCounterFlagBitsEXT counter,
7448 uint64_t* pCounterValue) {
7449 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7450 bool skip = false;
7451 for (auto intercept : layer_data->object_dispatch) {
7452 auto lock = intercept->write_lock();
7453 skip |= intercept->PreCallValidateGetSwapchainCounterEXT(device, swapchain, counter, pCounterValue);
7454 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7455 }
7456 for (auto intercept : layer_data->object_dispatch) {
7457 auto lock = intercept->write_lock();
7458 intercept->PreCallRecordGetSwapchainCounterEXT(device, swapchain, counter, pCounterValue);
7459 }
7460 VkResult result = DispatchGetSwapchainCounterEXT(device, swapchain, counter, pCounterValue);
7461 for (auto intercept : layer_data->object_dispatch) {
7462 auto lock = intercept->write_lock();
7463 intercept->PostCallRecordGetSwapchainCounterEXT(device, swapchain, counter, pCounterValue, result);
7464 }
7465 return result;
7466}
7467
7468
7469VKAPI_ATTR VkResult VKAPI_CALL GetRefreshCycleDurationGOOGLE(
7470 VkDevice device,
7471 VkSwapchainKHR swapchain,
7472 VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) {
7473 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7474 bool skip = false;
7475 for (auto intercept : layer_data->object_dispatch) {
7476 auto lock = intercept->write_lock();
7477 skip |= intercept->PreCallValidateGetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties);
7478 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7479 }
7480 for (auto intercept : layer_data->object_dispatch) {
7481 auto lock = intercept->write_lock();
7482 intercept->PreCallRecordGetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties);
7483 }
7484 VkResult result = DispatchGetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties);
7485 for (auto intercept : layer_data->object_dispatch) {
7486 auto lock = intercept->write_lock();
7487 intercept->PostCallRecordGetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties, result);
7488 }
7489 return result;
7490}
7491
7492VKAPI_ATTR VkResult VKAPI_CALL GetPastPresentationTimingGOOGLE(
7493 VkDevice device,
7494 VkSwapchainKHR swapchain,
7495 uint32_t* pPresentationTimingCount,
7496 VkPastPresentationTimingGOOGLE* pPresentationTimings) {
7497 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7498 bool skip = false;
7499 for (auto intercept : layer_data->object_dispatch) {
7500 auto lock = intercept->write_lock();
7501 skip |= intercept->PreCallValidateGetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings);
7502 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7503 }
7504 for (auto intercept : layer_data->object_dispatch) {
7505 auto lock = intercept->write_lock();
7506 intercept->PreCallRecordGetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings);
7507 }
7508 VkResult result = DispatchGetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings);
7509 for (auto intercept : layer_data->object_dispatch) {
7510 auto lock = intercept->write_lock();
7511 intercept->PostCallRecordGetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings, result);
7512 }
7513 return result;
7514}
7515
7516
7517
7518
7519
7520
7521
7522VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleEXT(
7523 VkCommandBuffer commandBuffer,
7524 uint32_t firstDiscardRectangle,
7525 uint32_t discardRectangleCount,
7526 const VkRect2D* pDiscardRectangles) {
7527 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7528 bool skip = false;
7529 for (auto intercept : layer_data->object_dispatch) {
7530 auto lock = intercept->write_lock();
7531 skip |= intercept->PreCallValidateCmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
7532 if (skip) return;
7533 }
7534 for (auto intercept : layer_data->object_dispatch) {
7535 auto lock = intercept->write_lock();
7536 intercept->PreCallRecordCmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
7537 }
7538 DispatchCmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
7539 for (auto intercept : layer_data->object_dispatch) {
7540 auto lock = intercept->write_lock();
7541 intercept->PostCallRecordCmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
7542 }
7543}
7544
7545
7546
7547
7548
7549VKAPI_ATTR void VKAPI_CALL SetHdrMetadataEXT(
7550 VkDevice device,
7551 uint32_t swapchainCount,
7552 const VkSwapchainKHR* pSwapchains,
7553 const VkHdrMetadataEXT* pMetadata) {
7554 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7555 bool skip = false;
7556 for (auto intercept : layer_data->object_dispatch) {
7557 auto lock = intercept->write_lock();
7558 skip |= intercept->PreCallValidateSetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
7559 if (skip) return;
7560 }
7561 for (auto intercept : layer_data->object_dispatch) {
7562 auto lock = intercept->write_lock();
7563 intercept->PreCallRecordSetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
7564 }
7565 DispatchSetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
7566 for (auto intercept : layer_data->object_dispatch) {
7567 auto lock = intercept->write_lock();
7568 intercept->PostCallRecordSetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
7569 }
7570}
7571
7572#ifdef VK_USE_PLATFORM_IOS_MVK
7573
7574VKAPI_ATTR VkResult VKAPI_CALL CreateIOSSurfaceMVK(
7575 VkInstance instance,
7576 const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
7577 const VkAllocationCallbacks* pAllocator,
7578 VkSurfaceKHR* pSurface) {
7579 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
7580 bool skip = false;
7581 for (auto intercept : layer_data->object_dispatch) {
7582 auto lock = intercept->write_lock();
7583 skip |= intercept->PreCallValidateCreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
7584 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7585 }
7586 for (auto intercept : layer_data->object_dispatch) {
7587 auto lock = intercept->write_lock();
7588 intercept->PreCallRecordCreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
7589 }
7590 VkResult result = DispatchCreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
7591 for (auto intercept : layer_data->object_dispatch) {
7592 auto lock = intercept->write_lock();
7593 intercept->PostCallRecordCreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface, result);
7594 }
7595 return result;
7596}
7597#endif // VK_USE_PLATFORM_IOS_MVK
7598
7599#ifdef VK_USE_PLATFORM_MACOS_MVK
7600
7601VKAPI_ATTR VkResult VKAPI_CALL CreateMacOSSurfaceMVK(
7602 VkInstance instance,
7603 const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
7604 const VkAllocationCallbacks* pAllocator,
7605 VkSurfaceKHR* pSurface) {
7606 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
7607 bool skip = false;
7608 for (auto intercept : layer_data->object_dispatch) {
7609 auto lock = intercept->write_lock();
7610 skip |= intercept->PreCallValidateCreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
7611 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7612 }
7613 for (auto intercept : layer_data->object_dispatch) {
7614 auto lock = intercept->write_lock();
7615 intercept->PreCallRecordCreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
7616 }
7617 VkResult result = DispatchCreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
7618 for (auto intercept : layer_data->object_dispatch) {
7619 auto lock = intercept->write_lock();
7620 intercept->PostCallRecordCreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface, result);
7621 }
7622 return result;
7623}
7624#endif // VK_USE_PLATFORM_MACOS_MVK
7625
7626
7627
7628
7629VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectNameEXT(
7630 VkDevice device,
7631 const VkDebugUtilsObjectNameInfoEXT* pNameInfo) {
7632 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7633 bool skip = false;
7634 for (auto intercept : layer_data->object_dispatch) {
7635 auto lock = intercept->write_lock();
7636 skip |= intercept->PreCallValidateSetDebugUtilsObjectNameEXT(device, pNameInfo);
7637 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7638 }
7639 for (auto intercept : layer_data->object_dispatch) {
7640 auto lock = intercept->write_lock();
7641 intercept->PreCallRecordSetDebugUtilsObjectNameEXT(device, pNameInfo);
7642 }
7643 layer_data->report_data->DebugReportSetUtilsObjectName(pNameInfo);
7644 VkResult result = DispatchSetDebugUtilsObjectNameEXT(device, pNameInfo);
7645 for (auto intercept : layer_data->object_dispatch) {
7646 auto lock = intercept->write_lock();
7647 intercept->PostCallRecordSetDebugUtilsObjectNameEXT(device, pNameInfo, result);
7648 }
7649 return result;
7650}
7651
7652VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectTagEXT(
7653 VkDevice device,
7654 const VkDebugUtilsObjectTagInfoEXT* pTagInfo) {
7655 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7656 bool skip = false;
7657 for (auto intercept : layer_data->object_dispatch) {
7658 auto lock = intercept->write_lock();
7659 skip |= intercept->PreCallValidateSetDebugUtilsObjectTagEXT(device, pTagInfo);
7660 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7661 }
7662 for (auto intercept : layer_data->object_dispatch) {
7663 auto lock = intercept->write_lock();
7664 intercept->PreCallRecordSetDebugUtilsObjectTagEXT(device, pTagInfo);
7665 }
7666 VkResult result = DispatchSetDebugUtilsObjectTagEXT(device, pTagInfo);
7667 for (auto intercept : layer_data->object_dispatch) {
7668 auto lock = intercept->write_lock();
7669 intercept->PostCallRecordSetDebugUtilsObjectTagEXT(device, pTagInfo, result);
7670 }
7671 return result;
7672}
7673
7674VKAPI_ATTR void VKAPI_CALL QueueBeginDebugUtilsLabelEXT(
7675 VkQueue queue,
7676 const VkDebugUtilsLabelEXT* pLabelInfo) {
7677 auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
7678 bool skip = false;
7679 for (auto intercept : layer_data->object_dispatch) {
7680 auto lock = intercept->write_lock();
7681 skip |= intercept->PreCallValidateQueueBeginDebugUtilsLabelEXT(queue, pLabelInfo);
7682 if (skip) return;
7683 }
7684 for (auto intercept : layer_data->object_dispatch) {
7685 auto lock = intercept->write_lock();
7686 intercept->PreCallRecordQueueBeginDebugUtilsLabelEXT(queue, pLabelInfo);
7687 }
7688 BeginQueueDebugUtilsLabel(layer_data->report_data, queue, pLabelInfo);
7689 DispatchQueueBeginDebugUtilsLabelEXT(queue, pLabelInfo);
7690 for (auto intercept : layer_data->object_dispatch) {
7691 auto lock = intercept->write_lock();
7692 intercept->PostCallRecordQueueBeginDebugUtilsLabelEXT(queue, pLabelInfo);
7693 }
7694}
7695
7696VKAPI_ATTR void VKAPI_CALL QueueEndDebugUtilsLabelEXT(
7697 VkQueue queue) {
7698 auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
7699 bool skip = false;
7700 for (auto intercept : layer_data->object_dispatch) {
7701 auto lock = intercept->write_lock();
7702 skip |= intercept->PreCallValidateQueueEndDebugUtilsLabelEXT(queue);
7703 if (skip) return;
7704 }
7705 for (auto intercept : layer_data->object_dispatch) {
7706 auto lock = intercept->write_lock();
7707 intercept->PreCallRecordQueueEndDebugUtilsLabelEXT(queue);
7708 }
7709 DispatchQueueEndDebugUtilsLabelEXT(queue);
7710 EndQueueDebugUtilsLabel(layer_data->report_data, queue);
7711 for (auto intercept : layer_data->object_dispatch) {
7712 auto lock = intercept->write_lock();
7713 intercept->PostCallRecordQueueEndDebugUtilsLabelEXT(queue);
7714 }
7715}
7716
7717VKAPI_ATTR void VKAPI_CALL QueueInsertDebugUtilsLabelEXT(
7718 VkQueue queue,
7719 const VkDebugUtilsLabelEXT* pLabelInfo) {
7720 auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
7721 bool skip = false;
7722 for (auto intercept : layer_data->object_dispatch) {
7723 auto lock = intercept->write_lock();
7724 skip |= intercept->PreCallValidateQueueInsertDebugUtilsLabelEXT(queue, pLabelInfo);
7725 if (skip) return;
7726 }
7727 for (auto intercept : layer_data->object_dispatch) {
7728 auto lock = intercept->write_lock();
7729 intercept->PreCallRecordQueueInsertDebugUtilsLabelEXT(queue, pLabelInfo);
7730 }
7731 InsertQueueDebugUtilsLabel(layer_data->report_data, queue, pLabelInfo);
7732 DispatchQueueInsertDebugUtilsLabelEXT(queue, pLabelInfo);
7733 for (auto intercept : layer_data->object_dispatch) {
7734 auto lock = intercept->write_lock();
7735 intercept->PostCallRecordQueueInsertDebugUtilsLabelEXT(queue, pLabelInfo);
7736 }
7737}
7738
7739VKAPI_ATTR void VKAPI_CALL CmdBeginDebugUtilsLabelEXT(
7740 VkCommandBuffer commandBuffer,
7741 const VkDebugUtilsLabelEXT* pLabelInfo) {
7742 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7743 bool skip = false;
7744 for (auto intercept : layer_data->object_dispatch) {
7745 auto lock = intercept->write_lock();
7746 skip |= intercept->PreCallValidateCmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7747 if (skip) return;
7748 }
7749 for (auto intercept : layer_data->object_dispatch) {
7750 auto lock = intercept->write_lock();
7751 intercept->PreCallRecordCmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7752 }
7753 DispatchCmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7754 for (auto intercept : layer_data->object_dispatch) {
7755 auto lock = intercept->write_lock();
7756 intercept->PostCallRecordCmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7757 }
7758}
7759
7760VKAPI_ATTR void VKAPI_CALL CmdEndDebugUtilsLabelEXT(
7761 VkCommandBuffer commandBuffer) {
7762 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7763 bool skip = false;
7764 for (auto intercept : layer_data->object_dispatch) {
7765 auto lock = intercept->write_lock();
7766 skip |= intercept->PreCallValidateCmdEndDebugUtilsLabelEXT(commandBuffer);
7767 if (skip) return;
7768 }
7769 for (auto intercept : layer_data->object_dispatch) {
7770 auto lock = intercept->write_lock();
7771 intercept->PreCallRecordCmdEndDebugUtilsLabelEXT(commandBuffer);
7772 }
7773 DispatchCmdEndDebugUtilsLabelEXT(commandBuffer);
7774 for (auto intercept : layer_data->object_dispatch) {
7775 auto lock = intercept->write_lock();
7776 intercept->PostCallRecordCmdEndDebugUtilsLabelEXT(commandBuffer);
7777 }
7778}
7779
7780VKAPI_ATTR void VKAPI_CALL CmdInsertDebugUtilsLabelEXT(
7781 VkCommandBuffer commandBuffer,
7782 const VkDebugUtilsLabelEXT* pLabelInfo) {
7783 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7784 bool skip = false;
7785 for (auto intercept : layer_data->object_dispatch) {
7786 auto lock = intercept->write_lock();
7787 skip |= intercept->PreCallValidateCmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7788 if (skip) return;
7789 }
7790 for (auto intercept : layer_data->object_dispatch) {
7791 auto lock = intercept->write_lock();
7792 intercept->PreCallRecordCmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7793 }
7794 DispatchCmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7795 for (auto intercept : layer_data->object_dispatch) {
7796 auto lock = intercept->write_lock();
7797 intercept->PostCallRecordCmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7798 }
7799}
7800
7801VKAPI_ATTR VkResult VKAPI_CALL CreateDebugUtilsMessengerEXT(
7802 VkInstance instance,
7803 const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
7804 const VkAllocationCallbacks* pAllocator,
7805 VkDebugUtilsMessengerEXT* pMessenger) {
7806 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
7807 bool skip = false;
7808 for (auto intercept : layer_data->object_dispatch) {
7809 auto lock = intercept->write_lock();
7810 skip |= intercept->PreCallValidateCreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger);
7811 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7812 }
7813 for (auto intercept : layer_data->object_dispatch) {
7814 auto lock = intercept->write_lock();
7815 intercept->PreCallRecordCreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger);
7816 }
7817 VkResult result = DispatchCreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger);
7818 layer_create_messenger_callback(layer_data->report_data, false, pCreateInfo, pAllocator, pMessenger);
7819 for (auto intercept : layer_data->object_dispatch) {
7820 auto lock = intercept->write_lock();
7821 intercept->PostCallRecordCreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger, result);
7822 }
7823 return result;
7824}
7825
7826VKAPI_ATTR void VKAPI_CALL DestroyDebugUtilsMessengerEXT(
7827 VkInstance instance,
7828 VkDebugUtilsMessengerEXT messenger,
7829 const VkAllocationCallbacks* pAllocator) {
7830 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
7831 bool skip = false;
7832 for (auto intercept : layer_data->object_dispatch) {
7833 auto lock = intercept->write_lock();
7834 skip |= intercept->PreCallValidateDestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator);
7835 if (skip) return;
7836 }
7837 for (auto intercept : layer_data->object_dispatch) {
7838 auto lock = intercept->write_lock();
7839 intercept->PreCallRecordDestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator);
7840 }
7841 DispatchDestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator);
7842 layer_destroy_messenger_callback(layer_data->report_data, messenger, pAllocator);
7843 for (auto intercept : layer_data->object_dispatch) {
7844 auto lock = intercept->write_lock();
7845 intercept->PostCallRecordDestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator);
7846 }
7847}
7848
7849VKAPI_ATTR void VKAPI_CALL SubmitDebugUtilsMessageEXT(
7850 VkInstance instance,
7851 VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
7852 VkDebugUtilsMessageTypeFlagsEXT messageTypes,
7853 const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData) {
7854 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
7855 bool skip = false;
7856 for (auto intercept : layer_data->object_dispatch) {
7857 auto lock = intercept->write_lock();
7858 skip |= intercept->PreCallValidateSubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, pCallbackData);
7859 if (skip) return;
7860 }
7861 for (auto intercept : layer_data->object_dispatch) {
7862 auto lock = intercept->write_lock();
7863 intercept->PreCallRecordSubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, pCallbackData);
7864 }
7865 DispatchSubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, pCallbackData);
7866 for (auto intercept : layer_data->object_dispatch) {
7867 auto lock = intercept->write_lock();
7868 intercept->PostCallRecordSubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, pCallbackData);
7869 }
7870}
7871
7872#ifdef VK_USE_PLATFORM_ANDROID_KHR
7873
7874VKAPI_ATTR VkResult VKAPI_CALL GetAndroidHardwareBufferPropertiesANDROID(
7875 VkDevice device,
7876 const struct AHardwareBuffer* buffer,
7877 VkAndroidHardwareBufferPropertiesANDROID* pProperties) {
7878 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7879 bool skip = false;
7880 for (auto intercept : layer_data->object_dispatch) {
7881 auto lock = intercept->write_lock();
7882 skip |= intercept->PreCallValidateGetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties);
7883 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7884 }
7885 for (auto intercept : layer_data->object_dispatch) {
7886 auto lock = intercept->write_lock();
7887 intercept->PreCallRecordGetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties);
7888 }
7889 VkResult result = DispatchGetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties);
7890 for (auto intercept : layer_data->object_dispatch) {
7891 auto lock = intercept->write_lock();
7892 intercept->PostCallRecordGetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties, result);
7893 }
7894 return result;
7895}
7896
7897VKAPI_ATTR VkResult VKAPI_CALL GetMemoryAndroidHardwareBufferANDROID(
7898 VkDevice device,
7899 const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
7900 struct AHardwareBuffer** pBuffer) {
7901 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7902 bool skip = false;
7903 for (auto intercept : layer_data->object_dispatch) {
7904 auto lock = intercept->write_lock();
7905 skip |= intercept->PreCallValidateGetMemoryAndroidHardwareBufferANDROID(device, pInfo, pBuffer);
7906 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7907 }
7908 for (auto intercept : layer_data->object_dispatch) {
7909 auto lock = intercept->write_lock();
7910 intercept->PreCallRecordGetMemoryAndroidHardwareBufferANDROID(device, pInfo, pBuffer);
7911 }
7912 VkResult result = DispatchGetMemoryAndroidHardwareBufferANDROID(device, pInfo, pBuffer);
7913 for (auto intercept : layer_data->object_dispatch) {
7914 auto lock = intercept->write_lock();
7915 intercept->PostCallRecordGetMemoryAndroidHardwareBufferANDROID(device, pInfo, pBuffer, result);
7916 }
7917 return result;
7918}
7919#endif // VK_USE_PLATFORM_ANDROID_KHR
7920
7921
7922
7923
7924
7925
7926
7927
7928VKAPI_ATTR void VKAPI_CALL CmdSetSampleLocationsEXT(
7929 VkCommandBuffer commandBuffer,
7930 const VkSampleLocationsInfoEXT* pSampleLocationsInfo) {
7931 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7932 bool skip = false;
7933 for (auto intercept : layer_data->object_dispatch) {
7934 auto lock = intercept->write_lock();
7935 skip |= intercept->PreCallValidateCmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
7936 if (skip) return;
7937 }
7938 for (auto intercept : layer_data->object_dispatch) {
7939 auto lock = intercept->write_lock();
7940 intercept->PreCallRecordCmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
7941 }
7942 DispatchCmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
7943 for (auto intercept : layer_data->object_dispatch) {
7944 auto lock = intercept->write_lock();
7945 intercept->PostCallRecordCmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
7946 }
7947}
7948
7949VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMultisamplePropertiesEXT(
7950 VkPhysicalDevice physicalDevice,
7951 VkSampleCountFlagBits samples,
7952 VkMultisamplePropertiesEXT* pMultisampleProperties) {
7953 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
7954 bool skip = false;
7955 for (auto intercept : layer_data->object_dispatch) {
7956 auto lock = intercept->write_lock();
7957 skip |= intercept->PreCallValidateGetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties);
7958 if (skip) return;
7959 }
7960 for (auto intercept : layer_data->object_dispatch) {
7961 auto lock = intercept->write_lock();
7962 intercept->PreCallRecordGetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties);
7963 }
7964 DispatchGetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties);
7965 for (auto intercept : layer_data->object_dispatch) {
7966 auto lock = intercept->write_lock();
7967 intercept->PostCallRecordGetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties);
7968 }
7969}
7970
7971
7972
7973
7974
7975
7976
7977
7978VKAPI_ATTR VkResult VKAPI_CALL GetImageDrmFormatModifierPropertiesEXT(
7979 VkDevice device,
7980 VkImage image,
7981 VkImageDrmFormatModifierPropertiesEXT* pProperties) {
7982 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7983 bool skip = false;
7984 for (auto intercept : layer_data->object_dispatch) {
7985 auto lock = intercept->write_lock();
7986 skip |= intercept->PreCallValidateGetImageDrmFormatModifierPropertiesEXT(device, image, pProperties);
7987 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7988 }
7989 for (auto intercept : layer_data->object_dispatch) {
7990 auto lock = intercept->write_lock();
7991 intercept->PreCallRecordGetImageDrmFormatModifierPropertiesEXT(device, image, pProperties);
7992 }
7993 VkResult result = DispatchGetImageDrmFormatModifierPropertiesEXT(device, image, pProperties);
7994 for (auto intercept : layer_data->object_dispatch) {
7995 auto lock = intercept->write_lock();
7996 intercept->PostCallRecordGetImageDrmFormatModifierPropertiesEXT(device, image, pProperties, result);
7997 }
7998 return result;
7999}
8000
8001
8002
8003
8004
8005VKAPI_ATTR void VKAPI_CALL CmdBindShadingRateImageNV(
8006 VkCommandBuffer commandBuffer,
8007 VkImageView imageView,
8008 VkImageLayout imageLayout) {
8009 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8010 bool skip = false;
8011 for (auto intercept : layer_data->object_dispatch) {
8012 auto lock = intercept->write_lock();
8013 skip |= intercept->PreCallValidateCmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout);
8014 if (skip) return;
8015 }
8016 for (auto intercept : layer_data->object_dispatch) {
8017 auto lock = intercept->write_lock();
8018 intercept->PreCallRecordCmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout);
8019 }
8020 DispatchCmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout);
8021 for (auto intercept : layer_data->object_dispatch) {
8022 auto lock = intercept->write_lock();
8023 intercept->PostCallRecordCmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout);
8024 }
8025}
8026
8027VKAPI_ATTR void VKAPI_CALL CmdSetViewportShadingRatePaletteNV(
8028 VkCommandBuffer commandBuffer,
8029 uint32_t firstViewport,
8030 uint32_t viewportCount,
8031 const VkShadingRatePaletteNV* pShadingRatePalettes) {
8032 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8033 bool skip = false;
8034 for (auto intercept : layer_data->object_dispatch) {
8035 auto lock = intercept->write_lock();
8036 skip |= intercept->PreCallValidateCmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes);
8037 if (skip) return;
8038 }
8039 for (auto intercept : layer_data->object_dispatch) {
8040 auto lock = intercept->write_lock();
8041 intercept->PreCallRecordCmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes);
8042 }
8043 DispatchCmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes);
8044 for (auto intercept : layer_data->object_dispatch) {
8045 auto lock = intercept->write_lock();
8046 intercept->PostCallRecordCmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes);
8047 }
8048}
8049
8050VKAPI_ATTR void VKAPI_CALL CmdSetCoarseSampleOrderNV(
8051 VkCommandBuffer commandBuffer,
8052 VkCoarseSampleOrderTypeNV sampleOrderType,
8053 uint32_t customSampleOrderCount,
8054 const VkCoarseSampleOrderCustomNV* pCustomSampleOrders) {
8055 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8056 bool skip = false;
8057 for (auto intercept : layer_data->object_dispatch) {
8058 auto lock = intercept->write_lock();
8059 skip |= intercept->PreCallValidateCmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders);
8060 if (skip) return;
8061 }
8062 for (auto intercept : layer_data->object_dispatch) {
8063 auto lock = intercept->write_lock();
8064 intercept->PreCallRecordCmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders);
8065 }
8066 DispatchCmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders);
8067 for (auto intercept : layer_data->object_dispatch) {
8068 auto lock = intercept->write_lock();
8069 intercept->PostCallRecordCmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders);
8070 }
8071}
8072
8073
8074VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureNV(
8075 VkDevice device,
8076 const VkAccelerationStructureCreateInfoNV* pCreateInfo,
8077 const VkAllocationCallbacks* pAllocator,
8078 VkAccelerationStructureNV* pAccelerationStructure) {
8079 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8080 bool skip = false;
8081 for (auto intercept : layer_data->object_dispatch) {
8082 auto lock = intercept->write_lock();
8083 skip |= intercept->PreCallValidateCreateAccelerationStructureNV(device, pCreateInfo, pAllocator, pAccelerationStructure);
8084 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8085 }
8086 for (auto intercept : layer_data->object_dispatch) {
8087 auto lock = intercept->write_lock();
8088 intercept->PreCallRecordCreateAccelerationStructureNV(device, pCreateInfo, pAllocator, pAccelerationStructure);
8089 }
8090 VkResult result = DispatchCreateAccelerationStructureNV(device, pCreateInfo, pAllocator, pAccelerationStructure);
8091 for (auto intercept : layer_data->object_dispatch) {
8092 auto lock = intercept->write_lock();
8093 intercept->PostCallRecordCreateAccelerationStructureNV(device, pCreateInfo, pAllocator, pAccelerationStructure, result);
8094 }
8095 return result;
8096}
8097
8098VKAPI_ATTR void VKAPI_CALL DestroyAccelerationStructureNV(
8099 VkDevice device,
8100 VkAccelerationStructureNV accelerationStructure,
8101 const VkAllocationCallbacks* pAllocator) {
8102 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8103 bool skip = false;
8104 for (auto intercept : layer_data->object_dispatch) {
8105 auto lock = intercept->write_lock();
8106 skip |= intercept->PreCallValidateDestroyAccelerationStructureNV(device, accelerationStructure, pAllocator);
8107 if (skip) return;
8108 }
8109 for (auto intercept : layer_data->object_dispatch) {
8110 auto lock = intercept->write_lock();
8111 intercept->PreCallRecordDestroyAccelerationStructureNV(device, accelerationStructure, pAllocator);
8112 }
8113 DispatchDestroyAccelerationStructureNV(device, accelerationStructure, pAllocator);
8114 for (auto intercept : layer_data->object_dispatch) {
8115 auto lock = intercept->write_lock();
8116 intercept->PostCallRecordDestroyAccelerationStructureNV(device, accelerationStructure, pAllocator);
8117 }
8118}
8119
8120VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureMemoryRequirementsNV(
8121 VkDevice device,
8122 const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo,
8123 VkMemoryRequirements2KHR* pMemoryRequirements) {
8124 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8125 bool skip = false;
8126 for (auto intercept : layer_data->object_dispatch) {
8127 auto lock = intercept->write_lock();
8128 skip |= intercept->PreCallValidateGetAccelerationStructureMemoryRequirementsNV(device, pInfo, pMemoryRequirements);
8129 if (skip) return;
8130 }
8131 for (auto intercept : layer_data->object_dispatch) {
8132 auto lock = intercept->write_lock();
8133 intercept->PreCallRecordGetAccelerationStructureMemoryRequirementsNV(device, pInfo, pMemoryRequirements);
8134 }
8135 DispatchGetAccelerationStructureMemoryRequirementsNV(device, pInfo, pMemoryRequirements);
8136 for (auto intercept : layer_data->object_dispatch) {
8137 auto lock = intercept->write_lock();
8138 intercept->PostCallRecordGetAccelerationStructureMemoryRequirementsNV(device, pInfo, pMemoryRequirements);
8139 }
8140}
8141
8142VKAPI_ATTR VkResult VKAPI_CALL BindAccelerationStructureMemoryNV(
8143 VkDevice device,
8144 uint32_t bindInfoCount,
8145 const VkBindAccelerationStructureMemoryInfoNV* pBindInfos) {
8146 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8147 bool skip = false;
8148 for (auto intercept : layer_data->object_dispatch) {
8149 auto lock = intercept->write_lock();
8150 skip |= intercept->PreCallValidateBindAccelerationStructureMemoryNV(device, bindInfoCount, pBindInfos);
8151 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8152 }
8153 for (auto intercept : layer_data->object_dispatch) {
8154 auto lock = intercept->write_lock();
8155 intercept->PreCallRecordBindAccelerationStructureMemoryNV(device, bindInfoCount, pBindInfos);
8156 }
8157 VkResult result = DispatchBindAccelerationStructureMemoryNV(device, bindInfoCount, pBindInfos);
8158 for (auto intercept : layer_data->object_dispatch) {
8159 auto lock = intercept->write_lock();
8160 intercept->PostCallRecordBindAccelerationStructureMemoryNV(device, bindInfoCount, pBindInfos, result);
8161 }
8162 return result;
8163}
8164
8165VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructureNV(
8166 VkCommandBuffer commandBuffer,
8167 const VkAccelerationStructureInfoNV* pInfo,
8168 VkBuffer instanceData,
8169 VkDeviceSize instanceOffset,
8170 VkBool32 update,
8171 VkAccelerationStructureNV dst,
8172 VkAccelerationStructureNV src,
8173 VkBuffer scratch,
8174 VkDeviceSize scratchOffset) {
8175 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8176 bool skip = false;
8177 for (auto intercept : layer_data->object_dispatch) {
8178 auto lock = intercept->write_lock();
8179 skip |= intercept->PreCallValidateCmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
8180 if (skip) return;
8181 }
8182 for (auto intercept : layer_data->object_dispatch) {
8183 auto lock = intercept->write_lock();
8184 intercept->PreCallRecordCmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
8185 }
8186 DispatchCmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
8187 for (auto intercept : layer_data->object_dispatch) {
8188 auto lock = intercept->write_lock();
8189 intercept->PostCallRecordCmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
8190 }
8191}
8192
8193VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureNV(
8194 VkCommandBuffer commandBuffer,
8195 VkAccelerationStructureNV dst,
8196 VkAccelerationStructureNV src,
8197 VkCopyAccelerationStructureModeNV mode) {
8198 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8199 bool skip = false;
8200 for (auto intercept : layer_data->object_dispatch) {
8201 auto lock = intercept->write_lock();
8202 skip |= intercept->PreCallValidateCmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode);
8203 if (skip) return;
8204 }
8205 for (auto intercept : layer_data->object_dispatch) {
8206 auto lock = intercept->write_lock();
8207 intercept->PreCallRecordCmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode);
8208 }
8209 DispatchCmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode);
8210 for (auto intercept : layer_data->object_dispatch) {
8211 auto lock = intercept->write_lock();
8212 intercept->PostCallRecordCmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode);
8213 }
8214}
8215
8216VKAPI_ATTR void VKAPI_CALL CmdTraceRaysNV(
8217 VkCommandBuffer commandBuffer,
8218 VkBuffer raygenShaderBindingTableBuffer,
8219 VkDeviceSize raygenShaderBindingOffset,
8220 VkBuffer missShaderBindingTableBuffer,
8221 VkDeviceSize missShaderBindingOffset,
8222 VkDeviceSize missShaderBindingStride,
8223 VkBuffer hitShaderBindingTableBuffer,
8224 VkDeviceSize hitShaderBindingOffset,
8225 VkDeviceSize hitShaderBindingStride,
8226 VkBuffer callableShaderBindingTableBuffer,
8227 VkDeviceSize callableShaderBindingOffset,
8228 VkDeviceSize callableShaderBindingStride,
8229 uint32_t width,
8230 uint32_t height,
8231 uint32_t depth) {
8232 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8233 bool skip = false;
8234 for (auto intercept : layer_data->object_dispatch) {
8235 auto lock = intercept->write_lock();
8236 skip |= intercept->PreCallValidateCmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth);
8237 if (skip) return;
8238 }
8239 for (auto intercept : layer_data->object_dispatch) {
8240 auto lock = intercept->write_lock();
8241 intercept->PreCallRecordCmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth);
8242 }
8243 DispatchCmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth);
8244 for (auto intercept : layer_data->object_dispatch) {
8245 auto lock = intercept->write_lock();
8246 intercept->PostCallRecordCmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth);
8247 }
8248}
8249
8250VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesNV(
8251 VkDevice device,
8252 VkPipeline pipeline,
8253 uint32_t firstGroup,
8254 uint32_t groupCount,
8255 size_t dataSize,
8256 void* pData) {
8257 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8258 bool skip = false;
8259 for (auto intercept : layer_data->object_dispatch) {
8260 auto lock = intercept->write_lock();
8261 skip |= intercept->PreCallValidateGetRayTracingShaderGroupHandlesNV(device, pipeline, firstGroup, groupCount, dataSize, pData);
8262 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8263 }
8264 for (auto intercept : layer_data->object_dispatch) {
8265 auto lock = intercept->write_lock();
8266 intercept->PreCallRecordGetRayTracingShaderGroupHandlesNV(device, pipeline, firstGroup, groupCount, dataSize, pData);
8267 }
8268 VkResult result = DispatchGetRayTracingShaderGroupHandlesNV(device, pipeline, firstGroup, groupCount, dataSize, pData);
8269 for (auto intercept : layer_data->object_dispatch) {
8270 auto lock = intercept->write_lock();
8271 intercept->PostCallRecordGetRayTracingShaderGroupHandlesNV(device, pipeline, firstGroup, groupCount, dataSize, pData, result);
8272 }
8273 return result;
8274}
8275
8276VKAPI_ATTR VkResult VKAPI_CALL GetAccelerationStructureHandleNV(
8277 VkDevice device,
8278 VkAccelerationStructureNV accelerationStructure,
8279 size_t dataSize,
8280 void* pData) {
8281 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8282 bool skip = false;
8283 for (auto intercept : layer_data->object_dispatch) {
8284 auto lock = intercept->write_lock();
8285 skip |= intercept->PreCallValidateGetAccelerationStructureHandleNV(device, accelerationStructure, dataSize, pData);
8286 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8287 }
8288 for (auto intercept : layer_data->object_dispatch) {
8289 auto lock = intercept->write_lock();
8290 intercept->PreCallRecordGetAccelerationStructureHandleNV(device, accelerationStructure, dataSize, pData);
8291 }
8292 VkResult result = DispatchGetAccelerationStructureHandleNV(device, accelerationStructure, dataSize, pData);
8293 for (auto intercept : layer_data->object_dispatch) {
8294 auto lock = intercept->write_lock();
8295 intercept->PostCallRecordGetAccelerationStructureHandleNV(device, accelerationStructure, dataSize, pData, result);
8296 }
8297 return result;
8298}
8299
8300VKAPI_ATTR void VKAPI_CALL CmdWriteAccelerationStructuresPropertiesNV(
8301 VkCommandBuffer commandBuffer,
8302 uint32_t accelerationStructureCount,
8303 const VkAccelerationStructureNV* pAccelerationStructures,
8304 VkQueryType queryType,
8305 VkQueryPool queryPool,
8306 uint32_t firstQuery) {
8307 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8308 bool skip = false;
8309 for (auto intercept : layer_data->object_dispatch) {
8310 auto lock = intercept->write_lock();
8311 skip |= intercept->PreCallValidateCmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
8312 if (skip) return;
8313 }
8314 for (auto intercept : layer_data->object_dispatch) {
8315 auto lock = intercept->write_lock();
8316 intercept->PreCallRecordCmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
8317 }
8318 DispatchCmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
8319 for (auto intercept : layer_data->object_dispatch) {
8320 auto lock = intercept->write_lock();
8321 intercept->PostCallRecordCmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
8322 }
8323}
8324
8325VKAPI_ATTR VkResult VKAPI_CALL CompileDeferredNV(
8326 VkDevice device,
8327 VkPipeline pipeline,
8328 uint32_t shader) {
8329 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8330 bool skip = false;
8331 for (auto intercept : layer_data->object_dispatch) {
8332 auto lock = intercept->write_lock();
8333 skip |= intercept->PreCallValidateCompileDeferredNV(device, pipeline, shader);
8334 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8335 }
8336 for (auto intercept : layer_data->object_dispatch) {
8337 auto lock = intercept->write_lock();
8338 intercept->PreCallRecordCompileDeferredNV(device, pipeline, shader);
8339 }
8340 VkResult result = DispatchCompileDeferredNV(device, pipeline, shader);
8341 for (auto intercept : layer_data->object_dispatch) {
8342 auto lock = intercept->write_lock();
8343 intercept->PostCallRecordCompileDeferredNV(device, pipeline, shader, result);
8344 }
8345 return result;
8346}
8347
8348
8349
8350
8351
8352VKAPI_ATTR VkResult VKAPI_CALL GetMemoryHostPointerPropertiesEXT(
8353 VkDevice device,
8354 VkExternalMemoryHandleTypeFlagBits handleType,
8355 const void* pHostPointer,
8356 VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties) {
8357 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8358 bool skip = false;
8359 for (auto intercept : layer_data->object_dispatch) {
8360 auto lock = intercept->write_lock();
8361 skip |= intercept->PreCallValidateGetMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties);
8362 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8363 }
8364 for (auto intercept : layer_data->object_dispatch) {
8365 auto lock = intercept->write_lock();
8366 intercept->PreCallRecordGetMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties);
8367 }
8368 VkResult result = DispatchGetMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties);
8369 for (auto intercept : layer_data->object_dispatch) {
8370 auto lock = intercept->write_lock();
8371 intercept->PostCallRecordGetMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties, result);
8372 }
8373 return result;
8374}
8375
8376
8377VKAPI_ATTR void VKAPI_CALL CmdWriteBufferMarkerAMD(
8378 VkCommandBuffer commandBuffer,
8379 VkPipelineStageFlagBits pipelineStage,
8380 VkBuffer dstBuffer,
8381 VkDeviceSize dstOffset,
8382 uint32_t marker) {
8383 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8384 bool skip = false;
8385 for (auto intercept : layer_data->object_dispatch) {
8386 auto lock = intercept->write_lock();
8387 skip |= intercept->PreCallValidateCmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker);
8388 if (skip) return;
8389 }
8390 for (auto intercept : layer_data->object_dispatch) {
8391 auto lock = intercept->write_lock();
8392 intercept->PreCallRecordCmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker);
8393 }
8394 DispatchCmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker);
8395 for (auto intercept : layer_data->object_dispatch) {
8396 auto lock = intercept->write_lock();
8397 intercept->PostCallRecordCmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker);
8398 }
8399}
8400
8401
8402VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCalibrateableTimeDomainsEXT(
8403 VkPhysicalDevice physicalDevice,
8404 uint32_t* pTimeDomainCount,
8405 VkTimeDomainEXT* pTimeDomains) {
8406 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
8407 bool skip = false;
8408 for (auto intercept : layer_data->object_dispatch) {
8409 auto lock = intercept->write_lock();
8410 skip |= intercept->PreCallValidateGetPhysicalDeviceCalibrateableTimeDomainsEXT(physicalDevice, pTimeDomainCount, pTimeDomains);
8411 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8412 }
8413 for (auto intercept : layer_data->object_dispatch) {
8414 auto lock = intercept->write_lock();
8415 intercept->PreCallRecordGetPhysicalDeviceCalibrateableTimeDomainsEXT(physicalDevice, pTimeDomainCount, pTimeDomains);
8416 }
8417 VkResult result = DispatchGetPhysicalDeviceCalibrateableTimeDomainsEXT(physicalDevice, pTimeDomainCount, pTimeDomains);
8418 for (auto intercept : layer_data->object_dispatch) {
8419 auto lock = intercept->write_lock();
8420 intercept->PostCallRecordGetPhysicalDeviceCalibrateableTimeDomainsEXT(physicalDevice, pTimeDomainCount, pTimeDomains, result);
8421 }
8422 return result;
8423}
8424
8425VKAPI_ATTR VkResult VKAPI_CALL GetCalibratedTimestampsEXT(
8426 VkDevice device,
8427 uint32_t timestampCount,
8428 const VkCalibratedTimestampInfoEXT* pTimestampInfos,
8429 uint64_t* pTimestamps,
8430 uint64_t* pMaxDeviation) {
8431 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8432 bool skip = false;
8433 for (auto intercept : layer_data->object_dispatch) {
8434 auto lock = intercept->write_lock();
8435 skip |= intercept->PreCallValidateGetCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation);
8436 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8437 }
8438 for (auto intercept : layer_data->object_dispatch) {
8439 auto lock = intercept->write_lock();
8440 intercept->PreCallRecordGetCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation);
8441 }
8442 VkResult result = DispatchGetCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation);
8443 for (auto intercept : layer_data->object_dispatch) {
8444 auto lock = intercept->write_lock();
8445 intercept->PostCallRecordGetCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation, result);
8446 }
8447 return result;
8448}
8449
8450
8451
8452
8453#ifdef VK_USE_PLATFORM_GGP
8454#endif // VK_USE_PLATFORM_GGP
8455
8456
8457
8458
8459
8460VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksNV(
8461 VkCommandBuffer commandBuffer,
8462 uint32_t taskCount,
8463 uint32_t firstTask) {
8464 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8465 bool skip = false;
8466 for (auto intercept : layer_data->object_dispatch) {
8467 auto lock = intercept->write_lock();
8468 skip |= intercept->PreCallValidateCmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask);
8469 if (skip) return;
8470 }
8471 for (auto intercept : layer_data->object_dispatch) {
8472 auto lock = intercept->write_lock();
8473 intercept->PreCallRecordCmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask);
8474 }
8475 DispatchCmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask);
8476 for (auto intercept : layer_data->object_dispatch) {
8477 auto lock = intercept->write_lock();
8478 intercept->PostCallRecordCmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask);
8479 }
8480}
8481
8482VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectNV(
8483 VkCommandBuffer commandBuffer,
8484 VkBuffer buffer,
8485 VkDeviceSize offset,
8486 uint32_t drawCount,
8487 uint32_t stride) {
8488 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8489 bool skip = false;
8490 for (auto intercept : layer_data->object_dispatch) {
8491 auto lock = intercept->write_lock();
8492 skip |= intercept->PreCallValidateCmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride);
8493 if (skip) return;
8494 }
8495 for (auto intercept : layer_data->object_dispatch) {
8496 auto lock = intercept->write_lock();
8497 intercept->PreCallRecordCmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride);
8498 }
8499 DispatchCmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride);
8500 for (auto intercept : layer_data->object_dispatch) {
8501 auto lock = intercept->write_lock();
8502 intercept->PostCallRecordCmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride);
8503 }
8504}
8505
8506VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectCountNV(
8507 VkCommandBuffer commandBuffer,
8508 VkBuffer buffer,
8509 VkDeviceSize offset,
8510 VkBuffer countBuffer,
8511 VkDeviceSize countBufferOffset,
8512 uint32_t maxDrawCount,
8513 uint32_t stride) {
8514 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8515 bool skip = false;
8516 for (auto intercept : layer_data->object_dispatch) {
8517 auto lock = intercept->write_lock();
8518 skip |= intercept->PreCallValidateCmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
8519 if (skip) return;
8520 }
8521 for (auto intercept : layer_data->object_dispatch) {
8522 auto lock = intercept->write_lock();
8523 intercept->PreCallRecordCmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
8524 }
8525 DispatchCmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
8526 for (auto intercept : layer_data->object_dispatch) {
8527 auto lock = intercept->write_lock();
8528 intercept->PostCallRecordCmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
8529 }
8530}
8531
8532
8533
8534
8535VKAPI_ATTR void VKAPI_CALL CmdSetExclusiveScissorNV(
8536 VkCommandBuffer commandBuffer,
8537 uint32_t firstExclusiveScissor,
8538 uint32_t exclusiveScissorCount,
8539 const VkRect2D* pExclusiveScissors) {
8540 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8541 bool skip = false;
8542 for (auto intercept : layer_data->object_dispatch) {
8543 auto lock = intercept->write_lock();
8544 skip |= intercept->PreCallValidateCmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors);
8545 if (skip) return;
8546 }
8547 for (auto intercept : layer_data->object_dispatch) {
8548 auto lock = intercept->write_lock();
8549 intercept->PreCallRecordCmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors);
8550 }
8551 DispatchCmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors);
8552 for (auto intercept : layer_data->object_dispatch) {
8553 auto lock = intercept->write_lock();
8554 intercept->PostCallRecordCmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors);
8555 }
8556}
8557
8558
8559VKAPI_ATTR void VKAPI_CALL CmdSetCheckpointNV(
8560 VkCommandBuffer commandBuffer,
8561 const void* pCheckpointMarker) {
8562 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8563 bool skip = false;
8564 for (auto intercept : layer_data->object_dispatch) {
8565 auto lock = intercept->write_lock();
8566 skip |= intercept->PreCallValidateCmdSetCheckpointNV(commandBuffer, pCheckpointMarker);
8567 if (skip) return;
8568 }
8569 for (auto intercept : layer_data->object_dispatch) {
8570 auto lock = intercept->write_lock();
8571 intercept->PreCallRecordCmdSetCheckpointNV(commandBuffer, pCheckpointMarker);
8572 }
8573 DispatchCmdSetCheckpointNV(commandBuffer, pCheckpointMarker);
8574 for (auto intercept : layer_data->object_dispatch) {
8575 auto lock = intercept->write_lock();
8576 intercept->PostCallRecordCmdSetCheckpointNV(commandBuffer, pCheckpointMarker);
8577 }
8578}
8579
8580VKAPI_ATTR void VKAPI_CALL GetQueueCheckpointDataNV(
8581 VkQueue queue,
8582 uint32_t* pCheckpointDataCount,
8583 VkCheckpointDataNV* pCheckpointData) {
8584 auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
8585 bool skip = false;
8586 for (auto intercept : layer_data->object_dispatch) {
8587 auto lock = intercept->write_lock();
8588 skip |= intercept->PreCallValidateGetQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData);
8589 if (skip) return;
8590 }
8591 for (auto intercept : layer_data->object_dispatch) {
8592 auto lock = intercept->write_lock();
8593 intercept->PreCallRecordGetQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData);
8594 }
8595 DispatchGetQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData);
8596 for (auto intercept : layer_data->object_dispatch) {
8597 auto lock = intercept->write_lock();
8598 intercept->PostCallRecordGetQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData);
8599 }
8600}
8601
8602
8603
8604VKAPI_ATTR VkResult VKAPI_CALL InitializePerformanceApiINTEL(
8605 VkDevice device,
8606 const VkInitializePerformanceApiInfoINTEL* pInitializeInfo) {
8607 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8608 bool skip = false;
8609 for (auto intercept : layer_data->object_dispatch) {
8610 auto lock = intercept->write_lock();
8611 skip |= intercept->PreCallValidateInitializePerformanceApiINTEL(device, pInitializeInfo);
8612 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8613 }
8614 for (auto intercept : layer_data->object_dispatch) {
8615 auto lock = intercept->write_lock();
8616 intercept->PreCallRecordInitializePerformanceApiINTEL(device, pInitializeInfo);
8617 }
8618 VkResult result = DispatchInitializePerformanceApiINTEL(device, pInitializeInfo);
8619 for (auto intercept : layer_data->object_dispatch) {
8620 auto lock = intercept->write_lock();
8621 intercept->PostCallRecordInitializePerformanceApiINTEL(device, pInitializeInfo, result);
8622 }
8623 return result;
8624}
8625
8626VKAPI_ATTR void VKAPI_CALL UninitializePerformanceApiINTEL(
8627 VkDevice device) {
8628 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8629 bool skip = false;
8630 for (auto intercept : layer_data->object_dispatch) {
8631 auto lock = intercept->write_lock();
8632 skip |= intercept->PreCallValidateUninitializePerformanceApiINTEL(device);
8633 if (skip) return;
8634 }
8635 for (auto intercept : layer_data->object_dispatch) {
8636 auto lock = intercept->write_lock();
8637 intercept->PreCallRecordUninitializePerformanceApiINTEL(device);
8638 }
8639 DispatchUninitializePerformanceApiINTEL(device);
8640 for (auto intercept : layer_data->object_dispatch) {
8641 auto lock = intercept->write_lock();
8642 intercept->PostCallRecordUninitializePerformanceApiINTEL(device);
8643 }
8644}
8645
8646VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceMarkerINTEL(
8647 VkCommandBuffer commandBuffer,
8648 const VkPerformanceMarkerInfoINTEL* pMarkerInfo) {
8649 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8650 bool skip = false;
8651 for (auto intercept : layer_data->object_dispatch) {
8652 auto lock = intercept->write_lock();
8653 skip |= intercept->PreCallValidateCmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo);
8654 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8655 }
8656 for (auto intercept : layer_data->object_dispatch) {
8657 auto lock = intercept->write_lock();
8658 intercept->PreCallRecordCmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo);
8659 }
8660 VkResult result = DispatchCmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo);
8661 for (auto intercept : layer_data->object_dispatch) {
8662 auto lock = intercept->write_lock();
8663 intercept->PostCallRecordCmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo, result);
8664 }
8665 return result;
8666}
8667
8668VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceStreamMarkerINTEL(
8669 VkCommandBuffer commandBuffer,
8670 const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo) {
8671 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8672 bool skip = false;
8673 for (auto intercept : layer_data->object_dispatch) {
8674 auto lock = intercept->write_lock();
8675 skip |= intercept->PreCallValidateCmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo);
8676 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8677 }
8678 for (auto intercept : layer_data->object_dispatch) {
8679 auto lock = intercept->write_lock();
8680 intercept->PreCallRecordCmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo);
8681 }
8682 VkResult result = DispatchCmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo);
8683 for (auto intercept : layer_data->object_dispatch) {
8684 auto lock = intercept->write_lock();
8685 intercept->PostCallRecordCmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo, result);
8686 }
8687 return result;
8688}
8689
8690VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceOverrideINTEL(
8691 VkCommandBuffer commandBuffer,
8692 const VkPerformanceOverrideInfoINTEL* pOverrideInfo) {
8693 auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8694 bool skip = false;
8695 for (auto intercept : layer_data->object_dispatch) {
8696 auto lock = intercept->write_lock();
8697 skip |= intercept->PreCallValidateCmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo);
8698 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8699 }
8700 for (auto intercept : layer_data->object_dispatch) {
8701 auto lock = intercept->write_lock();
8702 intercept->PreCallRecordCmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo);
8703 }
8704 VkResult result = DispatchCmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo);
8705 for (auto intercept : layer_data->object_dispatch) {
8706 auto lock = intercept->write_lock();
8707 intercept->PostCallRecordCmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo, result);
8708 }
8709 return result;
8710}
8711
8712VKAPI_ATTR VkResult VKAPI_CALL AcquirePerformanceConfigurationINTEL(
8713 VkDevice device,
8714 const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo,
8715 VkPerformanceConfigurationINTEL* pConfiguration) {
8716 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8717 bool skip = false;
8718 for (auto intercept : layer_data->object_dispatch) {
8719 auto lock = intercept->write_lock();
8720 skip |= intercept->PreCallValidateAcquirePerformanceConfigurationINTEL(device, pAcquireInfo, pConfiguration);
8721 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8722 }
8723 for (auto intercept : layer_data->object_dispatch) {
8724 auto lock = intercept->write_lock();
8725 intercept->PreCallRecordAcquirePerformanceConfigurationINTEL(device, pAcquireInfo, pConfiguration);
8726 }
8727 VkResult result = DispatchAcquirePerformanceConfigurationINTEL(device, pAcquireInfo, pConfiguration);
8728 for (auto intercept : layer_data->object_dispatch) {
8729 auto lock = intercept->write_lock();
8730 intercept->PostCallRecordAcquirePerformanceConfigurationINTEL(device, pAcquireInfo, pConfiguration, result);
8731 }
8732 return result;
8733}
8734
8735VKAPI_ATTR VkResult VKAPI_CALL ReleasePerformanceConfigurationINTEL(
8736 VkDevice device,
8737 VkPerformanceConfigurationINTEL configuration) {
8738 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8739 bool skip = false;
8740 for (auto intercept : layer_data->object_dispatch) {
8741 auto lock = intercept->write_lock();
8742 skip |= intercept->PreCallValidateReleasePerformanceConfigurationINTEL(device, configuration);
8743 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8744 }
8745 for (auto intercept : layer_data->object_dispatch) {
8746 auto lock = intercept->write_lock();
8747 intercept->PreCallRecordReleasePerformanceConfigurationINTEL(device, configuration);
8748 }
8749 VkResult result = DispatchReleasePerformanceConfigurationINTEL(device, configuration);
8750 for (auto intercept : layer_data->object_dispatch) {
8751 auto lock = intercept->write_lock();
8752 intercept->PostCallRecordReleasePerformanceConfigurationINTEL(device, configuration, result);
8753 }
8754 return result;
8755}
8756
8757VKAPI_ATTR VkResult VKAPI_CALL QueueSetPerformanceConfigurationINTEL(
8758 VkQueue queue,
8759 VkPerformanceConfigurationINTEL configuration) {
8760 auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
8761 bool skip = false;
8762 for (auto intercept : layer_data->object_dispatch) {
8763 auto lock = intercept->write_lock();
8764 skip |= intercept->PreCallValidateQueueSetPerformanceConfigurationINTEL(queue, configuration);
8765 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8766 }
8767 for (auto intercept : layer_data->object_dispatch) {
8768 auto lock = intercept->write_lock();
8769 intercept->PreCallRecordQueueSetPerformanceConfigurationINTEL(queue, configuration);
8770 }
8771 VkResult result = DispatchQueueSetPerformanceConfigurationINTEL(queue, configuration);
8772 for (auto intercept : layer_data->object_dispatch) {
8773 auto lock = intercept->write_lock();
8774 intercept->PostCallRecordQueueSetPerformanceConfigurationINTEL(queue, configuration, result);
8775 }
8776 return result;
8777}
8778
8779VKAPI_ATTR VkResult VKAPI_CALL GetPerformanceParameterINTEL(
8780 VkDevice device,
8781 VkPerformanceParameterTypeINTEL parameter,
8782 VkPerformanceValueINTEL* pValue) {
8783 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8784 bool skip = false;
8785 for (auto intercept : layer_data->object_dispatch) {
8786 auto lock = intercept->write_lock();
8787 skip |= intercept->PreCallValidateGetPerformanceParameterINTEL(device, parameter, pValue);
8788 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8789 }
8790 for (auto intercept : layer_data->object_dispatch) {
8791 auto lock = intercept->write_lock();
8792 intercept->PreCallRecordGetPerformanceParameterINTEL(device, parameter, pValue);
8793 }
8794 VkResult result = DispatchGetPerformanceParameterINTEL(device, parameter, pValue);
8795 for (auto intercept : layer_data->object_dispatch) {
8796 auto lock = intercept->write_lock();
8797 intercept->PostCallRecordGetPerformanceParameterINTEL(device, parameter, pValue, result);
8798 }
8799 return result;
8800}
8801
8802
8803
8804VKAPI_ATTR void VKAPI_CALL SetLocalDimmingAMD(
8805 VkDevice device,
8806 VkSwapchainKHR swapChain,
8807 VkBool32 localDimmingEnable) {
8808 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8809 bool skip = false;
8810 for (auto intercept : layer_data->object_dispatch) {
8811 auto lock = intercept->write_lock();
8812 skip |= intercept->PreCallValidateSetLocalDimmingAMD(device, swapChain, localDimmingEnable);
8813 if (skip) return;
8814 }
8815 for (auto intercept : layer_data->object_dispatch) {
8816 auto lock = intercept->write_lock();
8817 intercept->PreCallRecordSetLocalDimmingAMD(device, swapChain, localDimmingEnable);
8818 }
8819 DispatchSetLocalDimmingAMD(device, swapChain, localDimmingEnable);
8820 for (auto intercept : layer_data->object_dispatch) {
8821 auto lock = intercept->write_lock();
8822 intercept->PostCallRecordSetLocalDimmingAMD(device, swapChain, localDimmingEnable);
8823 }
8824}
8825
8826#ifdef VK_USE_PLATFORM_FUCHSIA
8827
8828VKAPI_ATTR VkResult VKAPI_CALL CreateImagePipeSurfaceFUCHSIA(
8829 VkInstance instance,
8830 const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo,
8831 const VkAllocationCallbacks* pAllocator,
8832 VkSurfaceKHR* pSurface) {
8833 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
8834 bool skip = false;
8835 for (auto intercept : layer_data->object_dispatch) {
8836 auto lock = intercept->write_lock();
8837 skip |= intercept->PreCallValidateCreateImagePipeSurfaceFUCHSIA(instance, pCreateInfo, pAllocator, pSurface);
8838 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8839 }
8840 for (auto intercept : layer_data->object_dispatch) {
8841 auto lock = intercept->write_lock();
8842 intercept->PreCallRecordCreateImagePipeSurfaceFUCHSIA(instance, pCreateInfo, pAllocator, pSurface);
8843 }
8844 VkResult result = DispatchCreateImagePipeSurfaceFUCHSIA(instance, pCreateInfo, pAllocator, pSurface);
8845 for (auto intercept : layer_data->object_dispatch) {
8846 auto lock = intercept->write_lock();
8847 intercept->PostCallRecordCreateImagePipeSurfaceFUCHSIA(instance, pCreateInfo, pAllocator, pSurface, result);
8848 }
8849 return result;
8850}
8851#endif // VK_USE_PLATFORM_FUCHSIA
8852
8853#ifdef VK_USE_PLATFORM_METAL_EXT
8854
8855VKAPI_ATTR VkResult VKAPI_CALL CreateMetalSurfaceEXT(
8856 VkInstance instance,
8857 const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
8858 const VkAllocationCallbacks* pAllocator,
8859 VkSurfaceKHR* pSurface) {
8860 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
8861 bool skip = false;
8862 for (auto intercept : layer_data->object_dispatch) {
8863 auto lock = intercept->write_lock();
8864 skip |= intercept->PreCallValidateCreateMetalSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
8865 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8866 }
8867 for (auto intercept : layer_data->object_dispatch) {
8868 auto lock = intercept->write_lock();
8869 intercept->PreCallRecordCreateMetalSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
8870 }
8871 VkResult result = DispatchCreateMetalSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
8872 for (auto intercept : layer_data->object_dispatch) {
8873 auto lock = intercept->write_lock();
8874 intercept->PostCallRecordCreateMetalSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface, result);
8875 }
8876 return result;
8877}
8878#endif // VK_USE_PLATFORM_METAL_EXT
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressEXT(
8889 VkDevice device,
8890 const VkBufferDeviceAddressInfoEXT* pInfo) {
8891 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8892 bool skip = false;
8893 for (auto intercept : layer_data->object_dispatch) {
8894 auto lock = intercept->write_lock();
8895 skip |= intercept->PreCallValidateGetBufferDeviceAddressEXT(device, pInfo);
8896 if (skip) return 0;
8897 }
8898 for (auto intercept : layer_data->object_dispatch) {
8899 auto lock = intercept->write_lock();
8900 intercept->PreCallRecordGetBufferDeviceAddressEXT(device, pInfo);
8901 }
8902 VkDeviceAddress result = DispatchGetBufferDeviceAddressEXT(device, pInfo);
8903 for (auto intercept : layer_data->object_dispatch) {
8904 auto lock = intercept->write_lock();
8905 intercept->PostCallRecordGetBufferDeviceAddressEXT(device, pInfo);
8906 }
8907 return result;
8908}
8909
8910
8911
8912
8913VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixPropertiesNV(
8914 VkPhysicalDevice physicalDevice,
8915 uint32_t* pPropertyCount,
8916 VkCooperativeMatrixPropertiesNV* pProperties) {
8917 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
8918 bool skip = false;
8919 for (auto intercept : layer_data->object_dispatch) {
8920 auto lock = intercept->write_lock();
8921 skip |= intercept->PreCallValidateGetPhysicalDeviceCooperativeMatrixPropertiesNV(physicalDevice, pPropertyCount, pProperties);
8922 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8923 }
8924 for (auto intercept : layer_data->object_dispatch) {
8925 auto lock = intercept->write_lock();
8926 intercept->PreCallRecordGetPhysicalDeviceCooperativeMatrixPropertiesNV(physicalDevice, pPropertyCount, pProperties);
8927 }
8928 VkResult result = DispatchGetPhysicalDeviceCooperativeMatrixPropertiesNV(physicalDevice, pPropertyCount, pProperties);
8929 for (auto intercept : layer_data->object_dispatch) {
8930 auto lock = intercept->write_lock();
8931 intercept->PostCallRecordGetPhysicalDeviceCooperativeMatrixPropertiesNV(physicalDevice, pPropertyCount, pProperties, result);
8932 }
8933 return result;
8934}
8935
8936
8937VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(
8938 VkPhysicalDevice physicalDevice,
8939 uint32_t* pCombinationCount,
8940 VkFramebufferMixedSamplesCombinationNV* pCombinations) {
8941 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
8942 bool skip = false;
8943 for (auto intercept : layer_data->object_dispatch) {
8944 auto lock = intercept->write_lock();
8945 skip |= intercept->PreCallValidateGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(physicalDevice, pCombinationCount, pCombinations);
8946 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8947 }
8948 for (auto intercept : layer_data->object_dispatch) {
8949 auto lock = intercept->write_lock();
8950 intercept->PreCallRecordGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(physicalDevice, pCombinationCount, pCombinations);
8951 }
8952 VkResult result = DispatchGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(physicalDevice, pCombinationCount, pCombinations);
8953 for (auto intercept : layer_data->object_dispatch) {
8954 auto lock = intercept->write_lock();
8955 intercept->PostCallRecordGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(physicalDevice, pCombinationCount, pCombinations, result);
8956 }
8957 return result;
8958}
8959
8960
8961
8962#ifdef VK_USE_PLATFORM_WIN32_KHR
8963
8964VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModes2EXT(
8965 VkPhysicalDevice physicalDevice,
8966 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
8967 uint32_t* pPresentModeCount,
8968 VkPresentModeKHR* pPresentModes) {
8969 auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
8970 bool skip = false;
8971 for (auto intercept : layer_data->object_dispatch) {
8972 auto lock = intercept->write_lock();
8973 skip |= intercept->PreCallValidateGetPhysicalDeviceSurfacePresentModes2EXT(physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes);
8974 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8975 }
8976 for (auto intercept : layer_data->object_dispatch) {
8977 auto lock = intercept->write_lock();
8978 intercept->PreCallRecordGetPhysicalDeviceSurfacePresentModes2EXT(physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes);
8979 }
8980 VkResult result = DispatchGetPhysicalDeviceSurfacePresentModes2EXT(physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes);
8981 for (auto intercept : layer_data->object_dispatch) {
8982 auto lock = intercept->write_lock();
8983 intercept->PostCallRecordGetPhysicalDeviceSurfacePresentModes2EXT(physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes, result);
8984 }
8985 return result;
8986}
8987
8988VKAPI_ATTR VkResult VKAPI_CALL AcquireFullScreenExclusiveModeEXT(
8989 VkDevice device,
8990 VkSwapchainKHR swapchain) {
8991 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8992 bool skip = false;
8993 for (auto intercept : layer_data->object_dispatch) {
8994 auto lock = intercept->write_lock();
8995 skip |= intercept->PreCallValidateAcquireFullScreenExclusiveModeEXT(device, swapchain);
8996 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8997 }
8998 for (auto intercept : layer_data->object_dispatch) {
8999 auto lock = intercept->write_lock();
9000 intercept->PreCallRecordAcquireFullScreenExclusiveModeEXT(device, swapchain);
9001 }
9002 VkResult result = DispatchAcquireFullScreenExclusiveModeEXT(device, swapchain);
9003 for (auto intercept : layer_data->object_dispatch) {
9004 auto lock = intercept->write_lock();
9005 intercept->PostCallRecordAcquireFullScreenExclusiveModeEXT(device, swapchain, result);
9006 }
9007 return result;
9008}
9009
9010VKAPI_ATTR VkResult VKAPI_CALL ReleaseFullScreenExclusiveModeEXT(
9011 VkDevice device,
9012 VkSwapchainKHR swapchain) {
9013 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
9014 bool skip = false;
9015 for (auto intercept : layer_data->object_dispatch) {
9016 auto lock = intercept->write_lock();
9017 skip |= intercept->PreCallValidateReleaseFullScreenExclusiveModeEXT(device, swapchain);
9018 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
9019 }
9020 for (auto intercept : layer_data->object_dispatch) {
9021 auto lock = intercept->write_lock();
9022 intercept->PreCallRecordReleaseFullScreenExclusiveModeEXT(device, swapchain);
9023 }
9024 VkResult result = DispatchReleaseFullScreenExclusiveModeEXT(device, swapchain);
9025 for (auto intercept : layer_data->object_dispatch) {
9026 auto lock = intercept->write_lock();
9027 intercept->PostCallRecordReleaseFullScreenExclusiveModeEXT(device, swapchain, result);
9028 }
9029 return result;
9030}
9031
9032VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModes2EXT(
9033 VkDevice device,
9034 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
9035 VkDeviceGroupPresentModeFlagsKHR* pModes) {
9036 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
9037 bool skip = false;
9038 for (auto intercept : layer_data->object_dispatch) {
9039 auto lock = intercept->write_lock();
9040 skip |= intercept->PreCallValidateGetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes);
9041 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
9042 }
9043 for (auto intercept : layer_data->object_dispatch) {
9044 auto lock = intercept->write_lock();
9045 intercept->PreCallRecordGetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes);
9046 }
9047 VkResult result = DispatchGetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes);
9048 for (auto intercept : layer_data->object_dispatch) {
9049 auto lock = intercept->write_lock();
9050 intercept->PostCallRecordGetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes, result);
9051 }
9052 return result;
9053}
9054#endif // VK_USE_PLATFORM_WIN32_KHR
9055
9056
9057VKAPI_ATTR VkResult VKAPI_CALL CreateHeadlessSurfaceEXT(
9058 VkInstance instance,
9059 const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo,
9060 const VkAllocationCallbacks* pAllocator,
9061 VkSurfaceKHR* pSurface) {
9062 auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
9063 bool skip = false;
9064 for (auto intercept : layer_data->object_dispatch) {
9065 auto lock = intercept->write_lock();
9066 skip |= intercept->PreCallValidateCreateHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
9067 if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
9068 }
9069 for (auto intercept : layer_data->object_dispatch) {
9070 auto lock = intercept->write_lock();
9071 intercept->PreCallRecordCreateHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
9072 }
9073 VkResult result = DispatchCreateHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
9074 for (auto intercept : layer_data->object_dispatch) {
9075 auto lock = intercept->write_lock();
9076 intercept->PostCallRecordCreateHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface, result);
9077 }
9078 return result;
9079}
9080
9081
9082VKAPI_ATTR void VKAPI_CALL ResetQueryPoolEXT(
9083 VkDevice device,
9084 VkQueryPool queryPool,
9085 uint32_t firstQuery,
9086 uint32_t queryCount) {
9087 auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
9088 bool skip = false;
9089 for (auto intercept : layer_data->object_dispatch) {
9090 auto lock = intercept->write_lock();
9091 skip |= intercept->PreCallValidateResetQueryPoolEXT(device, queryPool, firstQuery, queryCount);
9092 if (skip) return;
9093 }
9094 for (auto intercept : layer_data->object_dispatch) {
9095 auto lock = intercept->write_lock();
9096 intercept->PreCallRecordResetQueryPoolEXT(device, queryPool, firstQuery, queryCount);
9097 }
9098 DispatchResetQueryPoolEXT(device, queryPool, firstQuery, queryCount);
9099 for (auto intercept : layer_data->object_dispatch) {
9100 auto lock = intercept->write_lock();
9101 intercept->PostCallRecordResetQueryPoolEXT(device, queryPool, firstQuery, queryCount);
9102 }
9103}
9104
9105// Map of intercepted ApiName to its associated function data
9106const std::unordered_map<std::string, function_data> name_to_funcptr_map = {
9107 {"vkCreateInstance", {true, (void*)CreateInstance}},
9108 {"vkDestroyInstance", {true, (void*)DestroyInstance}},
9109 {"vkEnumeratePhysicalDevices", {true, (void*)EnumeratePhysicalDevices}},
9110 {"vkGetPhysicalDeviceFeatures", {true, (void*)GetPhysicalDeviceFeatures}},
9111 {"vkGetPhysicalDeviceFormatProperties", {true, (void*)GetPhysicalDeviceFormatProperties}},
9112 {"vkGetPhysicalDeviceImageFormatProperties", {true, (void*)GetPhysicalDeviceImageFormatProperties}},
9113 {"vkGetPhysicalDeviceProperties", {true, (void*)GetPhysicalDeviceProperties}},
9114 {"vkGetPhysicalDeviceQueueFamilyProperties", {true, (void*)GetPhysicalDeviceQueueFamilyProperties}},
9115 {"vkGetPhysicalDeviceMemoryProperties", {true, (void*)GetPhysicalDeviceMemoryProperties}},
9116 {"vkGetInstanceProcAddr", {true, (void*)GetInstanceProcAddr}},
9117 {"vkGetDeviceProcAddr", {false, (void*)GetDeviceProcAddr}},
9118 {"vkCreateDevice", {true, (void*)CreateDevice}},
9119 {"vkDestroyDevice", {false, (void*)DestroyDevice}},
9120 {"vkEnumerateInstanceExtensionProperties", {false, (void*)EnumerateInstanceExtensionProperties}},
9121 {"vkEnumerateDeviceExtensionProperties", {true, (void*)EnumerateDeviceExtensionProperties}},
9122 {"vkEnumerateInstanceLayerProperties", {false, (void*)EnumerateInstanceLayerProperties}},
9123 {"vkEnumerateDeviceLayerProperties", {true, (void*)EnumerateDeviceLayerProperties}},
9124 {"vkGetDeviceQueue", {false, (void*)GetDeviceQueue}},
9125 {"vkQueueSubmit", {false, (void*)QueueSubmit}},
9126 {"vkQueueWaitIdle", {false, (void*)QueueWaitIdle}},
9127 {"vkDeviceWaitIdle", {false, (void*)DeviceWaitIdle}},
9128 {"vkAllocateMemory", {false, (void*)AllocateMemory}},
9129 {"vkFreeMemory", {false, (void*)FreeMemory}},
9130 {"vkMapMemory", {false, (void*)MapMemory}},
9131 {"vkUnmapMemory", {false, (void*)UnmapMemory}},
9132 {"vkFlushMappedMemoryRanges", {false, (void*)FlushMappedMemoryRanges}},
9133 {"vkInvalidateMappedMemoryRanges", {false, (void*)InvalidateMappedMemoryRanges}},
9134 {"vkGetDeviceMemoryCommitment", {false, (void*)GetDeviceMemoryCommitment}},
9135 {"vkBindBufferMemory", {false, (void*)BindBufferMemory}},
9136 {"vkBindImageMemory", {false, (void*)BindImageMemory}},
9137 {"vkGetBufferMemoryRequirements", {false, (void*)GetBufferMemoryRequirements}},
9138 {"vkGetImageMemoryRequirements", {false, (void*)GetImageMemoryRequirements}},
9139 {"vkGetImageSparseMemoryRequirements", {false, (void*)GetImageSparseMemoryRequirements}},
9140 {"vkGetPhysicalDeviceSparseImageFormatProperties", {true, (void*)GetPhysicalDeviceSparseImageFormatProperties}},
9141 {"vkQueueBindSparse", {false, (void*)QueueBindSparse}},
9142 {"vkCreateFence", {false, (void*)CreateFence}},
9143 {"vkDestroyFence", {false, (void*)DestroyFence}},
9144 {"vkResetFences", {false, (void*)ResetFences}},
9145 {"vkGetFenceStatus", {false, (void*)GetFenceStatus}},
9146 {"vkWaitForFences", {false, (void*)WaitForFences}},
9147 {"vkCreateSemaphore", {false, (void*)CreateSemaphore}},
9148 {"vkDestroySemaphore", {false, (void*)DestroySemaphore}},
9149 {"vkCreateEvent", {false, (void*)CreateEvent}},
9150 {"vkDestroyEvent", {false, (void*)DestroyEvent}},
9151 {"vkGetEventStatus", {false, (void*)GetEventStatus}},
9152 {"vkSetEvent", {false, (void*)SetEvent}},
9153 {"vkResetEvent", {false, (void*)ResetEvent}},
9154 {"vkCreateQueryPool", {false, (void*)CreateQueryPool}},
9155 {"vkDestroyQueryPool", {false, (void*)DestroyQueryPool}},
9156 {"vkGetQueryPoolResults", {false, (void*)GetQueryPoolResults}},
9157 {"vkCreateBuffer", {false, (void*)CreateBuffer}},
9158 {"vkDestroyBuffer", {false, (void*)DestroyBuffer}},
9159 {"vkCreateBufferView", {false, (void*)CreateBufferView}},
9160 {"vkDestroyBufferView", {false, (void*)DestroyBufferView}},
9161 {"vkCreateImage", {false, (void*)CreateImage}},
9162 {"vkDestroyImage", {false, (void*)DestroyImage}},
9163 {"vkGetImageSubresourceLayout", {false, (void*)GetImageSubresourceLayout}},
9164 {"vkCreateImageView", {false, (void*)CreateImageView}},
9165 {"vkDestroyImageView", {false, (void*)DestroyImageView}},
9166 {"vkCreateShaderModule", {false, (void*)CreateShaderModule}},
9167 {"vkDestroyShaderModule", {false, (void*)DestroyShaderModule}},
9168 {"vkCreatePipelineCache", {false, (void*)CreatePipelineCache}},
9169 {"vkDestroyPipelineCache", {false, (void*)DestroyPipelineCache}},
9170 {"vkGetPipelineCacheData", {false, (void*)GetPipelineCacheData}},
9171 {"vkMergePipelineCaches", {false, (void*)MergePipelineCaches}},
9172 {"vkCreateGraphicsPipelines", {false, (void*)CreateGraphicsPipelines}},
9173 {"vkCreateComputePipelines", {false, (void*)CreateComputePipelines}},
9174 {"vkDestroyPipeline", {false, (void*)DestroyPipeline}},
9175 {"vkCreatePipelineLayout", {false, (void*)CreatePipelineLayout}},
9176 {"vkDestroyPipelineLayout", {false, (void*)DestroyPipelineLayout}},
9177 {"vkCreateSampler", {false, (void*)CreateSampler}},
9178 {"vkDestroySampler", {false, (void*)DestroySampler}},
9179 {"vkCreateDescriptorSetLayout", {false, (void*)CreateDescriptorSetLayout}},
9180 {"vkDestroyDescriptorSetLayout", {false, (void*)DestroyDescriptorSetLayout}},
9181 {"vkCreateDescriptorPool", {false, (void*)CreateDescriptorPool}},
9182 {"vkDestroyDescriptorPool", {false, (void*)DestroyDescriptorPool}},
9183 {"vkResetDescriptorPool", {false, (void*)ResetDescriptorPool}},
9184 {"vkAllocateDescriptorSets", {false, (void*)AllocateDescriptorSets}},
9185 {"vkFreeDescriptorSets", {false, (void*)FreeDescriptorSets}},
9186 {"vkUpdateDescriptorSets", {false, (void*)UpdateDescriptorSets}},
9187 {"vkCreateFramebuffer", {false, (void*)CreateFramebuffer}},
9188 {"vkDestroyFramebuffer", {false, (void*)DestroyFramebuffer}},
9189 {"vkCreateRenderPass", {false, (void*)CreateRenderPass}},
9190 {"vkDestroyRenderPass", {false, (void*)DestroyRenderPass}},
9191 {"vkGetRenderAreaGranularity", {false, (void*)GetRenderAreaGranularity}},
9192 {"vkCreateCommandPool", {false, (void*)CreateCommandPool}},
9193 {"vkDestroyCommandPool", {false, (void*)DestroyCommandPool}},
9194 {"vkResetCommandPool", {false, (void*)ResetCommandPool}},
9195 {"vkAllocateCommandBuffers", {false, (void*)AllocateCommandBuffers}},
9196 {"vkFreeCommandBuffers", {false, (void*)FreeCommandBuffers}},
9197 {"vkBeginCommandBuffer", {false, (void*)BeginCommandBuffer}},
9198 {"vkEndCommandBuffer", {false, (void*)EndCommandBuffer}},
9199 {"vkResetCommandBuffer", {false, (void*)ResetCommandBuffer}},
9200 {"vkCmdBindPipeline", {false, (void*)CmdBindPipeline}},
9201 {"vkCmdSetViewport", {false, (void*)CmdSetViewport}},
9202 {"vkCmdSetScissor", {false, (void*)CmdSetScissor}},
9203 {"vkCmdSetLineWidth", {false, (void*)CmdSetLineWidth}},
9204 {"vkCmdSetDepthBias", {false, (void*)CmdSetDepthBias}},
9205 {"vkCmdSetBlendConstants", {false, (void*)CmdSetBlendConstants}},
9206 {"vkCmdSetDepthBounds", {false, (void*)CmdSetDepthBounds}},
9207 {"vkCmdSetStencilCompareMask", {false, (void*)CmdSetStencilCompareMask}},
9208 {"vkCmdSetStencilWriteMask", {false, (void*)CmdSetStencilWriteMask}},
9209 {"vkCmdSetStencilReference", {false, (void*)CmdSetStencilReference}},
9210 {"vkCmdBindDescriptorSets", {false, (void*)CmdBindDescriptorSets}},
9211 {"vkCmdBindIndexBuffer", {false, (void*)CmdBindIndexBuffer}},
9212 {"vkCmdBindVertexBuffers", {false, (void*)CmdBindVertexBuffers}},
9213 {"vkCmdDraw", {false, (void*)CmdDraw}},
9214 {"vkCmdDrawIndexed", {false, (void*)CmdDrawIndexed}},
9215 {"vkCmdDrawIndirect", {false, (void*)CmdDrawIndirect}},
9216 {"vkCmdDrawIndexedIndirect", {false, (void*)CmdDrawIndexedIndirect}},
9217 {"vkCmdDispatch", {false, (void*)CmdDispatch}},
9218 {"vkCmdDispatchIndirect", {false, (void*)CmdDispatchIndirect}},
9219 {"vkCmdCopyBuffer", {false, (void*)CmdCopyBuffer}},
9220 {"vkCmdCopyImage", {false, (void*)CmdCopyImage}},
9221 {"vkCmdBlitImage", {false, (void*)CmdBlitImage}},
9222 {"vkCmdCopyBufferToImage", {false, (void*)CmdCopyBufferToImage}},
9223 {"vkCmdCopyImageToBuffer", {false, (void*)CmdCopyImageToBuffer}},
9224 {"vkCmdUpdateBuffer", {false, (void*)CmdUpdateBuffer}},
9225 {"vkCmdFillBuffer", {false, (void*)CmdFillBuffer}},
9226 {"vkCmdClearColorImage", {false, (void*)CmdClearColorImage}},
9227 {"vkCmdClearDepthStencilImage", {false, (void*)CmdClearDepthStencilImage}},
9228 {"vkCmdClearAttachments", {false, (void*)CmdClearAttachments}},
9229 {"vkCmdResolveImage", {false, (void*)CmdResolveImage}},
9230 {"vkCmdSetEvent", {false, (void*)CmdSetEvent}},
9231 {"vkCmdResetEvent", {false, (void*)CmdResetEvent}},
9232 {"vkCmdWaitEvents", {false, (void*)CmdWaitEvents}},
9233 {"vkCmdPipelineBarrier", {false, (void*)CmdPipelineBarrier}},
9234 {"vkCmdBeginQuery", {false, (void*)CmdBeginQuery}},
9235 {"vkCmdEndQuery", {false, (void*)CmdEndQuery}},
9236 {"vkCmdResetQueryPool", {false, (void*)CmdResetQueryPool}},
9237 {"vkCmdWriteTimestamp", {false, (void*)CmdWriteTimestamp}},
9238 {"vkCmdCopyQueryPoolResults", {false, (void*)CmdCopyQueryPoolResults}},
9239 {"vkCmdPushConstants", {false, (void*)CmdPushConstants}},
9240 {"vkCmdBeginRenderPass", {false, (void*)CmdBeginRenderPass}},
9241 {"vkCmdNextSubpass", {false, (void*)CmdNextSubpass}},
9242 {"vkCmdEndRenderPass", {false, (void*)CmdEndRenderPass}},
9243 {"vkCmdExecuteCommands", {false, (void*)CmdExecuteCommands}},
9244 {"vkBindBufferMemory2", {false, (void*)BindBufferMemory2}},
9245 {"vkBindImageMemory2", {false, (void*)BindImageMemory2}},
9246 {"vkGetDeviceGroupPeerMemoryFeatures", {false, (void*)GetDeviceGroupPeerMemoryFeatures}},
9247 {"vkCmdSetDeviceMask", {false, (void*)CmdSetDeviceMask}},
9248 {"vkCmdDispatchBase", {false, (void*)CmdDispatchBase}},
9249 {"vkEnumeratePhysicalDeviceGroups", {true, (void*)EnumeratePhysicalDeviceGroups}},
9250 {"vkGetImageMemoryRequirements2", {false, (void*)GetImageMemoryRequirements2}},
9251 {"vkGetBufferMemoryRequirements2", {false, (void*)GetBufferMemoryRequirements2}},
9252 {"vkGetImageSparseMemoryRequirements2", {false, (void*)GetImageSparseMemoryRequirements2}},
9253 {"vkGetPhysicalDeviceFeatures2", {true, (void*)GetPhysicalDeviceFeatures2}},
9254 {"vkGetPhysicalDeviceProperties2", {true, (void*)GetPhysicalDeviceProperties2}},
9255 {"vkGetPhysicalDeviceFormatProperties2", {true, (void*)GetPhysicalDeviceFormatProperties2}},
9256 {"vkGetPhysicalDeviceImageFormatProperties2", {true, (void*)GetPhysicalDeviceImageFormatProperties2}},
9257 {"vkGetPhysicalDeviceQueueFamilyProperties2", {true, (void*)GetPhysicalDeviceQueueFamilyProperties2}},
9258 {"vkGetPhysicalDeviceMemoryProperties2", {true, (void*)GetPhysicalDeviceMemoryProperties2}},
9259 {"vkGetPhysicalDeviceSparseImageFormatProperties2", {true, (void*)GetPhysicalDeviceSparseImageFormatProperties2}},
9260 {"vkTrimCommandPool", {false, (void*)TrimCommandPool}},
9261 {"vkGetDeviceQueue2", {false, (void*)GetDeviceQueue2}},
9262 {"vkCreateSamplerYcbcrConversion", {false, (void*)CreateSamplerYcbcrConversion}},
9263 {"vkDestroySamplerYcbcrConversion", {false, (void*)DestroySamplerYcbcrConversion}},
9264 {"vkCreateDescriptorUpdateTemplate", {false, (void*)CreateDescriptorUpdateTemplate}},
9265 {"vkDestroyDescriptorUpdateTemplate", {false, (void*)DestroyDescriptorUpdateTemplate}},
9266 {"vkUpdateDescriptorSetWithTemplate", {false, (void*)UpdateDescriptorSetWithTemplate}},
9267 {"vkGetPhysicalDeviceExternalBufferProperties", {true, (void*)GetPhysicalDeviceExternalBufferProperties}},
9268 {"vkGetPhysicalDeviceExternalFenceProperties", {true, (void*)GetPhysicalDeviceExternalFenceProperties}},
9269 {"vkGetPhysicalDeviceExternalSemaphoreProperties", {true, (void*)GetPhysicalDeviceExternalSemaphoreProperties}},
9270 {"vkGetDescriptorSetLayoutSupport", {false, (void*)GetDescriptorSetLayoutSupport}},
9271 {"vkDestroySurfaceKHR", {true, (void*)DestroySurfaceKHR}},
9272 {"vkGetPhysicalDeviceSurfaceSupportKHR", {true, (void*)GetPhysicalDeviceSurfaceSupportKHR}},
9273 {"vkGetPhysicalDeviceSurfaceCapabilitiesKHR", {true, (void*)GetPhysicalDeviceSurfaceCapabilitiesKHR}},
9274 {"vkGetPhysicalDeviceSurfaceFormatsKHR", {true, (void*)GetPhysicalDeviceSurfaceFormatsKHR}},
9275 {"vkGetPhysicalDeviceSurfacePresentModesKHR", {true, (void*)GetPhysicalDeviceSurfacePresentModesKHR}},
9276 {"vkCreateSwapchainKHR", {false, (void*)CreateSwapchainKHR}},
9277 {"vkDestroySwapchainKHR", {false, (void*)DestroySwapchainKHR}},
9278 {"vkGetSwapchainImagesKHR", {false, (void*)GetSwapchainImagesKHR}},
9279 {"vkAcquireNextImageKHR", {false, (void*)AcquireNextImageKHR}},
9280 {"vkQueuePresentKHR", {false, (void*)QueuePresentKHR}},
9281 {"vkGetDeviceGroupPresentCapabilitiesKHR", {false, (void*)GetDeviceGroupPresentCapabilitiesKHR}},
9282 {"vkGetDeviceGroupSurfacePresentModesKHR", {false, (void*)GetDeviceGroupSurfacePresentModesKHR}},
9283 {"vkGetPhysicalDevicePresentRectanglesKHR", {true, (void*)GetPhysicalDevicePresentRectanglesKHR}},
9284 {"vkAcquireNextImage2KHR", {false, (void*)AcquireNextImage2KHR}},
9285 {"vkGetPhysicalDeviceDisplayPropertiesKHR", {true, (void*)GetPhysicalDeviceDisplayPropertiesKHR}},
9286 {"vkGetPhysicalDeviceDisplayPlanePropertiesKHR", {true, (void*)GetPhysicalDeviceDisplayPlanePropertiesKHR}},
9287 {"vkGetDisplayPlaneSupportedDisplaysKHR", {true, (void*)GetDisplayPlaneSupportedDisplaysKHR}},
9288 {"vkGetDisplayModePropertiesKHR", {true, (void*)GetDisplayModePropertiesKHR}},
9289 {"vkCreateDisplayModeKHR", {true, (void*)CreateDisplayModeKHR}},
9290 {"vkGetDisplayPlaneCapabilitiesKHR", {true, (void*)GetDisplayPlaneCapabilitiesKHR}},
9291 {"vkCreateDisplayPlaneSurfaceKHR", {true, (void*)CreateDisplayPlaneSurfaceKHR}},
9292 {"vkCreateSharedSwapchainsKHR", {false, (void*)CreateSharedSwapchainsKHR}},
9293#ifdef VK_USE_PLATFORM_XLIB_KHR
9294 {"vkCreateXlibSurfaceKHR", {true, (void*)CreateXlibSurfaceKHR}},
9295#endif
9296#ifdef VK_USE_PLATFORM_XLIB_KHR
9297 {"vkGetPhysicalDeviceXlibPresentationSupportKHR", {true, (void*)GetPhysicalDeviceXlibPresentationSupportKHR}},
9298#endif
9299#ifdef VK_USE_PLATFORM_XCB_KHR
9300 {"vkCreateXcbSurfaceKHR", {true, (void*)CreateXcbSurfaceKHR}},
9301#endif
9302#ifdef VK_USE_PLATFORM_XCB_KHR
9303 {"vkGetPhysicalDeviceXcbPresentationSupportKHR", {true, (void*)GetPhysicalDeviceXcbPresentationSupportKHR}},
9304#endif
9305#ifdef VK_USE_PLATFORM_WAYLAND_KHR
9306 {"vkCreateWaylandSurfaceKHR", {true, (void*)CreateWaylandSurfaceKHR}},
9307#endif
9308#ifdef VK_USE_PLATFORM_WAYLAND_KHR
9309 {"vkGetPhysicalDeviceWaylandPresentationSupportKHR", {true, (void*)GetPhysicalDeviceWaylandPresentationSupportKHR}},
9310#endif
9311#ifdef VK_USE_PLATFORM_ANDROID_KHR
9312 {"vkCreateAndroidSurfaceKHR", {true, (void*)CreateAndroidSurfaceKHR}},
9313#endif
9314#ifdef VK_USE_PLATFORM_WIN32_KHR
9315 {"vkCreateWin32SurfaceKHR", {true, (void*)CreateWin32SurfaceKHR}},
9316#endif
9317#ifdef VK_USE_PLATFORM_WIN32_KHR
9318 {"vkGetPhysicalDeviceWin32PresentationSupportKHR", {true, (void*)GetPhysicalDeviceWin32PresentationSupportKHR}},
9319#endif
9320 {"vkGetPhysicalDeviceFeatures2KHR", {true, (void*)GetPhysicalDeviceFeatures2KHR}},
9321 {"vkGetPhysicalDeviceProperties2KHR", {true, (void*)GetPhysicalDeviceProperties2KHR}},
9322 {"vkGetPhysicalDeviceFormatProperties2KHR", {true, (void*)GetPhysicalDeviceFormatProperties2KHR}},
9323 {"vkGetPhysicalDeviceImageFormatProperties2KHR", {true, (void*)GetPhysicalDeviceImageFormatProperties2KHR}},
9324 {"vkGetPhysicalDeviceQueueFamilyProperties2KHR", {true, (void*)GetPhysicalDeviceQueueFamilyProperties2KHR}},
9325 {"vkGetPhysicalDeviceMemoryProperties2KHR", {true, (void*)GetPhysicalDeviceMemoryProperties2KHR}},
9326 {"vkGetPhysicalDeviceSparseImageFormatProperties2KHR", {true, (void*)GetPhysicalDeviceSparseImageFormatProperties2KHR}},
9327 {"vkGetDeviceGroupPeerMemoryFeaturesKHR", {false, (void*)GetDeviceGroupPeerMemoryFeaturesKHR}},
9328 {"vkCmdSetDeviceMaskKHR", {false, (void*)CmdSetDeviceMaskKHR}},
9329 {"vkCmdDispatchBaseKHR", {false, (void*)CmdDispatchBaseKHR}},
9330 {"vkTrimCommandPoolKHR", {false, (void*)TrimCommandPoolKHR}},
9331 {"vkEnumeratePhysicalDeviceGroupsKHR", {true, (void*)EnumeratePhysicalDeviceGroupsKHR}},
9332 {"vkGetPhysicalDeviceExternalBufferPropertiesKHR", {true, (void*)GetPhysicalDeviceExternalBufferPropertiesKHR}},
9333#ifdef VK_USE_PLATFORM_WIN32_KHR
9334 {"vkGetMemoryWin32HandleKHR", {false, (void*)GetMemoryWin32HandleKHR}},
9335#endif
9336#ifdef VK_USE_PLATFORM_WIN32_KHR
9337 {"vkGetMemoryWin32HandlePropertiesKHR", {false, (void*)GetMemoryWin32HandlePropertiesKHR}},
9338#endif
9339 {"vkGetMemoryFdKHR", {false, (void*)GetMemoryFdKHR}},
9340 {"vkGetMemoryFdPropertiesKHR", {false, (void*)GetMemoryFdPropertiesKHR}},
9341 {"vkGetPhysicalDeviceExternalSemaphorePropertiesKHR", {true, (void*)GetPhysicalDeviceExternalSemaphorePropertiesKHR}},
9342#ifdef VK_USE_PLATFORM_WIN32_KHR
9343 {"vkImportSemaphoreWin32HandleKHR", {false, (void*)ImportSemaphoreWin32HandleKHR}},
9344#endif
9345#ifdef VK_USE_PLATFORM_WIN32_KHR
9346 {"vkGetSemaphoreWin32HandleKHR", {false, (void*)GetSemaphoreWin32HandleKHR}},
9347#endif
9348 {"vkImportSemaphoreFdKHR", {false, (void*)ImportSemaphoreFdKHR}},
9349 {"vkGetSemaphoreFdKHR", {false, (void*)GetSemaphoreFdKHR}},
9350 {"vkCmdPushDescriptorSetKHR", {false, (void*)CmdPushDescriptorSetKHR}},
9351 {"vkCmdPushDescriptorSetWithTemplateKHR", {false, (void*)CmdPushDescriptorSetWithTemplateKHR}},
9352 {"vkCreateDescriptorUpdateTemplateKHR", {false, (void*)CreateDescriptorUpdateTemplateKHR}},
9353 {"vkDestroyDescriptorUpdateTemplateKHR", {false, (void*)DestroyDescriptorUpdateTemplateKHR}},
9354 {"vkUpdateDescriptorSetWithTemplateKHR", {false, (void*)UpdateDescriptorSetWithTemplateKHR}},
9355 {"vkCreateRenderPass2KHR", {false, (void*)CreateRenderPass2KHR}},
9356 {"vkCmdBeginRenderPass2KHR", {false, (void*)CmdBeginRenderPass2KHR}},
9357 {"vkCmdNextSubpass2KHR", {false, (void*)CmdNextSubpass2KHR}},
9358 {"vkCmdEndRenderPass2KHR", {false, (void*)CmdEndRenderPass2KHR}},
9359 {"vkGetSwapchainStatusKHR", {false, (void*)GetSwapchainStatusKHR}},
9360 {"vkGetPhysicalDeviceExternalFencePropertiesKHR", {true, (void*)GetPhysicalDeviceExternalFencePropertiesKHR}},
9361#ifdef VK_USE_PLATFORM_WIN32_KHR
9362 {"vkImportFenceWin32HandleKHR", {false, (void*)ImportFenceWin32HandleKHR}},
9363#endif
9364#ifdef VK_USE_PLATFORM_WIN32_KHR
9365 {"vkGetFenceWin32HandleKHR", {false, (void*)GetFenceWin32HandleKHR}},
9366#endif
9367 {"vkImportFenceFdKHR", {false, (void*)ImportFenceFdKHR}},
9368 {"vkGetFenceFdKHR", {false, (void*)GetFenceFdKHR}},
9369 {"vkGetPhysicalDeviceSurfaceCapabilities2KHR", {true, (void*)GetPhysicalDeviceSurfaceCapabilities2KHR}},
9370 {"vkGetPhysicalDeviceSurfaceFormats2KHR", {true, (void*)GetPhysicalDeviceSurfaceFormats2KHR}},
9371 {"vkGetPhysicalDeviceDisplayProperties2KHR", {true, (void*)GetPhysicalDeviceDisplayProperties2KHR}},
9372 {"vkGetPhysicalDeviceDisplayPlaneProperties2KHR", {true, (void*)GetPhysicalDeviceDisplayPlaneProperties2KHR}},
9373 {"vkGetDisplayModeProperties2KHR", {true, (void*)GetDisplayModeProperties2KHR}},
9374 {"vkGetDisplayPlaneCapabilities2KHR", {true, (void*)GetDisplayPlaneCapabilities2KHR}},
9375 {"vkGetImageMemoryRequirements2KHR", {false, (void*)GetImageMemoryRequirements2KHR}},
9376 {"vkGetBufferMemoryRequirements2KHR", {false, (void*)GetBufferMemoryRequirements2KHR}},
9377 {"vkGetImageSparseMemoryRequirements2KHR", {false, (void*)GetImageSparseMemoryRequirements2KHR}},
9378 {"vkCreateSamplerYcbcrConversionKHR", {false, (void*)CreateSamplerYcbcrConversionKHR}},
9379 {"vkDestroySamplerYcbcrConversionKHR", {false, (void*)DestroySamplerYcbcrConversionKHR}},
9380 {"vkBindBufferMemory2KHR", {false, (void*)BindBufferMemory2KHR}},
9381 {"vkBindImageMemory2KHR", {false, (void*)BindImageMemory2KHR}},
9382 {"vkGetDescriptorSetLayoutSupportKHR", {false, (void*)GetDescriptorSetLayoutSupportKHR}},
9383 {"vkCmdDrawIndirectCountKHR", {false, (void*)CmdDrawIndirectCountKHR}},
9384 {"vkCmdDrawIndexedIndirectCountKHR", {false, (void*)CmdDrawIndexedIndirectCountKHR}},
9385 {"vkCreateDebugReportCallbackEXT", {true, (void*)CreateDebugReportCallbackEXT}},
9386 {"vkDestroyDebugReportCallbackEXT", {true, (void*)DestroyDebugReportCallbackEXT}},
9387 {"vkDebugReportMessageEXT", {true, (void*)DebugReportMessageEXT}},
9388 {"vkDebugMarkerSetObjectTagEXT", {false, (void*)DebugMarkerSetObjectTagEXT}},
9389 {"vkDebugMarkerSetObjectNameEXT", {false, (void*)DebugMarkerSetObjectNameEXT}},
9390 {"vkCmdDebugMarkerBeginEXT", {false, (void*)CmdDebugMarkerBeginEXT}},
9391 {"vkCmdDebugMarkerEndEXT", {false, (void*)CmdDebugMarkerEndEXT}},
9392 {"vkCmdDebugMarkerInsertEXT", {false, (void*)CmdDebugMarkerInsertEXT}},
9393 {"vkCmdBindTransformFeedbackBuffersEXT", {false, (void*)CmdBindTransformFeedbackBuffersEXT}},
9394 {"vkCmdBeginTransformFeedbackEXT", {false, (void*)CmdBeginTransformFeedbackEXT}},
9395 {"vkCmdEndTransformFeedbackEXT", {false, (void*)CmdEndTransformFeedbackEXT}},
9396 {"vkCmdBeginQueryIndexedEXT", {false, (void*)CmdBeginQueryIndexedEXT}},
9397 {"vkCmdEndQueryIndexedEXT", {false, (void*)CmdEndQueryIndexedEXT}},
9398 {"vkCmdDrawIndirectByteCountEXT", {false, (void*)CmdDrawIndirectByteCountEXT}},
9399 {"vkGetImageViewHandleNVX", {false, (void*)GetImageViewHandleNVX}},
9400 {"vkCmdDrawIndirectCountAMD", {false, (void*)CmdDrawIndirectCountAMD}},
9401 {"vkCmdDrawIndexedIndirectCountAMD", {false, (void*)CmdDrawIndexedIndirectCountAMD}},
9402 {"vkGetShaderInfoAMD", {false, (void*)GetShaderInfoAMD}},
9403#ifdef VK_USE_PLATFORM_GGP
9404 {"vkCreateStreamDescriptorSurfaceGGP", {true, (void*)CreateStreamDescriptorSurfaceGGP}},
9405#endif
9406 {"vkGetPhysicalDeviceExternalImageFormatPropertiesNV", {true, (void*)GetPhysicalDeviceExternalImageFormatPropertiesNV}},
9407#ifdef VK_USE_PLATFORM_WIN32_KHR
9408 {"vkGetMemoryWin32HandleNV", {false, (void*)GetMemoryWin32HandleNV}},
9409#endif
9410#ifdef VK_USE_PLATFORM_VI_NN
9411 {"vkCreateViSurfaceNN", {true, (void*)CreateViSurfaceNN}},
9412#endif
9413 {"vkCmdBeginConditionalRenderingEXT", {false, (void*)CmdBeginConditionalRenderingEXT}},
9414 {"vkCmdEndConditionalRenderingEXT", {false, (void*)CmdEndConditionalRenderingEXT}},
9415 {"vkCmdProcessCommandsNVX", {false, (void*)CmdProcessCommandsNVX}},
9416 {"vkCmdReserveSpaceForCommandsNVX", {false, (void*)CmdReserveSpaceForCommandsNVX}},
9417 {"vkCreateIndirectCommandsLayoutNVX", {false, (void*)CreateIndirectCommandsLayoutNVX}},
9418 {"vkDestroyIndirectCommandsLayoutNVX", {false, (void*)DestroyIndirectCommandsLayoutNVX}},
9419 {"vkCreateObjectTableNVX", {false, (void*)CreateObjectTableNVX}},
9420 {"vkDestroyObjectTableNVX", {false, (void*)DestroyObjectTableNVX}},
9421 {"vkRegisterObjectsNVX", {false, (void*)RegisterObjectsNVX}},
9422 {"vkUnregisterObjectsNVX", {false, (void*)UnregisterObjectsNVX}},
9423 {"vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX", {true, (void*)GetPhysicalDeviceGeneratedCommandsPropertiesNVX}},
9424 {"vkCmdSetViewportWScalingNV", {false, (void*)CmdSetViewportWScalingNV}},
9425 {"vkReleaseDisplayEXT", {true, (void*)ReleaseDisplayEXT}},
9426#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
9427 {"vkAcquireXlibDisplayEXT", {true, (void*)AcquireXlibDisplayEXT}},
9428#endif
9429#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
9430 {"vkGetRandROutputDisplayEXT", {true, (void*)GetRandROutputDisplayEXT}},
9431#endif
9432 {"vkGetPhysicalDeviceSurfaceCapabilities2EXT", {true, (void*)GetPhysicalDeviceSurfaceCapabilities2EXT}},
9433 {"vkDisplayPowerControlEXT", {false, (void*)DisplayPowerControlEXT}},
9434 {"vkRegisterDeviceEventEXT", {false, (void*)RegisterDeviceEventEXT}},
9435 {"vkRegisterDisplayEventEXT", {false, (void*)RegisterDisplayEventEXT}},
9436 {"vkGetSwapchainCounterEXT", {false, (void*)GetSwapchainCounterEXT}},
9437 {"vkGetRefreshCycleDurationGOOGLE", {false, (void*)GetRefreshCycleDurationGOOGLE}},
9438 {"vkGetPastPresentationTimingGOOGLE", {false, (void*)GetPastPresentationTimingGOOGLE}},
9439 {"vkCmdSetDiscardRectangleEXT", {false, (void*)CmdSetDiscardRectangleEXT}},
9440 {"vkSetHdrMetadataEXT", {false, (void*)SetHdrMetadataEXT}},
9441#ifdef VK_USE_PLATFORM_IOS_MVK
9442 {"vkCreateIOSSurfaceMVK", {true, (void*)CreateIOSSurfaceMVK}},
9443#endif
9444#ifdef VK_USE_PLATFORM_MACOS_MVK
9445 {"vkCreateMacOSSurfaceMVK", {true, (void*)CreateMacOSSurfaceMVK}},
9446#endif
9447 {"vkSetDebugUtilsObjectNameEXT", {false, (void*)SetDebugUtilsObjectNameEXT}},
9448 {"vkSetDebugUtilsObjectTagEXT", {false, (void*)SetDebugUtilsObjectTagEXT}},
9449 {"vkQueueBeginDebugUtilsLabelEXT", {false, (void*)QueueBeginDebugUtilsLabelEXT}},
9450 {"vkQueueEndDebugUtilsLabelEXT", {false, (void*)QueueEndDebugUtilsLabelEXT}},
9451 {"vkQueueInsertDebugUtilsLabelEXT", {false, (void*)QueueInsertDebugUtilsLabelEXT}},
9452 {"vkCmdBeginDebugUtilsLabelEXT", {false, (void*)CmdBeginDebugUtilsLabelEXT}},
9453 {"vkCmdEndDebugUtilsLabelEXT", {false, (void*)CmdEndDebugUtilsLabelEXT}},
9454 {"vkCmdInsertDebugUtilsLabelEXT", {false, (void*)CmdInsertDebugUtilsLabelEXT}},
9455 {"vkCreateDebugUtilsMessengerEXT", {true, (void*)CreateDebugUtilsMessengerEXT}},
9456 {"vkDestroyDebugUtilsMessengerEXT", {true, (void*)DestroyDebugUtilsMessengerEXT}},
9457 {"vkSubmitDebugUtilsMessageEXT", {true, (void*)SubmitDebugUtilsMessageEXT}},
9458#ifdef VK_USE_PLATFORM_ANDROID_KHR
9459 {"vkGetAndroidHardwareBufferPropertiesANDROID", {false, (void*)GetAndroidHardwareBufferPropertiesANDROID}},
9460#endif
9461#ifdef VK_USE_PLATFORM_ANDROID_KHR
9462 {"vkGetMemoryAndroidHardwareBufferANDROID", {false, (void*)GetMemoryAndroidHardwareBufferANDROID}},
9463#endif
9464 {"vkCmdSetSampleLocationsEXT", {false, (void*)CmdSetSampleLocationsEXT}},
9465 {"vkGetPhysicalDeviceMultisamplePropertiesEXT", {true, (void*)GetPhysicalDeviceMultisamplePropertiesEXT}},
9466 {"vkGetImageDrmFormatModifierPropertiesEXT", {false, (void*)GetImageDrmFormatModifierPropertiesEXT}},
9467#ifdef BUILD_CORE_VALIDATION
9468 {"vkCreateValidationCacheEXT", {false, (void*)CreateValidationCacheEXT}},
9469#endif
9470#ifdef BUILD_CORE_VALIDATION
9471 {"vkDestroyValidationCacheEXT", {false, (void*)DestroyValidationCacheEXT}},
9472#endif
9473#ifdef BUILD_CORE_VALIDATION
9474 {"vkMergeValidationCachesEXT", {false, (void*)MergeValidationCachesEXT}},
9475#endif
9476#ifdef BUILD_CORE_VALIDATION
9477 {"vkGetValidationCacheDataEXT", {false, (void*)GetValidationCacheDataEXT}},
9478#endif
9479 {"vkCmdBindShadingRateImageNV", {false, (void*)CmdBindShadingRateImageNV}},
9480 {"vkCmdSetViewportShadingRatePaletteNV", {false, (void*)CmdSetViewportShadingRatePaletteNV}},
9481 {"vkCmdSetCoarseSampleOrderNV", {false, (void*)CmdSetCoarseSampleOrderNV}},
9482 {"vkCreateAccelerationStructureNV", {false, (void*)CreateAccelerationStructureNV}},
9483 {"vkDestroyAccelerationStructureNV", {false, (void*)DestroyAccelerationStructureNV}},
9484 {"vkGetAccelerationStructureMemoryRequirementsNV", {false, (void*)GetAccelerationStructureMemoryRequirementsNV}},
9485 {"vkBindAccelerationStructureMemoryNV", {false, (void*)BindAccelerationStructureMemoryNV}},
9486 {"vkCmdBuildAccelerationStructureNV", {false, (void*)CmdBuildAccelerationStructureNV}},
9487 {"vkCmdCopyAccelerationStructureNV", {false, (void*)CmdCopyAccelerationStructureNV}},
9488 {"vkCmdTraceRaysNV", {false, (void*)CmdTraceRaysNV}},
9489 {"vkCreateRayTracingPipelinesNV", {false, (void*)CreateRayTracingPipelinesNV}},
9490 {"vkGetRayTracingShaderGroupHandlesNV", {false, (void*)GetRayTracingShaderGroupHandlesNV}},
9491 {"vkGetAccelerationStructureHandleNV", {false, (void*)GetAccelerationStructureHandleNV}},
9492 {"vkCmdWriteAccelerationStructuresPropertiesNV", {false, (void*)CmdWriteAccelerationStructuresPropertiesNV}},
9493 {"vkCompileDeferredNV", {false, (void*)CompileDeferredNV}},
9494 {"vkGetMemoryHostPointerPropertiesEXT", {false, (void*)GetMemoryHostPointerPropertiesEXT}},
9495 {"vkCmdWriteBufferMarkerAMD", {false, (void*)CmdWriteBufferMarkerAMD}},
9496 {"vkGetPhysicalDeviceCalibrateableTimeDomainsEXT", {true, (void*)GetPhysicalDeviceCalibrateableTimeDomainsEXT}},
9497 {"vkGetCalibratedTimestampsEXT", {false, (void*)GetCalibratedTimestampsEXT}},
9498 {"vkCmdDrawMeshTasksNV", {false, (void*)CmdDrawMeshTasksNV}},
9499 {"vkCmdDrawMeshTasksIndirectNV", {false, (void*)CmdDrawMeshTasksIndirectNV}},
9500 {"vkCmdDrawMeshTasksIndirectCountNV", {false, (void*)CmdDrawMeshTasksIndirectCountNV}},
9501 {"vkCmdSetExclusiveScissorNV", {false, (void*)CmdSetExclusiveScissorNV}},
9502 {"vkCmdSetCheckpointNV", {false, (void*)CmdSetCheckpointNV}},
9503 {"vkGetQueueCheckpointDataNV", {false, (void*)GetQueueCheckpointDataNV}},
9504 {"vkInitializePerformanceApiINTEL", {false, (void*)InitializePerformanceApiINTEL}},
9505 {"vkUninitializePerformanceApiINTEL", {false, (void*)UninitializePerformanceApiINTEL}},
9506 {"vkCmdSetPerformanceMarkerINTEL", {false, (void*)CmdSetPerformanceMarkerINTEL}},
9507 {"vkCmdSetPerformanceStreamMarkerINTEL", {false, (void*)CmdSetPerformanceStreamMarkerINTEL}},
9508 {"vkCmdSetPerformanceOverrideINTEL", {false, (void*)CmdSetPerformanceOverrideINTEL}},
9509 {"vkAcquirePerformanceConfigurationINTEL", {false, (void*)AcquirePerformanceConfigurationINTEL}},
9510 {"vkReleasePerformanceConfigurationINTEL", {false, (void*)ReleasePerformanceConfigurationINTEL}},
9511 {"vkQueueSetPerformanceConfigurationINTEL", {false, (void*)QueueSetPerformanceConfigurationINTEL}},
9512 {"vkGetPerformanceParameterINTEL", {false, (void*)GetPerformanceParameterINTEL}},
9513 {"vkSetLocalDimmingAMD", {false, (void*)SetLocalDimmingAMD}},
9514#ifdef VK_USE_PLATFORM_FUCHSIA
9515 {"vkCreateImagePipeSurfaceFUCHSIA", {true, (void*)CreateImagePipeSurfaceFUCHSIA}},
9516#endif
9517#ifdef VK_USE_PLATFORM_METAL_EXT
9518 {"vkCreateMetalSurfaceEXT", {true, (void*)CreateMetalSurfaceEXT}},
9519#endif
9520 {"vkGetBufferDeviceAddressEXT", {false, (void*)GetBufferDeviceAddressEXT}},
9521 {"vkGetPhysicalDeviceCooperativeMatrixPropertiesNV", {true, (void*)GetPhysicalDeviceCooperativeMatrixPropertiesNV}},
9522 {"vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", {true, (void*)GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV}},
9523#ifdef VK_USE_PLATFORM_WIN32_KHR
9524 {"vkGetPhysicalDeviceSurfacePresentModes2EXT", {true, (void*)GetPhysicalDeviceSurfacePresentModes2EXT}},
9525#endif
9526#ifdef VK_USE_PLATFORM_WIN32_KHR
9527 {"vkAcquireFullScreenExclusiveModeEXT", {false, (void*)AcquireFullScreenExclusiveModeEXT}},
9528#endif
9529#ifdef VK_USE_PLATFORM_WIN32_KHR
9530 {"vkReleaseFullScreenExclusiveModeEXT", {false, (void*)ReleaseFullScreenExclusiveModeEXT}},
9531#endif
9532#ifdef VK_USE_PLATFORM_WIN32_KHR
9533 {"vkGetDeviceGroupSurfacePresentModes2EXT", {false, (void*)GetDeviceGroupSurfacePresentModes2EXT}},
9534#endif
9535 {"vkCreateHeadlessSurfaceEXT", {true, (void*)CreateHeadlessSurfaceEXT}},
9536 {"vkResetQueryPoolEXT", {false, (void*)ResetQueryPoolEXT}},
9537};
9538
9539
9540} // namespace vulkan_layer_chassis
9541
9542// loader-layer interface v0, just wrappers since there is only a layer
9543
9544VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount,
9545 VkExtensionProperties *pProperties) {
9546 return vulkan_layer_chassis::EnumerateInstanceExtensionProperties(pLayerName, pCount, pProperties);
9547}
9548
9549VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t *pCount,
9550 VkLayerProperties *pProperties) {
9551 return vulkan_layer_chassis::EnumerateInstanceLayerProperties(pCount, pProperties);
9552}
9553
9554VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount,
9555 VkLayerProperties *pProperties) {
9556 // the layer command handles VK_NULL_HANDLE just fine internally
9557 assert(physicalDevice == VK_NULL_HANDLE);
9558 return vulkan_layer_chassis::EnumerateDeviceLayerProperties(VK_NULL_HANDLE, pCount, pProperties);
9559}
9560
9561VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice,
9562 const char *pLayerName, uint32_t *pCount,
9563 VkExtensionProperties *pProperties) {
9564 // the layer command handles VK_NULL_HANDLE just fine internally
9565 assert(physicalDevice == VK_NULL_HANDLE);
9566 return vulkan_layer_chassis::EnumerateDeviceExtensionProperties(VK_NULL_HANDLE, pLayerName, pCount, pProperties);
9567}
9568
9569VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice dev, const char *funcName) {
9570 return vulkan_layer_chassis::GetDeviceProcAddr(dev, funcName);
9571}
9572
9573VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *funcName) {
9574 return vulkan_layer_chassis::GetInstanceProcAddr(instance, funcName);
9575}
9576
9577VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct) {
9578 assert(pVersionStruct != NULL);
9579 assert(pVersionStruct->sType == LAYER_NEGOTIATE_INTERFACE_STRUCT);
9580
9581 // Fill in the function pointers if our version is at least capable of having the structure contain them.
9582 if (pVersionStruct->loaderLayerInterfaceVersion >= 2) {
9583 pVersionStruct->pfnGetInstanceProcAddr = vkGetInstanceProcAddr;
9584 pVersionStruct->pfnGetDeviceProcAddr = vkGetDeviceProcAddr;
9585 pVersionStruct->pfnGetPhysicalDeviceProcAddr = nullptr;
9586 }
9587
9588 return VK_SUCCESS;
9589}