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