xref: /aosp_15_r20/external/vulkan-validation-layers/layers/generated/chassis.cpp (revision b7893ccf7851cd6a48cc5a1e965257d8a5cdcc70)
1*b7893ccfSSadaf Ebrahimi 
2*b7893ccfSSadaf Ebrahimi // This file is ***GENERATED***.  Do Not Edit.
3*b7893ccfSSadaf Ebrahimi // See layer_chassis_generator.py for modifications.
4*b7893ccfSSadaf Ebrahimi 
5*b7893ccfSSadaf Ebrahimi /* Copyright (c) 2015-2019 The Khronos Group Inc.
6*b7893ccfSSadaf Ebrahimi  * Copyright (c) 2015-2019 Valve Corporation
7*b7893ccfSSadaf Ebrahimi  * Copyright (c) 2015-2019 LunarG, Inc.
8*b7893ccfSSadaf Ebrahimi  * Copyright (c) 2015-2019 Google Inc.
9*b7893ccfSSadaf Ebrahimi  *
10*b7893ccfSSadaf Ebrahimi  * Licensed under the Apache License, Version 2.0 (the "License");
11*b7893ccfSSadaf Ebrahimi  * you may not use this file except in compliance with the License.
12*b7893ccfSSadaf Ebrahimi  * You may obtain a copy of the License at
13*b7893ccfSSadaf Ebrahimi  *
14*b7893ccfSSadaf Ebrahimi  *     http://www.apache.org/licenses/LICENSE-2.0
15*b7893ccfSSadaf Ebrahimi  *
16*b7893ccfSSadaf Ebrahimi  * Unless required by applicable law or agreed to in writing, software
17*b7893ccfSSadaf Ebrahimi  * distributed under the License is distributed on an "AS IS" BASIS,
18*b7893ccfSSadaf Ebrahimi  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19*b7893ccfSSadaf Ebrahimi  * See the License for the specific language governing permissions and
20*b7893ccfSSadaf Ebrahimi  * limitations under the License.
21*b7893ccfSSadaf Ebrahimi  *
22*b7893ccfSSadaf Ebrahimi  * Author: Mark Lobodzinski <[email protected]>
23*b7893ccfSSadaf Ebrahimi  */
24*b7893ccfSSadaf Ebrahimi 
25*b7893ccfSSadaf Ebrahimi 
26*b7893ccfSSadaf Ebrahimi #include <string.h>
27*b7893ccfSSadaf Ebrahimi #include <mutex>
28*b7893ccfSSadaf Ebrahimi 
29*b7893ccfSSadaf Ebrahimi #define VALIDATION_ERROR_MAP_IMPL
30*b7893ccfSSadaf Ebrahimi 
31*b7893ccfSSadaf Ebrahimi #include "chassis.h"
32*b7893ccfSSadaf Ebrahimi #include "layer_chassis_dispatch.h"
33*b7893ccfSSadaf Ebrahimi 
34*b7893ccfSSadaf Ebrahimi std::unordered_map<void*, ValidationObject*> layer_data_map;
35*b7893ccfSSadaf Ebrahimi 
36*b7893ccfSSadaf Ebrahimi // Global unique object identifier.
37*b7893ccfSSadaf Ebrahimi std::atomic<uint64_t> global_unique_id(1ULL);
38*b7893ccfSSadaf Ebrahimi // Map uniqueID to actual object handle. Accesses to the map itself are
39*b7893ccfSSadaf Ebrahimi // internally synchronized.
40*b7893ccfSSadaf Ebrahimi vl_concurrent_unordered_map<uint64_t, uint64_t, 4> unique_id_mapping;
41*b7893ccfSSadaf Ebrahimi 
42*b7893ccfSSadaf Ebrahimi // TODO: This variable controls handle wrapping -- in the future it should be hooked
43*b7893ccfSSadaf Ebrahimi //       up to the new VALIDATION_FEATURES extension. Temporarily, control with a compile-time flag.
44*b7893ccfSSadaf Ebrahimi #if defined(LAYER_CHASSIS_CAN_WRAP_HANDLES)
45*b7893ccfSSadaf Ebrahimi bool wrap_handles = true;
46*b7893ccfSSadaf Ebrahimi #else
47*b7893ccfSSadaf Ebrahimi bool wrap_handles = false;
48*b7893ccfSSadaf Ebrahimi #endif
49*b7893ccfSSadaf Ebrahimi 
50*b7893ccfSSadaf Ebrahimi // Set layer name -- Khronos layer name overrides any other defined names
51*b7893ccfSSadaf Ebrahimi #if BUILD_KHRONOS_VALIDATION
52*b7893ccfSSadaf Ebrahimi #define OBJECT_LAYER_NAME "VK_LAYER_KHRONOS_validation"
53*b7893ccfSSadaf Ebrahimi #define OBJECT_LAYER_DESCRIPTION "khronos_validation"
54*b7893ccfSSadaf Ebrahimi #elif BUILD_OBJECT_TRACKER
55*b7893ccfSSadaf Ebrahimi #define OBJECT_LAYER_NAME "VK_LAYER_LUNARG_object_tracker"
56*b7893ccfSSadaf Ebrahimi #define OBJECT_LAYER_DESCRIPTION "lunarg_object_tracker"
57*b7893ccfSSadaf Ebrahimi #elif BUILD_THREAD_SAFETY
58*b7893ccfSSadaf Ebrahimi #define OBJECT_LAYER_NAME "VK_LAYER_GOOGLE_threading"
59*b7893ccfSSadaf Ebrahimi #define OBJECT_LAYER_DESCRIPTION "google_thread_checker"
60*b7893ccfSSadaf Ebrahimi #elif BUILD_PARAMETER_VALIDATION
61*b7893ccfSSadaf Ebrahimi #define OBJECT_LAYER_NAME "VK_LAYER_LUNARG_parameter_validation"
62*b7893ccfSSadaf Ebrahimi #define OBJECT_LAYER_DESCRIPTION "lunarg_parameter_validation"
63*b7893ccfSSadaf Ebrahimi #elif BUILD_CORE_VALIDATION
64*b7893ccfSSadaf Ebrahimi #define OBJECT_LAYER_NAME "VK_LAYER_LUNARG_core_validation"
65*b7893ccfSSadaf Ebrahimi #define OBJECT_LAYER_DESCRIPTION "lunarg_core_validation"
66*b7893ccfSSadaf Ebrahimi #else
67*b7893ccfSSadaf Ebrahimi #define OBJECT_LAYER_NAME "VK_LAYER_GOOGLE_unique_objects"
68*b7893ccfSSadaf Ebrahimi #define OBJECT_LAYER_DESCRIPTION "lunarg_unique_objects"
69*b7893ccfSSadaf Ebrahimi #endif
70*b7893ccfSSadaf Ebrahimi 
71*b7893ccfSSadaf Ebrahimi // Include layer validation object definitions
72*b7893ccfSSadaf Ebrahimi #if BUILD_OBJECT_TRACKER
73*b7893ccfSSadaf Ebrahimi #include "object_lifetime_validation.h"
74*b7893ccfSSadaf Ebrahimi #endif
75*b7893ccfSSadaf Ebrahimi #if BUILD_THREAD_SAFETY
76*b7893ccfSSadaf Ebrahimi #include "thread_safety.h"
77*b7893ccfSSadaf Ebrahimi #endif
78*b7893ccfSSadaf Ebrahimi #if BUILD_PARAMETER_VALIDATION
79*b7893ccfSSadaf Ebrahimi #include "stateless_validation.h"
80*b7893ccfSSadaf Ebrahimi #endif
81*b7893ccfSSadaf Ebrahimi #if BUILD_CORE_VALIDATION
82*b7893ccfSSadaf Ebrahimi #include "core_validation.h"
83*b7893ccfSSadaf Ebrahimi #endif
84*b7893ccfSSadaf Ebrahimi #if BUILD_BEST_PRACTICES
85*b7893ccfSSadaf Ebrahimi #include "best_practices.h"
86*b7893ccfSSadaf Ebrahimi #endif
87*b7893ccfSSadaf Ebrahimi 
88*b7893ccfSSadaf Ebrahimi namespace vulkan_layer_chassis {
89*b7893ccfSSadaf Ebrahimi 
90*b7893ccfSSadaf Ebrahimi using std::unordered_map;
91*b7893ccfSSadaf Ebrahimi 
92*b7893ccfSSadaf Ebrahimi static const VkLayerProperties global_layer = {
93*b7893ccfSSadaf Ebrahimi     OBJECT_LAYER_NAME, VK_LAYER_API_VERSION, 1, "LunarG validation Layer",
94*b7893ccfSSadaf Ebrahimi };
95*b7893ccfSSadaf Ebrahimi 
96*b7893ccfSSadaf Ebrahimi static const VkExtensionProperties instance_extensions[] = {{VK_EXT_DEBUG_REPORT_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_SPEC_VERSION},
97*b7893ccfSSadaf Ebrahimi                                                             {VK_EXT_DEBUG_UTILS_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_SPEC_VERSION}};
98*b7893ccfSSadaf Ebrahimi static const VkExtensionProperties device_extensions[] = {
99*b7893ccfSSadaf Ebrahimi     {VK_EXT_VALIDATION_CACHE_EXTENSION_NAME, VK_EXT_VALIDATION_CACHE_SPEC_VERSION},
100*b7893ccfSSadaf Ebrahimi     {VK_EXT_DEBUG_MARKER_EXTENSION_NAME, VK_EXT_DEBUG_MARKER_SPEC_VERSION},
101*b7893ccfSSadaf Ebrahimi };
102*b7893ccfSSadaf Ebrahimi 
103*b7893ccfSSadaf Ebrahimi typedef struct {
104*b7893ccfSSadaf Ebrahimi     bool is_instance_api;
105*b7893ccfSSadaf Ebrahimi     void* funcptr;
106*b7893ccfSSadaf Ebrahimi } function_data;
107*b7893ccfSSadaf Ebrahimi 
108*b7893ccfSSadaf Ebrahimi extern const std::unordered_map<std::string, function_data> name_to_funcptr_map;
109*b7893ccfSSadaf Ebrahimi 
110*b7893ccfSSadaf Ebrahimi // Manually written functions
111*b7893ccfSSadaf Ebrahimi 
112*b7893ccfSSadaf Ebrahimi // Check enabled instance extensions against supported instance extension whitelist
InstanceExtensionWhitelist(ValidationObject * layer_data,const VkInstanceCreateInfo * pCreateInfo,VkInstance instance)113*b7893ccfSSadaf Ebrahimi static void InstanceExtensionWhitelist(ValidationObject *layer_data, const VkInstanceCreateInfo *pCreateInfo, VkInstance instance) {
114*b7893ccfSSadaf Ebrahimi     for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
115*b7893ccfSSadaf Ebrahimi         // Check for recognized instance extensions
116*b7893ccfSSadaf Ebrahimi         if (!white_list(pCreateInfo->ppEnabledExtensionNames[i], kInstanceExtensionNames)) {
117*b7893ccfSSadaf Ebrahimi             log_msg(layer_data->report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0,
118*b7893ccfSSadaf Ebrahimi                     kVUIDUndefined,
119*b7893ccfSSadaf Ebrahimi                     "Instance Extension %s is not supported by this layer.  Using this extension may adversely affect validation "
120*b7893ccfSSadaf Ebrahimi                     "results and/or produce undefined behavior.",
121*b7893ccfSSadaf Ebrahimi                     pCreateInfo->ppEnabledExtensionNames[i]);
122*b7893ccfSSadaf Ebrahimi         }
123*b7893ccfSSadaf Ebrahimi     }
124*b7893ccfSSadaf Ebrahimi }
125*b7893ccfSSadaf Ebrahimi 
126*b7893ccfSSadaf Ebrahimi // Check enabled device extensions against supported device extension whitelist
DeviceExtensionWhitelist(ValidationObject * layer_data,const VkDeviceCreateInfo * pCreateInfo,VkDevice device)127*b7893ccfSSadaf Ebrahimi static void DeviceExtensionWhitelist(ValidationObject *layer_data, const VkDeviceCreateInfo *pCreateInfo, VkDevice device) {
128*b7893ccfSSadaf Ebrahimi     for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
129*b7893ccfSSadaf Ebrahimi         // Check for recognized device extensions
130*b7893ccfSSadaf Ebrahimi         if (!white_list(pCreateInfo->ppEnabledExtensionNames[i], kDeviceExtensionNames)) {
131*b7893ccfSSadaf Ebrahimi             log_msg(layer_data->report_data, VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0,
132*b7893ccfSSadaf Ebrahimi                     kVUIDUndefined,
133*b7893ccfSSadaf Ebrahimi                     "Device Extension %s is not supported by this layer.  Using this extension may adversely affect validation "
134*b7893ccfSSadaf Ebrahimi                     "results and/or produce undefined behavior.",
135*b7893ccfSSadaf Ebrahimi                     pCreateInfo->ppEnabledExtensionNames[i]);
136*b7893ccfSSadaf Ebrahimi         }
137*b7893ccfSSadaf Ebrahimi     }
138*b7893ccfSSadaf Ebrahimi }
139*b7893ccfSSadaf Ebrahimi 
140*b7893ccfSSadaf Ebrahimi 
141*b7893ccfSSadaf Ebrahimi // Process validation features, flags and settings specified through extensions, a layer settings file, or environment variables
142*b7893ccfSSadaf Ebrahimi 
143*b7893ccfSSadaf Ebrahimi static const std::unordered_map<std::string, VkValidationFeatureDisableEXT> VkValFeatureDisableLookup = {
144*b7893ccfSSadaf Ebrahimi     {"VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT", VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT},
145*b7893ccfSSadaf Ebrahimi     {"VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT", VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT},
146*b7893ccfSSadaf Ebrahimi     {"VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT", VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT},
147*b7893ccfSSadaf Ebrahimi     {"VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT", VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT},
148*b7893ccfSSadaf Ebrahimi     {"VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT", VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT},
149*b7893ccfSSadaf Ebrahimi     {"VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT", VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT},
150*b7893ccfSSadaf Ebrahimi     {"VK_VALIDATION_FEATURE_DISABLE_ALL_EXT", VK_VALIDATION_FEATURE_DISABLE_ALL_EXT},
151*b7893ccfSSadaf Ebrahimi };
152*b7893ccfSSadaf Ebrahimi 
153*b7893ccfSSadaf Ebrahimi static const std::unordered_map<std::string, VkValidationFeatureEnableEXT> VkValFeatureEnableLookup = {
154*b7893ccfSSadaf Ebrahimi     {"VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT", VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT},
155*b7893ccfSSadaf Ebrahimi     {"VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT", VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT},
156*b7893ccfSSadaf Ebrahimi };
157*b7893ccfSSadaf Ebrahimi 
158*b7893ccfSSadaf Ebrahimi static const std::unordered_map<std::string, VkValidationFeatureEnable> VkValFeatureEnableLookup2 = {
159*b7893ccfSSadaf Ebrahimi     {"VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES", VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES},
160*b7893ccfSSadaf Ebrahimi };
161*b7893ccfSSadaf Ebrahimi 
162*b7893ccfSSadaf Ebrahimi static const std::unordered_map<std::string, ValidationCheckDisables> ValidationDisableLookup = {
163*b7893ccfSSadaf Ebrahimi     {"VALIDATION_CHECK_DISABLE_COMMAND_BUFFER_STATE", VALIDATION_CHECK_DISABLE_COMMAND_BUFFER_STATE},
164*b7893ccfSSadaf Ebrahimi     {"VALIDATION_CHECK_DISABLE_OBJECT_IN_USE", VALIDATION_CHECK_DISABLE_OBJECT_IN_USE},
165*b7893ccfSSadaf Ebrahimi     {"VALIDATION_CHECK_DISABLE_IDLE_DESCRIPTOR_SET", VALIDATION_CHECK_DISABLE_IDLE_DESCRIPTOR_SET},
166*b7893ccfSSadaf Ebrahimi     {"VALIDATION_CHECK_DISABLE_PUSH_CONSTANT_RANGE", VALIDATION_CHECK_DISABLE_PUSH_CONSTANT_RANGE},
167*b7893ccfSSadaf Ebrahimi     {"VALIDATION_CHECK_DISABLE_QUERY_VALIDATION", VALIDATION_CHECK_DISABLE_QUERY_VALIDATION},
168*b7893ccfSSadaf Ebrahimi     {"VALIDATION_CHECK_DISABLE_IMAGE_LAYOUT_VALIDATION", VALIDATION_CHECK_DISABLE_IMAGE_LAYOUT_VALIDATION},
169*b7893ccfSSadaf Ebrahimi };
170*b7893ccfSSadaf Ebrahimi 
171*b7893ccfSSadaf Ebrahimi // Set the local disable flag for the appropriate VALIDATION_CHECK_DISABLE enum
SetValidationDisable(CHECK_DISABLED * disable_data,const ValidationCheckDisables disable_id)172*b7893ccfSSadaf Ebrahimi void SetValidationDisable(CHECK_DISABLED* disable_data, const ValidationCheckDisables disable_id) {
173*b7893ccfSSadaf Ebrahimi     switch (disable_id) {
174*b7893ccfSSadaf Ebrahimi         case VALIDATION_CHECK_DISABLE_COMMAND_BUFFER_STATE:
175*b7893ccfSSadaf Ebrahimi             disable_data->command_buffer_state = true;
176*b7893ccfSSadaf Ebrahimi             break;
177*b7893ccfSSadaf Ebrahimi         case VALIDATION_CHECK_DISABLE_OBJECT_IN_USE:
178*b7893ccfSSadaf Ebrahimi             disable_data->object_in_use = true;
179*b7893ccfSSadaf Ebrahimi             break;
180*b7893ccfSSadaf Ebrahimi         case VALIDATION_CHECK_DISABLE_IDLE_DESCRIPTOR_SET:
181*b7893ccfSSadaf Ebrahimi             disable_data->idle_descriptor_set = true;
182*b7893ccfSSadaf Ebrahimi             break;
183*b7893ccfSSadaf Ebrahimi         case VALIDATION_CHECK_DISABLE_PUSH_CONSTANT_RANGE:
184*b7893ccfSSadaf Ebrahimi             disable_data->push_constant_range = true;
185*b7893ccfSSadaf Ebrahimi             break;
186*b7893ccfSSadaf Ebrahimi         case VALIDATION_CHECK_DISABLE_QUERY_VALIDATION:
187*b7893ccfSSadaf Ebrahimi             disable_data->query_validation = true;
188*b7893ccfSSadaf Ebrahimi             break;
189*b7893ccfSSadaf Ebrahimi         case VALIDATION_CHECK_DISABLE_IMAGE_LAYOUT_VALIDATION:
190*b7893ccfSSadaf Ebrahimi             disable_data->image_layout_validation = true;
191*b7893ccfSSadaf Ebrahimi             break;
192*b7893ccfSSadaf Ebrahimi         default:
193*b7893ccfSSadaf Ebrahimi             assert(true);
194*b7893ccfSSadaf Ebrahimi     }
195*b7893ccfSSadaf Ebrahimi }
196*b7893ccfSSadaf Ebrahimi 
197*b7893ccfSSadaf Ebrahimi // Set the local disable flag for a single VK_VALIDATION_FEATURE_DISABLE_* flag
SetValidationFeatureDisable(CHECK_DISABLED * disable_data,const VkValidationFeatureDisableEXT feature_disable)198*b7893ccfSSadaf Ebrahimi void SetValidationFeatureDisable(CHECK_DISABLED* disable_data, const VkValidationFeatureDisableEXT feature_disable) {
199*b7893ccfSSadaf Ebrahimi     switch (feature_disable) {
200*b7893ccfSSadaf Ebrahimi         case VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT:
201*b7893ccfSSadaf Ebrahimi             disable_data->shader_validation = true;
202*b7893ccfSSadaf Ebrahimi             break;
203*b7893ccfSSadaf Ebrahimi         case VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT:
204*b7893ccfSSadaf Ebrahimi             disable_data->thread_safety = true;
205*b7893ccfSSadaf Ebrahimi             break;
206*b7893ccfSSadaf Ebrahimi         case VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT:
207*b7893ccfSSadaf Ebrahimi             disable_data->stateless_checks = true;
208*b7893ccfSSadaf Ebrahimi             break;
209*b7893ccfSSadaf Ebrahimi         case VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT:
210*b7893ccfSSadaf Ebrahimi             disable_data->object_tracking = true;
211*b7893ccfSSadaf Ebrahimi             break;
212*b7893ccfSSadaf Ebrahimi         case VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT:
213*b7893ccfSSadaf Ebrahimi             disable_data->core_checks = true;
214*b7893ccfSSadaf Ebrahimi             break;
215*b7893ccfSSadaf Ebrahimi         case VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT:
216*b7893ccfSSadaf Ebrahimi             disable_data->handle_wrapping = true;
217*b7893ccfSSadaf Ebrahimi             break;
218*b7893ccfSSadaf Ebrahimi         case VK_VALIDATION_FEATURE_DISABLE_ALL_EXT:
219*b7893ccfSSadaf Ebrahimi             // Set all disabled flags to true
220*b7893ccfSSadaf Ebrahimi             disable_data->SetAll(true);
221*b7893ccfSSadaf Ebrahimi             break;
222*b7893ccfSSadaf Ebrahimi         default:
223*b7893ccfSSadaf Ebrahimi             break;
224*b7893ccfSSadaf Ebrahimi     }
225*b7893ccfSSadaf Ebrahimi }
226*b7893ccfSSadaf Ebrahimi 
227*b7893ccfSSadaf Ebrahimi // Set the local enable flag for a single VK_VALIDATION_FEATURE_ENABLE_* flag
SetValidationFeatureEnable(CHECK_ENABLED * enable_data,const VkValidationFeatureEnableEXT feature_enable)228*b7893ccfSSadaf Ebrahimi void SetValidationFeatureEnable(CHECK_ENABLED *enable_data, const VkValidationFeatureEnableEXT feature_enable) {
229*b7893ccfSSadaf Ebrahimi     switch (feature_enable) {
230*b7893ccfSSadaf Ebrahimi         case VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT:
231*b7893ccfSSadaf Ebrahimi             enable_data->gpu_validation = true;
232*b7893ccfSSadaf Ebrahimi             break;
233*b7893ccfSSadaf Ebrahimi         case VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT:
234*b7893ccfSSadaf Ebrahimi             enable_data->gpu_validation_reserve_binding_slot = true;
235*b7893ccfSSadaf Ebrahimi             break;
236*b7893ccfSSadaf Ebrahimi         default:
237*b7893ccfSSadaf Ebrahimi             break;
238*b7893ccfSSadaf Ebrahimi     }
239*b7893ccfSSadaf Ebrahimi }
240*b7893ccfSSadaf Ebrahimi 
SetValidationFeatureEnable(CHECK_ENABLED * enable_data,const VkValidationFeatureEnable feature_enable)241*b7893ccfSSadaf Ebrahimi void SetValidationFeatureEnable(CHECK_ENABLED *enable_data, const VkValidationFeatureEnable feature_enable) {
242*b7893ccfSSadaf Ebrahimi     switch(feature_enable) {
243*b7893ccfSSadaf Ebrahimi         case VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES:
244*b7893ccfSSadaf Ebrahimi             enable_data->best_practices = true;
245*b7893ccfSSadaf Ebrahimi             break;
246*b7893ccfSSadaf Ebrahimi         default:
247*b7893ccfSSadaf Ebrahimi             break;
248*b7893ccfSSadaf Ebrahimi     }
249*b7893ccfSSadaf Ebrahimi }
250*b7893ccfSSadaf Ebrahimi 
251*b7893ccfSSadaf Ebrahimi // Set the local disable flag for settings specified through the VK_EXT_validation_flags extension
SetValidationFlags(CHECK_DISABLED * disables,const VkValidationFlagsEXT * val_flags_struct)252*b7893ccfSSadaf Ebrahimi void SetValidationFlags(CHECK_DISABLED* disables, const VkValidationFlagsEXT* val_flags_struct) {
253*b7893ccfSSadaf Ebrahimi     for (uint32_t i = 0; i < val_flags_struct->disabledValidationCheckCount; ++i) {
254*b7893ccfSSadaf Ebrahimi         switch (val_flags_struct->pDisabledValidationChecks[i]) {
255*b7893ccfSSadaf Ebrahimi             case VK_VALIDATION_CHECK_SHADERS_EXT:
256*b7893ccfSSadaf Ebrahimi                 disables->shader_validation = true;
257*b7893ccfSSadaf Ebrahimi                 break;
258*b7893ccfSSadaf Ebrahimi             case VK_VALIDATION_CHECK_ALL_EXT:
259*b7893ccfSSadaf Ebrahimi                 // Set all disabled flags to true
260*b7893ccfSSadaf Ebrahimi                 disables->SetAll(true);
261*b7893ccfSSadaf Ebrahimi                 break;
262*b7893ccfSSadaf Ebrahimi             default:
263*b7893ccfSSadaf Ebrahimi                 break;
264*b7893ccfSSadaf Ebrahimi         }
265*b7893ccfSSadaf Ebrahimi     }
266*b7893ccfSSadaf Ebrahimi }
267*b7893ccfSSadaf Ebrahimi 
268*b7893ccfSSadaf Ebrahimi // Process Validation Features flags specified through the ValidationFeature extension
SetValidationFeatures(CHECK_DISABLED * disable_data,CHECK_ENABLED * enable_data,const VkValidationFeaturesEXT * val_features_struct)269*b7893ccfSSadaf Ebrahimi void SetValidationFeatures(CHECK_DISABLED *disable_data, CHECK_ENABLED *enable_data,
270*b7893ccfSSadaf Ebrahimi                            const VkValidationFeaturesEXT *val_features_struct) {
271*b7893ccfSSadaf Ebrahimi     for (uint32_t i = 0; i < val_features_struct->disabledValidationFeatureCount; ++i) {
272*b7893ccfSSadaf Ebrahimi         SetValidationFeatureDisable(disable_data, val_features_struct->pDisabledValidationFeatures[i]);
273*b7893ccfSSadaf Ebrahimi     }
274*b7893ccfSSadaf Ebrahimi     for (uint32_t i = 0; i < val_features_struct->enabledValidationFeatureCount; ++i) {
275*b7893ccfSSadaf Ebrahimi         SetValidationFeatureEnable(enable_data, val_features_struct->pEnabledValidationFeatures[i]);
276*b7893ccfSSadaf Ebrahimi     }
277*b7893ccfSSadaf Ebrahimi }
278*b7893ccfSSadaf Ebrahimi 
279*b7893ccfSSadaf Ebrahimi // Given a string representation of a list of enable enum values, call the appropriate setter function
SetLocalEnableSetting(std::string list_of_enables,std::string delimiter,CHECK_ENABLED * enables)280*b7893ccfSSadaf Ebrahimi void SetLocalEnableSetting(std::string list_of_enables, std::string delimiter, CHECK_ENABLED* enables) {
281*b7893ccfSSadaf Ebrahimi     size_t pos = 0;
282*b7893ccfSSadaf Ebrahimi     std::string token;
283*b7893ccfSSadaf Ebrahimi     while (list_of_enables.length() != 0) {
284*b7893ccfSSadaf Ebrahimi         pos = list_of_enables.find(delimiter);
285*b7893ccfSSadaf Ebrahimi         if (pos != std::string::npos) {
286*b7893ccfSSadaf Ebrahimi             token = list_of_enables.substr(0, pos);
287*b7893ccfSSadaf Ebrahimi         } else {
288*b7893ccfSSadaf Ebrahimi             pos = list_of_enables.length() - delimiter.length();
289*b7893ccfSSadaf Ebrahimi             token = list_of_enables;
290*b7893ccfSSadaf Ebrahimi         }
291*b7893ccfSSadaf Ebrahimi         if (token.find("VK_VALIDATION_FEATURE_ENABLE_") != std::string::npos) {
292*b7893ccfSSadaf Ebrahimi             auto result = VkValFeatureEnableLookup.find(token);
293*b7893ccfSSadaf Ebrahimi             if (result != VkValFeatureEnableLookup.end()) {
294*b7893ccfSSadaf Ebrahimi                 SetValidationFeatureEnable(enables, result->second);
295*b7893ccfSSadaf Ebrahimi             } else {
296*b7893ccfSSadaf Ebrahimi                 auto result2 = VkValFeatureEnableLookup2.find(token);
297*b7893ccfSSadaf Ebrahimi                 if (result2 != VkValFeatureEnableLookup2.end()) {
298*b7893ccfSSadaf Ebrahimi                     SetValidationFeatureEnable(enables, result2->second);
299*b7893ccfSSadaf Ebrahimi                 }
300*b7893ccfSSadaf Ebrahimi             }
301*b7893ccfSSadaf Ebrahimi         }
302*b7893ccfSSadaf Ebrahimi         list_of_enables.erase(0, pos + delimiter.length());
303*b7893ccfSSadaf Ebrahimi     }
304*b7893ccfSSadaf Ebrahimi }
305*b7893ccfSSadaf Ebrahimi 
306*b7893ccfSSadaf Ebrahimi // Given a string representation of a list of disable enum values, call the appropriate setter function
SetLocalDisableSetting(std::string list_of_disables,std::string delimiter,CHECK_DISABLED * disables)307*b7893ccfSSadaf Ebrahimi void SetLocalDisableSetting(std::string list_of_disables, std::string delimiter, CHECK_DISABLED* disables) {
308*b7893ccfSSadaf Ebrahimi     size_t pos = 0;
309*b7893ccfSSadaf Ebrahimi     std::string token;
310*b7893ccfSSadaf Ebrahimi     while (list_of_disables.length() != 0) {
311*b7893ccfSSadaf Ebrahimi         pos = list_of_disables.find(delimiter);
312*b7893ccfSSadaf Ebrahimi         if (pos != std::string::npos) {
313*b7893ccfSSadaf Ebrahimi             token = list_of_disables.substr(0, pos);
314*b7893ccfSSadaf Ebrahimi         } else {
315*b7893ccfSSadaf Ebrahimi             pos = list_of_disables.length() - delimiter.length();
316*b7893ccfSSadaf Ebrahimi             token = list_of_disables;
317*b7893ccfSSadaf Ebrahimi         }
318*b7893ccfSSadaf Ebrahimi         if (token.find("VK_VALIDATION_FEATURE_DISABLE_") != std::string::npos) {
319*b7893ccfSSadaf Ebrahimi             auto result = VkValFeatureDisableLookup.find(token);
320*b7893ccfSSadaf Ebrahimi             if (result != VkValFeatureDisableLookup.end()) {
321*b7893ccfSSadaf Ebrahimi                 SetValidationFeatureDisable(disables, result->second);
322*b7893ccfSSadaf Ebrahimi             }
323*b7893ccfSSadaf Ebrahimi         }
324*b7893ccfSSadaf Ebrahimi         if (token.find("VALIDATION_CHECK_DISABLE_") != std::string::npos) {
325*b7893ccfSSadaf Ebrahimi             auto result = ValidationDisableLookup.find(token);
326*b7893ccfSSadaf Ebrahimi             if (result != ValidationDisableLookup.end()) {
327*b7893ccfSSadaf Ebrahimi                 SetValidationDisable(disables, result->second);
328*b7893ccfSSadaf Ebrahimi             }
329*b7893ccfSSadaf Ebrahimi         }
330*b7893ccfSSadaf Ebrahimi         list_of_disables.erase(0, pos + delimiter.length());
331*b7893ccfSSadaf Ebrahimi     }
332*b7893ccfSSadaf Ebrahimi }
333*b7893ccfSSadaf Ebrahimi 
334*b7893ccfSSadaf Ebrahimi // Process enables and disables set though the vk_layer_settings.txt config file or through an environment variable
ProcessConfigAndEnvSettings(const char * layer_description,CHECK_ENABLED * enables,CHECK_DISABLED * disables)335*b7893ccfSSadaf Ebrahimi void ProcessConfigAndEnvSettings(const char* layer_description, CHECK_ENABLED* enables, CHECK_DISABLED* disables) {
336*b7893ccfSSadaf Ebrahimi     std::string enable_key = layer_description;
337*b7893ccfSSadaf Ebrahimi     std::string disable_key = layer_description;
338*b7893ccfSSadaf Ebrahimi     enable_key.append(".enables");
339*b7893ccfSSadaf Ebrahimi     disable_key.append(".disables");
340*b7893ccfSSadaf Ebrahimi     std::string list_of_config_enables = getLayerOption(enable_key.c_str());
341*b7893ccfSSadaf Ebrahimi     std::string list_of_env_enables = GetLayerEnvVar("VK_LAYER_ENABLES");
342*b7893ccfSSadaf Ebrahimi     std::string list_of_config_disables = getLayerOption(disable_key.c_str());
343*b7893ccfSSadaf Ebrahimi     std::string list_of_env_disables = GetLayerEnvVar("VK_LAYER_DISABLES");
344*b7893ccfSSadaf Ebrahimi #if defined(_WIN32)
345*b7893ccfSSadaf Ebrahimi     std::string env_delimiter = ";";
346*b7893ccfSSadaf Ebrahimi #else
347*b7893ccfSSadaf Ebrahimi     std::string env_delimiter = ":";
348*b7893ccfSSadaf Ebrahimi #endif
349*b7893ccfSSadaf Ebrahimi     SetLocalEnableSetting(list_of_config_enables, ",", enables);
350*b7893ccfSSadaf Ebrahimi     SetLocalEnableSetting(list_of_env_enables, env_delimiter, enables);
351*b7893ccfSSadaf Ebrahimi     SetLocalDisableSetting(list_of_config_disables, ",", disables);
352*b7893ccfSSadaf Ebrahimi     SetLocalDisableSetting(list_of_env_disables, env_delimiter, disables);
353*b7893ccfSSadaf Ebrahimi }
354*b7893ccfSSadaf Ebrahimi 
355*b7893ccfSSadaf Ebrahimi 
356*b7893ccfSSadaf Ebrahimi // Non-code-generated chassis API functions
357*b7893ccfSSadaf Ebrahimi 
GetDeviceProcAddr(VkDevice device,const char * funcName)358*b7893ccfSSadaf Ebrahimi VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char *funcName) {
359*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
360*b7893ccfSSadaf Ebrahimi     if (!ApiParentExtensionEnabled(funcName, &layer_data->device_extensions)) {
361*b7893ccfSSadaf Ebrahimi         return nullptr;
362*b7893ccfSSadaf Ebrahimi     }
363*b7893ccfSSadaf Ebrahimi     const auto &item = name_to_funcptr_map.find(funcName);
364*b7893ccfSSadaf Ebrahimi     if (item != name_to_funcptr_map.end()) {
365*b7893ccfSSadaf Ebrahimi         if (item->second.is_instance_api) {
366*b7893ccfSSadaf Ebrahimi             return nullptr;
367*b7893ccfSSadaf Ebrahimi         } else {
368*b7893ccfSSadaf Ebrahimi             return reinterpret_cast<PFN_vkVoidFunction>(item->second.funcptr);
369*b7893ccfSSadaf Ebrahimi         }
370*b7893ccfSSadaf Ebrahimi     }
371*b7893ccfSSadaf Ebrahimi     auto &table = layer_data->device_dispatch_table;
372*b7893ccfSSadaf Ebrahimi     if (!table.GetDeviceProcAddr) return nullptr;
373*b7893ccfSSadaf Ebrahimi     return table.GetDeviceProcAddr(device, funcName);
374*b7893ccfSSadaf Ebrahimi }
375*b7893ccfSSadaf Ebrahimi 
GetInstanceProcAddr(VkInstance instance,const char * funcName)376*b7893ccfSSadaf Ebrahimi VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char *funcName) {
377*b7893ccfSSadaf Ebrahimi     const auto &item = name_to_funcptr_map.find(funcName);
378*b7893ccfSSadaf Ebrahimi     if (item != name_to_funcptr_map.end()) {
379*b7893ccfSSadaf Ebrahimi         return reinterpret_cast<PFN_vkVoidFunction>(item->second.funcptr);
380*b7893ccfSSadaf Ebrahimi     }
381*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
382*b7893ccfSSadaf Ebrahimi     auto &table = layer_data->instance_dispatch_table;
383*b7893ccfSSadaf Ebrahimi     if (!table.GetInstanceProcAddr) return nullptr;
384*b7893ccfSSadaf Ebrahimi     return table.GetInstanceProcAddr(instance, funcName);
385*b7893ccfSSadaf Ebrahimi }
386*b7893ccfSSadaf Ebrahimi 
EnumerateInstanceLayerProperties(uint32_t * pCount,VkLayerProperties * pProperties)387*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(uint32_t *pCount, VkLayerProperties *pProperties) {
388*b7893ccfSSadaf Ebrahimi     return util_GetLayerProperties(1, &global_layer, pCount, pProperties);
389*b7893ccfSSadaf Ebrahimi }
390*b7893ccfSSadaf Ebrahimi 
EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice,uint32_t * pCount,VkLayerProperties * pProperties)391*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount,
392*b7893ccfSSadaf Ebrahimi                                                               VkLayerProperties *pProperties) {
393*b7893ccfSSadaf Ebrahimi     return util_GetLayerProperties(1, &global_layer, pCount, pProperties);
394*b7893ccfSSadaf Ebrahimi }
395*b7893ccfSSadaf Ebrahimi 
EnumerateInstanceExtensionProperties(const char * pLayerName,uint32_t * pCount,VkExtensionProperties * pProperties)396*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount,
397*b7893ccfSSadaf Ebrahimi                                                                     VkExtensionProperties *pProperties) {
398*b7893ccfSSadaf Ebrahimi     if (pLayerName && !strcmp(pLayerName, global_layer.layerName))
399*b7893ccfSSadaf Ebrahimi         return util_GetExtensionProperties(ARRAY_SIZE(instance_extensions), instance_extensions, pCount, pProperties);
400*b7893ccfSSadaf Ebrahimi 
401*b7893ccfSSadaf Ebrahimi     return VK_ERROR_LAYER_NOT_PRESENT;
402*b7893ccfSSadaf Ebrahimi }
403*b7893ccfSSadaf Ebrahimi 
EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice,const char * pLayerName,uint32_t * pCount,VkExtensionProperties * pProperties)404*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName,
405*b7893ccfSSadaf Ebrahimi                                                                   uint32_t *pCount, VkExtensionProperties *pProperties) {
406*b7893ccfSSadaf Ebrahimi     if (pLayerName && !strcmp(pLayerName, global_layer.layerName)) return util_GetExtensionProperties(ARRAY_SIZE(device_extensions), device_extensions, pCount, pProperties);
407*b7893ccfSSadaf Ebrahimi     assert(physicalDevice);
408*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
409*b7893ccfSSadaf Ebrahimi     return layer_data->instance_dispatch_table.EnumerateDeviceExtensionProperties(physicalDevice, pLayerName, pCount, pProperties);
410*b7893ccfSSadaf Ebrahimi }
411*b7893ccfSSadaf Ebrahimi 
CreateInstance(const VkInstanceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkInstance * pInstance)412*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator,
413*b7893ccfSSadaf Ebrahimi                                               VkInstance *pInstance) {
414*b7893ccfSSadaf Ebrahimi     VkLayerInstanceCreateInfo* chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
415*b7893ccfSSadaf Ebrahimi 
416*b7893ccfSSadaf Ebrahimi     assert(chain_info->u.pLayerInfo);
417*b7893ccfSSadaf Ebrahimi     PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
418*b7893ccfSSadaf Ebrahimi     PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance)fpGetInstanceProcAddr(NULL, "vkCreateInstance");
419*b7893ccfSSadaf Ebrahimi     if (fpCreateInstance == NULL) return VK_ERROR_INITIALIZATION_FAILED;
420*b7893ccfSSadaf Ebrahimi     chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
421*b7893ccfSSadaf Ebrahimi     uint32_t specified_version = (pCreateInfo->pApplicationInfo ? pCreateInfo->pApplicationInfo->apiVersion : VK_API_VERSION_1_0);
422*b7893ccfSSadaf Ebrahimi     uint32_t api_version = (specified_version < VK_API_VERSION_1_1) ? VK_API_VERSION_1_0 : VK_API_VERSION_1_1;
423*b7893ccfSSadaf Ebrahimi 
424*b7893ccfSSadaf Ebrahimi     CHECK_ENABLED local_enables {};
425*b7893ccfSSadaf Ebrahimi     CHECK_DISABLED local_disables {};
426*b7893ccfSSadaf Ebrahimi     const auto *validation_features_ext = lvl_find_in_chain<VkValidationFeaturesEXT>(pCreateInfo->pNext);
427*b7893ccfSSadaf Ebrahimi     if (validation_features_ext) {
428*b7893ccfSSadaf Ebrahimi         SetValidationFeatures(&local_disables, &local_enables, validation_features_ext);
429*b7893ccfSSadaf Ebrahimi     }
430*b7893ccfSSadaf Ebrahimi     const auto *validation_flags_ext = lvl_find_in_chain<VkValidationFlagsEXT>(pCreateInfo->pNext);
431*b7893ccfSSadaf Ebrahimi     if (validation_flags_ext) {
432*b7893ccfSSadaf Ebrahimi         SetValidationFlags(&local_disables, validation_flags_ext);
433*b7893ccfSSadaf Ebrahimi     }
434*b7893ccfSSadaf Ebrahimi     ProcessConfigAndEnvSettings(OBJECT_LAYER_DESCRIPTION, &local_enables, &local_disables);
435*b7893ccfSSadaf Ebrahimi 
436*b7893ccfSSadaf Ebrahimi     // Create temporary dispatch vector for pre-calls until instance is created
437*b7893ccfSSadaf Ebrahimi     std::vector<ValidationObject*> local_object_dispatch;
438*b7893ccfSSadaf Ebrahimi     // Add VOs to dispatch vector. Order here will be the validation dispatch order!
439*b7893ccfSSadaf Ebrahimi #if BUILD_THREAD_SAFETY
440*b7893ccfSSadaf Ebrahimi     auto thread_checker = new ThreadSafety;
441*b7893ccfSSadaf Ebrahimi     if (!local_disables.thread_safety) {
442*b7893ccfSSadaf Ebrahimi         local_object_dispatch.emplace_back(thread_checker);
443*b7893ccfSSadaf Ebrahimi     }
444*b7893ccfSSadaf Ebrahimi     thread_checker->container_type = LayerObjectTypeThreading;
445*b7893ccfSSadaf Ebrahimi     thread_checker->api_version = api_version;
446*b7893ccfSSadaf Ebrahimi #endif
447*b7893ccfSSadaf Ebrahimi #if BUILD_PARAMETER_VALIDATION
448*b7893ccfSSadaf Ebrahimi     auto parameter_validation = new StatelessValidation;
449*b7893ccfSSadaf Ebrahimi     if (!local_disables.stateless_checks) {
450*b7893ccfSSadaf Ebrahimi         local_object_dispatch.emplace_back(parameter_validation);
451*b7893ccfSSadaf Ebrahimi     }
452*b7893ccfSSadaf Ebrahimi     parameter_validation->container_type = LayerObjectTypeParameterValidation;
453*b7893ccfSSadaf Ebrahimi     parameter_validation->api_version = api_version;
454*b7893ccfSSadaf Ebrahimi #endif
455*b7893ccfSSadaf Ebrahimi #if BUILD_OBJECT_TRACKER
456*b7893ccfSSadaf Ebrahimi     auto object_tracker = new ObjectLifetimes;
457*b7893ccfSSadaf Ebrahimi     if (!local_disables.object_tracking) {
458*b7893ccfSSadaf Ebrahimi         local_object_dispatch.emplace_back(object_tracker);
459*b7893ccfSSadaf Ebrahimi     }
460*b7893ccfSSadaf Ebrahimi     object_tracker->container_type = LayerObjectTypeObjectTracker;
461*b7893ccfSSadaf Ebrahimi     object_tracker->api_version = api_version;
462*b7893ccfSSadaf Ebrahimi #endif
463*b7893ccfSSadaf Ebrahimi #if BUILD_CORE_VALIDATION
464*b7893ccfSSadaf Ebrahimi     auto core_checks = new CoreChecks;
465*b7893ccfSSadaf Ebrahimi     if (!local_disables.core_checks) {
466*b7893ccfSSadaf Ebrahimi         local_object_dispatch.emplace_back(core_checks);
467*b7893ccfSSadaf Ebrahimi     }
468*b7893ccfSSadaf Ebrahimi     core_checks->container_type = LayerObjectTypeCoreValidation;
469*b7893ccfSSadaf Ebrahimi     core_checks->api_version = api_version;
470*b7893ccfSSadaf Ebrahimi #endif
471*b7893ccfSSadaf Ebrahimi #if BUILD_BEST_PRACTICES
472*b7893ccfSSadaf Ebrahimi     auto best_practices = new BestPractices;
473*b7893ccfSSadaf Ebrahimi     if (local_enables.best_practices) {
474*b7893ccfSSadaf Ebrahimi         local_object_dispatch.emplace_back(best_practices);
475*b7893ccfSSadaf Ebrahimi     }
476*b7893ccfSSadaf Ebrahimi     best_practices->container_type = LayerObjectTypeBestPractices;
477*b7893ccfSSadaf Ebrahimi     best_practices->api_version = api_version;
478*b7893ccfSSadaf Ebrahimi #endif
479*b7893ccfSSadaf Ebrahimi 
480*b7893ccfSSadaf Ebrahimi     // If handle wrapping is disabled via the ValidationFeatures extension, override build flag
481*b7893ccfSSadaf Ebrahimi     if (local_disables.handle_wrapping) {
482*b7893ccfSSadaf Ebrahimi         wrap_handles = false;
483*b7893ccfSSadaf Ebrahimi     }
484*b7893ccfSSadaf Ebrahimi 
485*b7893ccfSSadaf Ebrahimi     // Init dispatch array and call registration functions
486*b7893ccfSSadaf Ebrahimi     for (auto intercept : local_object_dispatch) {
487*b7893ccfSSadaf Ebrahimi         intercept->PreCallValidateCreateInstance(pCreateInfo, pAllocator, pInstance);
488*b7893ccfSSadaf Ebrahimi     }
489*b7893ccfSSadaf Ebrahimi     for (auto intercept : local_object_dispatch) {
490*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateInstance(pCreateInfo, pAllocator, pInstance);
491*b7893ccfSSadaf Ebrahimi     }
492*b7893ccfSSadaf Ebrahimi 
493*b7893ccfSSadaf Ebrahimi     VkResult result = fpCreateInstance(pCreateInfo, pAllocator, pInstance);
494*b7893ccfSSadaf Ebrahimi     if (result != VK_SUCCESS) return result;
495*b7893ccfSSadaf Ebrahimi 
496*b7893ccfSSadaf Ebrahimi     auto framework = GetLayerDataPtr(get_dispatch_key(*pInstance), layer_data_map);
497*b7893ccfSSadaf Ebrahimi 
498*b7893ccfSSadaf Ebrahimi     framework->object_dispatch = local_object_dispatch;
499*b7893ccfSSadaf Ebrahimi     framework->container_type = LayerObjectTypeInstance;
500*b7893ccfSSadaf Ebrahimi     framework->disabled = local_disables;
501*b7893ccfSSadaf Ebrahimi     framework->enabled = local_enables;
502*b7893ccfSSadaf Ebrahimi 
503*b7893ccfSSadaf Ebrahimi     framework->instance = *pInstance;
504*b7893ccfSSadaf Ebrahimi     layer_init_instance_dispatch_table(*pInstance, &framework->instance_dispatch_table, fpGetInstanceProcAddr);
505*b7893ccfSSadaf Ebrahimi     framework->report_data = debug_utils_create_instance(&framework->instance_dispatch_table, *pInstance, pCreateInfo->enabledExtensionCount,
506*b7893ccfSSadaf Ebrahimi                                                          pCreateInfo->ppEnabledExtensionNames);
507*b7893ccfSSadaf Ebrahimi     framework->api_version = api_version;
508*b7893ccfSSadaf Ebrahimi     framework->instance_extensions.InitFromInstanceCreateInfo(specified_version, pCreateInfo);
509*b7893ccfSSadaf Ebrahimi 
510*b7893ccfSSadaf Ebrahimi     layer_debug_messenger_actions(framework->report_data, framework->logging_messenger, pAllocator, OBJECT_LAYER_DESCRIPTION);
511*b7893ccfSSadaf Ebrahimi 
512*b7893ccfSSadaf Ebrahimi #if BUILD_OBJECT_TRACKER
513*b7893ccfSSadaf Ebrahimi     object_tracker->report_data = framework->report_data;
514*b7893ccfSSadaf Ebrahimi     object_tracker->instance_dispatch_table = framework->instance_dispatch_table;
515*b7893ccfSSadaf Ebrahimi     object_tracker->enabled = framework->enabled;
516*b7893ccfSSadaf Ebrahimi     object_tracker->disabled = framework->disabled;
517*b7893ccfSSadaf Ebrahimi #endif
518*b7893ccfSSadaf Ebrahimi #if BUILD_THREAD_SAFETY
519*b7893ccfSSadaf Ebrahimi     thread_checker->report_data = framework->report_data;
520*b7893ccfSSadaf Ebrahimi     thread_checker->instance_dispatch_table = framework->instance_dispatch_table;
521*b7893ccfSSadaf Ebrahimi     thread_checker->enabled = framework->enabled;
522*b7893ccfSSadaf Ebrahimi     thread_checker->disabled = framework->disabled;
523*b7893ccfSSadaf Ebrahimi #endif
524*b7893ccfSSadaf Ebrahimi #if BUILD_PARAMETER_VALIDATION
525*b7893ccfSSadaf Ebrahimi     parameter_validation->report_data = framework->report_data;
526*b7893ccfSSadaf Ebrahimi     parameter_validation->instance_dispatch_table = framework->instance_dispatch_table;
527*b7893ccfSSadaf Ebrahimi     parameter_validation->enabled = framework->enabled;
528*b7893ccfSSadaf Ebrahimi     parameter_validation->disabled = framework->disabled;
529*b7893ccfSSadaf Ebrahimi #endif
530*b7893ccfSSadaf Ebrahimi #if BUILD_CORE_VALIDATION
531*b7893ccfSSadaf Ebrahimi     core_checks->report_data = framework->report_data;
532*b7893ccfSSadaf Ebrahimi     core_checks->instance_dispatch_table = framework->instance_dispatch_table;
533*b7893ccfSSadaf Ebrahimi     core_checks->instance = *pInstance;
534*b7893ccfSSadaf Ebrahimi     core_checks->enabled = framework->enabled;
535*b7893ccfSSadaf Ebrahimi     core_checks->disabled = framework->disabled;
536*b7893ccfSSadaf Ebrahimi     core_checks->instance_state = core_checks;
537*b7893ccfSSadaf Ebrahimi #endif
538*b7893ccfSSadaf Ebrahimi #if BUILD_BEST_PRACTICES
539*b7893ccfSSadaf Ebrahimi     best_practices->report_data = framework->report_data;
540*b7893ccfSSadaf Ebrahimi     best_practices->instance_dispatch_table = framework->instance_dispatch_table;
541*b7893ccfSSadaf Ebrahimi     best_practices->enabled = framework->enabled;
542*b7893ccfSSadaf Ebrahimi     best_practices->disabled = framework->disabled;
543*b7893ccfSSadaf Ebrahimi #endif
544*b7893ccfSSadaf Ebrahimi 
545*b7893ccfSSadaf Ebrahimi     for (auto intercept : framework->object_dispatch) {
546*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateInstance(pCreateInfo, pAllocator, pInstance, result);
547*b7893ccfSSadaf Ebrahimi     }
548*b7893ccfSSadaf Ebrahimi 
549*b7893ccfSSadaf Ebrahimi     InstanceExtensionWhitelist(framework, pCreateInfo, *pInstance);
550*b7893ccfSSadaf Ebrahimi 
551*b7893ccfSSadaf Ebrahimi     return result;
552*b7893ccfSSadaf Ebrahimi }
553*b7893ccfSSadaf Ebrahimi 
DestroyInstance(VkInstance instance,const VkAllocationCallbacks * pAllocator)554*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) {
555*b7893ccfSSadaf Ebrahimi     dispatch_key key = get_dispatch_key(instance);
556*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(key, layer_data_map);
557*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
558*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
559*b7893ccfSSadaf Ebrahimi         intercept->PreCallValidateDestroyInstance(instance, pAllocator);
560*b7893ccfSSadaf Ebrahimi     }
561*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
562*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
563*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyInstance(instance, pAllocator);
564*b7893ccfSSadaf Ebrahimi     }
565*b7893ccfSSadaf Ebrahimi 
566*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.DestroyInstance(instance, pAllocator);
567*b7893ccfSSadaf Ebrahimi 
568*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
569*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
570*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyInstance(instance, pAllocator);
571*b7893ccfSSadaf Ebrahimi     }
572*b7893ccfSSadaf Ebrahimi     // Clean up logging callback, if any
573*b7893ccfSSadaf Ebrahimi     while (layer_data->logging_messenger.size() > 0) {
574*b7893ccfSSadaf Ebrahimi         VkDebugUtilsMessengerEXT messenger = layer_data->logging_messenger.back();
575*b7893ccfSSadaf Ebrahimi         layer_destroy_messenger_callback(layer_data->report_data, messenger, pAllocator);
576*b7893ccfSSadaf Ebrahimi         layer_data->logging_messenger.pop_back();
577*b7893ccfSSadaf Ebrahimi     }
578*b7893ccfSSadaf Ebrahimi     while (layer_data->logging_callback.size() > 0) {
579*b7893ccfSSadaf Ebrahimi         VkDebugReportCallbackEXT callback = layer_data->logging_callback.back();
580*b7893ccfSSadaf Ebrahimi         layer_destroy_report_callback(layer_data->report_data, callback, pAllocator);
581*b7893ccfSSadaf Ebrahimi         layer_data->logging_callback.pop_back();
582*b7893ccfSSadaf Ebrahimi     }
583*b7893ccfSSadaf Ebrahimi 
584*b7893ccfSSadaf Ebrahimi     layer_debug_utils_destroy_instance(layer_data->report_data);
585*b7893ccfSSadaf Ebrahimi 
586*b7893ccfSSadaf Ebrahimi     for (auto item = layer_data->object_dispatch.begin(); item != layer_data->object_dispatch.end(); item++) {
587*b7893ccfSSadaf Ebrahimi         delete *item;
588*b7893ccfSSadaf Ebrahimi     }
589*b7893ccfSSadaf Ebrahimi     FreeLayerDataPtr(key, layer_data_map);
590*b7893ccfSSadaf Ebrahimi }
591*b7893ccfSSadaf Ebrahimi 
CreateDevice(VkPhysicalDevice gpu,const VkDeviceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDevice * pDevice)592*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo *pCreateInfo,
593*b7893ccfSSadaf Ebrahimi                                             const VkAllocationCallbacks *pAllocator, VkDevice *pDevice) {
594*b7893ccfSSadaf Ebrahimi     VkLayerDeviceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
595*b7893ccfSSadaf Ebrahimi 
596*b7893ccfSSadaf Ebrahimi     auto instance_interceptor = GetLayerDataPtr(get_dispatch_key(gpu), layer_data_map);
597*b7893ccfSSadaf Ebrahimi 
598*b7893ccfSSadaf Ebrahimi     PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
599*b7893ccfSSadaf Ebrahimi     PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr;
600*b7893ccfSSadaf Ebrahimi     PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice)fpGetInstanceProcAddr(instance_interceptor->instance, "vkCreateDevice");
601*b7893ccfSSadaf Ebrahimi     if (fpCreateDevice == NULL) {
602*b7893ccfSSadaf Ebrahimi         return VK_ERROR_INITIALIZATION_FAILED;
603*b7893ccfSSadaf Ebrahimi     }
604*b7893ccfSSadaf Ebrahimi     chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
605*b7893ccfSSadaf Ebrahimi 
606*b7893ccfSSadaf Ebrahimi     // Get physical device limits for device
607*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceProperties device_properties = {};
608*b7893ccfSSadaf Ebrahimi     instance_interceptor->instance_dispatch_table.GetPhysicalDeviceProperties(gpu, &device_properties);
609*b7893ccfSSadaf Ebrahimi 
610*b7893ccfSSadaf Ebrahimi     // Setup the validation tables based on the application API version from the instance and the capabilities of the device driver
611*b7893ccfSSadaf Ebrahimi     uint32_t effective_api_version = std::min(device_properties.apiVersion, instance_interceptor->api_version);
612*b7893ccfSSadaf Ebrahimi 
613*b7893ccfSSadaf Ebrahimi     DeviceExtensions device_extensions = {};
614*b7893ccfSSadaf Ebrahimi     device_extensions.InitFromDeviceCreateInfo(&instance_interceptor->instance_extensions, effective_api_version, pCreateInfo);
615*b7893ccfSSadaf Ebrahimi     for (auto item : instance_interceptor->object_dispatch) {
616*b7893ccfSSadaf Ebrahimi         item->device_extensions = device_extensions;
617*b7893ccfSSadaf Ebrahimi     }
618*b7893ccfSSadaf Ebrahimi 
619*b7893ccfSSadaf Ebrahimi     safe_VkDeviceCreateInfo modified_create_info(pCreateInfo);
620*b7893ccfSSadaf Ebrahimi 
621*b7893ccfSSadaf Ebrahimi     bool skip = false;
622*b7893ccfSSadaf Ebrahimi     for (auto intercept : instance_interceptor->object_dispatch) {
623*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
624*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateDevice(gpu, pCreateInfo, pAllocator, pDevice);
625*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
626*b7893ccfSSadaf Ebrahimi     }
627*b7893ccfSSadaf Ebrahimi     for (auto intercept : instance_interceptor->object_dispatch) {
628*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
629*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateDevice(gpu, pCreateInfo, pAllocator, pDevice, &modified_create_info);
630*b7893ccfSSadaf Ebrahimi     }
631*b7893ccfSSadaf Ebrahimi 
632*b7893ccfSSadaf Ebrahimi     VkResult result = fpCreateDevice(gpu, reinterpret_cast<VkDeviceCreateInfo *>(&modified_create_info), pAllocator, pDevice);
633*b7893ccfSSadaf Ebrahimi     if (result != VK_SUCCESS) {
634*b7893ccfSSadaf Ebrahimi         return result;
635*b7893ccfSSadaf Ebrahimi     }
636*b7893ccfSSadaf Ebrahimi 
637*b7893ccfSSadaf Ebrahimi     auto device_interceptor = GetLayerDataPtr(get_dispatch_key(*pDevice), layer_data_map);
638*b7893ccfSSadaf Ebrahimi     device_interceptor->container_type = LayerObjectTypeDevice;
639*b7893ccfSSadaf Ebrahimi 
640*b7893ccfSSadaf Ebrahimi     // Save local info in device object
641*b7893ccfSSadaf Ebrahimi     device_interceptor->phys_dev_properties.properties = device_properties;
642*b7893ccfSSadaf Ebrahimi     device_interceptor->api_version = device_interceptor->device_extensions.InitFromDeviceCreateInfo(
643*b7893ccfSSadaf Ebrahimi         &instance_interceptor->instance_extensions, effective_api_version, pCreateInfo);
644*b7893ccfSSadaf Ebrahimi     device_interceptor->device_extensions = device_extensions;
645*b7893ccfSSadaf Ebrahimi 
646*b7893ccfSSadaf Ebrahimi     layer_init_device_dispatch_table(*pDevice, &device_interceptor->device_dispatch_table, fpGetDeviceProcAddr);
647*b7893ccfSSadaf Ebrahimi 
648*b7893ccfSSadaf Ebrahimi     device_interceptor->device = *pDevice;
649*b7893ccfSSadaf Ebrahimi     device_interceptor->physical_device = gpu;
650*b7893ccfSSadaf Ebrahimi     device_interceptor->instance = instance_interceptor->instance;
651*b7893ccfSSadaf Ebrahimi     device_interceptor->report_data = layer_debug_utils_create_device(instance_interceptor->report_data, *pDevice);
652*b7893ccfSSadaf Ebrahimi 
653*b7893ccfSSadaf Ebrahimi     // Note that this defines the order in which the layer validation objects are called
654*b7893ccfSSadaf Ebrahimi #if BUILD_THREAD_SAFETY
655*b7893ccfSSadaf Ebrahimi     auto thread_safety = new ThreadSafety;
656*b7893ccfSSadaf Ebrahimi     thread_safety->container_type = LayerObjectTypeThreading;
657*b7893ccfSSadaf Ebrahimi     if (!instance_interceptor->disabled.thread_safety) {
658*b7893ccfSSadaf Ebrahimi         device_interceptor->object_dispatch.emplace_back(thread_safety);
659*b7893ccfSSadaf Ebrahimi     }
660*b7893ccfSSadaf Ebrahimi #endif
661*b7893ccfSSadaf Ebrahimi #if BUILD_PARAMETER_VALIDATION
662*b7893ccfSSadaf Ebrahimi     auto stateless_validation = new StatelessValidation;
663*b7893ccfSSadaf Ebrahimi     stateless_validation->container_type = LayerObjectTypeParameterValidation;
664*b7893ccfSSadaf Ebrahimi     if (!instance_interceptor->disabled.stateless_checks) {
665*b7893ccfSSadaf Ebrahimi         device_interceptor->object_dispatch.emplace_back(stateless_validation);
666*b7893ccfSSadaf Ebrahimi     }
667*b7893ccfSSadaf Ebrahimi #endif
668*b7893ccfSSadaf Ebrahimi #if BUILD_OBJECT_TRACKER
669*b7893ccfSSadaf Ebrahimi     auto object_tracker = new ObjectLifetimes;
670*b7893ccfSSadaf Ebrahimi     object_tracker->container_type = LayerObjectTypeObjectTracker;
671*b7893ccfSSadaf Ebrahimi     if (!instance_interceptor->disabled.object_tracking) {
672*b7893ccfSSadaf Ebrahimi         device_interceptor->object_dispatch.emplace_back(object_tracker);
673*b7893ccfSSadaf Ebrahimi     }
674*b7893ccfSSadaf Ebrahimi #endif
675*b7893ccfSSadaf Ebrahimi #if BUILD_CORE_VALIDATION
676*b7893ccfSSadaf Ebrahimi     auto core_checks = new CoreChecks;
677*b7893ccfSSadaf Ebrahimi     core_checks->container_type = LayerObjectTypeCoreValidation;
678*b7893ccfSSadaf Ebrahimi     core_checks->instance_state = reinterpret_cast<CoreChecks *>(
679*b7893ccfSSadaf Ebrahimi         core_checks->GetValidationObject(instance_interceptor->object_dispatch, LayerObjectTypeCoreValidation));
680*b7893ccfSSadaf Ebrahimi     if (!instance_interceptor->disabled.core_checks) {
681*b7893ccfSSadaf Ebrahimi         device_interceptor->object_dispatch.emplace_back(core_checks);
682*b7893ccfSSadaf Ebrahimi     }
683*b7893ccfSSadaf Ebrahimi #endif
684*b7893ccfSSadaf Ebrahimi #if BUILD_BEST_PRACTICES
685*b7893ccfSSadaf Ebrahimi     auto best_practices = new BestPractices;
686*b7893ccfSSadaf Ebrahimi     best_practices->container_type = LayerObjectTypeBestPractices;
687*b7893ccfSSadaf Ebrahimi     if (instance_interceptor->enabled.best_practices) {
688*b7893ccfSSadaf Ebrahimi         device_interceptor->object_dispatch.emplace_back(best_practices);
689*b7893ccfSSadaf Ebrahimi     }
690*b7893ccfSSadaf Ebrahimi #endif
691*b7893ccfSSadaf Ebrahimi 
692*b7893ccfSSadaf Ebrahimi     // Set per-intercept common data items
693*b7893ccfSSadaf Ebrahimi     for (auto dev_intercept : device_interceptor->object_dispatch) {
694*b7893ccfSSadaf Ebrahimi         dev_intercept->device = *pDevice;
695*b7893ccfSSadaf Ebrahimi         dev_intercept->physical_device = gpu;
696*b7893ccfSSadaf Ebrahimi         dev_intercept->instance = instance_interceptor->instance;
697*b7893ccfSSadaf Ebrahimi         dev_intercept->report_data = device_interceptor->report_data;
698*b7893ccfSSadaf Ebrahimi         dev_intercept->device_dispatch_table = device_interceptor->device_dispatch_table;
699*b7893ccfSSadaf Ebrahimi         dev_intercept->api_version = device_interceptor->api_version;
700*b7893ccfSSadaf Ebrahimi         dev_intercept->disabled = instance_interceptor->disabled;
701*b7893ccfSSadaf Ebrahimi         dev_intercept->enabled = instance_interceptor->enabled;
702*b7893ccfSSadaf Ebrahimi         dev_intercept->instance_dispatch_table = instance_interceptor->instance_dispatch_table;
703*b7893ccfSSadaf Ebrahimi         dev_intercept->instance_extensions = instance_interceptor->instance_extensions;
704*b7893ccfSSadaf Ebrahimi         dev_intercept->device_extensions = device_interceptor->device_extensions;
705*b7893ccfSSadaf Ebrahimi     }
706*b7893ccfSSadaf Ebrahimi 
707*b7893ccfSSadaf Ebrahimi     for (auto intercept : instance_interceptor->object_dispatch) {
708*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
709*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateDevice(gpu, pCreateInfo, pAllocator, pDevice, result);
710*b7893ccfSSadaf Ebrahimi     }
711*b7893ccfSSadaf Ebrahimi 
712*b7893ccfSSadaf Ebrahimi     DeviceExtensionWhitelist(device_interceptor, pCreateInfo, *pDevice);
713*b7893ccfSSadaf Ebrahimi 
714*b7893ccfSSadaf Ebrahimi     return result;
715*b7893ccfSSadaf Ebrahimi }
716*b7893ccfSSadaf Ebrahimi 
DestroyDevice(VkDevice device,const VkAllocationCallbacks * pAllocator)717*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator) {
718*b7893ccfSSadaf Ebrahimi     dispatch_key key = get_dispatch_key(device);
719*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(key, layer_data_map);
720*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
721*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
722*b7893ccfSSadaf Ebrahimi         intercept->PreCallValidateDestroyDevice(device, pAllocator);
723*b7893ccfSSadaf Ebrahimi     }
724*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
725*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
726*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyDevice(device, pAllocator);
727*b7893ccfSSadaf Ebrahimi     }
728*b7893ccfSSadaf Ebrahimi     layer_debug_utils_destroy_device(device);
729*b7893ccfSSadaf Ebrahimi 
730*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyDevice(device, pAllocator);
731*b7893ccfSSadaf Ebrahimi 
732*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
733*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
734*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyDevice(device, pAllocator);
735*b7893ccfSSadaf Ebrahimi     }
736*b7893ccfSSadaf Ebrahimi 
737*b7893ccfSSadaf Ebrahimi     for (auto item = layer_data->object_dispatch.begin(); item != layer_data->object_dispatch.end(); item++) {
738*b7893ccfSSadaf Ebrahimi         delete *item;
739*b7893ccfSSadaf Ebrahimi     }
740*b7893ccfSSadaf Ebrahimi     FreeLayerDataPtr(key, layer_data_map);
741*b7893ccfSSadaf Ebrahimi }
742*b7893ccfSSadaf Ebrahimi 
743*b7893ccfSSadaf Ebrahimi 
744*b7893ccfSSadaf Ebrahimi // Special-case APIs for which core_validation needs custom parameter lists and/or modifies parameters
745*b7893ccfSSadaf Ebrahimi 
CreateGraphicsPipelines(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const VkGraphicsPipelineCreateInfo * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkPipeline * pPipelines)746*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateGraphicsPipelines(
747*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
748*b7893ccfSSadaf Ebrahimi     VkPipelineCache                             pipelineCache,
749*b7893ccfSSadaf Ebrahimi     uint32_t                                    createInfoCount,
750*b7893ccfSSadaf Ebrahimi     const VkGraphicsPipelineCreateInfo*         pCreateInfos,
751*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
752*b7893ccfSSadaf Ebrahimi     VkPipeline*                                 pPipelines) {
753*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
754*b7893ccfSSadaf Ebrahimi     bool skip = false;
755*b7893ccfSSadaf Ebrahimi 
756*b7893ccfSSadaf Ebrahimi #ifdef BUILD_CORE_VALIDATION
757*b7893ccfSSadaf Ebrahimi         create_graphics_pipeline_api_state cgpl_state{};
758*b7893ccfSSadaf Ebrahimi #else
759*b7893ccfSSadaf Ebrahimi         struct create_graphics_pipeline_api_state {
760*b7893ccfSSadaf Ebrahimi             const VkGraphicsPipelineCreateInfo* pCreateInfos;
761*b7893ccfSSadaf Ebrahimi         } cgpl_state;
762*b7893ccfSSadaf Ebrahimi #endif
763*b7893ccfSSadaf Ebrahimi     cgpl_state.pCreateInfos = pCreateInfos;
764*b7893ccfSSadaf Ebrahimi 
765*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
766*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
767*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, &cgpl_state);
768*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
769*b7893ccfSSadaf Ebrahimi     }
770*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
771*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
772*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, &cgpl_state);
773*b7893ccfSSadaf Ebrahimi     }
774*b7893ccfSSadaf Ebrahimi 
775*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateGraphicsPipelines(device, pipelineCache, createInfoCount, cgpl_state.pCreateInfos, pAllocator, pPipelines);
776*b7893ccfSSadaf Ebrahimi 
777*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
778*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
779*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, result, &cgpl_state);
780*b7893ccfSSadaf Ebrahimi     }
781*b7893ccfSSadaf Ebrahimi     return result;
782*b7893ccfSSadaf Ebrahimi }
783*b7893ccfSSadaf Ebrahimi 
784*b7893ccfSSadaf Ebrahimi // This API saves some core_validation pipeline state state on the stack for performance purposes
CreateComputePipelines(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const VkComputePipelineCreateInfo * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkPipeline * pPipelines)785*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateComputePipelines(
786*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
787*b7893ccfSSadaf Ebrahimi     VkPipelineCache                             pipelineCache,
788*b7893ccfSSadaf Ebrahimi     uint32_t                                    createInfoCount,
789*b7893ccfSSadaf Ebrahimi     const VkComputePipelineCreateInfo*          pCreateInfos,
790*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
791*b7893ccfSSadaf Ebrahimi     VkPipeline*                                 pPipelines) {
792*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
793*b7893ccfSSadaf Ebrahimi     bool skip = false;
794*b7893ccfSSadaf Ebrahimi 
795*b7893ccfSSadaf Ebrahimi #ifdef BUILD_CORE_VALIDATION
796*b7893ccfSSadaf Ebrahimi     create_compute_pipeline_api_state ccpl_state{};
797*b7893ccfSSadaf Ebrahimi #else
798*b7893ccfSSadaf Ebrahimi     struct create_compute_pipeline_api_state {
799*b7893ccfSSadaf Ebrahimi         const VkComputePipelineCreateInfo* pCreateInfos;
800*b7893ccfSSadaf Ebrahimi     } ccpl_state;
801*b7893ccfSSadaf Ebrahimi #endif
802*b7893ccfSSadaf Ebrahimi     ccpl_state.pCreateInfos = pCreateInfos;
803*b7893ccfSSadaf Ebrahimi 
804*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
805*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
806*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, &ccpl_state);
807*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
808*b7893ccfSSadaf Ebrahimi     }
809*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
810*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
811*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, &ccpl_state);
812*b7893ccfSSadaf Ebrahimi     }
813*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateComputePipelines(device, pipelineCache, createInfoCount, ccpl_state.pCreateInfos, pAllocator, pPipelines);
814*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
815*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
816*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines, result, &ccpl_state);
817*b7893ccfSSadaf Ebrahimi     }
818*b7893ccfSSadaf Ebrahimi     return result;
819*b7893ccfSSadaf Ebrahimi }
820*b7893ccfSSadaf Ebrahimi 
CreateRayTracingPipelinesNV(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const VkRayTracingPipelineCreateInfoNV * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkPipeline * pPipelines)821*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateRayTracingPipelinesNV(
822*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
823*b7893ccfSSadaf Ebrahimi     VkPipelineCache                             pipelineCache,
824*b7893ccfSSadaf Ebrahimi     uint32_t                                    createInfoCount,
825*b7893ccfSSadaf Ebrahimi     const VkRayTracingPipelineCreateInfoNV*     pCreateInfos,
826*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
827*b7893ccfSSadaf Ebrahimi     VkPipeline*                                 pPipelines) {
828*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
829*b7893ccfSSadaf Ebrahimi     bool skip = false;
830*b7893ccfSSadaf Ebrahimi 
831*b7893ccfSSadaf Ebrahimi #ifdef BUILD_CORE_VALIDATION
832*b7893ccfSSadaf Ebrahimi     create_ray_tracing_pipeline_api_state crtpl_state{};
833*b7893ccfSSadaf Ebrahimi #else
834*b7893ccfSSadaf Ebrahimi     struct create_ray_tracing_pipeline_api_state {
835*b7893ccfSSadaf Ebrahimi         const VkRayTracingPipelineCreateInfoNV* pCreateInfos;
836*b7893ccfSSadaf Ebrahimi     } crtpl_state;
837*b7893ccfSSadaf Ebrahimi #endif
838*b7893ccfSSadaf Ebrahimi     crtpl_state.pCreateInfos = pCreateInfos;
839*b7893ccfSSadaf Ebrahimi 
840*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
841*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
842*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateRayTracingPipelinesNV(device, pipelineCache, createInfoCount, pCreateInfos,
843*b7893ccfSSadaf Ebrahimi                                                                       pAllocator, pPipelines, &crtpl_state);
844*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
845*b7893ccfSSadaf Ebrahimi     }
846*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
847*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
848*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateRayTracingPipelinesNV(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator,
849*b7893ccfSSadaf Ebrahimi                                                             pPipelines, &crtpl_state);
850*b7893ccfSSadaf Ebrahimi     }
851*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateRayTracingPipelinesNV(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
852*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
853*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
854*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateRayTracingPipelinesNV(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator,
855*b7893ccfSSadaf Ebrahimi                                                              pPipelines, result, &crtpl_state);
856*b7893ccfSSadaf Ebrahimi     }
857*b7893ccfSSadaf Ebrahimi     return result;
858*b7893ccfSSadaf Ebrahimi }
859*b7893ccfSSadaf Ebrahimi 
860*b7893ccfSSadaf Ebrahimi // This API needs the ability to modify a down-chain parameter
CreatePipelineLayout(VkDevice device,const VkPipelineLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineLayout * pPipelineLayout)861*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineLayout(
862*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
863*b7893ccfSSadaf Ebrahimi     const VkPipelineLayoutCreateInfo*           pCreateInfo,
864*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
865*b7893ccfSSadaf Ebrahimi     VkPipelineLayout*                           pPipelineLayout) {
866*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
867*b7893ccfSSadaf Ebrahimi     bool skip = false;
868*b7893ccfSSadaf Ebrahimi 
869*b7893ccfSSadaf Ebrahimi #ifndef BUILD_CORE_VALIDATION
870*b7893ccfSSadaf Ebrahimi     struct create_pipeline_layout_api_state {
871*b7893ccfSSadaf Ebrahimi         VkPipelineLayoutCreateInfo modified_create_info;
872*b7893ccfSSadaf Ebrahimi     };
873*b7893ccfSSadaf Ebrahimi #endif
874*b7893ccfSSadaf Ebrahimi     create_pipeline_layout_api_state cpl_state{};
875*b7893ccfSSadaf Ebrahimi     cpl_state.modified_create_info = *pCreateInfo;
876*b7893ccfSSadaf Ebrahimi 
877*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
878*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
879*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
880*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
881*b7893ccfSSadaf Ebrahimi     }
882*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
883*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
884*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout, &cpl_state);
885*b7893ccfSSadaf Ebrahimi     }
886*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreatePipelineLayout(device, &cpl_state.modified_create_info, pAllocator, pPipelineLayout);
887*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
888*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
889*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout, result);
890*b7893ccfSSadaf Ebrahimi     }
891*b7893ccfSSadaf Ebrahimi     return result;
892*b7893ccfSSadaf Ebrahimi }
893*b7893ccfSSadaf Ebrahimi 
894*b7893ccfSSadaf Ebrahimi // This API needs some local stack data for performance reasons and also may modify a parameter
CreateShaderModule(VkDevice device,const VkShaderModuleCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkShaderModule * pShaderModule)895*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateShaderModule(
896*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
897*b7893ccfSSadaf Ebrahimi     const VkShaderModuleCreateInfo*             pCreateInfo,
898*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
899*b7893ccfSSadaf Ebrahimi     VkShaderModule*                             pShaderModule) {
900*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
901*b7893ccfSSadaf Ebrahimi     bool skip = false;
902*b7893ccfSSadaf Ebrahimi 
903*b7893ccfSSadaf Ebrahimi #ifndef BUILD_CORE_VALIDATION
904*b7893ccfSSadaf Ebrahimi     struct create_shader_module_api_state {
905*b7893ccfSSadaf Ebrahimi         VkShaderModuleCreateInfo instrumented_create_info;
906*b7893ccfSSadaf Ebrahimi     };
907*b7893ccfSSadaf Ebrahimi #endif
908*b7893ccfSSadaf Ebrahimi     create_shader_module_api_state csm_state{};
909*b7893ccfSSadaf Ebrahimi     csm_state.instrumented_create_info = *pCreateInfo;
910*b7893ccfSSadaf Ebrahimi 
911*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
912*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
913*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule, &csm_state);
914*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
915*b7893ccfSSadaf Ebrahimi     }
916*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
917*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
918*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule, &csm_state);
919*b7893ccfSSadaf Ebrahimi     }
920*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateShaderModule(device, &csm_state.instrumented_create_info, pAllocator, pShaderModule);
921*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
922*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
923*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule, result, &csm_state);
924*b7893ccfSSadaf Ebrahimi     }
925*b7893ccfSSadaf Ebrahimi     return result;
926*b7893ccfSSadaf Ebrahimi }
927*b7893ccfSSadaf Ebrahimi 
AllocateDescriptorSets(VkDevice device,const VkDescriptorSetAllocateInfo * pAllocateInfo,VkDescriptorSet * pDescriptorSets)928*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL AllocateDescriptorSets(
929*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
930*b7893ccfSSadaf Ebrahimi     const VkDescriptorSetAllocateInfo*          pAllocateInfo,
931*b7893ccfSSadaf Ebrahimi     VkDescriptorSet*                            pDescriptorSets) {
932*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
933*b7893ccfSSadaf Ebrahimi     bool skip = false;
934*b7893ccfSSadaf Ebrahimi 
935*b7893ccfSSadaf Ebrahimi #ifdef BUILD_CORE_VALIDATION
936*b7893ccfSSadaf Ebrahimi     cvdescriptorset::AllocateDescriptorSetsData ads_state(pAllocateInfo->descriptorSetCount);
937*b7893ccfSSadaf Ebrahimi #else
938*b7893ccfSSadaf Ebrahimi     struct ads_state {} ads_state;
939*b7893ccfSSadaf Ebrahimi #endif
940*b7893ccfSSadaf Ebrahimi 
941*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
942*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
943*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateAllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets, &ads_state);
944*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
945*b7893ccfSSadaf Ebrahimi     }
946*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
947*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
948*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordAllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
949*b7893ccfSSadaf Ebrahimi     }
950*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchAllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
951*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
952*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
953*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordAllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets, result, &ads_state);
954*b7893ccfSSadaf Ebrahimi     }
955*b7893ccfSSadaf Ebrahimi     return result;
956*b7893ccfSSadaf Ebrahimi }
957*b7893ccfSSadaf Ebrahimi 
958*b7893ccfSSadaf Ebrahimi 
959*b7893ccfSSadaf Ebrahimi 
960*b7893ccfSSadaf Ebrahimi 
961*b7893ccfSSadaf Ebrahimi 
962*b7893ccfSSadaf Ebrahimi // ValidationCache APIs do not dispatch
963*b7893ccfSSadaf Ebrahimi 
CreateValidationCacheEXT(VkDevice device,const VkValidationCacheCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkValidationCacheEXT * pValidationCache)964*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateValidationCacheEXT(
965*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
966*b7893ccfSSadaf Ebrahimi     const VkValidationCacheCreateInfoEXT*       pCreateInfo,
967*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
968*b7893ccfSSadaf Ebrahimi     VkValidationCacheEXT*                       pValidationCache) {
969*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
970*b7893ccfSSadaf Ebrahimi     VkResult result = VK_SUCCESS;
971*b7893ccfSSadaf Ebrahimi 
972*b7893ccfSSadaf Ebrahimi     ValidationObject *validation_data = layer_data->GetValidationObject(layer_data->object_dispatch, LayerObjectTypeCoreValidation);
973*b7893ccfSSadaf Ebrahimi     if (validation_data) {
974*b7893ccfSSadaf Ebrahimi         auto lock = validation_data->write_lock();
975*b7893ccfSSadaf Ebrahimi         result = validation_data->CoreLayerCreateValidationCacheEXT(device, pCreateInfo, pAllocator, pValidationCache);
976*b7893ccfSSadaf Ebrahimi     }
977*b7893ccfSSadaf Ebrahimi     return result;
978*b7893ccfSSadaf Ebrahimi }
979*b7893ccfSSadaf Ebrahimi 
DestroyValidationCacheEXT(VkDevice device,VkValidationCacheEXT validationCache,const VkAllocationCallbacks * pAllocator)980*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyValidationCacheEXT(
981*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
982*b7893ccfSSadaf Ebrahimi     VkValidationCacheEXT                        validationCache,
983*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
984*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
985*b7893ccfSSadaf Ebrahimi 
986*b7893ccfSSadaf Ebrahimi     ValidationObject *validation_data = layer_data->GetValidationObject(layer_data->object_dispatch, LayerObjectTypeCoreValidation);
987*b7893ccfSSadaf Ebrahimi     if (validation_data) {
988*b7893ccfSSadaf Ebrahimi         auto lock = validation_data->write_lock();
989*b7893ccfSSadaf Ebrahimi         validation_data->CoreLayerDestroyValidationCacheEXT(device, validationCache, pAllocator);
990*b7893ccfSSadaf Ebrahimi     }
991*b7893ccfSSadaf Ebrahimi }
992*b7893ccfSSadaf Ebrahimi 
MergeValidationCachesEXT(VkDevice device,VkValidationCacheEXT dstCache,uint32_t srcCacheCount,const VkValidationCacheEXT * pSrcCaches)993*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL MergeValidationCachesEXT(
994*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
995*b7893ccfSSadaf Ebrahimi     VkValidationCacheEXT                        dstCache,
996*b7893ccfSSadaf Ebrahimi     uint32_t                                    srcCacheCount,
997*b7893ccfSSadaf Ebrahimi     const VkValidationCacheEXT*                 pSrcCaches) {
998*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
999*b7893ccfSSadaf Ebrahimi     VkResult result = VK_SUCCESS;
1000*b7893ccfSSadaf Ebrahimi 
1001*b7893ccfSSadaf Ebrahimi     ValidationObject *validation_data = layer_data->GetValidationObject(layer_data->object_dispatch, LayerObjectTypeCoreValidation);
1002*b7893ccfSSadaf Ebrahimi     if (validation_data) {
1003*b7893ccfSSadaf Ebrahimi         auto lock = validation_data->write_lock();
1004*b7893ccfSSadaf Ebrahimi         result = validation_data->CoreLayerMergeValidationCachesEXT(device, dstCache, srcCacheCount, pSrcCaches);
1005*b7893ccfSSadaf Ebrahimi     }
1006*b7893ccfSSadaf Ebrahimi     return result;
1007*b7893ccfSSadaf Ebrahimi }
1008*b7893ccfSSadaf Ebrahimi 
GetValidationCacheDataEXT(VkDevice device,VkValidationCacheEXT validationCache,size_t * pDataSize,void * pData)1009*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetValidationCacheDataEXT(
1010*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1011*b7893ccfSSadaf Ebrahimi     VkValidationCacheEXT                        validationCache,
1012*b7893ccfSSadaf Ebrahimi     size_t*                                     pDataSize,
1013*b7893ccfSSadaf Ebrahimi     void*                                       pData) {
1014*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1015*b7893ccfSSadaf Ebrahimi     VkResult result = VK_SUCCESS;
1016*b7893ccfSSadaf Ebrahimi 
1017*b7893ccfSSadaf Ebrahimi     ValidationObject *validation_data = layer_data->GetValidationObject(layer_data->object_dispatch, LayerObjectTypeCoreValidation);
1018*b7893ccfSSadaf Ebrahimi     if (validation_data) {
1019*b7893ccfSSadaf Ebrahimi         auto lock = validation_data->write_lock();
1020*b7893ccfSSadaf Ebrahimi         result = validation_data->CoreLayerGetValidationCacheDataEXT(device, validationCache, pDataSize, pData);
1021*b7893ccfSSadaf Ebrahimi     }
1022*b7893ccfSSadaf Ebrahimi     return result;
1023*b7893ccfSSadaf Ebrahimi 
1024*b7893ccfSSadaf Ebrahimi }
1025*b7893ccfSSadaf Ebrahimi 
1026*b7893ccfSSadaf Ebrahimi 
EnumeratePhysicalDevices(VkInstance instance,uint32_t * pPhysicalDeviceCount,VkPhysicalDevice * pPhysicalDevices)1027*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDevices(
1028*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
1029*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPhysicalDeviceCount,
1030*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice*                           pPhysicalDevices) {
1031*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
1032*b7893ccfSSadaf Ebrahimi     bool skip = false;
1033*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1034*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1035*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1036*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1037*b7893ccfSSadaf Ebrahimi     }
1038*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1039*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1040*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1041*b7893ccfSSadaf Ebrahimi     }
1042*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1043*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1044*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1045*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1046*b7893ccfSSadaf Ebrahimi     }
1047*b7893ccfSSadaf Ebrahimi     return result;
1048*b7893ccfSSadaf Ebrahimi }
1049*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures * pFeatures)1050*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures(
1051*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1052*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceFeatures*                   pFeatures) {
1053*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1054*b7893ccfSSadaf Ebrahimi     bool skip = false;
1055*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1056*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1057*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1058*b7893ccfSSadaf Ebrahimi         if (skip) return;
1059*b7893ccfSSadaf Ebrahimi     }
1060*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1061*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1062*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1063*b7893ccfSSadaf Ebrahimi     }
1064*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1065*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1066*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1067*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1068*b7893ccfSSadaf Ebrahimi     }
1069*b7893ccfSSadaf Ebrahimi }
1070*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties * pFormatProperties)1071*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties(
1072*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1073*b7893ccfSSadaf Ebrahimi     VkFormat                                    format,
1074*b7893ccfSSadaf Ebrahimi     VkFormatProperties*                         pFormatProperties) {
1075*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1076*b7893ccfSSadaf Ebrahimi     bool skip = false;
1077*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1078*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1079*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
1080*b7893ccfSSadaf Ebrahimi         if (skip) return;
1081*b7893ccfSSadaf Ebrahimi     }
1082*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1083*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1084*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
1085*b7893ccfSSadaf Ebrahimi     }
1086*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
1087*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1088*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1089*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
1090*b7893ccfSSadaf Ebrahimi     }
1091*b7893ccfSSadaf Ebrahimi }
1092*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkImageTiling tiling,VkImageUsageFlags usage,VkImageCreateFlags flags,VkImageFormatProperties * pImageFormatProperties)1093*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties(
1094*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1095*b7893ccfSSadaf Ebrahimi     VkFormat                                    format,
1096*b7893ccfSSadaf Ebrahimi     VkImageType                                 type,
1097*b7893ccfSSadaf Ebrahimi     VkImageTiling                               tiling,
1098*b7893ccfSSadaf Ebrahimi     VkImageUsageFlags                           usage,
1099*b7893ccfSSadaf Ebrahimi     VkImageCreateFlags                          flags,
1100*b7893ccfSSadaf Ebrahimi     VkImageFormatProperties*                    pImageFormatProperties) {
1101*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1102*b7893ccfSSadaf Ebrahimi     bool skip = false;
1103*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1104*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1105*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
1106*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1107*b7893ccfSSadaf Ebrahimi     }
1108*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1109*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1110*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
1111*b7893ccfSSadaf Ebrahimi     }
1112*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
1113*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1114*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1115*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
1116*b7893ccfSSadaf Ebrahimi     }
1117*b7893ccfSSadaf Ebrahimi     return result;
1118*b7893ccfSSadaf Ebrahimi }
1119*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties * pProperties)1120*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties(
1121*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1122*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceProperties*                 pProperties) {
1123*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1124*b7893ccfSSadaf Ebrahimi     bool skip = false;
1125*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1126*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1127*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceProperties(physicalDevice, pProperties);
1128*b7893ccfSSadaf Ebrahimi         if (skip) return;
1129*b7893ccfSSadaf Ebrahimi     }
1130*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1131*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1132*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceProperties(physicalDevice, pProperties);
1133*b7893ccfSSadaf Ebrahimi     }
1134*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceProperties(physicalDevice, pProperties);
1135*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1136*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1137*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceProperties(physicalDevice, pProperties);
1138*b7893ccfSSadaf Ebrahimi     }
1139*b7893ccfSSadaf Ebrahimi }
1140*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties * pQueueFamilyProperties)1141*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties(
1142*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1143*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pQueueFamilyPropertyCount,
1144*b7893ccfSSadaf Ebrahimi     VkQueueFamilyProperties*                    pQueueFamilyProperties) {
1145*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1146*b7893ccfSSadaf Ebrahimi     bool skip = false;
1147*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1148*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1149*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
1150*b7893ccfSSadaf Ebrahimi         if (skip) return;
1151*b7893ccfSSadaf Ebrahimi     }
1152*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1153*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1154*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
1155*b7893ccfSSadaf Ebrahimi     }
1156*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
1157*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1158*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1159*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
1160*b7893ccfSSadaf Ebrahimi     }
1161*b7893ccfSSadaf Ebrahimi }
1162*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties * pMemoryProperties)1163*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties(
1164*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1165*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceMemoryProperties*           pMemoryProperties) {
1166*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1167*b7893ccfSSadaf Ebrahimi     bool skip = false;
1168*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1169*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1170*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
1171*b7893ccfSSadaf Ebrahimi         if (skip) return;
1172*b7893ccfSSadaf Ebrahimi     }
1173*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1174*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1175*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
1176*b7893ccfSSadaf Ebrahimi     }
1177*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
1178*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1179*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1180*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
1181*b7893ccfSSadaf Ebrahimi     }
1182*b7893ccfSSadaf Ebrahimi }
1183*b7893ccfSSadaf Ebrahimi 
GetDeviceQueue(VkDevice device,uint32_t queueFamilyIndex,uint32_t queueIndex,VkQueue * pQueue)1184*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetDeviceQueue(
1185*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1186*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueFamilyIndex,
1187*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueIndex,
1188*b7893ccfSSadaf Ebrahimi     VkQueue*                                    pQueue) {
1189*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1190*b7893ccfSSadaf Ebrahimi     bool skip = false;
1191*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1192*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1193*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
1194*b7893ccfSSadaf Ebrahimi         if (skip) return;
1195*b7893ccfSSadaf Ebrahimi     }
1196*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1197*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1198*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
1199*b7893ccfSSadaf Ebrahimi     }
1200*b7893ccfSSadaf Ebrahimi     DispatchGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
1201*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1202*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1203*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
1204*b7893ccfSSadaf Ebrahimi     }
1205*b7893ccfSSadaf Ebrahimi }
1206*b7893ccfSSadaf Ebrahimi 
QueueSubmit(VkQueue queue,uint32_t submitCount,const VkSubmitInfo * pSubmits,VkFence fence)1207*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL QueueSubmit(
1208*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue,
1209*b7893ccfSSadaf Ebrahimi     uint32_t                                    submitCount,
1210*b7893ccfSSadaf Ebrahimi     const VkSubmitInfo*                         pSubmits,
1211*b7893ccfSSadaf Ebrahimi     VkFence                                     fence) {
1212*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
1213*b7893ccfSSadaf Ebrahimi     bool skip = false;
1214*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1215*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1216*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateQueueSubmit(queue, submitCount, pSubmits, fence);
1217*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1218*b7893ccfSSadaf Ebrahimi     }
1219*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1220*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1221*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordQueueSubmit(queue, submitCount, pSubmits, fence);
1222*b7893ccfSSadaf Ebrahimi     }
1223*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchQueueSubmit(queue, submitCount, pSubmits, fence);
1224*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1225*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1226*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordQueueSubmit(queue, submitCount, pSubmits, fence, result);
1227*b7893ccfSSadaf Ebrahimi     }
1228*b7893ccfSSadaf Ebrahimi     return result;
1229*b7893ccfSSadaf Ebrahimi }
1230*b7893ccfSSadaf Ebrahimi 
QueueWaitIdle(VkQueue queue)1231*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL QueueWaitIdle(
1232*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue) {
1233*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
1234*b7893ccfSSadaf Ebrahimi     bool skip = false;
1235*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1236*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1237*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateQueueWaitIdle(queue);
1238*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1239*b7893ccfSSadaf Ebrahimi     }
1240*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1241*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1242*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordQueueWaitIdle(queue);
1243*b7893ccfSSadaf Ebrahimi     }
1244*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchQueueWaitIdle(queue);
1245*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1246*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1247*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordQueueWaitIdle(queue, result);
1248*b7893ccfSSadaf Ebrahimi     }
1249*b7893ccfSSadaf Ebrahimi     return result;
1250*b7893ccfSSadaf Ebrahimi }
1251*b7893ccfSSadaf Ebrahimi 
DeviceWaitIdle(VkDevice device)1252*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL DeviceWaitIdle(
1253*b7893ccfSSadaf Ebrahimi     VkDevice                                    device) {
1254*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1255*b7893ccfSSadaf Ebrahimi     bool skip = false;
1256*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1257*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1258*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDeviceWaitIdle(device);
1259*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1260*b7893ccfSSadaf Ebrahimi     }
1261*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1262*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1263*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDeviceWaitIdle(device);
1264*b7893ccfSSadaf Ebrahimi     }
1265*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchDeviceWaitIdle(device);
1266*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1267*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1268*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDeviceWaitIdle(device, result);
1269*b7893ccfSSadaf Ebrahimi     }
1270*b7893ccfSSadaf Ebrahimi     return result;
1271*b7893ccfSSadaf Ebrahimi }
1272*b7893ccfSSadaf Ebrahimi 
AllocateMemory(VkDevice device,const VkMemoryAllocateInfo * pAllocateInfo,const VkAllocationCallbacks * pAllocator,VkDeviceMemory * pMemory)1273*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL AllocateMemory(
1274*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1275*b7893ccfSSadaf Ebrahimi     const VkMemoryAllocateInfo*                 pAllocateInfo,
1276*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1277*b7893ccfSSadaf Ebrahimi     VkDeviceMemory*                             pMemory) {
1278*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1279*b7893ccfSSadaf Ebrahimi     bool skip = false;
1280*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1281*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1282*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateAllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
1283*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1284*b7893ccfSSadaf Ebrahimi     }
1285*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1286*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1287*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordAllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
1288*b7893ccfSSadaf Ebrahimi     }
1289*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchAllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
1290*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1291*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1292*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordAllocateMemory(device, pAllocateInfo, pAllocator, pMemory, result);
1293*b7893ccfSSadaf Ebrahimi     }
1294*b7893ccfSSadaf Ebrahimi     return result;
1295*b7893ccfSSadaf Ebrahimi }
1296*b7893ccfSSadaf Ebrahimi 
FreeMemory(VkDevice device,VkDeviceMemory memory,const VkAllocationCallbacks * pAllocator)1297*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL FreeMemory(
1298*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1299*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory,
1300*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
1301*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1302*b7893ccfSSadaf Ebrahimi     bool skip = false;
1303*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1304*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1305*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateFreeMemory(device, memory, pAllocator);
1306*b7893ccfSSadaf Ebrahimi         if (skip) return;
1307*b7893ccfSSadaf Ebrahimi     }
1308*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1309*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1310*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordFreeMemory(device, memory, pAllocator);
1311*b7893ccfSSadaf Ebrahimi     }
1312*b7893ccfSSadaf Ebrahimi     DispatchFreeMemory(device, memory, pAllocator);
1313*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1314*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1315*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordFreeMemory(device, memory, pAllocator);
1316*b7893ccfSSadaf Ebrahimi     }
1317*b7893ccfSSadaf Ebrahimi }
1318*b7893ccfSSadaf Ebrahimi 
MapMemory(VkDevice device,VkDeviceMemory memory,VkDeviceSize offset,VkDeviceSize size,VkMemoryMapFlags flags,void ** ppData)1319*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL MapMemory(
1320*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1321*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory,
1322*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
1323*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                size,
1324*b7893ccfSSadaf Ebrahimi     VkMemoryMapFlags                            flags,
1325*b7893ccfSSadaf Ebrahimi     void**                                      ppData) {
1326*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1327*b7893ccfSSadaf Ebrahimi     bool skip = false;
1328*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1329*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1330*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateMapMemory(device, memory, offset, size, flags, ppData);
1331*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1332*b7893ccfSSadaf Ebrahimi     }
1333*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1334*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1335*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordMapMemory(device, memory, offset, size, flags, ppData);
1336*b7893ccfSSadaf Ebrahimi     }
1337*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchMapMemory(device, memory, offset, size, flags, ppData);
1338*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1339*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1340*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordMapMemory(device, memory, offset, size, flags, ppData, result);
1341*b7893ccfSSadaf Ebrahimi     }
1342*b7893ccfSSadaf Ebrahimi     return result;
1343*b7893ccfSSadaf Ebrahimi }
1344*b7893ccfSSadaf Ebrahimi 
UnmapMemory(VkDevice device,VkDeviceMemory memory)1345*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL UnmapMemory(
1346*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1347*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory) {
1348*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1349*b7893ccfSSadaf Ebrahimi     bool skip = false;
1350*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1351*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1352*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateUnmapMemory(device, memory);
1353*b7893ccfSSadaf Ebrahimi         if (skip) return;
1354*b7893ccfSSadaf Ebrahimi     }
1355*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1356*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1357*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordUnmapMemory(device, memory);
1358*b7893ccfSSadaf Ebrahimi     }
1359*b7893ccfSSadaf Ebrahimi     DispatchUnmapMemory(device, memory);
1360*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1361*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1362*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordUnmapMemory(device, memory);
1363*b7893ccfSSadaf Ebrahimi     }
1364*b7893ccfSSadaf Ebrahimi }
1365*b7893ccfSSadaf Ebrahimi 
FlushMappedMemoryRanges(VkDevice device,uint32_t memoryRangeCount,const VkMappedMemoryRange * pMemoryRanges)1366*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL FlushMappedMemoryRanges(
1367*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1368*b7893ccfSSadaf Ebrahimi     uint32_t                                    memoryRangeCount,
1369*b7893ccfSSadaf Ebrahimi     const VkMappedMemoryRange*                  pMemoryRanges) {
1370*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1371*b7893ccfSSadaf Ebrahimi     bool skip = false;
1372*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1373*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1374*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateFlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1375*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1376*b7893ccfSSadaf Ebrahimi     }
1377*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1378*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1379*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordFlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1380*b7893ccfSSadaf Ebrahimi     }
1381*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchFlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1382*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1383*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1384*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordFlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges, result);
1385*b7893ccfSSadaf Ebrahimi     }
1386*b7893ccfSSadaf Ebrahimi     return result;
1387*b7893ccfSSadaf Ebrahimi }
1388*b7893ccfSSadaf Ebrahimi 
InvalidateMappedMemoryRanges(VkDevice device,uint32_t memoryRangeCount,const VkMappedMemoryRange * pMemoryRanges)1389*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL InvalidateMappedMemoryRanges(
1390*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1391*b7893ccfSSadaf Ebrahimi     uint32_t                                    memoryRangeCount,
1392*b7893ccfSSadaf Ebrahimi     const VkMappedMemoryRange*                  pMemoryRanges) {
1393*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1394*b7893ccfSSadaf Ebrahimi     bool skip = false;
1395*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1396*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1397*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateInvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1398*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1399*b7893ccfSSadaf Ebrahimi     }
1400*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1401*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1402*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordInvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1403*b7893ccfSSadaf Ebrahimi     }
1404*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchInvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1405*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1406*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1407*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordInvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges, result);
1408*b7893ccfSSadaf Ebrahimi     }
1409*b7893ccfSSadaf Ebrahimi     return result;
1410*b7893ccfSSadaf Ebrahimi }
1411*b7893ccfSSadaf Ebrahimi 
GetDeviceMemoryCommitment(VkDevice device,VkDeviceMemory memory,VkDeviceSize * pCommittedMemoryInBytes)1412*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetDeviceMemoryCommitment(
1413*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1414*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory,
1415*b7893ccfSSadaf Ebrahimi     VkDeviceSize*                               pCommittedMemoryInBytes) {
1416*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1417*b7893ccfSSadaf Ebrahimi     bool skip = false;
1418*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1419*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1420*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
1421*b7893ccfSSadaf Ebrahimi         if (skip) return;
1422*b7893ccfSSadaf Ebrahimi     }
1423*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1424*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1425*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
1426*b7893ccfSSadaf Ebrahimi     }
1427*b7893ccfSSadaf Ebrahimi     DispatchGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
1428*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1429*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1430*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
1431*b7893ccfSSadaf Ebrahimi     }
1432*b7893ccfSSadaf Ebrahimi }
1433*b7893ccfSSadaf Ebrahimi 
BindBufferMemory(VkDevice device,VkBuffer buffer,VkDeviceMemory memory,VkDeviceSize memoryOffset)1434*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory(
1435*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1436*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
1437*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory,
1438*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                memoryOffset) {
1439*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1440*b7893ccfSSadaf Ebrahimi     bool skip = false;
1441*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1442*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1443*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateBindBufferMemory(device, buffer, memory, memoryOffset);
1444*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1445*b7893ccfSSadaf Ebrahimi     }
1446*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1447*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1448*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordBindBufferMemory(device, buffer, memory, memoryOffset);
1449*b7893ccfSSadaf Ebrahimi     }
1450*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchBindBufferMemory(device, buffer, memory, memoryOffset);
1451*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1452*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1453*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordBindBufferMemory(device, buffer, memory, memoryOffset, result);
1454*b7893ccfSSadaf Ebrahimi     }
1455*b7893ccfSSadaf Ebrahimi     return result;
1456*b7893ccfSSadaf Ebrahimi }
1457*b7893ccfSSadaf Ebrahimi 
BindImageMemory(VkDevice device,VkImage image,VkDeviceMemory memory,VkDeviceSize memoryOffset)1458*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory(
1459*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1460*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
1461*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory,
1462*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                memoryOffset) {
1463*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1464*b7893ccfSSadaf Ebrahimi     bool skip = false;
1465*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1466*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1467*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateBindImageMemory(device, image, memory, memoryOffset);
1468*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1469*b7893ccfSSadaf Ebrahimi     }
1470*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1471*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1472*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordBindImageMemory(device, image, memory, memoryOffset);
1473*b7893ccfSSadaf Ebrahimi     }
1474*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchBindImageMemory(device, image, memory, memoryOffset);
1475*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1476*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1477*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordBindImageMemory(device, image, memory, memoryOffset, result);
1478*b7893ccfSSadaf Ebrahimi     }
1479*b7893ccfSSadaf Ebrahimi     return result;
1480*b7893ccfSSadaf Ebrahimi }
1481*b7893ccfSSadaf Ebrahimi 
GetBufferMemoryRequirements(VkDevice device,VkBuffer buffer,VkMemoryRequirements * pMemoryRequirements)1482*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements(
1483*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1484*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
1485*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements*                       pMemoryRequirements) {
1486*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1487*b7893ccfSSadaf Ebrahimi     bool skip = false;
1488*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1489*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1490*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
1491*b7893ccfSSadaf Ebrahimi         if (skip) return;
1492*b7893ccfSSadaf Ebrahimi     }
1493*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1494*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1495*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
1496*b7893ccfSSadaf Ebrahimi     }
1497*b7893ccfSSadaf Ebrahimi     DispatchGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
1498*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1499*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1500*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
1501*b7893ccfSSadaf Ebrahimi     }
1502*b7893ccfSSadaf Ebrahimi }
1503*b7893ccfSSadaf Ebrahimi 
GetImageMemoryRequirements(VkDevice device,VkImage image,VkMemoryRequirements * pMemoryRequirements)1504*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements(
1505*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1506*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
1507*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements*                       pMemoryRequirements) {
1508*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1509*b7893ccfSSadaf Ebrahimi     bool skip = false;
1510*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1511*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1512*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetImageMemoryRequirements(device, image, pMemoryRequirements);
1513*b7893ccfSSadaf Ebrahimi         if (skip) return;
1514*b7893ccfSSadaf Ebrahimi     }
1515*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1516*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1517*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetImageMemoryRequirements(device, image, pMemoryRequirements);
1518*b7893ccfSSadaf Ebrahimi     }
1519*b7893ccfSSadaf Ebrahimi     DispatchGetImageMemoryRequirements(device, image, pMemoryRequirements);
1520*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1521*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1522*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetImageMemoryRequirements(device, image, pMemoryRequirements);
1523*b7893ccfSSadaf Ebrahimi     }
1524*b7893ccfSSadaf Ebrahimi }
1525*b7893ccfSSadaf Ebrahimi 
GetImageSparseMemoryRequirements(VkDevice device,VkImage image,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements * pSparseMemoryRequirements)1526*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements(
1527*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1528*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
1529*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pSparseMemoryRequirementCount,
1530*b7893ccfSSadaf Ebrahimi     VkSparseImageMemoryRequirements*            pSparseMemoryRequirements) {
1531*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1532*b7893ccfSSadaf Ebrahimi     bool skip = false;
1533*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1534*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1535*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
1536*b7893ccfSSadaf Ebrahimi         if (skip) return;
1537*b7893ccfSSadaf Ebrahimi     }
1538*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1539*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1540*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
1541*b7893ccfSSadaf Ebrahimi     }
1542*b7893ccfSSadaf Ebrahimi     DispatchGetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
1543*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1544*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1545*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
1546*b7893ccfSSadaf Ebrahimi     }
1547*b7893ccfSSadaf Ebrahimi }
1548*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkSampleCountFlagBits samples,VkImageUsageFlags usage,VkImageTiling tiling,uint32_t * pPropertyCount,VkSparseImageFormatProperties * pProperties)1549*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties(
1550*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1551*b7893ccfSSadaf Ebrahimi     VkFormat                                    format,
1552*b7893ccfSSadaf Ebrahimi     VkImageType                                 type,
1553*b7893ccfSSadaf Ebrahimi     VkSampleCountFlagBits                       samples,
1554*b7893ccfSSadaf Ebrahimi     VkImageUsageFlags                           usage,
1555*b7893ccfSSadaf Ebrahimi     VkImageTiling                               tiling,
1556*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
1557*b7893ccfSSadaf Ebrahimi     VkSparseImageFormatProperties*              pProperties) {
1558*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1559*b7893ccfSSadaf Ebrahimi     bool skip = false;
1560*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1561*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1562*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
1563*b7893ccfSSadaf Ebrahimi         if (skip) return;
1564*b7893ccfSSadaf Ebrahimi     }
1565*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1566*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1567*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
1568*b7893ccfSSadaf Ebrahimi     }
1569*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
1570*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1571*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1572*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
1573*b7893ccfSSadaf Ebrahimi     }
1574*b7893ccfSSadaf Ebrahimi }
1575*b7893ccfSSadaf Ebrahimi 
QueueBindSparse(VkQueue queue,uint32_t bindInfoCount,const VkBindSparseInfo * pBindInfo,VkFence fence)1576*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL QueueBindSparse(
1577*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue,
1578*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindInfoCount,
1579*b7893ccfSSadaf Ebrahimi     const VkBindSparseInfo*                     pBindInfo,
1580*b7893ccfSSadaf Ebrahimi     VkFence                                     fence) {
1581*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
1582*b7893ccfSSadaf Ebrahimi     bool skip = false;
1583*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1584*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1585*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateQueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
1586*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1587*b7893ccfSSadaf Ebrahimi     }
1588*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1589*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1590*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordQueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
1591*b7893ccfSSadaf Ebrahimi     }
1592*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchQueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
1593*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1594*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1595*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
1596*b7893ccfSSadaf Ebrahimi     }
1597*b7893ccfSSadaf Ebrahimi     return result;
1598*b7893ccfSSadaf Ebrahimi }
1599*b7893ccfSSadaf Ebrahimi 
CreateFence(VkDevice device,const VkFenceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkFence * pFence)1600*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateFence(
1601*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1602*b7893ccfSSadaf Ebrahimi     const VkFenceCreateInfo*                    pCreateInfo,
1603*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1604*b7893ccfSSadaf Ebrahimi     VkFence*                                    pFence) {
1605*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1606*b7893ccfSSadaf Ebrahimi     bool skip = false;
1607*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1608*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1609*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateFence(device, pCreateInfo, pAllocator, pFence);
1610*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1611*b7893ccfSSadaf Ebrahimi     }
1612*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1613*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1614*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateFence(device, pCreateInfo, pAllocator, pFence);
1615*b7893ccfSSadaf Ebrahimi     }
1616*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateFence(device, pCreateInfo, pAllocator, pFence);
1617*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1618*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1619*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateFence(device, pCreateInfo, pAllocator, pFence, result);
1620*b7893ccfSSadaf Ebrahimi     }
1621*b7893ccfSSadaf Ebrahimi     return result;
1622*b7893ccfSSadaf Ebrahimi }
1623*b7893ccfSSadaf Ebrahimi 
DestroyFence(VkDevice device,VkFence fence,const VkAllocationCallbacks * pAllocator)1624*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyFence(
1625*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1626*b7893ccfSSadaf Ebrahimi     VkFence                                     fence,
1627*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
1628*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1629*b7893ccfSSadaf Ebrahimi     bool skip = false;
1630*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1631*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1632*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyFence(device, fence, pAllocator);
1633*b7893ccfSSadaf Ebrahimi         if (skip) return;
1634*b7893ccfSSadaf Ebrahimi     }
1635*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1636*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1637*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyFence(device, fence, pAllocator);
1638*b7893ccfSSadaf Ebrahimi     }
1639*b7893ccfSSadaf Ebrahimi     DispatchDestroyFence(device, fence, pAllocator);
1640*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1641*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1642*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyFence(device, fence, pAllocator);
1643*b7893ccfSSadaf Ebrahimi     }
1644*b7893ccfSSadaf Ebrahimi }
1645*b7893ccfSSadaf Ebrahimi 
ResetFences(VkDevice device,uint32_t fenceCount,const VkFence * pFences)1646*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL ResetFences(
1647*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1648*b7893ccfSSadaf Ebrahimi     uint32_t                                    fenceCount,
1649*b7893ccfSSadaf Ebrahimi     const VkFence*                              pFences) {
1650*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1651*b7893ccfSSadaf Ebrahimi     bool skip = false;
1652*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1653*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1654*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateResetFences(device, fenceCount, pFences);
1655*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1656*b7893ccfSSadaf Ebrahimi     }
1657*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1658*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1659*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordResetFences(device, fenceCount, pFences);
1660*b7893ccfSSadaf Ebrahimi     }
1661*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchResetFences(device, fenceCount, pFences);
1662*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1663*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1664*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordResetFences(device, fenceCount, pFences, result);
1665*b7893ccfSSadaf Ebrahimi     }
1666*b7893ccfSSadaf Ebrahimi     return result;
1667*b7893ccfSSadaf Ebrahimi }
1668*b7893ccfSSadaf Ebrahimi 
GetFenceStatus(VkDevice device,VkFence fence)1669*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetFenceStatus(
1670*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1671*b7893ccfSSadaf Ebrahimi     VkFence                                     fence) {
1672*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1673*b7893ccfSSadaf Ebrahimi     bool skip = false;
1674*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1675*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1676*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetFenceStatus(device, fence);
1677*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1678*b7893ccfSSadaf Ebrahimi     }
1679*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1680*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1681*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetFenceStatus(device, fence);
1682*b7893ccfSSadaf Ebrahimi     }
1683*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetFenceStatus(device, fence);
1684*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1685*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1686*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetFenceStatus(device, fence, result);
1687*b7893ccfSSadaf Ebrahimi     }
1688*b7893ccfSSadaf Ebrahimi     return result;
1689*b7893ccfSSadaf Ebrahimi }
1690*b7893ccfSSadaf Ebrahimi 
WaitForFences(VkDevice device,uint32_t fenceCount,const VkFence * pFences,VkBool32 waitAll,uint64_t timeout)1691*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL WaitForFences(
1692*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1693*b7893ccfSSadaf Ebrahimi     uint32_t                                    fenceCount,
1694*b7893ccfSSadaf Ebrahimi     const VkFence*                              pFences,
1695*b7893ccfSSadaf Ebrahimi     VkBool32                                    waitAll,
1696*b7893ccfSSadaf Ebrahimi     uint64_t                                    timeout) {
1697*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1698*b7893ccfSSadaf Ebrahimi     bool skip = false;
1699*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1700*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1701*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateWaitForFences(device, fenceCount, pFences, waitAll, timeout);
1702*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1703*b7893ccfSSadaf Ebrahimi     }
1704*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1705*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1706*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordWaitForFences(device, fenceCount, pFences, waitAll, timeout);
1707*b7893ccfSSadaf Ebrahimi     }
1708*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchWaitForFences(device, fenceCount, pFences, waitAll, timeout);
1709*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1710*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1711*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordWaitForFences(device, fenceCount, pFences, waitAll, timeout, result);
1712*b7893ccfSSadaf Ebrahimi     }
1713*b7893ccfSSadaf Ebrahimi     return result;
1714*b7893ccfSSadaf Ebrahimi }
1715*b7893ccfSSadaf Ebrahimi 
CreateSemaphore(VkDevice device,const VkSemaphoreCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSemaphore * pSemaphore)1716*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateSemaphore(
1717*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1718*b7893ccfSSadaf Ebrahimi     const VkSemaphoreCreateInfo*                pCreateInfo,
1719*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1720*b7893ccfSSadaf Ebrahimi     VkSemaphore*                                pSemaphore) {
1721*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1722*b7893ccfSSadaf Ebrahimi     bool skip = false;
1723*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1724*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1725*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
1726*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1727*b7893ccfSSadaf Ebrahimi     }
1728*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1729*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1730*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
1731*b7893ccfSSadaf Ebrahimi     }
1732*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
1733*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1734*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1735*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore, result);
1736*b7893ccfSSadaf Ebrahimi     }
1737*b7893ccfSSadaf Ebrahimi     return result;
1738*b7893ccfSSadaf Ebrahimi }
1739*b7893ccfSSadaf Ebrahimi 
DestroySemaphore(VkDevice device,VkSemaphore semaphore,const VkAllocationCallbacks * pAllocator)1740*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroySemaphore(
1741*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1742*b7893ccfSSadaf Ebrahimi     VkSemaphore                                 semaphore,
1743*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
1744*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1745*b7893ccfSSadaf Ebrahimi     bool skip = false;
1746*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1747*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1748*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroySemaphore(device, semaphore, pAllocator);
1749*b7893ccfSSadaf Ebrahimi         if (skip) return;
1750*b7893ccfSSadaf Ebrahimi     }
1751*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1752*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1753*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroySemaphore(device, semaphore, pAllocator);
1754*b7893ccfSSadaf Ebrahimi     }
1755*b7893ccfSSadaf Ebrahimi     DispatchDestroySemaphore(device, semaphore, pAllocator);
1756*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1757*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1758*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroySemaphore(device, semaphore, pAllocator);
1759*b7893ccfSSadaf Ebrahimi     }
1760*b7893ccfSSadaf Ebrahimi }
1761*b7893ccfSSadaf Ebrahimi 
CreateEvent(VkDevice device,const VkEventCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkEvent * pEvent)1762*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateEvent(
1763*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1764*b7893ccfSSadaf Ebrahimi     const VkEventCreateInfo*                    pCreateInfo,
1765*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1766*b7893ccfSSadaf Ebrahimi     VkEvent*                                    pEvent) {
1767*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1768*b7893ccfSSadaf Ebrahimi     bool skip = false;
1769*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1770*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1771*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateEvent(device, pCreateInfo, pAllocator, pEvent);
1772*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1773*b7893ccfSSadaf Ebrahimi     }
1774*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1775*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1776*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateEvent(device, pCreateInfo, pAllocator, pEvent);
1777*b7893ccfSSadaf Ebrahimi     }
1778*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateEvent(device, pCreateInfo, pAllocator, pEvent);
1779*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1780*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1781*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateEvent(device, pCreateInfo, pAllocator, pEvent, result);
1782*b7893ccfSSadaf Ebrahimi     }
1783*b7893ccfSSadaf Ebrahimi     return result;
1784*b7893ccfSSadaf Ebrahimi }
1785*b7893ccfSSadaf Ebrahimi 
DestroyEvent(VkDevice device,VkEvent event,const VkAllocationCallbacks * pAllocator)1786*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyEvent(
1787*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1788*b7893ccfSSadaf Ebrahimi     VkEvent                                     event,
1789*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
1790*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1791*b7893ccfSSadaf Ebrahimi     bool skip = false;
1792*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1793*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1794*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyEvent(device, event, pAllocator);
1795*b7893ccfSSadaf Ebrahimi         if (skip) return;
1796*b7893ccfSSadaf Ebrahimi     }
1797*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1798*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1799*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyEvent(device, event, pAllocator);
1800*b7893ccfSSadaf Ebrahimi     }
1801*b7893ccfSSadaf Ebrahimi     DispatchDestroyEvent(device, event, pAllocator);
1802*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1803*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1804*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyEvent(device, event, pAllocator);
1805*b7893ccfSSadaf Ebrahimi     }
1806*b7893ccfSSadaf Ebrahimi }
1807*b7893ccfSSadaf Ebrahimi 
GetEventStatus(VkDevice device,VkEvent event)1808*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetEventStatus(
1809*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1810*b7893ccfSSadaf Ebrahimi     VkEvent                                     event) {
1811*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1812*b7893ccfSSadaf Ebrahimi     bool skip = false;
1813*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1814*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1815*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetEventStatus(device, event);
1816*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1817*b7893ccfSSadaf Ebrahimi     }
1818*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1819*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1820*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetEventStatus(device, event);
1821*b7893ccfSSadaf Ebrahimi     }
1822*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetEventStatus(device, event);
1823*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1824*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1825*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetEventStatus(device, event, result);
1826*b7893ccfSSadaf Ebrahimi     }
1827*b7893ccfSSadaf Ebrahimi     return result;
1828*b7893ccfSSadaf Ebrahimi }
1829*b7893ccfSSadaf Ebrahimi 
SetEvent(VkDevice device,VkEvent event)1830*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL SetEvent(
1831*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1832*b7893ccfSSadaf Ebrahimi     VkEvent                                     event) {
1833*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1834*b7893ccfSSadaf Ebrahimi     bool skip = false;
1835*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1836*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1837*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateSetEvent(device, event);
1838*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1839*b7893ccfSSadaf Ebrahimi     }
1840*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1841*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1842*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordSetEvent(device, event);
1843*b7893ccfSSadaf Ebrahimi     }
1844*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchSetEvent(device, event);
1845*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1846*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1847*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordSetEvent(device, event, result);
1848*b7893ccfSSadaf Ebrahimi     }
1849*b7893ccfSSadaf Ebrahimi     return result;
1850*b7893ccfSSadaf Ebrahimi }
1851*b7893ccfSSadaf Ebrahimi 
ResetEvent(VkDevice device,VkEvent event)1852*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL ResetEvent(
1853*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1854*b7893ccfSSadaf Ebrahimi     VkEvent                                     event) {
1855*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1856*b7893ccfSSadaf Ebrahimi     bool skip = false;
1857*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1858*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1859*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateResetEvent(device, event);
1860*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1861*b7893ccfSSadaf Ebrahimi     }
1862*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1863*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1864*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordResetEvent(device, event);
1865*b7893ccfSSadaf Ebrahimi     }
1866*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchResetEvent(device, event);
1867*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1868*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1869*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordResetEvent(device, event, result);
1870*b7893ccfSSadaf Ebrahimi     }
1871*b7893ccfSSadaf Ebrahimi     return result;
1872*b7893ccfSSadaf Ebrahimi }
1873*b7893ccfSSadaf Ebrahimi 
CreateQueryPool(VkDevice device,const VkQueryPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkQueryPool * pQueryPool)1874*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateQueryPool(
1875*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1876*b7893ccfSSadaf Ebrahimi     const VkQueryPoolCreateInfo*                pCreateInfo,
1877*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1878*b7893ccfSSadaf Ebrahimi     VkQueryPool*                                pQueryPool) {
1879*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1880*b7893ccfSSadaf Ebrahimi     bool skip = false;
1881*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1882*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1883*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
1884*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1885*b7893ccfSSadaf Ebrahimi     }
1886*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1887*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1888*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
1889*b7893ccfSSadaf Ebrahimi     }
1890*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
1891*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1892*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1893*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool, result);
1894*b7893ccfSSadaf Ebrahimi     }
1895*b7893ccfSSadaf Ebrahimi     return result;
1896*b7893ccfSSadaf Ebrahimi }
1897*b7893ccfSSadaf Ebrahimi 
DestroyQueryPool(VkDevice device,VkQueryPool queryPool,const VkAllocationCallbacks * pAllocator)1898*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyQueryPool(
1899*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1900*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
1901*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
1902*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1903*b7893ccfSSadaf Ebrahimi     bool skip = false;
1904*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1905*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1906*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyQueryPool(device, queryPool, pAllocator);
1907*b7893ccfSSadaf Ebrahimi         if (skip) return;
1908*b7893ccfSSadaf Ebrahimi     }
1909*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1910*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1911*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyQueryPool(device, queryPool, pAllocator);
1912*b7893ccfSSadaf Ebrahimi     }
1913*b7893ccfSSadaf Ebrahimi     DispatchDestroyQueryPool(device, queryPool, pAllocator);
1914*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1915*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1916*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyQueryPool(device, queryPool, pAllocator);
1917*b7893ccfSSadaf Ebrahimi     }
1918*b7893ccfSSadaf Ebrahimi }
1919*b7893ccfSSadaf Ebrahimi 
GetQueryPoolResults(VkDevice device,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,size_t dataSize,void * pData,VkDeviceSize stride,VkQueryResultFlags flags)1920*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetQueryPoolResults(
1921*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1922*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
1923*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstQuery,
1924*b7893ccfSSadaf Ebrahimi     uint32_t                                    queryCount,
1925*b7893ccfSSadaf Ebrahimi     size_t                                      dataSize,
1926*b7893ccfSSadaf Ebrahimi     void*                                       pData,
1927*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                stride,
1928*b7893ccfSSadaf Ebrahimi     VkQueryResultFlags                          flags) {
1929*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1930*b7893ccfSSadaf Ebrahimi     bool skip = false;
1931*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1932*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1933*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
1934*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1935*b7893ccfSSadaf Ebrahimi     }
1936*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1937*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1938*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
1939*b7893ccfSSadaf Ebrahimi     }
1940*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
1941*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1942*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1943*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags, result);
1944*b7893ccfSSadaf Ebrahimi     }
1945*b7893ccfSSadaf Ebrahimi     return result;
1946*b7893ccfSSadaf Ebrahimi }
1947*b7893ccfSSadaf Ebrahimi 
CreateBuffer(VkDevice device,const VkBufferCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkBuffer * pBuffer)1948*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateBuffer(
1949*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1950*b7893ccfSSadaf Ebrahimi     const VkBufferCreateInfo*                   pCreateInfo,
1951*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1952*b7893ccfSSadaf Ebrahimi     VkBuffer*                                   pBuffer) {
1953*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1954*b7893ccfSSadaf Ebrahimi     bool skip = false;
1955*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1956*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1957*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
1958*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
1959*b7893ccfSSadaf Ebrahimi     }
1960*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1961*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1962*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
1963*b7893ccfSSadaf Ebrahimi     }
1964*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
1965*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1966*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1967*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateBuffer(device, pCreateInfo, pAllocator, pBuffer, result);
1968*b7893ccfSSadaf Ebrahimi     }
1969*b7893ccfSSadaf Ebrahimi     return result;
1970*b7893ccfSSadaf Ebrahimi }
1971*b7893ccfSSadaf Ebrahimi 
DestroyBuffer(VkDevice device,VkBuffer buffer,const VkAllocationCallbacks * pAllocator)1972*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyBuffer(
1973*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1974*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
1975*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
1976*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1977*b7893ccfSSadaf Ebrahimi     bool skip = false;
1978*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1979*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1980*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyBuffer(device, buffer, pAllocator);
1981*b7893ccfSSadaf Ebrahimi         if (skip) return;
1982*b7893ccfSSadaf Ebrahimi     }
1983*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1984*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1985*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyBuffer(device, buffer, pAllocator);
1986*b7893ccfSSadaf Ebrahimi     }
1987*b7893ccfSSadaf Ebrahimi     DispatchDestroyBuffer(device, buffer, pAllocator);
1988*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
1989*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
1990*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyBuffer(device, buffer, pAllocator);
1991*b7893ccfSSadaf Ebrahimi     }
1992*b7893ccfSSadaf Ebrahimi }
1993*b7893ccfSSadaf Ebrahimi 
CreateBufferView(VkDevice device,const VkBufferViewCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkBufferView * pView)1994*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateBufferView(
1995*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1996*b7893ccfSSadaf Ebrahimi     const VkBufferViewCreateInfo*               pCreateInfo,
1997*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1998*b7893ccfSSadaf Ebrahimi     VkBufferView*                               pView) {
1999*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2000*b7893ccfSSadaf Ebrahimi     bool skip = false;
2001*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2002*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2003*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateBufferView(device, pCreateInfo, pAllocator, pView);
2004*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2005*b7893ccfSSadaf Ebrahimi     }
2006*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2007*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2008*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateBufferView(device, pCreateInfo, pAllocator, pView);
2009*b7893ccfSSadaf Ebrahimi     }
2010*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateBufferView(device, pCreateInfo, pAllocator, pView);
2011*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2012*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2013*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateBufferView(device, pCreateInfo, pAllocator, pView, result);
2014*b7893ccfSSadaf Ebrahimi     }
2015*b7893ccfSSadaf Ebrahimi     return result;
2016*b7893ccfSSadaf Ebrahimi }
2017*b7893ccfSSadaf Ebrahimi 
DestroyBufferView(VkDevice device,VkBufferView bufferView,const VkAllocationCallbacks * pAllocator)2018*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyBufferView(
2019*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2020*b7893ccfSSadaf Ebrahimi     VkBufferView                                bufferView,
2021*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
2022*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2023*b7893ccfSSadaf Ebrahimi     bool skip = false;
2024*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2025*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2026*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyBufferView(device, bufferView, pAllocator);
2027*b7893ccfSSadaf Ebrahimi         if (skip) return;
2028*b7893ccfSSadaf Ebrahimi     }
2029*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2030*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2031*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyBufferView(device, bufferView, pAllocator);
2032*b7893ccfSSadaf Ebrahimi     }
2033*b7893ccfSSadaf Ebrahimi     DispatchDestroyBufferView(device, bufferView, pAllocator);
2034*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2035*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2036*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyBufferView(device, bufferView, pAllocator);
2037*b7893ccfSSadaf Ebrahimi     }
2038*b7893ccfSSadaf Ebrahimi }
2039*b7893ccfSSadaf Ebrahimi 
CreateImage(VkDevice device,const VkImageCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkImage * pImage)2040*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateImage(
2041*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2042*b7893ccfSSadaf Ebrahimi     const VkImageCreateInfo*                    pCreateInfo,
2043*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2044*b7893ccfSSadaf Ebrahimi     VkImage*                                    pImage) {
2045*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2046*b7893ccfSSadaf Ebrahimi     bool skip = false;
2047*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2048*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2049*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateImage(device, pCreateInfo, pAllocator, pImage);
2050*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2051*b7893ccfSSadaf Ebrahimi     }
2052*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2053*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2054*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateImage(device, pCreateInfo, pAllocator, pImage);
2055*b7893ccfSSadaf Ebrahimi     }
2056*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateImage(device, pCreateInfo, pAllocator, pImage);
2057*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2058*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2059*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateImage(device, pCreateInfo, pAllocator, pImage, result);
2060*b7893ccfSSadaf Ebrahimi     }
2061*b7893ccfSSadaf Ebrahimi     return result;
2062*b7893ccfSSadaf Ebrahimi }
2063*b7893ccfSSadaf Ebrahimi 
DestroyImage(VkDevice device,VkImage image,const VkAllocationCallbacks * pAllocator)2064*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyImage(
2065*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2066*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
2067*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
2068*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2069*b7893ccfSSadaf Ebrahimi     bool skip = false;
2070*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2071*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2072*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyImage(device, image, pAllocator);
2073*b7893ccfSSadaf Ebrahimi         if (skip) return;
2074*b7893ccfSSadaf Ebrahimi     }
2075*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2076*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2077*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyImage(device, image, pAllocator);
2078*b7893ccfSSadaf Ebrahimi     }
2079*b7893ccfSSadaf Ebrahimi     DispatchDestroyImage(device, image, pAllocator);
2080*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2081*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2082*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyImage(device, image, pAllocator);
2083*b7893ccfSSadaf Ebrahimi     }
2084*b7893ccfSSadaf Ebrahimi }
2085*b7893ccfSSadaf Ebrahimi 
GetImageSubresourceLayout(VkDevice device,VkImage image,const VkImageSubresource * pSubresource,VkSubresourceLayout * pLayout)2086*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout(
2087*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2088*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
2089*b7893ccfSSadaf Ebrahimi     const VkImageSubresource*                   pSubresource,
2090*b7893ccfSSadaf Ebrahimi     VkSubresourceLayout*                        pLayout) {
2091*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2092*b7893ccfSSadaf Ebrahimi     bool skip = false;
2093*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2094*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2095*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetImageSubresourceLayout(device, image, pSubresource, pLayout);
2096*b7893ccfSSadaf Ebrahimi         if (skip) return;
2097*b7893ccfSSadaf Ebrahimi     }
2098*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2099*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2100*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetImageSubresourceLayout(device, image, pSubresource, pLayout);
2101*b7893ccfSSadaf Ebrahimi     }
2102*b7893ccfSSadaf Ebrahimi     DispatchGetImageSubresourceLayout(device, image, pSubresource, pLayout);
2103*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2104*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2105*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetImageSubresourceLayout(device, image, pSubresource, pLayout);
2106*b7893ccfSSadaf Ebrahimi     }
2107*b7893ccfSSadaf Ebrahimi }
2108*b7893ccfSSadaf Ebrahimi 
CreateImageView(VkDevice device,const VkImageViewCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkImageView * pView)2109*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateImageView(
2110*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2111*b7893ccfSSadaf Ebrahimi     const VkImageViewCreateInfo*                pCreateInfo,
2112*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2113*b7893ccfSSadaf Ebrahimi     VkImageView*                                pView) {
2114*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2115*b7893ccfSSadaf Ebrahimi     bool skip = false;
2116*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2117*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2118*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateImageView(device, pCreateInfo, pAllocator, pView);
2119*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2120*b7893ccfSSadaf Ebrahimi     }
2121*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2122*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2123*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateImageView(device, pCreateInfo, pAllocator, pView);
2124*b7893ccfSSadaf Ebrahimi     }
2125*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateImageView(device, pCreateInfo, pAllocator, pView);
2126*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2127*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2128*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateImageView(device, pCreateInfo, pAllocator, pView, result);
2129*b7893ccfSSadaf Ebrahimi     }
2130*b7893ccfSSadaf Ebrahimi     return result;
2131*b7893ccfSSadaf Ebrahimi }
2132*b7893ccfSSadaf Ebrahimi 
DestroyImageView(VkDevice device,VkImageView imageView,const VkAllocationCallbacks * pAllocator)2133*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyImageView(
2134*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2135*b7893ccfSSadaf Ebrahimi     VkImageView                                 imageView,
2136*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
2137*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2138*b7893ccfSSadaf Ebrahimi     bool skip = false;
2139*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2140*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2141*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyImageView(device, imageView, pAllocator);
2142*b7893ccfSSadaf Ebrahimi         if (skip) return;
2143*b7893ccfSSadaf Ebrahimi     }
2144*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2145*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2146*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyImageView(device, imageView, pAllocator);
2147*b7893ccfSSadaf Ebrahimi     }
2148*b7893ccfSSadaf Ebrahimi     DispatchDestroyImageView(device, imageView, pAllocator);
2149*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2150*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2151*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyImageView(device, imageView, pAllocator);
2152*b7893ccfSSadaf Ebrahimi     }
2153*b7893ccfSSadaf Ebrahimi }
2154*b7893ccfSSadaf Ebrahimi 
DestroyShaderModule(VkDevice device,VkShaderModule shaderModule,const VkAllocationCallbacks * pAllocator)2155*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyShaderModule(
2156*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2157*b7893ccfSSadaf Ebrahimi     VkShaderModule                              shaderModule,
2158*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
2159*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2160*b7893ccfSSadaf Ebrahimi     bool skip = false;
2161*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2162*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2163*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyShaderModule(device, shaderModule, pAllocator);
2164*b7893ccfSSadaf Ebrahimi         if (skip) return;
2165*b7893ccfSSadaf Ebrahimi     }
2166*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2167*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2168*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyShaderModule(device, shaderModule, pAllocator);
2169*b7893ccfSSadaf Ebrahimi     }
2170*b7893ccfSSadaf Ebrahimi     DispatchDestroyShaderModule(device, shaderModule, pAllocator);
2171*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2172*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2173*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyShaderModule(device, shaderModule, pAllocator);
2174*b7893ccfSSadaf Ebrahimi     }
2175*b7893ccfSSadaf Ebrahimi }
2176*b7893ccfSSadaf Ebrahimi 
CreatePipelineCache(VkDevice device,const VkPipelineCacheCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineCache * pPipelineCache)2177*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreatePipelineCache(
2178*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2179*b7893ccfSSadaf Ebrahimi     const VkPipelineCacheCreateInfo*            pCreateInfo,
2180*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2181*b7893ccfSSadaf Ebrahimi     VkPipelineCache*                            pPipelineCache) {
2182*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2183*b7893ccfSSadaf Ebrahimi     bool skip = false;
2184*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2185*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2186*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
2187*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2188*b7893ccfSSadaf Ebrahimi     }
2189*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2190*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2191*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
2192*b7893ccfSSadaf Ebrahimi     }
2193*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
2194*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2195*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2196*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache, result);
2197*b7893ccfSSadaf Ebrahimi     }
2198*b7893ccfSSadaf Ebrahimi     return result;
2199*b7893ccfSSadaf Ebrahimi }
2200*b7893ccfSSadaf Ebrahimi 
DestroyPipelineCache(VkDevice device,VkPipelineCache pipelineCache,const VkAllocationCallbacks * pAllocator)2201*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyPipelineCache(
2202*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2203*b7893ccfSSadaf Ebrahimi     VkPipelineCache                             pipelineCache,
2204*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
2205*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2206*b7893ccfSSadaf Ebrahimi     bool skip = false;
2207*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2208*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2209*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyPipelineCache(device, pipelineCache, pAllocator);
2210*b7893ccfSSadaf Ebrahimi         if (skip) return;
2211*b7893ccfSSadaf Ebrahimi     }
2212*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2213*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2214*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyPipelineCache(device, pipelineCache, pAllocator);
2215*b7893ccfSSadaf Ebrahimi     }
2216*b7893ccfSSadaf Ebrahimi     DispatchDestroyPipelineCache(device, pipelineCache, pAllocator);
2217*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2218*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2219*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyPipelineCache(device, pipelineCache, pAllocator);
2220*b7893ccfSSadaf Ebrahimi     }
2221*b7893ccfSSadaf Ebrahimi }
2222*b7893ccfSSadaf Ebrahimi 
GetPipelineCacheData(VkDevice device,VkPipelineCache pipelineCache,size_t * pDataSize,void * pData)2223*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPipelineCacheData(
2224*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2225*b7893ccfSSadaf Ebrahimi     VkPipelineCache                             pipelineCache,
2226*b7893ccfSSadaf Ebrahimi     size_t*                                     pDataSize,
2227*b7893ccfSSadaf Ebrahimi     void*                                       pData) {
2228*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2229*b7893ccfSSadaf Ebrahimi     bool skip = false;
2230*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2231*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2232*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPipelineCacheData(device, pipelineCache, pDataSize, pData);
2233*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2234*b7893ccfSSadaf Ebrahimi     }
2235*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2236*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2237*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPipelineCacheData(device, pipelineCache, pDataSize, pData);
2238*b7893ccfSSadaf Ebrahimi     }
2239*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPipelineCacheData(device, pipelineCache, pDataSize, pData);
2240*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2241*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2242*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
2243*b7893ccfSSadaf Ebrahimi     }
2244*b7893ccfSSadaf Ebrahimi     return result;
2245*b7893ccfSSadaf Ebrahimi }
2246*b7893ccfSSadaf Ebrahimi 
MergePipelineCaches(VkDevice device,VkPipelineCache dstCache,uint32_t srcCacheCount,const VkPipelineCache * pSrcCaches)2247*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL MergePipelineCaches(
2248*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2249*b7893ccfSSadaf Ebrahimi     VkPipelineCache                             dstCache,
2250*b7893ccfSSadaf Ebrahimi     uint32_t                                    srcCacheCount,
2251*b7893ccfSSadaf Ebrahimi     const VkPipelineCache*                      pSrcCaches) {
2252*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2253*b7893ccfSSadaf Ebrahimi     bool skip = false;
2254*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2255*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2256*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateMergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
2257*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2258*b7893ccfSSadaf Ebrahimi     }
2259*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2260*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2261*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordMergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
2262*b7893ccfSSadaf Ebrahimi     }
2263*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchMergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
2264*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2265*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2266*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordMergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches, result);
2267*b7893ccfSSadaf Ebrahimi     }
2268*b7893ccfSSadaf Ebrahimi     return result;
2269*b7893ccfSSadaf Ebrahimi }
2270*b7893ccfSSadaf Ebrahimi 
DestroyPipeline(VkDevice device,VkPipeline pipeline,const VkAllocationCallbacks * pAllocator)2271*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyPipeline(
2272*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2273*b7893ccfSSadaf Ebrahimi     VkPipeline                                  pipeline,
2274*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
2275*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2276*b7893ccfSSadaf Ebrahimi     bool skip = false;
2277*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2278*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2279*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyPipeline(device, pipeline, pAllocator);
2280*b7893ccfSSadaf Ebrahimi         if (skip) return;
2281*b7893ccfSSadaf Ebrahimi     }
2282*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2283*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2284*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyPipeline(device, pipeline, pAllocator);
2285*b7893ccfSSadaf Ebrahimi     }
2286*b7893ccfSSadaf Ebrahimi     DispatchDestroyPipeline(device, pipeline, pAllocator);
2287*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2288*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2289*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyPipeline(device, pipeline, pAllocator);
2290*b7893ccfSSadaf Ebrahimi     }
2291*b7893ccfSSadaf Ebrahimi }
2292*b7893ccfSSadaf Ebrahimi 
DestroyPipelineLayout(VkDevice device,VkPipelineLayout pipelineLayout,const VkAllocationCallbacks * pAllocator)2293*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyPipelineLayout(
2294*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2295*b7893ccfSSadaf Ebrahimi     VkPipelineLayout                            pipelineLayout,
2296*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
2297*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2298*b7893ccfSSadaf Ebrahimi     bool skip = false;
2299*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2300*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2301*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyPipelineLayout(device, pipelineLayout, pAllocator);
2302*b7893ccfSSadaf Ebrahimi         if (skip) return;
2303*b7893ccfSSadaf Ebrahimi     }
2304*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2305*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2306*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyPipelineLayout(device, pipelineLayout, pAllocator);
2307*b7893ccfSSadaf Ebrahimi     }
2308*b7893ccfSSadaf Ebrahimi     DispatchDestroyPipelineLayout(device, pipelineLayout, pAllocator);
2309*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2310*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2311*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyPipelineLayout(device, pipelineLayout, pAllocator);
2312*b7893ccfSSadaf Ebrahimi     }
2313*b7893ccfSSadaf Ebrahimi }
2314*b7893ccfSSadaf Ebrahimi 
CreateSampler(VkDevice device,const VkSamplerCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSampler * pSampler)2315*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateSampler(
2316*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2317*b7893ccfSSadaf Ebrahimi     const VkSamplerCreateInfo*                  pCreateInfo,
2318*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2319*b7893ccfSSadaf Ebrahimi     VkSampler*                                  pSampler) {
2320*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2321*b7893ccfSSadaf Ebrahimi     bool skip = false;
2322*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2323*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2324*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateSampler(device, pCreateInfo, pAllocator, pSampler);
2325*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2326*b7893ccfSSadaf Ebrahimi     }
2327*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2328*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2329*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateSampler(device, pCreateInfo, pAllocator, pSampler);
2330*b7893ccfSSadaf Ebrahimi     }
2331*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateSampler(device, pCreateInfo, pAllocator, pSampler);
2332*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2333*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2334*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateSampler(device, pCreateInfo, pAllocator, pSampler, result);
2335*b7893ccfSSadaf Ebrahimi     }
2336*b7893ccfSSadaf Ebrahimi     return result;
2337*b7893ccfSSadaf Ebrahimi }
2338*b7893ccfSSadaf Ebrahimi 
DestroySampler(VkDevice device,VkSampler sampler,const VkAllocationCallbacks * pAllocator)2339*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroySampler(
2340*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2341*b7893ccfSSadaf Ebrahimi     VkSampler                                   sampler,
2342*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
2343*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2344*b7893ccfSSadaf Ebrahimi     bool skip = false;
2345*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2346*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2347*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroySampler(device, sampler, pAllocator);
2348*b7893ccfSSadaf Ebrahimi         if (skip) return;
2349*b7893ccfSSadaf Ebrahimi     }
2350*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2351*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2352*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroySampler(device, sampler, pAllocator);
2353*b7893ccfSSadaf Ebrahimi     }
2354*b7893ccfSSadaf Ebrahimi     DispatchDestroySampler(device, sampler, pAllocator);
2355*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2356*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2357*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroySampler(device, sampler, pAllocator);
2358*b7893ccfSSadaf Ebrahimi     }
2359*b7893ccfSSadaf Ebrahimi }
2360*b7893ccfSSadaf Ebrahimi 
CreateDescriptorSetLayout(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorSetLayout * pSetLayout)2361*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorSetLayout(
2362*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2363*b7893ccfSSadaf Ebrahimi     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
2364*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2365*b7893ccfSSadaf Ebrahimi     VkDescriptorSetLayout*                      pSetLayout) {
2366*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2367*b7893ccfSSadaf Ebrahimi     bool skip = false;
2368*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2369*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2370*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
2371*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2372*b7893ccfSSadaf Ebrahimi     }
2373*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2374*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2375*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
2376*b7893ccfSSadaf Ebrahimi     }
2377*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
2378*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2379*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2380*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout, result);
2381*b7893ccfSSadaf Ebrahimi     }
2382*b7893ccfSSadaf Ebrahimi     return result;
2383*b7893ccfSSadaf Ebrahimi }
2384*b7893ccfSSadaf Ebrahimi 
DestroyDescriptorSetLayout(VkDevice device,VkDescriptorSetLayout descriptorSetLayout,const VkAllocationCallbacks * pAllocator)2385*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyDescriptorSetLayout(
2386*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2387*b7893ccfSSadaf Ebrahimi     VkDescriptorSetLayout                       descriptorSetLayout,
2388*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
2389*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2390*b7893ccfSSadaf Ebrahimi     bool skip = false;
2391*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2392*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2393*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
2394*b7893ccfSSadaf Ebrahimi         if (skip) return;
2395*b7893ccfSSadaf Ebrahimi     }
2396*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2397*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2398*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
2399*b7893ccfSSadaf Ebrahimi     }
2400*b7893ccfSSadaf Ebrahimi     DispatchDestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
2401*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2402*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2403*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
2404*b7893ccfSSadaf Ebrahimi     }
2405*b7893ccfSSadaf Ebrahimi }
2406*b7893ccfSSadaf Ebrahimi 
CreateDescriptorPool(VkDevice device,const VkDescriptorPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorPool * pDescriptorPool)2407*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorPool(
2408*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2409*b7893ccfSSadaf Ebrahimi     const VkDescriptorPoolCreateInfo*           pCreateInfo,
2410*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2411*b7893ccfSSadaf Ebrahimi     VkDescriptorPool*                           pDescriptorPool) {
2412*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2413*b7893ccfSSadaf Ebrahimi     bool skip = false;
2414*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2415*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2416*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
2417*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2418*b7893ccfSSadaf Ebrahimi     }
2419*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2420*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2421*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
2422*b7893ccfSSadaf Ebrahimi     }
2423*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
2424*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2425*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2426*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool, result);
2427*b7893ccfSSadaf Ebrahimi     }
2428*b7893ccfSSadaf Ebrahimi     return result;
2429*b7893ccfSSadaf Ebrahimi }
2430*b7893ccfSSadaf Ebrahimi 
DestroyDescriptorPool(VkDevice device,VkDescriptorPool descriptorPool,const VkAllocationCallbacks * pAllocator)2431*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyDescriptorPool(
2432*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2433*b7893ccfSSadaf Ebrahimi     VkDescriptorPool                            descriptorPool,
2434*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
2435*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2436*b7893ccfSSadaf Ebrahimi     bool skip = false;
2437*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2438*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2439*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyDescriptorPool(device, descriptorPool, pAllocator);
2440*b7893ccfSSadaf Ebrahimi         if (skip) return;
2441*b7893ccfSSadaf Ebrahimi     }
2442*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2443*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2444*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyDescriptorPool(device, descriptorPool, pAllocator);
2445*b7893ccfSSadaf Ebrahimi     }
2446*b7893ccfSSadaf Ebrahimi     DispatchDestroyDescriptorPool(device, descriptorPool, pAllocator);
2447*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2448*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2449*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyDescriptorPool(device, descriptorPool, pAllocator);
2450*b7893ccfSSadaf Ebrahimi     }
2451*b7893ccfSSadaf Ebrahimi }
2452*b7893ccfSSadaf Ebrahimi 
ResetDescriptorPool(VkDevice device,VkDescriptorPool descriptorPool,VkDescriptorPoolResetFlags flags)2453*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL ResetDescriptorPool(
2454*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2455*b7893ccfSSadaf Ebrahimi     VkDescriptorPool                            descriptorPool,
2456*b7893ccfSSadaf Ebrahimi     VkDescriptorPoolResetFlags                  flags) {
2457*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2458*b7893ccfSSadaf Ebrahimi     bool skip = false;
2459*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2460*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2461*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateResetDescriptorPool(device, descriptorPool, flags);
2462*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2463*b7893ccfSSadaf Ebrahimi     }
2464*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2465*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2466*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordResetDescriptorPool(device, descriptorPool, flags);
2467*b7893ccfSSadaf Ebrahimi     }
2468*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchResetDescriptorPool(device, descriptorPool, flags);
2469*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2470*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2471*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordResetDescriptorPool(device, descriptorPool, flags, result);
2472*b7893ccfSSadaf Ebrahimi     }
2473*b7893ccfSSadaf Ebrahimi     return result;
2474*b7893ccfSSadaf Ebrahimi }
2475*b7893ccfSSadaf Ebrahimi 
FreeDescriptorSets(VkDevice device,VkDescriptorPool descriptorPool,uint32_t descriptorSetCount,const VkDescriptorSet * pDescriptorSets)2476*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL FreeDescriptorSets(
2477*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2478*b7893ccfSSadaf Ebrahimi     VkDescriptorPool                            descriptorPool,
2479*b7893ccfSSadaf Ebrahimi     uint32_t                                    descriptorSetCount,
2480*b7893ccfSSadaf Ebrahimi     const VkDescriptorSet*                      pDescriptorSets) {
2481*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2482*b7893ccfSSadaf Ebrahimi     bool skip = false;
2483*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2484*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2485*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateFreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
2486*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2487*b7893ccfSSadaf Ebrahimi     }
2488*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2489*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2490*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordFreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
2491*b7893ccfSSadaf Ebrahimi     }
2492*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchFreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
2493*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2494*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2495*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordFreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets, result);
2496*b7893ccfSSadaf Ebrahimi     }
2497*b7893ccfSSadaf Ebrahimi     return result;
2498*b7893ccfSSadaf Ebrahimi }
2499*b7893ccfSSadaf Ebrahimi 
UpdateDescriptorSets(VkDevice device,uint32_t descriptorWriteCount,const VkWriteDescriptorSet * pDescriptorWrites,uint32_t descriptorCopyCount,const VkCopyDescriptorSet * pDescriptorCopies)2500*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSets(
2501*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2502*b7893ccfSSadaf Ebrahimi     uint32_t                                    descriptorWriteCount,
2503*b7893ccfSSadaf Ebrahimi     const VkWriteDescriptorSet*                 pDescriptorWrites,
2504*b7893ccfSSadaf Ebrahimi     uint32_t                                    descriptorCopyCount,
2505*b7893ccfSSadaf Ebrahimi     const VkCopyDescriptorSet*                  pDescriptorCopies) {
2506*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2507*b7893ccfSSadaf Ebrahimi     bool skip = false;
2508*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2509*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2510*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateUpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
2511*b7893ccfSSadaf Ebrahimi         if (skip) return;
2512*b7893ccfSSadaf Ebrahimi     }
2513*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2514*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2515*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordUpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
2516*b7893ccfSSadaf Ebrahimi     }
2517*b7893ccfSSadaf Ebrahimi     DispatchUpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
2518*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2519*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2520*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordUpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
2521*b7893ccfSSadaf Ebrahimi     }
2522*b7893ccfSSadaf Ebrahimi }
2523*b7893ccfSSadaf Ebrahimi 
CreateFramebuffer(VkDevice device,const VkFramebufferCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkFramebuffer * pFramebuffer)2524*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateFramebuffer(
2525*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2526*b7893ccfSSadaf Ebrahimi     const VkFramebufferCreateInfo*              pCreateInfo,
2527*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2528*b7893ccfSSadaf Ebrahimi     VkFramebuffer*                              pFramebuffer) {
2529*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2530*b7893ccfSSadaf Ebrahimi     bool skip = false;
2531*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2532*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2533*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
2534*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2535*b7893ccfSSadaf Ebrahimi     }
2536*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2537*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2538*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
2539*b7893ccfSSadaf Ebrahimi     }
2540*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
2541*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2542*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2543*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer, result);
2544*b7893ccfSSadaf Ebrahimi     }
2545*b7893ccfSSadaf Ebrahimi     return result;
2546*b7893ccfSSadaf Ebrahimi }
2547*b7893ccfSSadaf Ebrahimi 
DestroyFramebuffer(VkDevice device,VkFramebuffer framebuffer,const VkAllocationCallbacks * pAllocator)2548*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyFramebuffer(
2549*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2550*b7893ccfSSadaf Ebrahimi     VkFramebuffer                               framebuffer,
2551*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
2552*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2553*b7893ccfSSadaf Ebrahimi     bool skip = false;
2554*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2555*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2556*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyFramebuffer(device, framebuffer, pAllocator);
2557*b7893ccfSSadaf Ebrahimi         if (skip) return;
2558*b7893ccfSSadaf Ebrahimi     }
2559*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2560*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2561*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyFramebuffer(device, framebuffer, pAllocator);
2562*b7893ccfSSadaf Ebrahimi     }
2563*b7893ccfSSadaf Ebrahimi     DispatchDestroyFramebuffer(device, framebuffer, pAllocator);
2564*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2565*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2566*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyFramebuffer(device, framebuffer, pAllocator);
2567*b7893ccfSSadaf Ebrahimi     }
2568*b7893ccfSSadaf Ebrahimi }
2569*b7893ccfSSadaf Ebrahimi 
CreateRenderPass(VkDevice device,const VkRenderPassCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkRenderPass * pRenderPass)2570*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass(
2571*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2572*b7893ccfSSadaf Ebrahimi     const VkRenderPassCreateInfo*               pCreateInfo,
2573*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2574*b7893ccfSSadaf Ebrahimi     VkRenderPass*                               pRenderPass) {
2575*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2576*b7893ccfSSadaf Ebrahimi     bool skip = false;
2577*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2578*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2579*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
2580*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2581*b7893ccfSSadaf Ebrahimi     }
2582*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2583*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2584*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
2585*b7893ccfSSadaf Ebrahimi     }
2586*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
2587*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2588*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2589*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass, result);
2590*b7893ccfSSadaf Ebrahimi     }
2591*b7893ccfSSadaf Ebrahimi     return result;
2592*b7893ccfSSadaf Ebrahimi }
2593*b7893ccfSSadaf Ebrahimi 
DestroyRenderPass(VkDevice device,VkRenderPass renderPass,const VkAllocationCallbacks * pAllocator)2594*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyRenderPass(
2595*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2596*b7893ccfSSadaf Ebrahimi     VkRenderPass                                renderPass,
2597*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
2598*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2599*b7893ccfSSadaf Ebrahimi     bool skip = false;
2600*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2601*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2602*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyRenderPass(device, renderPass, pAllocator);
2603*b7893ccfSSadaf Ebrahimi         if (skip) return;
2604*b7893ccfSSadaf Ebrahimi     }
2605*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2606*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2607*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyRenderPass(device, renderPass, pAllocator);
2608*b7893ccfSSadaf Ebrahimi     }
2609*b7893ccfSSadaf Ebrahimi     DispatchDestroyRenderPass(device, renderPass, pAllocator);
2610*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2611*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2612*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyRenderPass(device, renderPass, pAllocator);
2613*b7893ccfSSadaf Ebrahimi     }
2614*b7893ccfSSadaf Ebrahimi }
2615*b7893ccfSSadaf Ebrahimi 
GetRenderAreaGranularity(VkDevice device,VkRenderPass renderPass,VkExtent2D * pGranularity)2616*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetRenderAreaGranularity(
2617*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2618*b7893ccfSSadaf Ebrahimi     VkRenderPass                                renderPass,
2619*b7893ccfSSadaf Ebrahimi     VkExtent2D*                                 pGranularity) {
2620*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2621*b7893ccfSSadaf Ebrahimi     bool skip = false;
2622*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2623*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2624*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetRenderAreaGranularity(device, renderPass, pGranularity);
2625*b7893ccfSSadaf Ebrahimi         if (skip) return;
2626*b7893ccfSSadaf Ebrahimi     }
2627*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2628*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2629*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetRenderAreaGranularity(device, renderPass, pGranularity);
2630*b7893ccfSSadaf Ebrahimi     }
2631*b7893ccfSSadaf Ebrahimi     DispatchGetRenderAreaGranularity(device, renderPass, pGranularity);
2632*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2633*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2634*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetRenderAreaGranularity(device, renderPass, pGranularity);
2635*b7893ccfSSadaf Ebrahimi     }
2636*b7893ccfSSadaf Ebrahimi }
2637*b7893ccfSSadaf Ebrahimi 
CreateCommandPool(VkDevice device,const VkCommandPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkCommandPool * pCommandPool)2638*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateCommandPool(
2639*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2640*b7893ccfSSadaf Ebrahimi     const VkCommandPoolCreateInfo*              pCreateInfo,
2641*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2642*b7893ccfSSadaf Ebrahimi     VkCommandPool*                              pCommandPool) {
2643*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2644*b7893ccfSSadaf Ebrahimi     bool skip = false;
2645*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2646*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2647*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
2648*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2649*b7893ccfSSadaf Ebrahimi     }
2650*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2651*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2652*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
2653*b7893ccfSSadaf Ebrahimi     }
2654*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
2655*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2656*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2657*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool, result);
2658*b7893ccfSSadaf Ebrahimi     }
2659*b7893ccfSSadaf Ebrahimi     return result;
2660*b7893ccfSSadaf Ebrahimi }
2661*b7893ccfSSadaf Ebrahimi 
DestroyCommandPool(VkDevice device,VkCommandPool commandPool,const VkAllocationCallbacks * pAllocator)2662*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyCommandPool(
2663*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2664*b7893ccfSSadaf Ebrahimi     VkCommandPool                               commandPool,
2665*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
2666*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2667*b7893ccfSSadaf Ebrahimi     bool skip = false;
2668*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2669*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2670*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyCommandPool(device, commandPool, pAllocator);
2671*b7893ccfSSadaf Ebrahimi         if (skip) return;
2672*b7893ccfSSadaf Ebrahimi     }
2673*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2674*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2675*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyCommandPool(device, commandPool, pAllocator);
2676*b7893ccfSSadaf Ebrahimi     }
2677*b7893ccfSSadaf Ebrahimi     DispatchDestroyCommandPool(device, commandPool, pAllocator);
2678*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2679*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2680*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyCommandPool(device, commandPool, pAllocator);
2681*b7893ccfSSadaf Ebrahimi     }
2682*b7893ccfSSadaf Ebrahimi }
2683*b7893ccfSSadaf Ebrahimi 
ResetCommandPool(VkDevice device,VkCommandPool commandPool,VkCommandPoolResetFlags flags)2684*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL ResetCommandPool(
2685*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2686*b7893ccfSSadaf Ebrahimi     VkCommandPool                               commandPool,
2687*b7893ccfSSadaf Ebrahimi     VkCommandPoolResetFlags                     flags) {
2688*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2689*b7893ccfSSadaf Ebrahimi     bool skip = false;
2690*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2691*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2692*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateResetCommandPool(device, commandPool, flags);
2693*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2694*b7893ccfSSadaf Ebrahimi     }
2695*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2696*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2697*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordResetCommandPool(device, commandPool, flags);
2698*b7893ccfSSadaf Ebrahimi     }
2699*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchResetCommandPool(device, commandPool, flags);
2700*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2701*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2702*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordResetCommandPool(device, commandPool, flags, result);
2703*b7893ccfSSadaf Ebrahimi     }
2704*b7893ccfSSadaf Ebrahimi     return result;
2705*b7893ccfSSadaf Ebrahimi }
2706*b7893ccfSSadaf Ebrahimi 
AllocateCommandBuffers(VkDevice device,const VkCommandBufferAllocateInfo * pAllocateInfo,VkCommandBuffer * pCommandBuffers)2707*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL AllocateCommandBuffers(
2708*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2709*b7893ccfSSadaf Ebrahimi     const VkCommandBufferAllocateInfo*          pAllocateInfo,
2710*b7893ccfSSadaf Ebrahimi     VkCommandBuffer*                            pCommandBuffers) {
2711*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2712*b7893ccfSSadaf Ebrahimi     bool skip = false;
2713*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2714*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2715*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateAllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
2716*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2717*b7893ccfSSadaf Ebrahimi     }
2718*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2719*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2720*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordAllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
2721*b7893ccfSSadaf Ebrahimi     }
2722*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchAllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
2723*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2724*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2725*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordAllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers, result);
2726*b7893ccfSSadaf Ebrahimi     }
2727*b7893ccfSSadaf Ebrahimi     return result;
2728*b7893ccfSSadaf Ebrahimi }
2729*b7893ccfSSadaf Ebrahimi 
FreeCommandBuffers(VkDevice device,VkCommandPool commandPool,uint32_t commandBufferCount,const VkCommandBuffer * pCommandBuffers)2730*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL FreeCommandBuffers(
2731*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2732*b7893ccfSSadaf Ebrahimi     VkCommandPool                               commandPool,
2733*b7893ccfSSadaf Ebrahimi     uint32_t                                    commandBufferCount,
2734*b7893ccfSSadaf Ebrahimi     const VkCommandBuffer*                      pCommandBuffers) {
2735*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2736*b7893ccfSSadaf Ebrahimi     bool skip = false;
2737*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2738*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2739*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateFreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
2740*b7893ccfSSadaf Ebrahimi         if (skip) return;
2741*b7893ccfSSadaf Ebrahimi     }
2742*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2743*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2744*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordFreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
2745*b7893ccfSSadaf Ebrahimi     }
2746*b7893ccfSSadaf Ebrahimi     DispatchFreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
2747*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2748*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2749*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordFreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
2750*b7893ccfSSadaf Ebrahimi     }
2751*b7893ccfSSadaf Ebrahimi }
2752*b7893ccfSSadaf Ebrahimi 
BeginCommandBuffer(VkCommandBuffer commandBuffer,const VkCommandBufferBeginInfo * pBeginInfo)2753*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL BeginCommandBuffer(
2754*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2755*b7893ccfSSadaf Ebrahimi     const VkCommandBufferBeginInfo*             pBeginInfo) {
2756*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2757*b7893ccfSSadaf Ebrahimi     bool skip = false;
2758*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2759*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2760*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateBeginCommandBuffer(commandBuffer, pBeginInfo);
2761*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2762*b7893ccfSSadaf Ebrahimi     }
2763*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2764*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2765*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordBeginCommandBuffer(commandBuffer, pBeginInfo);
2766*b7893ccfSSadaf Ebrahimi     }
2767*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchBeginCommandBuffer(commandBuffer, pBeginInfo);
2768*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2769*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2770*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordBeginCommandBuffer(commandBuffer, pBeginInfo, result);
2771*b7893ccfSSadaf Ebrahimi     }
2772*b7893ccfSSadaf Ebrahimi     return result;
2773*b7893ccfSSadaf Ebrahimi }
2774*b7893ccfSSadaf Ebrahimi 
EndCommandBuffer(VkCommandBuffer commandBuffer)2775*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL EndCommandBuffer(
2776*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer) {
2777*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2778*b7893ccfSSadaf Ebrahimi     bool skip = false;
2779*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2780*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2781*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateEndCommandBuffer(commandBuffer);
2782*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2783*b7893ccfSSadaf Ebrahimi     }
2784*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2785*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2786*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordEndCommandBuffer(commandBuffer);
2787*b7893ccfSSadaf Ebrahimi     }
2788*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchEndCommandBuffer(commandBuffer);
2789*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2790*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2791*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordEndCommandBuffer(commandBuffer, result);
2792*b7893ccfSSadaf Ebrahimi     }
2793*b7893ccfSSadaf Ebrahimi     return result;
2794*b7893ccfSSadaf Ebrahimi }
2795*b7893ccfSSadaf Ebrahimi 
ResetCommandBuffer(VkCommandBuffer commandBuffer,VkCommandBufferResetFlags flags)2796*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL ResetCommandBuffer(
2797*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2798*b7893ccfSSadaf Ebrahimi     VkCommandBufferResetFlags                   flags) {
2799*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2800*b7893ccfSSadaf Ebrahimi     bool skip = false;
2801*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2802*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2803*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateResetCommandBuffer(commandBuffer, flags);
2804*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
2805*b7893ccfSSadaf Ebrahimi     }
2806*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2807*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2808*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordResetCommandBuffer(commandBuffer, flags);
2809*b7893ccfSSadaf Ebrahimi     }
2810*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchResetCommandBuffer(commandBuffer, flags);
2811*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2812*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2813*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordResetCommandBuffer(commandBuffer, flags, result);
2814*b7893ccfSSadaf Ebrahimi     }
2815*b7893ccfSSadaf Ebrahimi     return result;
2816*b7893ccfSSadaf Ebrahimi }
2817*b7893ccfSSadaf Ebrahimi 
CmdBindPipeline(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipeline pipeline)2818*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBindPipeline(
2819*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2820*b7893ccfSSadaf Ebrahimi     VkPipelineBindPoint                         pipelineBindPoint,
2821*b7893ccfSSadaf Ebrahimi     VkPipeline                                  pipeline) {
2822*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2823*b7893ccfSSadaf Ebrahimi     bool skip = false;
2824*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2825*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2826*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
2827*b7893ccfSSadaf Ebrahimi         if (skip) return;
2828*b7893ccfSSadaf Ebrahimi     }
2829*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2830*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2831*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
2832*b7893ccfSSadaf Ebrahimi     }
2833*b7893ccfSSadaf Ebrahimi     DispatchCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
2834*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2835*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2836*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
2837*b7893ccfSSadaf Ebrahimi     }
2838*b7893ccfSSadaf Ebrahimi }
2839*b7893ccfSSadaf Ebrahimi 
CmdSetViewport(VkCommandBuffer commandBuffer,uint32_t firstViewport,uint32_t viewportCount,const VkViewport * pViewports)2840*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetViewport(
2841*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2842*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstViewport,
2843*b7893ccfSSadaf Ebrahimi     uint32_t                                    viewportCount,
2844*b7893ccfSSadaf Ebrahimi     const VkViewport*                           pViewports) {
2845*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2846*b7893ccfSSadaf Ebrahimi     bool skip = false;
2847*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2848*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2849*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
2850*b7893ccfSSadaf Ebrahimi         if (skip) return;
2851*b7893ccfSSadaf Ebrahimi     }
2852*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2853*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2854*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
2855*b7893ccfSSadaf Ebrahimi     }
2856*b7893ccfSSadaf Ebrahimi     DispatchCmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
2857*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2858*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2859*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
2860*b7893ccfSSadaf Ebrahimi     }
2861*b7893ccfSSadaf Ebrahimi }
2862*b7893ccfSSadaf Ebrahimi 
CmdSetScissor(VkCommandBuffer commandBuffer,uint32_t firstScissor,uint32_t scissorCount,const VkRect2D * pScissors)2863*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetScissor(
2864*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2865*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstScissor,
2866*b7893ccfSSadaf Ebrahimi     uint32_t                                    scissorCount,
2867*b7893ccfSSadaf Ebrahimi     const VkRect2D*                             pScissors) {
2868*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2869*b7893ccfSSadaf Ebrahimi     bool skip = false;
2870*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2871*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2872*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
2873*b7893ccfSSadaf Ebrahimi         if (skip) return;
2874*b7893ccfSSadaf Ebrahimi     }
2875*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2876*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2877*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
2878*b7893ccfSSadaf Ebrahimi     }
2879*b7893ccfSSadaf Ebrahimi     DispatchCmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
2880*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2881*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2882*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
2883*b7893ccfSSadaf Ebrahimi     }
2884*b7893ccfSSadaf Ebrahimi }
2885*b7893ccfSSadaf Ebrahimi 
CmdSetLineWidth(VkCommandBuffer commandBuffer,float lineWidth)2886*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetLineWidth(
2887*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2888*b7893ccfSSadaf Ebrahimi     float                                       lineWidth) {
2889*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2890*b7893ccfSSadaf Ebrahimi     bool skip = false;
2891*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2892*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2893*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetLineWidth(commandBuffer, lineWidth);
2894*b7893ccfSSadaf Ebrahimi         if (skip) return;
2895*b7893ccfSSadaf Ebrahimi     }
2896*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2897*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2898*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetLineWidth(commandBuffer, lineWidth);
2899*b7893ccfSSadaf Ebrahimi     }
2900*b7893ccfSSadaf Ebrahimi     DispatchCmdSetLineWidth(commandBuffer, lineWidth);
2901*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2902*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2903*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetLineWidth(commandBuffer, lineWidth);
2904*b7893ccfSSadaf Ebrahimi     }
2905*b7893ccfSSadaf Ebrahimi }
2906*b7893ccfSSadaf Ebrahimi 
CmdSetDepthBias(VkCommandBuffer commandBuffer,float depthBiasConstantFactor,float depthBiasClamp,float depthBiasSlopeFactor)2907*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetDepthBias(
2908*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2909*b7893ccfSSadaf Ebrahimi     float                                       depthBiasConstantFactor,
2910*b7893ccfSSadaf Ebrahimi     float                                       depthBiasClamp,
2911*b7893ccfSSadaf Ebrahimi     float                                       depthBiasSlopeFactor) {
2912*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2913*b7893ccfSSadaf Ebrahimi     bool skip = false;
2914*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2915*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2916*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
2917*b7893ccfSSadaf Ebrahimi         if (skip) return;
2918*b7893ccfSSadaf Ebrahimi     }
2919*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2920*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2921*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
2922*b7893ccfSSadaf Ebrahimi     }
2923*b7893ccfSSadaf Ebrahimi     DispatchCmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
2924*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2925*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2926*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
2927*b7893ccfSSadaf Ebrahimi     }
2928*b7893ccfSSadaf Ebrahimi }
2929*b7893ccfSSadaf Ebrahimi 
CmdSetBlendConstants(VkCommandBuffer commandBuffer,const float blendConstants[4])2930*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetBlendConstants(
2931*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2932*b7893ccfSSadaf Ebrahimi     const float                                 blendConstants[4]) {
2933*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2934*b7893ccfSSadaf Ebrahimi     bool skip = false;
2935*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2936*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2937*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetBlendConstants(commandBuffer, blendConstants);
2938*b7893ccfSSadaf Ebrahimi         if (skip) return;
2939*b7893ccfSSadaf Ebrahimi     }
2940*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2941*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2942*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetBlendConstants(commandBuffer, blendConstants);
2943*b7893ccfSSadaf Ebrahimi     }
2944*b7893ccfSSadaf Ebrahimi     DispatchCmdSetBlendConstants(commandBuffer, blendConstants);
2945*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2946*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2947*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetBlendConstants(commandBuffer, blendConstants);
2948*b7893ccfSSadaf Ebrahimi     }
2949*b7893ccfSSadaf Ebrahimi }
2950*b7893ccfSSadaf Ebrahimi 
CmdSetDepthBounds(VkCommandBuffer commandBuffer,float minDepthBounds,float maxDepthBounds)2951*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetDepthBounds(
2952*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2953*b7893ccfSSadaf Ebrahimi     float                                       minDepthBounds,
2954*b7893ccfSSadaf Ebrahimi     float                                       maxDepthBounds) {
2955*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2956*b7893ccfSSadaf Ebrahimi     bool skip = false;
2957*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2958*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2959*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
2960*b7893ccfSSadaf Ebrahimi         if (skip) return;
2961*b7893ccfSSadaf Ebrahimi     }
2962*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2963*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2964*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
2965*b7893ccfSSadaf Ebrahimi     }
2966*b7893ccfSSadaf Ebrahimi     DispatchCmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
2967*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2968*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2969*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
2970*b7893ccfSSadaf Ebrahimi     }
2971*b7893ccfSSadaf Ebrahimi }
2972*b7893ccfSSadaf Ebrahimi 
CmdSetStencilCompareMask(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t compareMask)2973*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetStencilCompareMask(
2974*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2975*b7893ccfSSadaf Ebrahimi     VkStencilFaceFlags                          faceMask,
2976*b7893ccfSSadaf Ebrahimi     uint32_t                                    compareMask) {
2977*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2978*b7893ccfSSadaf Ebrahimi     bool skip = false;
2979*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2980*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2981*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
2982*b7893ccfSSadaf Ebrahimi         if (skip) return;
2983*b7893ccfSSadaf Ebrahimi     }
2984*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2985*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2986*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
2987*b7893ccfSSadaf Ebrahimi     }
2988*b7893ccfSSadaf Ebrahimi     DispatchCmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
2989*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
2990*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
2991*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
2992*b7893ccfSSadaf Ebrahimi     }
2993*b7893ccfSSadaf Ebrahimi }
2994*b7893ccfSSadaf Ebrahimi 
CmdSetStencilWriteMask(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t writeMask)2995*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetStencilWriteMask(
2996*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2997*b7893ccfSSadaf Ebrahimi     VkStencilFaceFlags                          faceMask,
2998*b7893ccfSSadaf Ebrahimi     uint32_t                                    writeMask) {
2999*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3000*b7893ccfSSadaf Ebrahimi     bool skip = false;
3001*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3002*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3003*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
3004*b7893ccfSSadaf Ebrahimi         if (skip) return;
3005*b7893ccfSSadaf Ebrahimi     }
3006*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3007*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3008*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
3009*b7893ccfSSadaf Ebrahimi     }
3010*b7893ccfSSadaf Ebrahimi     DispatchCmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
3011*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3012*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3013*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
3014*b7893ccfSSadaf Ebrahimi     }
3015*b7893ccfSSadaf Ebrahimi }
3016*b7893ccfSSadaf Ebrahimi 
CmdSetStencilReference(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t reference)3017*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetStencilReference(
3018*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3019*b7893ccfSSadaf Ebrahimi     VkStencilFaceFlags                          faceMask,
3020*b7893ccfSSadaf Ebrahimi     uint32_t                                    reference) {
3021*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3022*b7893ccfSSadaf Ebrahimi     bool skip = false;
3023*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3024*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3025*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetStencilReference(commandBuffer, faceMask, reference);
3026*b7893ccfSSadaf Ebrahimi         if (skip) return;
3027*b7893ccfSSadaf Ebrahimi     }
3028*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3029*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3030*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetStencilReference(commandBuffer, faceMask, reference);
3031*b7893ccfSSadaf Ebrahimi     }
3032*b7893ccfSSadaf Ebrahimi     DispatchCmdSetStencilReference(commandBuffer, faceMask, reference);
3033*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3034*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3035*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetStencilReference(commandBuffer, faceMask, reference);
3036*b7893ccfSSadaf Ebrahimi     }
3037*b7893ccfSSadaf Ebrahimi }
3038*b7893ccfSSadaf Ebrahimi 
CmdBindDescriptorSets(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipelineLayout layout,uint32_t firstSet,uint32_t descriptorSetCount,const VkDescriptorSet * pDescriptorSets,uint32_t dynamicOffsetCount,const uint32_t * pDynamicOffsets)3039*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets(
3040*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3041*b7893ccfSSadaf Ebrahimi     VkPipelineBindPoint                         pipelineBindPoint,
3042*b7893ccfSSadaf Ebrahimi     VkPipelineLayout                            layout,
3043*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstSet,
3044*b7893ccfSSadaf Ebrahimi     uint32_t                                    descriptorSetCount,
3045*b7893ccfSSadaf Ebrahimi     const VkDescriptorSet*                      pDescriptorSets,
3046*b7893ccfSSadaf Ebrahimi     uint32_t                                    dynamicOffsetCount,
3047*b7893ccfSSadaf Ebrahimi     const uint32_t*                             pDynamicOffsets) {
3048*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3049*b7893ccfSSadaf Ebrahimi     bool skip = false;
3050*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3051*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3052*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
3053*b7893ccfSSadaf Ebrahimi         if (skip) return;
3054*b7893ccfSSadaf Ebrahimi     }
3055*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3056*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3057*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
3058*b7893ccfSSadaf Ebrahimi     }
3059*b7893ccfSSadaf Ebrahimi     DispatchCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
3060*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3061*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3062*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
3063*b7893ccfSSadaf Ebrahimi     }
3064*b7893ccfSSadaf Ebrahimi }
3065*b7893ccfSSadaf Ebrahimi 
CmdBindIndexBuffer(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkIndexType indexType)3066*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer(
3067*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3068*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
3069*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
3070*b7893ccfSSadaf Ebrahimi     VkIndexType                                 indexType) {
3071*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3072*b7893ccfSSadaf Ebrahimi     bool skip = false;
3073*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3074*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3075*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
3076*b7893ccfSSadaf Ebrahimi         if (skip) return;
3077*b7893ccfSSadaf Ebrahimi     }
3078*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3079*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3080*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
3081*b7893ccfSSadaf Ebrahimi     }
3082*b7893ccfSSadaf Ebrahimi     DispatchCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
3083*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3084*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3085*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
3086*b7893ccfSSadaf Ebrahimi     }
3087*b7893ccfSSadaf Ebrahimi }
3088*b7893ccfSSadaf Ebrahimi 
CmdBindVertexBuffers(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const VkBuffer * pBuffers,const VkDeviceSize * pOffsets)3089*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers(
3090*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3091*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstBinding,
3092*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindingCount,
3093*b7893ccfSSadaf Ebrahimi     const VkBuffer*                             pBuffers,
3094*b7893ccfSSadaf Ebrahimi     const VkDeviceSize*                         pOffsets) {
3095*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3096*b7893ccfSSadaf Ebrahimi     bool skip = false;
3097*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3098*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3099*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
3100*b7893ccfSSadaf Ebrahimi         if (skip) return;
3101*b7893ccfSSadaf Ebrahimi     }
3102*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3103*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3104*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
3105*b7893ccfSSadaf Ebrahimi     }
3106*b7893ccfSSadaf Ebrahimi     DispatchCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
3107*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3108*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3109*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
3110*b7893ccfSSadaf Ebrahimi     }
3111*b7893ccfSSadaf Ebrahimi }
3112*b7893ccfSSadaf Ebrahimi 
CmdDraw(VkCommandBuffer commandBuffer,uint32_t vertexCount,uint32_t instanceCount,uint32_t firstVertex,uint32_t firstInstance)3113*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDraw(
3114*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3115*b7893ccfSSadaf Ebrahimi     uint32_t                                    vertexCount,
3116*b7893ccfSSadaf Ebrahimi     uint32_t                                    instanceCount,
3117*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstVertex,
3118*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstInstance) {
3119*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3120*b7893ccfSSadaf Ebrahimi     bool skip = false;
3121*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3122*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3123*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
3124*b7893ccfSSadaf Ebrahimi         if (skip) return;
3125*b7893ccfSSadaf Ebrahimi     }
3126*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3127*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3128*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
3129*b7893ccfSSadaf Ebrahimi     }
3130*b7893ccfSSadaf Ebrahimi     DispatchCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
3131*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3132*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3133*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
3134*b7893ccfSSadaf Ebrahimi     }
3135*b7893ccfSSadaf Ebrahimi }
3136*b7893ccfSSadaf Ebrahimi 
CmdDrawIndexed(VkCommandBuffer commandBuffer,uint32_t indexCount,uint32_t instanceCount,uint32_t firstIndex,int32_t vertexOffset,uint32_t firstInstance)3137*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDrawIndexed(
3138*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3139*b7893ccfSSadaf Ebrahimi     uint32_t                                    indexCount,
3140*b7893ccfSSadaf Ebrahimi     uint32_t                                    instanceCount,
3141*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstIndex,
3142*b7893ccfSSadaf Ebrahimi     int32_t                                     vertexOffset,
3143*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstInstance) {
3144*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3145*b7893ccfSSadaf Ebrahimi     bool skip = false;
3146*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3147*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3148*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
3149*b7893ccfSSadaf Ebrahimi         if (skip) return;
3150*b7893ccfSSadaf Ebrahimi     }
3151*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3152*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3153*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
3154*b7893ccfSSadaf Ebrahimi     }
3155*b7893ccfSSadaf Ebrahimi     DispatchCmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
3156*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3157*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3158*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
3159*b7893ccfSSadaf Ebrahimi     }
3160*b7893ccfSSadaf Ebrahimi }
3161*b7893ccfSSadaf Ebrahimi 
CmdDrawIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride)3162*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDrawIndirect(
3163*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3164*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
3165*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
3166*b7893ccfSSadaf Ebrahimi     uint32_t                                    drawCount,
3167*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride) {
3168*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3169*b7893ccfSSadaf Ebrahimi     bool skip = false;
3170*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3171*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3172*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
3173*b7893ccfSSadaf Ebrahimi         if (skip) return;
3174*b7893ccfSSadaf Ebrahimi     }
3175*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3176*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3177*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
3178*b7893ccfSSadaf Ebrahimi     }
3179*b7893ccfSSadaf Ebrahimi     DispatchCmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
3180*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3181*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3182*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
3183*b7893ccfSSadaf Ebrahimi     }
3184*b7893ccfSSadaf Ebrahimi }
3185*b7893ccfSSadaf Ebrahimi 
CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride)3186*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirect(
3187*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3188*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
3189*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
3190*b7893ccfSSadaf Ebrahimi     uint32_t                                    drawCount,
3191*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride) {
3192*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3193*b7893ccfSSadaf Ebrahimi     bool skip = false;
3194*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3195*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3196*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
3197*b7893ccfSSadaf Ebrahimi         if (skip) return;
3198*b7893ccfSSadaf Ebrahimi     }
3199*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3200*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3201*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
3202*b7893ccfSSadaf Ebrahimi     }
3203*b7893ccfSSadaf Ebrahimi     DispatchCmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
3204*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3205*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3206*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
3207*b7893ccfSSadaf Ebrahimi     }
3208*b7893ccfSSadaf Ebrahimi }
3209*b7893ccfSSadaf Ebrahimi 
CmdDispatch(VkCommandBuffer commandBuffer,uint32_t groupCountX,uint32_t groupCountY,uint32_t groupCountZ)3210*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDispatch(
3211*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3212*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountX,
3213*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountY,
3214*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountZ) {
3215*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3216*b7893ccfSSadaf Ebrahimi     bool skip = false;
3217*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3218*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3219*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
3220*b7893ccfSSadaf Ebrahimi         if (skip) return;
3221*b7893ccfSSadaf Ebrahimi     }
3222*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3223*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3224*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
3225*b7893ccfSSadaf Ebrahimi     }
3226*b7893ccfSSadaf Ebrahimi     DispatchCmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
3227*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3228*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3229*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
3230*b7893ccfSSadaf Ebrahimi     }
3231*b7893ccfSSadaf Ebrahimi }
3232*b7893ccfSSadaf Ebrahimi 
CmdDispatchIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset)3233*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDispatchIndirect(
3234*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3235*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
3236*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset) {
3237*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3238*b7893ccfSSadaf Ebrahimi     bool skip = false;
3239*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3240*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3241*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDispatchIndirect(commandBuffer, buffer, offset);
3242*b7893ccfSSadaf Ebrahimi         if (skip) return;
3243*b7893ccfSSadaf Ebrahimi     }
3244*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3245*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3246*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDispatchIndirect(commandBuffer, buffer, offset);
3247*b7893ccfSSadaf Ebrahimi     }
3248*b7893ccfSSadaf Ebrahimi     DispatchCmdDispatchIndirect(commandBuffer, buffer, offset);
3249*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3250*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3251*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDispatchIndirect(commandBuffer, buffer, offset);
3252*b7893ccfSSadaf Ebrahimi     }
3253*b7893ccfSSadaf Ebrahimi }
3254*b7893ccfSSadaf Ebrahimi 
CmdCopyBuffer(VkCommandBuffer commandBuffer,VkBuffer srcBuffer,VkBuffer dstBuffer,uint32_t regionCount,const VkBufferCopy * pRegions)3255*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer(
3256*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3257*b7893ccfSSadaf Ebrahimi     VkBuffer                                    srcBuffer,
3258*b7893ccfSSadaf Ebrahimi     VkBuffer                                    dstBuffer,
3259*b7893ccfSSadaf Ebrahimi     uint32_t                                    regionCount,
3260*b7893ccfSSadaf Ebrahimi     const VkBufferCopy*                         pRegions) {
3261*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3262*b7893ccfSSadaf Ebrahimi     bool skip = false;
3263*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3264*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3265*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
3266*b7893ccfSSadaf Ebrahimi         if (skip) return;
3267*b7893ccfSSadaf Ebrahimi     }
3268*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3269*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3270*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
3271*b7893ccfSSadaf Ebrahimi     }
3272*b7893ccfSSadaf Ebrahimi     DispatchCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
3273*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3274*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3275*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
3276*b7893ccfSSadaf Ebrahimi     }
3277*b7893ccfSSadaf Ebrahimi }
3278*b7893ccfSSadaf Ebrahimi 
CmdCopyImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageCopy * pRegions)3279*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdCopyImage(
3280*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3281*b7893ccfSSadaf Ebrahimi     VkImage                                     srcImage,
3282*b7893ccfSSadaf Ebrahimi     VkImageLayout                               srcImageLayout,
3283*b7893ccfSSadaf Ebrahimi     VkImage                                     dstImage,
3284*b7893ccfSSadaf Ebrahimi     VkImageLayout                               dstImageLayout,
3285*b7893ccfSSadaf Ebrahimi     uint32_t                                    regionCount,
3286*b7893ccfSSadaf Ebrahimi     const VkImageCopy*                          pRegions) {
3287*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3288*b7893ccfSSadaf Ebrahimi     bool skip = false;
3289*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3290*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3291*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3292*b7893ccfSSadaf Ebrahimi         if (skip) return;
3293*b7893ccfSSadaf Ebrahimi     }
3294*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3295*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3296*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3297*b7893ccfSSadaf Ebrahimi     }
3298*b7893ccfSSadaf Ebrahimi     DispatchCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3299*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3300*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3301*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3302*b7893ccfSSadaf Ebrahimi     }
3303*b7893ccfSSadaf Ebrahimi }
3304*b7893ccfSSadaf Ebrahimi 
CmdBlitImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageBlit * pRegions,VkFilter filter)3305*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBlitImage(
3306*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3307*b7893ccfSSadaf Ebrahimi     VkImage                                     srcImage,
3308*b7893ccfSSadaf Ebrahimi     VkImageLayout                               srcImageLayout,
3309*b7893ccfSSadaf Ebrahimi     VkImage                                     dstImage,
3310*b7893ccfSSadaf Ebrahimi     VkImageLayout                               dstImageLayout,
3311*b7893ccfSSadaf Ebrahimi     uint32_t                                    regionCount,
3312*b7893ccfSSadaf Ebrahimi     const VkImageBlit*                          pRegions,
3313*b7893ccfSSadaf Ebrahimi     VkFilter                                    filter) {
3314*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3315*b7893ccfSSadaf Ebrahimi     bool skip = false;
3316*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3317*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3318*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
3319*b7893ccfSSadaf Ebrahimi         if (skip) return;
3320*b7893ccfSSadaf Ebrahimi     }
3321*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3322*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3323*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
3324*b7893ccfSSadaf Ebrahimi     }
3325*b7893ccfSSadaf Ebrahimi     DispatchCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
3326*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3327*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3328*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
3329*b7893ccfSSadaf Ebrahimi     }
3330*b7893ccfSSadaf Ebrahimi }
3331*b7893ccfSSadaf Ebrahimi 
CmdCopyBufferToImage(VkCommandBuffer commandBuffer,VkBuffer srcBuffer,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkBufferImageCopy * pRegions)3332*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage(
3333*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3334*b7893ccfSSadaf Ebrahimi     VkBuffer                                    srcBuffer,
3335*b7893ccfSSadaf Ebrahimi     VkImage                                     dstImage,
3336*b7893ccfSSadaf Ebrahimi     VkImageLayout                               dstImageLayout,
3337*b7893ccfSSadaf Ebrahimi     uint32_t                                    regionCount,
3338*b7893ccfSSadaf Ebrahimi     const VkBufferImageCopy*                    pRegions) {
3339*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3340*b7893ccfSSadaf Ebrahimi     bool skip = false;
3341*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3342*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3343*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
3344*b7893ccfSSadaf Ebrahimi         if (skip) return;
3345*b7893ccfSSadaf Ebrahimi     }
3346*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3347*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3348*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
3349*b7893ccfSSadaf Ebrahimi     }
3350*b7893ccfSSadaf Ebrahimi     DispatchCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
3351*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3352*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3353*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
3354*b7893ccfSSadaf Ebrahimi     }
3355*b7893ccfSSadaf Ebrahimi }
3356*b7893ccfSSadaf Ebrahimi 
CmdCopyImageToBuffer(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkBuffer dstBuffer,uint32_t regionCount,const VkBufferImageCopy * pRegions)3357*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer(
3358*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3359*b7893ccfSSadaf Ebrahimi     VkImage                                     srcImage,
3360*b7893ccfSSadaf Ebrahimi     VkImageLayout                               srcImageLayout,
3361*b7893ccfSSadaf Ebrahimi     VkBuffer                                    dstBuffer,
3362*b7893ccfSSadaf Ebrahimi     uint32_t                                    regionCount,
3363*b7893ccfSSadaf Ebrahimi     const VkBufferImageCopy*                    pRegions) {
3364*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3365*b7893ccfSSadaf Ebrahimi     bool skip = false;
3366*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3367*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3368*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
3369*b7893ccfSSadaf Ebrahimi         if (skip) return;
3370*b7893ccfSSadaf Ebrahimi     }
3371*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3372*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3373*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
3374*b7893ccfSSadaf Ebrahimi     }
3375*b7893ccfSSadaf Ebrahimi     DispatchCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
3376*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3377*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3378*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
3379*b7893ccfSSadaf Ebrahimi     }
3380*b7893ccfSSadaf Ebrahimi }
3381*b7893ccfSSadaf Ebrahimi 
CmdUpdateBuffer(VkCommandBuffer commandBuffer,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize dataSize,const void * pData)3382*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdUpdateBuffer(
3383*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3384*b7893ccfSSadaf Ebrahimi     VkBuffer                                    dstBuffer,
3385*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                dstOffset,
3386*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                dataSize,
3387*b7893ccfSSadaf Ebrahimi     const void*                                 pData) {
3388*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3389*b7893ccfSSadaf Ebrahimi     bool skip = false;
3390*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3391*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3392*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
3393*b7893ccfSSadaf Ebrahimi         if (skip) return;
3394*b7893ccfSSadaf Ebrahimi     }
3395*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3396*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3397*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
3398*b7893ccfSSadaf Ebrahimi     }
3399*b7893ccfSSadaf Ebrahimi     DispatchCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
3400*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3401*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3402*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
3403*b7893ccfSSadaf Ebrahimi     }
3404*b7893ccfSSadaf Ebrahimi }
3405*b7893ccfSSadaf Ebrahimi 
CmdFillBuffer(VkCommandBuffer commandBuffer,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize size,uint32_t data)3406*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdFillBuffer(
3407*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3408*b7893ccfSSadaf Ebrahimi     VkBuffer                                    dstBuffer,
3409*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                dstOffset,
3410*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                size,
3411*b7893ccfSSadaf Ebrahimi     uint32_t                                    data) {
3412*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3413*b7893ccfSSadaf Ebrahimi     bool skip = false;
3414*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3415*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3416*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
3417*b7893ccfSSadaf Ebrahimi         if (skip) return;
3418*b7893ccfSSadaf Ebrahimi     }
3419*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3420*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3421*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
3422*b7893ccfSSadaf Ebrahimi     }
3423*b7893ccfSSadaf Ebrahimi     DispatchCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
3424*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3425*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3426*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
3427*b7893ccfSSadaf Ebrahimi     }
3428*b7893ccfSSadaf Ebrahimi }
3429*b7893ccfSSadaf Ebrahimi 
CmdClearColorImage(VkCommandBuffer commandBuffer,VkImage image,VkImageLayout imageLayout,const VkClearColorValue * pColor,uint32_t rangeCount,const VkImageSubresourceRange * pRanges)3430*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdClearColorImage(
3431*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3432*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
3433*b7893ccfSSadaf Ebrahimi     VkImageLayout                               imageLayout,
3434*b7893ccfSSadaf Ebrahimi     const VkClearColorValue*                    pColor,
3435*b7893ccfSSadaf Ebrahimi     uint32_t                                    rangeCount,
3436*b7893ccfSSadaf Ebrahimi     const VkImageSubresourceRange*              pRanges) {
3437*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3438*b7893ccfSSadaf Ebrahimi     bool skip = false;
3439*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3440*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3441*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
3442*b7893ccfSSadaf Ebrahimi         if (skip) return;
3443*b7893ccfSSadaf Ebrahimi     }
3444*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3445*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3446*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
3447*b7893ccfSSadaf Ebrahimi     }
3448*b7893ccfSSadaf Ebrahimi     DispatchCmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
3449*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3450*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3451*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
3452*b7893ccfSSadaf Ebrahimi     }
3453*b7893ccfSSadaf Ebrahimi }
3454*b7893ccfSSadaf Ebrahimi 
CmdClearDepthStencilImage(VkCommandBuffer commandBuffer,VkImage image,VkImageLayout imageLayout,const VkClearDepthStencilValue * pDepthStencil,uint32_t rangeCount,const VkImageSubresourceRange * pRanges)3455*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdClearDepthStencilImage(
3456*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3457*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
3458*b7893ccfSSadaf Ebrahimi     VkImageLayout                               imageLayout,
3459*b7893ccfSSadaf Ebrahimi     const VkClearDepthStencilValue*             pDepthStencil,
3460*b7893ccfSSadaf Ebrahimi     uint32_t                                    rangeCount,
3461*b7893ccfSSadaf Ebrahimi     const VkImageSubresourceRange*              pRanges) {
3462*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3463*b7893ccfSSadaf Ebrahimi     bool skip = false;
3464*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3465*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3466*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
3467*b7893ccfSSadaf Ebrahimi         if (skip) return;
3468*b7893ccfSSadaf Ebrahimi     }
3469*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3470*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3471*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
3472*b7893ccfSSadaf Ebrahimi     }
3473*b7893ccfSSadaf Ebrahimi     DispatchCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
3474*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3475*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3476*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
3477*b7893ccfSSadaf Ebrahimi     }
3478*b7893ccfSSadaf Ebrahimi }
3479*b7893ccfSSadaf Ebrahimi 
CmdClearAttachments(VkCommandBuffer commandBuffer,uint32_t attachmentCount,const VkClearAttachment * pAttachments,uint32_t rectCount,const VkClearRect * pRects)3480*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdClearAttachments(
3481*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3482*b7893ccfSSadaf Ebrahimi     uint32_t                                    attachmentCount,
3483*b7893ccfSSadaf Ebrahimi     const VkClearAttachment*                    pAttachments,
3484*b7893ccfSSadaf Ebrahimi     uint32_t                                    rectCount,
3485*b7893ccfSSadaf Ebrahimi     const VkClearRect*                          pRects) {
3486*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3487*b7893ccfSSadaf Ebrahimi     bool skip = false;
3488*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3489*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3490*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
3491*b7893ccfSSadaf Ebrahimi         if (skip) return;
3492*b7893ccfSSadaf Ebrahimi     }
3493*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3494*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3495*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
3496*b7893ccfSSadaf Ebrahimi     }
3497*b7893ccfSSadaf Ebrahimi     DispatchCmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
3498*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3499*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3500*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
3501*b7893ccfSSadaf Ebrahimi     }
3502*b7893ccfSSadaf Ebrahimi }
3503*b7893ccfSSadaf Ebrahimi 
CmdResolveImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageResolve * pRegions)3504*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdResolveImage(
3505*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3506*b7893ccfSSadaf Ebrahimi     VkImage                                     srcImage,
3507*b7893ccfSSadaf Ebrahimi     VkImageLayout                               srcImageLayout,
3508*b7893ccfSSadaf Ebrahimi     VkImage                                     dstImage,
3509*b7893ccfSSadaf Ebrahimi     VkImageLayout                               dstImageLayout,
3510*b7893ccfSSadaf Ebrahimi     uint32_t                                    regionCount,
3511*b7893ccfSSadaf Ebrahimi     const VkImageResolve*                       pRegions) {
3512*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3513*b7893ccfSSadaf Ebrahimi     bool skip = false;
3514*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3515*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3516*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3517*b7893ccfSSadaf Ebrahimi         if (skip) return;
3518*b7893ccfSSadaf Ebrahimi     }
3519*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3520*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3521*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3522*b7893ccfSSadaf Ebrahimi     }
3523*b7893ccfSSadaf Ebrahimi     DispatchCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3524*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3525*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3526*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
3527*b7893ccfSSadaf Ebrahimi     }
3528*b7893ccfSSadaf Ebrahimi }
3529*b7893ccfSSadaf Ebrahimi 
CmdSetEvent(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags stageMask)3530*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetEvent(
3531*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3532*b7893ccfSSadaf Ebrahimi     VkEvent                                     event,
3533*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlags                        stageMask) {
3534*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3535*b7893ccfSSadaf Ebrahimi     bool skip = false;
3536*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3537*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3538*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetEvent(commandBuffer, event, stageMask);
3539*b7893ccfSSadaf Ebrahimi         if (skip) return;
3540*b7893ccfSSadaf Ebrahimi     }
3541*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3542*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3543*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetEvent(commandBuffer, event, stageMask);
3544*b7893ccfSSadaf Ebrahimi     }
3545*b7893ccfSSadaf Ebrahimi     DispatchCmdSetEvent(commandBuffer, event, stageMask);
3546*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3547*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3548*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetEvent(commandBuffer, event, stageMask);
3549*b7893ccfSSadaf Ebrahimi     }
3550*b7893ccfSSadaf Ebrahimi }
3551*b7893ccfSSadaf Ebrahimi 
CmdResetEvent(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags stageMask)3552*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdResetEvent(
3553*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3554*b7893ccfSSadaf Ebrahimi     VkEvent                                     event,
3555*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlags                        stageMask) {
3556*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3557*b7893ccfSSadaf Ebrahimi     bool skip = false;
3558*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3559*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3560*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdResetEvent(commandBuffer, event, stageMask);
3561*b7893ccfSSadaf Ebrahimi         if (skip) return;
3562*b7893ccfSSadaf Ebrahimi     }
3563*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3564*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3565*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdResetEvent(commandBuffer, event, stageMask);
3566*b7893ccfSSadaf Ebrahimi     }
3567*b7893ccfSSadaf Ebrahimi     DispatchCmdResetEvent(commandBuffer, event, stageMask);
3568*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3569*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3570*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdResetEvent(commandBuffer, event, stageMask);
3571*b7893ccfSSadaf Ebrahimi     }
3572*b7893ccfSSadaf Ebrahimi }
3573*b7893ccfSSadaf Ebrahimi 
CmdWaitEvents(VkCommandBuffer commandBuffer,uint32_t eventCount,const VkEvent * pEvents,VkPipelineStageFlags srcStageMask,VkPipelineStageFlags dstStageMask,uint32_t memoryBarrierCount,const VkMemoryBarrier * pMemoryBarriers,uint32_t bufferMemoryBarrierCount,const VkBufferMemoryBarrier * pBufferMemoryBarriers,uint32_t imageMemoryBarrierCount,const VkImageMemoryBarrier * pImageMemoryBarriers)3574*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdWaitEvents(
3575*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3576*b7893ccfSSadaf Ebrahimi     uint32_t                                    eventCount,
3577*b7893ccfSSadaf Ebrahimi     const VkEvent*                              pEvents,
3578*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlags                        srcStageMask,
3579*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlags                        dstStageMask,
3580*b7893ccfSSadaf Ebrahimi     uint32_t                                    memoryBarrierCount,
3581*b7893ccfSSadaf Ebrahimi     const VkMemoryBarrier*                      pMemoryBarriers,
3582*b7893ccfSSadaf Ebrahimi     uint32_t                                    bufferMemoryBarrierCount,
3583*b7893ccfSSadaf Ebrahimi     const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
3584*b7893ccfSSadaf Ebrahimi     uint32_t                                    imageMemoryBarrierCount,
3585*b7893ccfSSadaf Ebrahimi     const VkImageMemoryBarrier*                 pImageMemoryBarriers) {
3586*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3587*b7893ccfSSadaf Ebrahimi     bool skip = false;
3588*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3589*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3590*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3591*b7893ccfSSadaf Ebrahimi         if (skip) return;
3592*b7893ccfSSadaf Ebrahimi     }
3593*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3594*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3595*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3596*b7893ccfSSadaf Ebrahimi     }
3597*b7893ccfSSadaf Ebrahimi     DispatchCmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3598*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3599*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3600*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3601*b7893ccfSSadaf Ebrahimi     }
3602*b7893ccfSSadaf Ebrahimi }
3603*b7893ccfSSadaf Ebrahimi 
CmdPipelineBarrier(VkCommandBuffer commandBuffer,VkPipelineStageFlags srcStageMask,VkPipelineStageFlags dstStageMask,VkDependencyFlags dependencyFlags,uint32_t memoryBarrierCount,const VkMemoryBarrier * pMemoryBarriers,uint32_t bufferMemoryBarrierCount,const VkBufferMemoryBarrier * pBufferMemoryBarriers,uint32_t imageMemoryBarrierCount,const VkImageMemoryBarrier * pImageMemoryBarriers)3604*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier(
3605*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3606*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlags                        srcStageMask,
3607*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlags                        dstStageMask,
3608*b7893ccfSSadaf Ebrahimi     VkDependencyFlags                           dependencyFlags,
3609*b7893ccfSSadaf Ebrahimi     uint32_t                                    memoryBarrierCount,
3610*b7893ccfSSadaf Ebrahimi     const VkMemoryBarrier*                      pMemoryBarriers,
3611*b7893ccfSSadaf Ebrahimi     uint32_t                                    bufferMemoryBarrierCount,
3612*b7893ccfSSadaf Ebrahimi     const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
3613*b7893ccfSSadaf Ebrahimi     uint32_t                                    imageMemoryBarrierCount,
3614*b7893ccfSSadaf Ebrahimi     const VkImageMemoryBarrier*                 pImageMemoryBarriers) {
3615*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3616*b7893ccfSSadaf Ebrahimi     bool skip = false;
3617*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3618*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3619*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3620*b7893ccfSSadaf Ebrahimi         if (skip) return;
3621*b7893ccfSSadaf Ebrahimi     }
3622*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3623*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3624*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3625*b7893ccfSSadaf Ebrahimi     }
3626*b7893ccfSSadaf Ebrahimi     DispatchCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3627*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3628*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3629*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3630*b7893ccfSSadaf Ebrahimi     }
3631*b7893ccfSSadaf Ebrahimi }
3632*b7893ccfSSadaf Ebrahimi 
CmdBeginQuery(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,VkQueryControlFlags flags)3633*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBeginQuery(
3634*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3635*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
3636*b7893ccfSSadaf Ebrahimi     uint32_t                                    query,
3637*b7893ccfSSadaf Ebrahimi     VkQueryControlFlags                         flags) {
3638*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3639*b7893ccfSSadaf Ebrahimi     bool skip = false;
3640*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3641*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3642*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBeginQuery(commandBuffer, queryPool, query, flags);
3643*b7893ccfSSadaf Ebrahimi         if (skip) return;
3644*b7893ccfSSadaf Ebrahimi     }
3645*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3646*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3647*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBeginQuery(commandBuffer, queryPool, query, flags);
3648*b7893ccfSSadaf Ebrahimi     }
3649*b7893ccfSSadaf Ebrahimi     DispatchCmdBeginQuery(commandBuffer, queryPool, query, flags);
3650*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3651*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3652*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBeginQuery(commandBuffer, queryPool, query, flags);
3653*b7893ccfSSadaf Ebrahimi     }
3654*b7893ccfSSadaf Ebrahimi }
3655*b7893ccfSSadaf Ebrahimi 
CmdEndQuery(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query)3656*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdEndQuery(
3657*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3658*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
3659*b7893ccfSSadaf Ebrahimi     uint32_t                                    query) {
3660*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3661*b7893ccfSSadaf Ebrahimi     bool skip = false;
3662*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3663*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3664*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdEndQuery(commandBuffer, queryPool, query);
3665*b7893ccfSSadaf Ebrahimi         if (skip) return;
3666*b7893ccfSSadaf Ebrahimi     }
3667*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3668*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3669*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdEndQuery(commandBuffer, queryPool, query);
3670*b7893ccfSSadaf Ebrahimi     }
3671*b7893ccfSSadaf Ebrahimi     DispatchCmdEndQuery(commandBuffer, queryPool, query);
3672*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3673*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3674*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdEndQuery(commandBuffer, queryPool, query);
3675*b7893ccfSSadaf Ebrahimi     }
3676*b7893ccfSSadaf Ebrahimi }
3677*b7893ccfSSadaf Ebrahimi 
CmdResetQueryPool(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount)3678*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdResetQueryPool(
3679*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3680*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
3681*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstQuery,
3682*b7893ccfSSadaf Ebrahimi     uint32_t                                    queryCount) {
3683*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3684*b7893ccfSSadaf Ebrahimi     bool skip = false;
3685*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3686*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3687*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
3688*b7893ccfSSadaf Ebrahimi         if (skip) return;
3689*b7893ccfSSadaf Ebrahimi     }
3690*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3691*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3692*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
3693*b7893ccfSSadaf Ebrahimi     }
3694*b7893ccfSSadaf Ebrahimi     DispatchCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
3695*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3696*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3697*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
3698*b7893ccfSSadaf Ebrahimi     }
3699*b7893ccfSSadaf Ebrahimi }
3700*b7893ccfSSadaf Ebrahimi 
CmdWriteTimestamp(VkCommandBuffer commandBuffer,VkPipelineStageFlagBits pipelineStage,VkQueryPool queryPool,uint32_t query)3701*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp(
3702*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3703*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlagBits                     pipelineStage,
3704*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
3705*b7893ccfSSadaf Ebrahimi     uint32_t                                    query) {
3706*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3707*b7893ccfSSadaf Ebrahimi     bool skip = false;
3708*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3709*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3710*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
3711*b7893ccfSSadaf Ebrahimi         if (skip) return;
3712*b7893ccfSSadaf Ebrahimi     }
3713*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3714*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3715*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
3716*b7893ccfSSadaf Ebrahimi     }
3717*b7893ccfSSadaf Ebrahimi     DispatchCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
3718*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3719*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3720*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
3721*b7893ccfSSadaf Ebrahimi     }
3722*b7893ccfSSadaf Ebrahimi }
3723*b7893ccfSSadaf Ebrahimi 
CmdCopyQueryPoolResults(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize stride,VkQueryResultFlags flags)3724*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdCopyQueryPoolResults(
3725*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3726*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
3727*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstQuery,
3728*b7893ccfSSadaf Ebrahimi     uint32_t                                    queryCount,
3729*b7893ccfSSadaf Ebrahimi     VkBuffer                                    dstBuffer,
3730*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                dstOffset,
3731*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                stride,
3732*b7893ccfSSadaf Ebrahimi     VkQueryResultFlags                          flags) {
3733*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3734*b7893ccfSSadaf Ebrahimi     bool skip = false;
3735*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3736*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3737*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
3738*b7893ccfSSadaf Ebrahimi         if (skip) return;
3739*b7893ccfSSadaf Ebrahimi     }
3740*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3741*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3742*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
3743*b7893ccfSSadaf Ebrahimi     }
3744*b7893ccfSSadaf Ebrahimi     DispatchCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
3745*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3746*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3747*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
3748*b7893ccfSSadaf Ebrahimi     }
3749*b7893ccfSSadaf Ebrahimi }
3750*b7893ccfSSadaf Ebrahimi 
CmdPushConstants(VkCommandBuffer commandBuffer,VkPipelineLayout layout,VkShaderStageFlags stageFlags,uint32_t offset,uint32_t size,const void * pValues)3751*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdPushConstants(
3752*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3753*b7893ccfSSadaf Ebrahimi     VkPipelineLayout                            layout,
3754*b7893ccfSSadaf Ebrahimi     VkShaderStageFlags                          stageFlags,
3755*b7893ccfSSadaf Ebrahimi     uint32_t                                    offset,
3756*b7893ccfSSadaf Ebrahimi     uint32_t                                    size,
3757*b7893ccfSSadaf Ebrahimi     const void*                                 pValues) {
3758*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3759*b7893ccfSSadaf Ebrahimi     bool skip = false;
3760*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3761*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3762*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
3763*b7893ccfSSadaf Ebrahimi         if (skip) return;
3764*b7893ccfSSadaf Ebrahimi     }
3765*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3766*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3767*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
3768*b7893ccfSSadaf Ebrahimi     }
3769*b7893ccfSSadaf Ebrahimi     DispatchCmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
3770*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3771*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3772*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
3773*b7893ccfSSadaf Ebrahimi     }
3774*b7893ccfSSadaf Ebrahimi }
3775*b7893ccfSSadaf Ebrahimi 
CmdBeginRenderPass(VkCommandBuffer commandBuffer,const VkRenderPassBeginInfo * pRenderPassBegin,VkSubpassContents contents)3776*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass(
3777*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3778*b7893ccfSSadaf Ebrahimi     const VkRenderPassBeginInfo*                pRenderPassBegin,
3779*b7893ccfSSadaf Ebrahimi     VkSubpassContents                           contents) {
3780*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3781*b7893ccfSSadaf Ebrahimi     bool skip = false;
3782*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3783*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3784*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
3785*b7893ccfSSadaf Ebrahimi         if (skip) return;
3786*b7893ccfSSadaf Ebrahimi     }
3787*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3788*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3789*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
3790*b7893ccfSSadaf Ebrahimi     }
3791*b7893ccfSSadaf Ebrahimi     DispatchCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
3792*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3793*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3794*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
3795*b7893ccfSSadaf Ebrahimi     }
3796*b7893ccfSSadaf Ebrahimi }
3797*b7893ccfSSadaf Ebrahimi 
CmdNextSubpass(VkCommandBuffer commandBuffer,VkSubpassContents contents)3798*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdNextSubpass(
3799*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3800*b7893ccfSSadaf Ebrahimi     VkSubpassContents                           contents) {
3801*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3802*b7893ccfSSadaf Ebrahimi     bool skip = false;
3803*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3804*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3805*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdNextSubpass(commandBuffer, contents);
3806*b7893ccfSSadaf Ebrahimi         if (skip) return;
3807*b7893ccfSSadaf Ebrahimi     }
3808*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3809*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3810*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdNextSubpass(commandBuffer, contents);
3811*b7893ccfSSadaf Ebrahimi     }
3812*b7893ccfSSadaf Ebrahimi     DispatchCmdNextSubpass(commandBuffer, contents);
3813*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3814*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3815*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdNextSubpass(commandBuffer, contents);
3816*b7893ccfSSadaf Ebrahimi     }
3817*b7893ccfSSadaf Ebrahimi }
3818*b7893ccfSSadaf Ebrahimi 
CmdEndRenderPass(VkCommandBuffer commandBuffer)3819*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass(
3820*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer) {
3821*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3822*b7893ccfSSadaf Ebrahimi     bool skip = false;
3823*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3824*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3825*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdEndRenderPass(commandBuffer);
3826*b7893ccfSSadaf Ebrahimi         if (skip) return;
3827*b7893ccfSSadaf Ebrahimi     }
3828*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3829*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3830*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdEndRenderPass(commandBuffer);
3831*b7893ccfSSadaf Ebrahimi     }
3832*b7893ccfSSadaf Ebrahimi     DispatchCmdEndRenderPass(commandBuffer);
3833*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3834*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3835*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdEndRenderPass(commandBuffer);
3836*b7893ccfSSadaf Ebrahimi     }
3837*b7893ccfSSadaf Ebrahimi }
3838*b7893ccfSSadaf Ebrahimi 
CmdExecuteCommands(VkCommandBuffer commandBuffer,uint32_t commandBufferCount,const VkCommandBuffer * pCommandBuffers)3839*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdExecuteCommands(
3840*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3841*b7893ccfSSadaf Ebrahimi     uint32_t                                    commandBufferCount,
3842*b7893ccfSSadaf Ebrahimi     const VkCommandBuffer*                      pCommandBuffers) {
3843*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3844*b7893ccfSSadaf Ebrahimi     bool skip = false;
3845*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3846*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3847*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
3848*b7893ccfSSadaf Ebrahimi         if (skip) return;
3849*b7893ccfSSadaf Ebrahimi     }
3850*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3851*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3852*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
3853*b7893ccfSSadaf Ebrahimi     }
3854*b7893ccfSSadaf Ebrahimi     DispatchCmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
3855*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3856*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3857*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
3858*b7893ccfSSadaf Ebrahimi     }
3859*b7893ccfSSadaf Ebrahimi }
3860*b7893ccfSSadaf Ebrahimi 
3861*b7893ccfSSadaf Ebrahimi 
BindBufferMemory2(VkDevice device,uint32_t bindInfoCount,const VkBindBufferMemoryInfo * pBindInfos)3862*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2(
3863*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3864*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindInfoCount,
3865*b7893ccfSSadaf Ebrahimi     const VkBindBufferMemoryInfo*               pBindInfos) {
3866*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3867*b7893ccfSSadaf Ebrahimi     bool skip = false;
3868*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3869*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3870*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateBindBufferMemory2(device, bindInfoCount, pBindInfos);
3871*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
3872*b7893ccfSSadaf Ebrahimi     }
3873*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3874*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3875*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordBindBufferMemory2(device, bindInfoCount, pBindInfos);
3876*b7893ccfSSadaf Ebrahimi     }
3877*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchBindBufferMemory2(device, bindInfoCount, pBindInfos);
3878*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3879*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3880*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordBindBufferMemory2(device, bindInfoCount, pBindInfos, result);
3881*b7893ccfSSadaf Ebrahimi     }
3882*b7893ccfSSadaf Ebrahimi     return result;
3883*b7893ccfSSadaf Ebrahimi }
3884*b7893ccfSSadaf Ebrahimi 
BindImageMemory2(VkDevice device,uint32_t bindInfoCount,const VkBindImageMemoryInfo * pBindInfos)3885*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory2(
3886*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3887*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindInfoCount,
3888*b7893ccfSSadaf Ebrahimi     const VkBindImageMemoryInfo*                pBindInfos) {
3889*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3890*b7893ccfSSadaf Ebrahimi     bool skip = false;
3891*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3892*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3893*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateBindImageMemory2(device, bindInfoCount, pBindInfos);
3894*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
3895*b7893ccfSSadaf Ebrahimi     }
3896*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3897*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3898*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordBindImageMemory2(device, bindInfoCount, pBindInfos);
3899*b7893ccfSSadaf Ebrahimi     }
3900*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchBindImageMemory2(device, bindInfoCount, pBindInfos);
3901*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3902*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3903*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordBindImageMemory2(device, bindInfoCount, pBindInfos, result);
3904*b7893ccfSSadaf Ebrahimi     }
3905*b7893ccfSSadaf Ebrahimi     return result;
3906*b7893ccfSSadaf Ebrahimi }
3907*b7893ccfSSadaf Ebrahimi 
GetDeviceGroupPeerMemoryFeatures(VkDevice device,uint32_t heapIndex,uint32_t localDeviceIndex,uint32_t remoteDeviceIndex,VkPeerMemoryFeatureFlags * pPeerMemoryFeatures)3908*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeatures(
3909*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3910*b7893ccfSSadaf Ebrahimi     uint32_t                                    heapIndex,
3911*b7893ccfSSadaf Ebrahimi     uint32_t                                    localDeviceIndex,
3912*b7893ccfSSadaf Ebrahimi     uint32_t                                    remoteDeviceIndex,
3913*b7893ccfSSadaf Ebrahimi     VkPeerMemoryFeatureFlags*                   pPeerMemoryFeatures) {
3914*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3915*b7893ccfSSadaf Ebrahimi     bool skip = false;
3916*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3917*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3918*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
3919*b7893ccfSSadaf Ebrahimi         if (skip) return;
3920*b7893ccfSSadaf Ebrahimi     }
3921*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3922*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3923*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
3924*b7893ccfSSadaf Ebrahimi     }
3925*b7893ccfSSadaf Ebrahimi     DispatchGetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
3926*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3927*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3928*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
3929*b7893ccfSSadaf Ebrahimi     }
3930*b7893ccfSSadaf Ebrahimi }
3931*b7893ccfSSadaf Ebrahimi 
CmdSetDeviceMask(VkCommandBuffer commandBuffer,uint32_t deviceMask)3932*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetDeviceMask(
3933*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3934*b7893ccfSSadaf Ebrahimi     uint32_t                                    deviceMask) {
3935*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3936*b7893ccfSSadaf Ebrahimi     bool skip = false;
3937*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3938*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3939*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetDeviceMask(commandBuffer, deviceMask);
3940*b7893ccfSSadaf Ebrahimi         if (skip) return;
3941*b7893ccfSSadaf Ebrahimi     }
3942*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3943*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3944*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetDeviceMask(commandBuffer, deviceMask);
3945*b7893ccfSSadaf Ebrahimi     }
3946*b7893ccfSSadaf Ebrahimi     DispatchCmdSetDeviceMask(commandBuffer, deviceMask);
3947*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3948*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3949*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetDeviceMask(commandBuffer, deviceMask);
3950*b7893ccfSSadaf Ebrahimi     }
3951*b7893ccfSSadaf Ebrahimi }
3952*b7893ccfSSadaf Ebrahimi 
CmdDispatchBase(VkCommandBuffer commandBuffer,uint32_t baseGroupX,uint32_t baseGroupY,uint32_t baseGroupZ,uint32_t groupCountX,uint32_t groupCountY,uint32_t groupCountZ)3953*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDispatchBase(
3954*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3955*b7893ccfSSadaf Ebrahimi     uint32_t                                    baseGroupX,
3956*b7893ccfSSadaf Ebrahimi     uint32_t                                    baseGroupY,
3957*b7893ccfSSadaf Ebrahimi     uint32_t                                    baseGroupZ,
3958*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountX,
3959*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountY,
3960*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountZ) {
3961*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3962*b7893ccfSSadaf Ebrahimi     bool skip = false;
3963*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3964*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3965*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
3966*b7893ccfSSadaf Ebrahimi         if (skip) return;
3967*b7893ccfSSadaf Ebrahimi     }
3968*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3969*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3970*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
3971*b7893ccfSSadaf Ebrahimi     }
3972*b7893ccfSSadaf Ebrahimi     DispatchCmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
3973*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3974*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3975*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
3976*b7893ccfSSadaf Ebrahimi     }
3977*b7893ccfSSadaf Ebrahimi }
3978*b7893ccfSSadaf Ebrahimi 
EnumeratePhysicalDeviceGroups(VkInstance instance,uint32_t * pPhysicalDeviceGroupCount,VkPhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties)3979*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroups(
3980*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
3981*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPhysicalDeviceGroupCount,
3982*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceGroupProperties*            pPhysicalDeviceGroupProperties) {
3983*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
3984*b7893ccfSSadaf Ebrahimi     bool skip = false;
3985*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3986*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3987*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateEnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
3988*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
3989*b7893ccfSSadaf Ebrahimi     }
3990*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3991*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3992*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordEnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
3993*b7893ccfSSadaf Ebrahimi     }
3994*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchEnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
3995*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
3996*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
3997*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordEnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties, result);
3998*b7893ccfSSadaf Ebrahimi     }
3999*b7893ccfSSadaf Ebrahimi     return result;
4000*b7893ccfSSadaf Ebrahimi }
4001*b7893ccfSSadaf Ebrahimi 
GetImageMemoryRequirements2(VkDevice device,const VkImageMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements)4002*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2(
4003*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4004*b7893ccfSSadaf Ebrahimi     const VkImageMemoryRequirementsInfo2*       pInfo,
4005*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements2*                      pMemoryRequirements) {
4006*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4007*b7893ccfSSadaf Ebrahimi     bool skip = false;
4008*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4009*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4010*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetImageMemoryRequirements2(device, pInfo, pMemoryRequirements);
4011*b7893ccfSSadaf Ebrahimi         if (skip) return;
4012*b7893ccfSSadaf Ebrahimi     }
4013*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4014*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4015*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetImageMemoryRequirements2(device, pInfo, pMemoryRequirements);
4016*b7893ccfSSadaf Ebrahimi     }
4017*b7893ccfSSadaf Ebrahimi     DispatchGetImageMemoryRequirements2(device, pInfo, pMemoryRequirements);
4018*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4019*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4020*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetImageMemoryRequirements2(device, pInfo, pMemoryRequirements);
4021*b7893ccfSSadaf Ebrahimi     }
4022*b7893ccfSSadaf Ebrahimi }
4023*b7893ccfSSadaf Ebrahimi 
GetBufferMemoryRequirements2(VkDevice device,const VkBufferMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements)4024*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements2(
4025*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4026*b7893ccfSSadaf Ebrahimi     const VkBufferMemoryRequirementsInfo2*      pInfo,
4027*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements2*                      pMemoryRequirements) {
4028*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4029*b7893ccfSSadaf Ebrahimi     bool skip = false;
4030*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4031*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4032*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetBufferMemoryRequirements2(device, pInfo, pMemoryRequirements);
4033*b7893ccfSSadaf Ebrahimi         if (skip) return;
4034*b7893ccfSSadaf Ebrahimi     }
4035*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4036*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4037*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetBufferMemoryRequirements2(device, pInfo, pMemoryRequirements);
4038*b7893ccfSSadaf Ebrahimi     }
4039*b7893ccfSSadaf Ebrahimi     DispatchGetBufferMemoryRequirements2(device, pInfo, pMemoryRequirements);
4040*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4041*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4042*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetBufferMemoryRequirements2(device, pInfo, pMemoryRequirements);
4043*b7893ccfSSadaf Ebrahimi     }
4044*b7893ccfSSadaf Ebrahimi }
4045*b7893ccfSSadaf Ebrahimi 
GetImageSparseMemoryRequirements2(VkDevice device,const VkImageSparseMemoryRequirementsInfo2 * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements)4046*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements2(
4047*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4048*b7893ccfSSadaf Ebrahimi     const VkImageSparseMemoryRequirementsInfo2* pInfo,
4049*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pSparseMemoryRequirementCount,
4050*b7893ccfSSadaf Ebrahimi     VkSparseImageMemoryRequirements2*           pSparseMemoryRequirements) {
4051*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4052*b7893ccfSSadaf Ebrahimi     bool skip = false;
4053*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4054*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4055*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
4056*b7893ccfSSadaf Ebrahimi         if (skip) return;
4057*b7893ccfSSadaf Ebrahimi     }
4058*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4059*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4060*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
4061*b7893ccfSSadaf Ebrahimi     }
4062*b7893ccfSSadaf Ebrahimi     DispatchGetImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
4063*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4064*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4065*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
4066*b7893ccfSSadaf Ebrahimi     }
4067*b7893ccfSSadaf Ebrahimi }
4068*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures2 * pFeatures)4069*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2(
4070*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4071*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceFeatures2*                  pFeatures) {
4072*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4073*b7893ccfSSadaf Ebrahimi     bool skip = false;
4074*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4075*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4076*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceFeatures2(physicalDevice, pFeatures);
4077*b7893ccfSSadaf Ebrahimi         if (skip) return;
4078*b7893ccfSSadaf Ebrahimi     }
4079*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4080*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4081*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceFeatures2(physicalDevice, pFeatures);
4082*b7893ccfSSadaf Ebrahimi     }
4083*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceFeatures2(physicalDevice, pFeatures);
4084*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4085*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4086*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceFeatures2(physicalDevice, pFeatures);
4087*b7893ccfSSadaf Ebrahimi     }
4088*b7893ccfSSadaf Ebrahimi }
4089*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties2 * pProperties)4090*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2(
4091*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4092*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceProperties2*                pProperties) {
4093*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4094*b7893ccfSSadaf Ebrahimi     bool skip = false;
4095*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4096*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4097*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceProperties2(physicalDevice, pProperties);
4098*b7893ccfSSadaf Ebrahimi         if (skip) return;
4099*b7893ccfSSadaf Ebrahimi     }
4100*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4101*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4102*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceProperties2(physicalDevice, pProperties);
4103*b7893ccfSSadaf Ebrahimi     }
4104*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceProperties2(physicalDevice, pProperties);
4105*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4106*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4107*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceProperties2(physicalDevice, pProperties);
4108*b7893ccfSSadaf Ebrahimi     }
4109*b7893ccfSSadaf Ebrahimi }
4110*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties2 * pFormatProperties)4111*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2(
4112*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4113*b7893ccfSSadaf Ebrahimi     VkFormat                                    format,
4114*b7893ccfSSadaf Ebrahimi     VkFormatProperties2*                        pFormatProperties) {
4115*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4116*b7893ccfSSadaf Ebrahimi     bool skip = false;
4117*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4118*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4119*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties);
4120*b7893ccfSSadaf Ebrahimi         if (skip) return;
4121*b7893ccfSSadaf Ebrahimi     }
4122*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4123*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4124*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties);
4125*b7893ccfSSadaf Ebrahimi     }
4126*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties);
4127*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4128*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4129*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties);
4130*b7893ccfSSadaf Ebrahimi     }
4131*b7893ccfSSadaf Ebrahimi }
4132*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo,VkImageFormatProperties2 * pImageFormatProperties)4133*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties2(
4134*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4135*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
4136*b7893ccfSSadaf Ebrahimi     VkImageFormatProperties2*                   pImageFormatProperties) {
4137*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4138*b7893ccfSSadaf Ebrahimi     bool skip = false;
4139*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4140*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4141*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties);
4142*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4143*b7893ccfSSadaf Ebrahimi     }
4144*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4145*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4146*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties);
4147*b7893ccfSSadaf Ebrahimi     }
4148*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties);
4149*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4150*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4151*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties, result);
4152*b7893ccfSSadaf Ebrahimi     }
4153*b7893ccfSSadaf Ebrahimi     return result;
4154*b7893ccfSSadaf Ebrahimi }
4155*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties2 * pQueueFamilyProperties)4156*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties2(
4157*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4158*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pQueueFamilyPropertyCount,
4159*b7893ccfSSadaf Ebrahimi     VkQueueFamilyProperties2*                   pQueueFamilyProperties) {
4160*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4161*b7893ccfSSadaf Ebrahimi     bool skip = false;
4162*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4163*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4164*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
4165*b7893ccfSSadaf Ebrahimi         if (skip) return;
4166*b7893ccfSSadaf Ebrahimi     }
4167*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4168*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4169*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
4170*b7893ccfSSadaf Ebrahimi     }
4171*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
4172*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4173*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4174*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
4175*b7893ccfSSadaf Ebrahimi     }
4176*b7893ccfSSadaf Ebrahimi }
4177*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties2 * pMemoryProperties)4178*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties2(
4179*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4180*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceMemoryProperties2*          pMemoryProperties) {
4181*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4182*b7893ccfSSadaf Ebrahimi     bool skip = false;
4183*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4184*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4185*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties);
4186*b7893ccfSSadaf Ebrahimi         if (skip) return;
4187*b7893ccfSSadaf Ebrahimi     }
4188*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4189*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4190*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties);
4191*b7893ccfSSadaf Ebrahimi     }
4192*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties);
4193*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4194*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4195*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties);
4196*b7893ccfSSadaf Ebrahimi     }
4197*b7893ccfSSadaf Ebrahimi }
4198*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceSparseImageFormatProperties2(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo,uint32_t * pPropertyCount,VkSparseImageFormatProperties2 * pProperties)4199*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties2(
4200*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4201*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
4202*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
4203*b7893ccfSSadaf Ebrahimi     VkSparseImageFormatProperties2*             pProperties) {
4204*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4205*b7893ccfSSadaf Ebrahimi     bool skip = false;
4206*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4207*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4208*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
4209*b7893ccfSSadaf Ebrahimi         if (skip) return;
4210*b7893ccfSSadaf Ebrahimi     }
4211*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4212*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4213*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
4214*b7893ccfSSadaf Ebrahimi     }
4215*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
4216*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4217*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4218*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
4219*b7893ccfSSadaf Ebrahimi     }
4220*b7893ccfSSadaf Ebrahimi }
4221*b7893ccfSSadaf Ebrahimi 
TrimCommandPool(VkDevice device,VkCommandPool commandPool,VkCommandPoolTrimFlags flags)4222*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL TrimCommandPool(
4223*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4224*b7893ccfSSadaf Ebrahimi     VkCommandPool                               commandPool,
4225*b7893ccfSSadaf Ebrahimi     VkCommandPoolTrimFlags                      flags) {
4226*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4227*b7893ccfSSadaf Ebrahimi     bool skip = false;
4228*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4229*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4230*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateTrimCommandPool(device, commandPool, flags);
4231*b7893ccfSSadaf Ebrahimi         if (skip) return;
4232*b7893ccfSSadaf Ebrahimi     }
4233*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4234*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4235*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordTrimCommandPool(device, commandPool, flags);
4236*b7893ccfSSadaf Ebrahimi     }
4237*b7893ccfSSadaf Ebrahimi     DispatchTrimCommandPool(device, commandPool, flags);
4238*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4239*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4240*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordTrimCommandPool(device, commandPool, flags);
4241*b7893ccfSSadaf Ebrahimi     }
4242*b7893ccfSSadaf Ebrahimi }
4243*b7893ccfSSadaf Ebrahimi 
GetDeviceQueue2(VkDevice device,const VkDeviceQueueInfo2 * pQueueInfo,VkQueue * pQueue)4244*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetDeviceQueue2(
4245*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4246*b7893ccfSSadaf Ebrahimi     const VkDeviceQueueInfo2*                   pQueueInfo,
4247*b7893ccfSSadaf Ebrahimi     VkQueue*                                    pQueue) {
4248*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4249*b7893ccfSSadaf Ebrahimi     bool skip = false;
4250*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4251*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4252*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDeviceQueue2(device, pQueueInfo, pQueue);
4253*b7893ccfSSadaf Ebrahimi         if (skip) return;
4254*b7893ccfSSadaf Ebrahimi     }
4255*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4256*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4257*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDeviceQueue2(device, pQueueInfo, pQueue);
4258*b7893ccfSSadaf Ebrahimi     }
4259*b7893ccfSSadaf Ebrahimi     DispatchGetDeviceQueue2(device, pQueueInfo, pQueue);
4260*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4261*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4262*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDeviceQueue2(device, pQueueInfo, pQueue);
4263*b7893ccfSSadaf Ebrahimi     }
4264*b7893ccfSSadaf Ebrahimi }
4265*b7893ccfSSadaf Ebrahimi 
CreateSamplerYcbcrConversion(VkDevice device,const VkSamplerYcbcrConversionCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSamplerYcbcrConversion * pYcbcrConversion)4266*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversion(
4267*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4268*b7893ccfSSadaf Ebrahimi     const VkSamplerYcbcrConversionCreateInfo*   pCreateInfo,
4269*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
4270*b7893ccfSSadaf Ebrahimi     VkSamplerYcbcrConversion*                   pYcbcrConversion) {
4271*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4272*b7893ccfSSadaf Ebrahimi     bool skip = false;
4273*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4274*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4275*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion);
4276*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4277*b7893ccfSSadaf Ebrahimi     }
4278*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4279*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4280*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion);
4281*b7893ccfSSadaf Ebrahimi     }
4282*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion);
4283*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4284*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4285*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion, result);
4286*b7893ccfSSadaf Ebrahimi     }
4287*b7893ccfSSadaf Ebrahimi     return result;
4288*b7893ccfSSadaf Ebrahimi }
4289*b7893ccfSSadaf Ebrahimi 
DestroySamplerYcbcrConversion(VkDevice device,VkSamplerYcbcrConversion ycbcrConversion,const VkAllocationCallbacks * pAllocator)4290*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroySamplerYcbcrConversion(
4291*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4292*b7893ccfSSadaf Ebrahimi     VkSamplerYcbcrConversion                    ycbcrConversion,
4293*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
4294*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4295*b7893ccfSSadaf Ebrahimi     bool skip = false;
4296*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4297*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4298*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
4299*b7893ccfSSadaf Ebrahimi         if (skip) return;
4300*b7893ccfSSadaf Ebrahimi     }
4301*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4302*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4303*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
4304*b7893ccfSSadaf Ebrahimi     }
4305*b7893ccfSSadaf Ebrahimi     DispatchDestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
4306*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4307*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4308*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
4309*b7893ccfSSadaf Ebrahimi     }
4310*b7893ccfSSadaf Ebrahimi }
4311*b7893ccfSSadaf Ebrahimi 
CreateDescriptorUpdateTemplate(VkDevice device,const VkDescriptorUpdateTemplateCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorUpdateTemplate * pDescriptorUpdateTemplate)4312*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplate(
4313*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4314*b7893ccfSSadaf Ebrahimi     const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
4315*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
4316*b7893ccfSSadaf Ebrahimi     VkDescriptorUpdateTemplate*                 pDescriptorUpdateTemplate) {
4317*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4318*b7893ccfSSadaf Ebrahimi     bool skip = false;
4319*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4320*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4321*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateDescriptorUpdateTemplate(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
4322*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4323*b7893ccfSSadaf Ebrahimi     }
4324*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4325*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4326*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateDescriptorUpdateTemplate(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
4327*b7893ccfSSadaf Ebrahimi     }
4328*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateDescriptorUpdateTemplate(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
4329*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4330*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4331*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateDescriptorUpdateTemplate(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate, result);
4332*b7893ccfSSadaf Ebrahimi     }
4333*b7893ccfSSadaf Ebrahimi     return result;
4334*b7893ccfSSadaf Ebrahimi }
4335*b7893ccfSSadaf Ebrahimi 
DestroyDescriptorUpdateTemplate(VkDevice device,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const VkAllocationCallbacks * pAllocator)4336*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplate(
4337*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4338*b7893ccfSSadaf Ebrahimi     VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
4339*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
4340*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4341*b7893ccfSSadaf Ebrahimi     bool skip = false;
4342*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4343*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4344*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator);
4345*b7893ccfSSadaf Ebrahimi         if (skip) return;
4346*b7893ccfSSadaf Ebrahimi     }
4347*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4348*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4349*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator);
4350*b7893ccfSSadaf Ebrahimi     }
4351*b7893ccfSSadaf Ebrahimi     DispatchDestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator);
4352*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4353*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4354*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator);
4355*b7893ccfSSadaf Ebrahimi     }
4356*b7893ccfSSadaf Ebrahimi }
4357*b7893ccfSSadaf Ebrahimi 
UpdateDescriptorSetWithTemplate(VkDevice device,VkDescriptorSet descriptorSet,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const void * pData)4358*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplate(
4359*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4360*b7893ccfSSadaf Ebrahimi     VkDescriptorSet                             descriptorSet,
4361*b7893ccfSSadaf Ebrahimi     VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
4362*b7893ccfSSadaf Ebrahimi     const void*                                 pData) {
4363*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4364*b7893ccfSSadaf Ebrahimi     bool skip = false;
4365*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4366*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4367*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateUpdateDescriptorSetWithTemplate(device, descriptorSet, descriptorUpdateTemplate, pData);
4368*b7893ccfSSadaf Ebrahimi         if (skip) return;
4369*b7893ccfSSadaf Ebrahimi     }
4370*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4371*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4372*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordUpdateDescriptorSetWithTemplate(device, descriptorSet, descriptorUpdateTemplate, pData);
4373*b7893ccfSSadaf Ebrahimi     }
4374*b7893ccfSSadaf Ebrahimi     DispatchUpdateDescriptorSetWithTemplate(device, descriptorSet, descriptorUpdateTemplate, pData);
4375*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4376*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4377*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordUpdateDescriptorSetWithTemplate(device, descriptorSet, descriptorUpdateTemplate, pData);
4378*b7893ccfSSadaf Ebrahimi     }
4379*b7893ccfSSadaf Ebrahimi }
4380*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo,VkExternalBufferProperties * pExternalBufferProperties)4381*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferProperties(
4382*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4383*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceExternalBufferInfo*   pExternalBufferInfo,
4384*b7893ccfSSadaf Ebrahimi     VkExternalBufferProperties*                 pExternalBufferProperties) {
4385*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4386*b7893ccfSSadaf Ebrahimi     bool skip = false;
4387*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4388*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4389*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
4390*b7893ccfSSadaf Ebrahimi         if (skip) return;
4391*b7893ccfSSadaf Ebrahimi     }
4392*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4393*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4394*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
4395*b7893ccfSSadaf Ebrahimi     }
4396*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
4397*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4398*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4399*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
4400*b7893ccfSSadaf Ebrahimi     }
4401*b7893ccfSSadaf Ebrahimi }
4402*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceExternalFenceProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo,VkExternalFenceProperties * pExternalFenceProperties)4403*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFenceProperties(
4404*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4405*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
4406*b7893ccfSSadaf Ebrahimi     VkExternalFenceProperties*                  pExternalFenceProperties) {
4407*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4408*b7893ccfSSadaf Ebrahimi     bool skip = false;
4409*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4410*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4411*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
4412*b7893ccfSSadaf Ebrahimi         if (skip) return;
4413*b7893ccfSSadaf Ebrahimi     }
4414*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4415*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4416*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
4417*b7893ccfSSadaf Ebrahimi     }
4418*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
4419*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4420*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4421*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
4422*b7893ccfSSadaf Ebrahimi     }
4423*b7893ccfSSadaf Ebrahimi }
4424*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceExternalSemaphoreProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo,VkExternalSemaphoreProperties * pExternalSemaphoreProperties)4425*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphoreProperties(
4426*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4427*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
4428*b7893ccfSSadaf Ebrahimi     VkExternalSemaphoreProperties*              pExternalSemaphoreProperties) {
4429*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4430*b7893ccfSSadaf Ebrahimi     bool skip = false;
4431*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4432*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4433*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
4434*b7893ccfSSadaf Ebrahimi         if (skip) return;
4435*b7893ccfSSadaf Ebrahimi     }
4436*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4437*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4438*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
4439*b7893ccfSSadaf Ebrahimi     }
4440*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
4441*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4442*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4443*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
4444*b7893ccfSSadaf Ebrahimi     }
4445*b7893ccfSSadaf Ebrahimi }
4446*b7893ccfSSadaf Ebrahimi 
GetDescriptorSetLayoutSupport(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,VkDescriptorSetLayoutSupport * pSupport)4447*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupport(
4448*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4449*b7893ccfSSadaf Ebrahimi     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
4450*b7893ccfSSadaf Ebrahimi     VkDescriptorSetLayoutSupport*               pSupport) {
4451*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4452*b7893ccfSSadaf Ebrahimi     bool skip = false;
4453*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4454*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4455*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
4456*b7893ccfSSadaf Ebrahimi         if (skip) return;
4457*b7893ccfSSadaf Ebrahimi     }
4458*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4459*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4460*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
4461*b7893ccfSSadaf Ebrahimi     }
4462*b7893ccfSSadaf Ebrahimi     DispatchGetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
4463*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4464*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4465*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
4466*b7893ccfSSadaf Ebrahimi     }
4467*b7893ccfSSadaf Ebrahimi }
4468*b7893ccfSSadaf Ebrahimi 
4469*b7893ccfSSadaf Ebrahimi 
DestroySurfaceKHR(VkInstance instance,VkSurfaceKHR surface,const VkAllocationCallbacks * pAllocator)4470*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroySurfaceKHR(
4471*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
4472*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
4473*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
4474*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
4475*b7893ccfSSadaf Ebrahimi     bool skip = false;
4476*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4477*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4478*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroySurfaceKHR(instance, surface, pAllocator);
4479*b7893ccfSSadaf Ebrahimi         if (skip) return;
4480*b7893ccfSSadaf Ebrahimi     }
4481*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4482*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4483*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroySurfaceKHR(instance, surface, pAllocator);
4484*b7893ccfSSadaf Ebrahimi     }
4485*b7893ccfSSadaf Ebrahimi     DispatchDestroySurfaceKHR(instance, surface, pAllocator);
4486*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4487*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4488*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroySurfaceKHR(instance, surface, pAllocator);
4489*b7893ccfSSadaf Ebrahimi     }
4490*b7893ccfSSadaf Ebrahimi }
4491*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex,VkSurfaceKHR surface,VkBool32 * pSupported)4492*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceSupportKHR(
4493*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4494*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueFamilyIndex,
4495*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
4496*b7893ccfSSadaf Ebrahimi     VkBool32*                                   pSupported) {
4497*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4498*b7893ccfSSadaf Ebrahimi     bool skip = false;
4499*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4500*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4501*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
4502*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4503*b7893ccfSSadaf Ebrahimi     }
4504*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4505*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4506*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
4507*b7893ccfSSadaf Ebrahimi     }
4508*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
4509*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4510*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4511*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported, result);
4512*b7893ccfSSadaf Ebrahimi     }
4513*b7893ccfSSadaf Ebrahimi     return result;
4514*b7893ccfSSadaf Ebrahimi }
4515*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,VkSurfaceCapabilitiesKHR * pSurfaceCapabilities)4516*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilitiesKHR(
4517*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4518*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
4519*b7893ccfSSadaf Ebrahimi     VkSurfaceCapabilitiesKHR*                   pSurfaceCapabilities) {
4520*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4521*b7893ccfSSadaf Ebrahimi     bool skip = false;
4522*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4523*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4524*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
4525*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4526*b7893ccfSSadaf Ebrahimi     }
4527*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4528*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4529*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
4530*b7893ccfSSadaf Ebrahimi     }
4531*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
4532*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4533*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4534*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities, result);
4535*b7893ccfSSadaf Ebrahimi     }
4536*b7893ccfSSadaf Ebrahimi     return result;
4537*b7893ccfSSadaf Ebrahimi }
4538*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,uint32_t * pSurfaceFormatCount,VkSurfaceFormatKHR * pSurfaceFormats)4539*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormatsKHR(
4540*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4541*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
4542*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pSurfaceFormatCount,
4543*b7893ccfSSadaf Ebrahimi     VkSurfaceFormatKHR*                         pSurfaceFormats) {
4544*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4545*b7893ccfSSadaf Ebrahimi     bool skip = false;
4546*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4547*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4548*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
4549*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4550*b7893ccfSSadaf Ebrahimi     }
4551*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4552*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4553*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
4554*b7893ccfSSadaf Ebrahimi     }
4555*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
4556*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4557*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4558*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats, result);
4559*b7893ccfSSadaf Ebrahimi     }
4560*b7893ccfSSadaf Ebrahimi     return result;
4561*b7893ccfSSadaf Ebrahimi }
4562*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,uint32_t * pPresentModeCount,VkPresentModeKHR * pPresentModes)4563*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModesKHR(
4564*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4565*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
4566*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPresentModeCount,
4567*b7893ccfSSadaf Ebrahimi     VkPresentModeKHR*                           pPresentModes) {
4568*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4569*b7893ccfSSadaf Ebrahimi     bool skip = false;
4570*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4571*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4572*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
4573*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4574*b7893ccfSSadaf Ebrahimi     }
4575*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4576*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4577*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
4578*b7893ccfSSadaf Ebrahimi     }
4579*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
4580*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4581*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4582*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes, result);
4583*b7893ccfSSadaf Ebrahimi     }
4584*b7893ccfSSadaf Ebrahimi     return result;
4585*b7893ccfSSadaf Ebrahimi }
4586*b7893ccfSSadaf Ebrahimi 
4587*b7893ccfSSadaf Ebrahimi 
CreateSwapchainKHR(VkDevice device,const VkSwapchainCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSwapchainKHR * pSwapchain)4588*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(
4589*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4590*b7893ccfSSadaf Ebrahimi     const VkSwapchainCreateInfoKHR*             pCreateInfo,
4591*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
4592*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR*                             pSwapchain) {
4593*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4594*b7893ccfSSadaf Ebrahimi     bool skip = false;
4595*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4596*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4597*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
4598*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4599*b7893ccfSSadaf Ebrahimi     }
4600*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4601*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4602*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
4603*b7893ccfSSadaf Ebrahimi     }
4604*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
4605*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4606*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4607*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain, result);
4608*b7893ccfSSadaf Ebrahimi     }
4609*b7893ccfSSadaf Ebrahimi     return result;
4610*b7893ccfSSadaf Ebrahimi }
4611*b7893ccfSSadaf Ebrahimi 
DestroySwapchainKHR(VkDevice device,VkSwapchainKHR swapchain,const VkAllocationCallbacks * pAllocator)4612*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroySwapchainKHR(
4613*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4614*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain,
4615*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
4616*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4617*b7893ccfSSadaf Ebrahimi     bool skip = false;
4618*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4619*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4620*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroySwapchainKHR(device, swapchain, pAllocator);
4621*b7893ccfSSadaf Ebrahimi         if (skip) return;
4622*b7893ccfSSadaf Ebrahimi     }
4623*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4624*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4625*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroySwapchainKHR(device, swapchain, pAllocator);
4626*b7893ccfSSadaf Ebrahimi     }
4627*b7893ccfSSadaf Ebrahimi     DispatchDestroySwapchainKHR(device, swapchain, pAllocator);
4628*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4629*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4630*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroySwapchainKHR(device, swapchain, pAllocator);
4631*b7893ccfSSadaf Ebrahimi     }
4632*b7893ccfSSadaf Ebrahimi }
4633*b7893ccfSSadaf Ebrahimi 
GetSwapchainImagesKHR(VkDevice device,VkSwapchainKHR swapchain,uint32_t * pSwapchainImageCount,VkImage * pSwapchainImages)4634*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainImagesKHR(
4635*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4636*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain,
4637*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pSwapchainImageCount,
4638*b7893ccfSSadaf Ebrahimi     VkImage*                                    pSwapchainImages) {
4639*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4640*b7893ccfSSadaf Ebrahimi     bool skip = false;
4641*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4642*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4643*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
4644*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4645*b7893ccfSSadaf Ebrahimi     }
4646*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4647*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4648*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
4649*b7893ccfSSadaf Ebrahimi     }
4650*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
4651*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4652*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4653*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages, result);
4654*b7893ccfSSadaf Ebrahimi     }
4655*b7893ccfSSadaf Ebrahimi     return result;
4656*b7893ccfSSadaf Ebrahimi }
4657*b7893ccfSSadaf Ebrahimi 
AcquireNextImageKHR(VkDevice device,VkSwapchainKHR swapchain,uint64_t timeout,VkSemaphore semaphore,VkFence fence,uint32_t * pImageIndex)4658*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImageKHR(
4659*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4660*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain,
4661*b7893ccfSSadaf Ebrahimi     uint64_t                                    timeout,
4662*b7893ccfSSadaf Ebrahimi     VkSemaphore                                 semaphore,
4663*b7893ccfSSadaf Ebrahimi     VkFence                                     fence,
4664*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pImageIndex) {
4665*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4666*b7893ccfSSadaf Ebrahimi     bool skip = false;
4667*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4668*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4669*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateAcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
4670*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4671*b7893ccfSSadaf Ebrahimi     }
4672*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4673*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4674*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordAcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
4675*b7893ccfSSadaf Ebrahimi     }
4676*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchAcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
4677*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4678*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4679*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordAcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex, result);
4680*b7893ccfSSadaf Ebrahimi     }
4681*b7893ccfSSadaf Ebrahimi     return result;
4682*b7893ccfSSadaf Ebrahimi }
4683*b7893ccfSSadaf Ebrahimi 
QueuePresentKHR(VkQueue queue,const VkPresentInfoKHR * pPresentInfo)4684*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(
4685*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue,
4686*b7893ccfSSadaf Ebrahimi     const VkPresentInfoKHR*                     pPresentInfo) {
4687*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
4688*b7893ccfSSadaf Ebrahimi     bool skip = false;
4689*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4690*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4691*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateQueuePresentKHR(queue, pPresentInfo);
4692*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4693*b7893ccfSSadaf Ebrahimi     }
4694*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4695*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4696*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordQueuePresentKHR(queue, pPresentInfo);
4697*b7893ccfSSadaf Ebrahimi     }
4698*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchQueuePresentKHR(queue, pPresentInfo);
4699*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4700*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4701*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordQueuePresentKHR(queue, pPresentInfo, result);
4702*b7893ccfSSadaf Ebrahimi     }
4703*b7893ccfSSadaf Ebrahimi     return result;
4704*b7893ccfSSadaf Ebrahimi }
4705*b7893ccfSSadaf Ebrahimi 
GetDeviceGroupPresentCapabilitiesKHR(VkDevice device,VkDeviceGroupPresentCapabilitiesKHR * pDeviceGroupPresentCapabilities)4706*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupPresentCapabilitiesKHR(
4707*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4708*b7893ccfSSadaf Ebrahimi     VkDeviceGroupPresentCapabilitiesKHR*        pDeviceGroupPresentCapabilities) {
4709*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4710*b7893ccfSSadaf Ebrahimi     bool skip = false;
4711*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4712*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4713*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities);
4714*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4715*b7893ccfSSadaf Ebrahimi     }
4716*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4717*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4718*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities);
4719*b7893ccfSSadaf Ebrahimi     }
4720*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities);
4721*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4722*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4723*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities, result);
4724*b7893ccfSSadaf Ebrahimi     }
4725*b7893ccfSSadaf Ebrahimi     return result;
4726*b7893ccfSSadaf Ebrahimi }
4727*b7893ccfSSadaf Ebrahimi 
GetDeviceGroupSurfacePresentModesKHR(VkDevice device,VkSurfaceKHR surface,VkDeviceGroupPresentModeFlagsKHR * pModes)4728*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModesKHR(
4729*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4730*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
4731*b7893ccfSSadaf Ebrahimi     VkDeviceGroupPresentModeFlagsKHR*           pModes) {
4732*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4733*b7893ccfSSadaf Ebrahimi     bool skip = false;
4734*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4735*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4736*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
4737*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4738*b7893ccfSSadaf Ebrahimi     }
4739*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4740*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4741*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
4742*b7893ccfSSadaf Ebrahimi     }
4743*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
4744*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4745*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4746*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDeviceGroupSurfacePresentModesKHR(device, surface, pModes, result);
4747*b7893ccfSSadaf Ebrahimi     }
4748*b7893ccfSSadaf Ebrahimi     return result;
4749*b7893ccfSSadaf Ebrahimi }
4750*b7893ccfSSadaf Ebrahimi 
GetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,uint32_t * pRectCount,VkRect2D * pRects)4751*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDevicePresentRectanglesKHR(
4752*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4753*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
4754*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pRectCount,
4755*b7893ccfSSadaf Ebrahimi     VkRect2D*                                   pRects) {
4756*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4757*b7893ccfSSadaf Ebrahimi     bool skip = false;
4758*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4759*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4760*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects);
4761*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4762*b7893ccfSSadaf Ebrahimi     }
4763*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4764*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4765*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects);
4766*b7893ccfSSadaf Ebrahimi     }
4767*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects);
4768*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4769*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4770*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects, result);
4771*b7893ccfSSadaf Ebrahimi     }
4772*b7893ccfSSadaf Ebrahimi     return result;
4773*b7893ccfSSadaf Ebrahimi }
4774*b7893ccfSSadaf Ebrahimi 
AcquireNextImage2KHR(VkDevice device,const VkAcquireNextImageInfoKHR * pAcquireInfo,uint32_t * pImageIndex)4775*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL AcquireNextImage2KHR(
4776*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4777*b7893ccfSSadaf Ebrahimi     const VkAcquireNextImageInfoKHR*            pAcquireInfo,
4778*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pImageIndex) {
4779*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4780*b7893ccfSSadaf Ebrahimi     bool skip = false;
4781*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4782*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4783*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateAcquireNextImage2KHR(device, pAcquireInfo, pImageIndex);
4784*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4785*b7893ccfSSadaf Ebrahimi     }
4786*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4787*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4788*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordAcquireNextImage2KHR(device, pAcquireInfo, pImageIndex);
4789*b7893ccfSSadaf Ebrahimi     }
4790*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchAcquireNextImage2KHR(device, pAcquireInfo, pImageIndex);
4791*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4792*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4793*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordAcquireNextImage2KHR(device, pAcquireInfo, pImageIndex, result);
4794*b7893ccfSSadaf Ebrahimi     }
4795*b7893ccfSSadaf Ebrahimi     return result;
4796*b7893ccfSSadaf Ebrahimi }
4797*b7893ccfSSadaf Ebrahimi 
4798*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkDisplayPropertiesKHR * pProperties)4799*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPropertiesKHR(
4800*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4801*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
4802*b7893ccfSSadaf Ebrahimi     VkDisplayPropertiesKHR*                     pProperties) {
4803*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4804*b7893ccfSSadaf Ebrahimi     bool skip = false;
4805*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4806*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4807*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties);
4808*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4809*b7893ccfSSadaf Ebrahimi     }
4810*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4811*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4812*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties);
4813*b7893ccfSSadaf Ebrahimi     }
4814*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties);
4815*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4816*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4817*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties, result);
4818*b7893ccfSSadaf Ebrahimi     }
4819*b7893ccfSSadaf Ebrahimi     return result;
4820*b7893ccfSSadaf Ebrahimi }
4821*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkDisplayPlanePropertiesKHR * pProperties)4822*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlanePropertiesKHR(
4823*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4824*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
4825*b7893ccfSSadaf Ebrahimi     VkDisplayPlanePropertiesKHR*                pProperties) {
4826*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4827*b7893ccfSSadaf Ebrahimi     bool skip = false;
4828*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4829*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4830*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties);
4831*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4832*b7893ccfSSadaf Ebrahimi     }
4833*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4834*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4835*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties);
4836*b7893ccfSSadaf Ebrahimi     }
4837*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties);
4838*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4839*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4840*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties, result);
4841*b7893ccfSSadaf Ebrahimi     }
4842*b7893ccfSSadaf Ebrahimi     return result;
4843*b7893ccfSSadaf Ebrahimi }
4844*b7893ccfSSadaf Ebrahimi 
GetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice,uint32_t planeIndex,uint32_t * pDisplayCount,VkDisplayKHR * pDisplays)4845*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneSupportedDisplaysKHR(
4846*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4847*b7893ccfSSadaf Ebrahimi     uint32_t                                    planeIndex,
4848*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pDisplayCount,
4849*b7893ccfSSadaf Ebrahimi     VkDisplayKHR*                               pDisplays) {
4850*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4851*b7893ccfSSadaf Ebrahimi     bool skip = false;
4852*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4853*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4854*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays);
4855*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4856*b7893ccfSSadaf Ebrahimi     }
4857*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4858*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4859*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays);
4860*b7893ccfSSadaf Ebrahimi     }
4861*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays);
4862*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4863*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4864*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, pDisplayCount, pDisplays, result);
4865*b7893ccfSSadaf Ebrahimi     }
4866*b7893ccfSSadaf Ebrahimi     return result;
4867*b7893ccfSSadaf Ebrahimi }
4868*b7893ccfSSadaf Ebrahimi 
GetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice,VkDisplayKHR display,uint32_t * pPropertyCount,VkDisplayModePropertiesKHR * pProperties)4869*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModePropertiesKHR(
4870*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4871*b7893ccfSSadaf Ebrahimi     VkDisplayKHR                                display,
4872*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
4873*b7893ccfSSadaf Ebrahimi     VkDisplayModePropertiesKHR*                 pProperties) {
4874*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4875*b7893ccfSSadaf Ebrahimi     bool skip = false;
4876*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4877*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4878*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties);
4879*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4880*b7893ccfSSadaf Ebrahimi     }
4881*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4882*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4883*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties);
4884*b7893ccfSSadaf Ebrahimi     }
4885*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties);
4886*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4887*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4888*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties, result);
4889*b7893ccfSSadaf Ebrahimi     }
4890*b7893ccfSSadaf Ebrahimi     return result;
4891*b7893ccfSSadaf Ebrahimi }
4892*b7893ccfSSadaf Ebrahimi 
CreateDisplayModeKHR(VkPhysicalDevice physicalDevice,VkDisplayKHR display,const VkDisplayModeCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDisplayModeKHR * pMode)4893*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayModeKHR(
4894*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4895*b7893ccfSSadaf Ebrahimi     VkDisplayKHR                                display,
4896*b7893ccfSSadaf Ebrahimi     const VkDisplayModeCreateInfoKHR*           pCreateInfo,
4897*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
4898*b7893ccfSSadaf Ebrahimi     VkDisplayModeKHR*                           pMode) {
4899*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4900*b7893ccfSSadaf Ebrahimi     bool skip = false;
4901*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4902*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4903*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode);
4904*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4905*b7893ccfSSadaf Ebrahimi     }
4906*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4907*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4908*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode);
4909*b7893ccfSSadaf Ebrahimi     }
4910*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode);
4911*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4912*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4913*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode, result);
4914*b7893ccfSSadaf Ebrahimi     }
4915*b7893ccfSSadaf Ebrahimi     return result;
4916*b7893ccfSSadaf Ebrahimi }
4917*b7893ccfSSadaf Ebrahimi 
GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice,VkDisplayModeKHR mode,uint32_t planeIndex,VkDisplayPlaneCapabilitiesKHR * pCapabilities)4918*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilitiesKHR(
4919*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4920*b7893ccfSSadaf Ebrahimi     VkDisplayModeKHR                            mode,
4921*b7893ccfSSadaf Ebrahimi     uint32_t                                    planeIndex,
4922*b7893ccfSSadaf Ebrahimi     VkDisplayPlaneCapabilitiesKHR*              pCapabilities) {
4923*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4924*b7893ccfSSadaf Ebrahimi     bool skip = false;
4925*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4926*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4927*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities);
4928*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4929*b7893ccfSSadaf Ebrahimi     }
4930*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4931*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4932*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities);
4933*b7893ccfSSadaf Ebrahimi     }
4934*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities);
4935*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4936*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4937*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities, result);
4938*b7893ccfSSadaf Ebrahimi     }
4939*b7893ccfSSadaf Ebrahimi     return result;
4940*b7893ccfSSadaf Ebrahimi }
4941*b7893ccfSSadaf Ebrahimi 
CreateDisplayPlaneSurfaceKHR(VkInstance instance,const VkDisplaySurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)4942*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateDisplayPlaneSurfaceKHR(
4943*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
4944*b7893ccfSSadaf Ebrahimi     const VkDisplaySurfaceCreateInfoKHR*        pCreateInfo,
4945*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
4946*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface) {
4947*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
4948*b7893ccfSSadaf Ebrahimi     bool skip = false;
4949*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4950*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4951*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4952*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4953*b7893ccfSSadaf Ebrahimi     }
4954*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4955*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4956*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4957*b7893ccfSSadaf Ebrahimi     }
4958*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
4959*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4960*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4961*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface, result);
4962*b7893ccfSSadaf Ebrahimi     }
4963*b7893ccfSSadaf Ebrahimi     return result;
4964*b7893ccfSSadaf Ebrahimi }
4965*b7893ccfSSadaf Ebrahimi 
4966*b7893ccfSSadaf Ebrahimi 
CreateSharedSwapchainsKHR(VkDevice device,uint32_t swapchainCount,const VkSwapchainCreateInfoKHR * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkSwapchainKHR * pSwapchains)4967*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(
4968*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4969*b7893ccfSSadaf Ebrahimi     uint32_t                                    swapchainCount,
4970*b7893ccfSSadaf Ebrahimi     const VkSwapchainCreateInfoKHR*             pCreateInfos,
4971*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
4972*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR*                             pSwapchains) {
4973*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4974*b7893ccfSSadaf Ebrahimi     bool skip = false;
4975*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4976*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4977*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains);
4978*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
4979*b7893ccfSSadaf Ebrahimi     }
4980*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4981*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4982*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains);
4983*b7893ccfSSadaf Ebrahimi     }
4984*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains);
4985*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
4986*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
4987*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains, result);
4988*b7893ccfSSadaf Ebrahimi     }
4989*b7893ccfSSadaf Ebrahimi     return result;
4990*b7893ccfSSadaf Ebrahimi }
4991*b7893ccfSSadaf Ebrahimi 
4992*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_KHR
4993*b7893ccfSSadaf Ebrahimi 
CreateXlibSurfaceKHR(VkInstance instance,const VkXlibSurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)4994*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateXlibSurfaceKHR(
4995*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
4996*b7893ccfSSadaf Ebrahimi     const VkXlibSurfaceCreateInfoKHR*           pCreateInfo,
4997*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
4998*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface) {
4999*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5000*b7893ccfSSadaf Ebrahimi     bool skip = false;
5001*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5002*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5003*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5004*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5005*b7893ccfSSadaf Ebrahimi     }
5006*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5007*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5008*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5009*b7893ccfSSadaf Ebrahimi     }
5010*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5011*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5012*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5013*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface, result);
5014*b7893ccfSSadaf Ebrahimi     }
5015*b7893ccfSSadaf Ebrahimi     return result;
5016*b7893ccfSSadaf Ebrahimi }
5017*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex,Display * dpy,VisualID visualID)5018*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXlibPresentationSupportKHR(
5019*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5020*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueFamilyIndex,
5021*b7893ccfSSadaf Ebrahimi     Display*                                    dpy,
5022*b7893ccfSSadaf Ebrahimi     VisualID                                    visualID) {
5023*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5024*b7893ccfSSadaf Ebrahimi     bool skip = false;
5025*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5026*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5027*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID);
5028*b7893ccfSSadaf Ebrahimi         if (skip) return VK_FALSE;
5029*b7893ccfSSadaf Ebrahimi     }
5030*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5031*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5032*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID);
5033*b7893ccfSSadaf Ebrahimi     }
5034*b7893ccfSSadaf Ebrahimi     VkBool32 result = DispatchGetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID);
5035*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5036*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5037*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID);
5038*b7893ccfSSadaf Ebrahimi     }
5039*b7893ccfSSadaf Ebrahimi     return result;
5040*b7893ccfSSadaf Ebrahimi }
5041*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_XLIB_KHR
5042*b7893ccfSSadaf Ebrahimi 
5043*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XCB_KHR
5044*b7893ccfSSadaf Ebrahimi 
CreateXcbSurfaceKHR(VkInstance instance,const VkXcbSurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)5045*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateXcbSurfaceKHR(
5046*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
5047*b7893ccfSSadaf Ebrahimi     const VkXcbSurfaceCreateInfoKHR*            pCreateInfo,
5048*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5049*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface) {
5050*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5051*b7893ccfSSadaf Ebrahimi     bool skip = false;
5052*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5053*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5054*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5055*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5056*b7893ccfSSadaf Ebrahimi     }
5057*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5058*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5059*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5060*b7893ccfSSadaf Ebrahimi     }
5061*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5062*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5063*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5064*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface, result);
5065*b7893ccfSSadaf Ebrahimi     }
5066*b7893ccfSSadaf Ebrahimi     return result;
5067*b7893ccfSSadaf Ebrahimi }
5068*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex,xcb_connection_t * connection,xcb_visualid_t visual_id)5069*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXcbPresentationSupportKHR(
5070*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5071*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueFamilyIndex,
5072*b7893ccfSSadaf Ebrahimi     xcb_connection_t*                           connection,
5073*b7893ccfSSadaf Ebrahimi     xcb_visualid_t                              visual_id) {
5074*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5075*b7893ccfSSadaf Ebrahimi     bool skip = false;
5076*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5077*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5078*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id);
5079*b7893ccfSSadaf Ebrahimi         if (skip) return VK_FALSE;
5080*b7893ccfSSadaf Ebrahimi     }
5081*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5082*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5083*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id);
5084*b7893ccfSSadaf Ebrahimi     }
5085*b7893ccfSSadaf Ebrahimi     VkBool32 result = DispatchGetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id);
5086*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5087*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5088*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id);
5089*b7893ccfSSadaf Ebrahimi     }
5090*b7893ccfSSadaf Ebrahimi     return result;
5091*b7893ccfSSadaf Ebrahimi }
5092*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_XCB_KHR
5093*b7893ccfSSadaf Ebrahimi 
5094*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WAYLAND_KHR
5095*b7893ccfSSadaf Ebrahimi 
CreateWaylandSurfaceKHR(VkInstance instance,const VkWaylandSurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)5096*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateWaylandSurfaceKHR(
5097*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
5098*b7893ccfSSadaf Ebrahimi     const VkWaylandSurfaceCreateInfoKHR*        pCreateInfo,
5099*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5100*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface) {
5101*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5102*b7893ccfSSadaf Ebrahimi     bool skip = false;
5103*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5104*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5105*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5106*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5107*b7893ccfSSadaf Ebrahimi     }
5108*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5109*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5110*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5111*b7893ccfSSadaf Ebrahimi     }
5112*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5113*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5114*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5115*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface, result);
5116*b7893ccfSSadaf Ebrahimi     }
5117*b7893ccfSSadaf Ebrahimi     return result;
5118*b7893ccfSSadaf Ebrahimi }
5119*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex,struct wl_display * display)5120*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWaylandPresentationSupportKHR(
5121*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5122*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueFamilyIndex,
5123*b7893ccfSSadaf Ebrahimi     struct wl_display*                          display) {
5124*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5125*b7893ccfSSadaf Ebrahimi     bool skip = false;
5126*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5127*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5128*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display);
5129*b7893ccfSSadaf Ebrahimi         if (skip) return VK_FALSE;
5130*b7893ccfSSadaf Ebrahimi     }
5131*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5132*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5133*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display);
5134*b7893ccfSSadaf Ebrahimi     }
5135*b7893ccfSSadaf Ebrahimi     VkBool32 result = DispatchGetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display);
5136*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5137*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5138*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display);
5139*b7893ccfSSadaf Ebrahimi     }
5140*b7893ccfSSadaf Ebrahimi     return result;
5141*b7893ccfSSadaf Ebrahimi }
5142*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WAYLAND_KHR
5143*b7893ccfSSadaf Ebrahimi 
5144*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_ANDROID_KHR
5145*b7893ccfSSadaf Ebrahimi 
CreateAndroidSurfaceKHR(VkInstance instance,const VkAndroidSurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)5146*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateAndroidSurfaceKHR(
5147*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
5148*b7893ccfSSadaf Ebrahimi     const VkAndroidSurfaceCreateInfoKHR*        pCreateInfo,
5149*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5150*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface) {
5151*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5152*b7893ccfSSadaf Ebrahimi     bool skip = false;
5153*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5154*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5155*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5156*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5157*b7893ccfSSadaf Ebrahimi     }
5158*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5159*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5160*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5161*b7893ccfSSadaf Ebrahimi     }
5162*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5163*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5164*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5165*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface, result);
5166*b7893ccfSSadaf Ebrahimi     }
5167*b7893ccfSSadaf Ebrahimi     return result;
5168*b7893ccfSSadaf Ebrahimi }
5169*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_ANDROID_KHR
5170*b7893ccfSSadaf Ebrahimi 
5171*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
5172*b7893ccfSSadaf Ebrahimi 
CreateWin32SurfaceKHR(VkInstance instance,const VkWin32SurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)5173*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateWin32SurfaceKHR(
5174*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
5175*b7893ccfSSadaf Ebrahimi     const VkWin32SurfaceCreateInfoKHR*          pCreateInfo,
5176*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5177*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface) {
5178*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5179*b7893ccfSSadaf Ebrahimi     bool skip = false;
5180*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5181*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5182*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5183*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5184*b7893ccfSSadaf Ebrahimi     }
5185*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5186*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5187*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5188*b7893ccfSSadaf Ebrahimi     }
5189*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
5190*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5191*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5192*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface, result);
5193*b7893ccfSSadaf Ebrahimi     }
5194*b7893ccfSSadaf Ebrahimi     return result;
5195*b7893ccfSSadaf Ebrahimi }
5196*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex)5197*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWin32PresentationSupportKHR(
5198*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5199*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueFamilyIndex) {
5200*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5201*b7893ccfSSadaf Ebrahimi     bool skip = false;
5202*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5203*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5204*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex);
5205*b7893ccfSSadaf Ebrahimi         if (skip) return VK_FALSE;
5206*b7893ccfSSadaf Ebrahimi     }
5207*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5208*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5209*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex);
5210*b7893ccfSSadaf Ebrahimi     }
5211*b7893ccfSSadaf Ebrahimi     VkBool32 result = DispatchGetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex);
5212*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5213*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5214*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex);
5215*b7893ccfSSadaf Ebrahimi     }
5216*b7893ccfSSadaf Ebrahimi     return result;
5217*b7893ccfSSadaf Ebrahimi }
5218*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
5219*b7893ccfSSadaf Ebrahimi 
5220*b7893ccfSSadaf Ebrahimi 
5221*b7893ccfSSadaf Ebrahimi 
5222*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceFeatures2KHR(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures2 * pFeatures)5223*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures2KHR(
5224*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5225*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceFeatures2*                  pFeatures) {
5226*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5227*b7893ccfSSadaf Ebrahimi     bool skip = false;
5228*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5229*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5230*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
5231*b7893ccfSSadaf Ebrahimi         if (skip) return;
5232*b7893ccfSSadaf Ebrahimi     }
5233*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5234*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5235*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
5236*b7893ccfSSadaf Ebrahimi     }
5237*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
5238*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5239*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5240*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
5241*b7893ccfSSadaf Ebrahimi     }
5242*b7893ccfSSadaf Ebrahimi }
5243*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceProperties2KHR(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties2 * pProperties)5244*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2KHR(
5245*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5246*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceProperties2*                pProperties) {
5247*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5248*b7893ccfSSadaf Ebrahimi     bool skip = false;
5249*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5250*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5251*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
5252*b7893ccfSSadaf Ebrahimi         if (skip) return;
5253*b7893ccfSSadaf Ebrahimi     }
5254*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5255*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5256*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
5257*b7893ccfSSadaf Ebrahimi     }
5258*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
5259*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5260*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5261*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
5262*b7893ccfSSadaf Ebrahimi     }
5263*b7893ccfSSadaf Ebrahimi }
5264*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceFormatProperties2KHR(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties2 * pFormatProperties)5265*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2KHR(
5266*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5267*b7893ccfSSadaf Ebrahimi     VkFormat                                    format,
5268*b7893ccfSSadaf Ebrahimi     VkFormatProperties2*                        pFormatProperties) {
5269*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5270*b7893ccfSSadaf Ebrahimi     bool skip = false;
5271*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5272*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5273*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
5274*b7893ccfSSadaf Ebrahimi         if (skip) return;
5275*b7893ccfSSadaf Ebrahimi     }
5276*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5277*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5278*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
5279*b7893ccfSSadaf Ebrahimi     }
5280*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
5281*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5282*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5283*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
5284*b7893ccfSSadaf Ebrahimi     }
5285*b7893ccfSSadaf Ebrahimi }
5286*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceImageFormatProperties2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo,VkImageFormatProperties2 * pImageFormatProperties)5287*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties2KHR(
5288*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5289*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
5290*b7893ccfSSadaf Ebrahimi     VkImageFormatProperties2*                   pImageFormatProperties) {
5291*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5292*b7893ccfSSadaf Ebrahimi     bool skip = false;
5293*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5294*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5295*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties);
5296*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5297*b7893ccfSSadaf Ebrahimi     }
5298*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5299*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5300*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties);
5301*b7893ccfSSadaf Ebrahimi     }
5302*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties);
5303*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5304*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5305*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties, result);
5306*b7893ccfSSadaf Ebrahimi     }
5307*b7893ccfSSadaf Ebrahimi     return result;
5308*b7893ccfSSadaf Ebrahimi }
5309*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceQueueFamilyProperties2KHR(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties2 * pQueueFamilyProperties)5310*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties2KHR(
5311*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5312*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pQueueFamilyPropertyCount,
5313*b7893ccfSSadaf Ebrahimi     VkQueueFamilyProperties2*                   pQueueFamilyProperties) {
5314*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5315*b7893ccfSSadaf Ebrahimi     bool skip = false;
5316*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5317*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5318*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
5319*b7893ccfSSadaf Ebrahimi         if (skip) return;
5320*b7893ccfSSadaf Ebrahimi     }
5321*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5322*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5323*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
5324*b7893ccfSSadaf Ebrahimi     }
5325*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
5326*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5327*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5328*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
5329*b7893ccfSSadaf Ebrahimi     }
5330*b7893ccfSSadaf Ebrahimi }
5331*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceMemoryProperties2KHR(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties2 * pMemoryProperties)5332*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties2KHR(
5333*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5334*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceMemoryProperties2*          pMemoryProperties) {
5335*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5336*b7893ccfSSadaf Ebrahimi     bool skip = false;
5337*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5338*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5339*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
5340*b7893ccfSSadaf Ebrahimi         if (skip) return;
5341*b7893ccfSSadaf Ebrahimi     }
5342*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5343*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5344*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
5345*b7893ccfSSadaf Ebrahimi     }
5346*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
5347*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5348*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5349*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
5350*b7893ccfSSadaf Ebrahimi     }
5351*b7893ccfSSadaf Ebrahimi }
5352*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceSparseImageFormatProperties2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo,uint32_t * pPropertyCount,VkSparseImageFormatProperties2 * pProperties)5353*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties2KHR(
5354*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5355*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
5356*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
5357*b7893ccfSSadaf Ebrahimi     VkSparseImageFormatProperties2*             pProperties) {
5358*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5359*b7893ccfSSadaf Ebrahimi     bool skip = false;
5360*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5361*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5362*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
5363*b7893ccfSSadaf Ebrahimi         if (skip) return;
5364*b7893ccfSSadaf Ebrahimi     }
5365*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5366*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5367*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
5368*b7893ccfSSadaf Ebrahimi     }
5369*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
5370*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5371*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5372*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
5373*b7893ccfSSadaf Ebrahimi     }
5374*b7893ccfSSadaf Ebrahimi }
5375*b7893ccfSSadaf Ebrahimi 
5376*b7893ccfSSadaf Ebrahimi 
GetDeviceGroupPeerMemoryFeaturesKHR(VkDevice device,uint32_t heapIndex,uint32_t localDeviceIndex,uint32_t remoteDeviceIndex,VkPeerMemoryFeatureFlags * pPeerMemoryFeatures)5377*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetDeviceGroupPeerMemoryFeaturesKHR(
5378*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5379*b7893ccfSSadaf Ebrahimi     uint32_t                                    heapIndex,
5380*b7893ccfSSadaf Ebrahimi     uint32_t                                    localDeviceIndex,
5381*b7893ccfSSadaf Ebrahimi     uint32_t                                    remoteDeviceIndex,
5382*b7893ccfSSadaf Ebrahimi     VkPeerMemoryFeatureFlags*                   pPeerMemoryFeatures) {
5383*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5384*b7893ccfSSadaf Ebrahimi     bool skip = false;
5385*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5386*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5387*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDeviceGroupPeerMemoryFeaturesKHR(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
5388*b7893ccfSSadaf Ebrahimi         if (skip) return;
5389*b7893ccfSSadaf Ebrahimi     }
5390*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5391*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5392*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDeviceGroupPeerMemoryFeaturesKHR(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
5393*b7893ccfSSadaf Ebrahimi     }
5394*b7893ccfSSadaf Ebrahimi     DispatchGetDeviceGroupPeerMemoryFeaturesKHR(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
5395*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5396*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5397*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDeviceGroupPeerMemoryFeaturesKHR(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
5398*b7893ccfSSadaf Ebrahimi     }
5399*b7893ccfSSadaf Ebrahimi }
5400*b7893ccfSSadaf Ebrahimi 
CmdSetDeviceMaskKHR(VkCommandBuffer commandBuffer,uint32_t deviceMask)5401*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetDeviceMaskKHR(
5402*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5403*b7893ccfSSadaf Ebrahimi     uint32_t                                    deviceMask) {
5404*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5405*b7893ccfSSadaf Ebrahimi     bool skip = false;
5406*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5407*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5408*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetDeviceMaskKHR(commandBuffer, deviceMask);
5409*b7893ccfSSadaf Ebrahimi         if (skip) return;
5410*b7893ccfSSadaf Ebrahimi     }
5411*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5412*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5413*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetDeviceMaskKHR(commandBuffer, deviceMask);
5414*b7893ccfSSadaf Ebrahimi     }
5415*b7893ccfSSadaf Ebrahimi     DispatchCmdSetDeviceMaskKHR(commandBuffer, deviceMask);
5416*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5417*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5418*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetDeviceMaskKHR(commandBuffer, deviceMask);
5419*b7893ccfSSadaf Ebrahimi     }
5420*b7893ccfSSadaf Ebrahimi }
5421*b7893ccfSSadaf Ebrahimi 
CmdDispatchBaseKHR(VkCommandBuffer commandBuffer,uint32_t baseGroupX,uint32_t baseGroupY,uint32_t baseGroupZ,uint32_t groupCountX,uint32_t groupCountY,uint32_t groupCountZ)5422*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDispatchBaseKHR(
5423*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5424*b7893ccfSSadaf Ebrahimi     uint32_t                                    baseGroupX,
5425*b7893ccfSSadaf Ebrahimi     uint32_t                                    baseGroupY,
5426*b7893ccfSSadaf Ebrahimi     uint32_t                                    baseGroupZ,
5427*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountX,
5428*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountY,
5429*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountZ) {
5430*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5431*b7893ccfSSadaf Ebrahimi     bool skip = false;
5432*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5433*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5434*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
5435*b7893ccfSSadaf Ebrahimi         if (skip) return;
5436*b7893ccfSSadaf Ebrahimi     }
5437*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5438*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5439*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
5440*b7893ccfSSadaf Ebrahimi     }
5441*b7893ccfSSadaf Ebrahimi     DispatchCmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
5442*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5443*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5444*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
5445*b7893ccfSSadaf Ebrahimi     }
5446*b7893ccfSSadaf Ebrahimi }
5447*b7893ccfSSadaf Ebrahimi 
5448*b7893ccfSSadaf Ebrahimi 
5449*b7893ccfSSadaf Ebrahimi 
TrimCommandPoolKHR(VkDevice device,VkCommandPool commandPool,VkCommandPoolTrimFlags flags)5450*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL TrimCommandPoolKHR(
5451*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5452*b7893ccfSSadaf Ebrahimi     VkCommandPool                               commandPool,
5453*b7893ccfSSadaf Ebrahimi     VkCommandPoolTrimFlags                      flags) {
5454*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5455*b7893ccfSSadaf Ebrahimi     bool skip = false;
5456*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5457*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5458*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateTrimCommandPoolKHR(device, commandPool, flags);
5459*b7893ccfSSadaf Ebrahimi         if (skip) return;
5460*b7893ccfSSadaf Ebrahimi     }
5461*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5462*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5463*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordTrimCommandPoolKHR(device, commandPool, flags);
5464*b7893ccfSSadaf Ebrahimi     }
5465*b7893ccfSSadaf Ebrahimi     DispatchTrimCommandPoolKHR(device, commandPool, flags);
5466*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5467*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5468*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordTrimCommandPoolKHR(device, commandPool, flags);
5469*b7893ccfSSadaf Ebrahimi     }
5470*b7893ccfSSadaf Ebrahimi }
5471*b7893ccfSSadaf Ebrahimi 
5472*b7893ccfSSadaf Ebrahimi 
EnumeratePhysicalDeviceGroupsKHR(VkInstance instance,uint32_t * pPhysicalDeviceGroupCount,VkPhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties)5473*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDeviceGroupsKHR(
5474*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
5475*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPhysicalDeviceGroupCount,
5476*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceGroupProperties*            pPhysicalDeviceGroupProperties) {
5477*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5478*b7893ccfSSadaf Ebrahimi     bool skip = false;
5479*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5480*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5481*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateEnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
5482*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5483*b7893ccfSSadaf Ebrahimi     }
5484*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5485*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5486*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordEnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
5487*b7893ccfSSadaf Ebrahimi     }
5488*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchEnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
5489*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5490*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5491*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordEnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties, result);
5492*b7893ccfSSadaf Ebrahimi     }
5493*b7893ccfSSadaf Ebrahimi     return result;
5494*b7893ccfSSadaf Ebrahimi }
5495*b7893ccfSSadaf Ebrahimi 
5496*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceExternalBufferPropertiesKHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo,VkExternalBufferProperties * pExternalBufferProperties)5497*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferPropertiesKHR(
5498*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5499*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceExternalBufferInfo*   pExternalBufferInfo,
5500*b7893ccfSSadaf Ebrahimi     VkExternalBufferProperties*                 pExternalBufferProperties) {
5501*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5502*b7893ccfSSadaf Ebrahimi     bool skip = false;
5503*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5504*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5505*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceExternalBufferPropertiesKHR(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
5506*b7893ccfSSadaf Ebrahimi         if (skip) return;
5507*b7893ccfSSadaf Ebrahimi     }
5508*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5509*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5510*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceExternalBufferPropertiesKHR(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
5511*b7893ccfSSadaf Ebrahimi     }
5512*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceExternalBufferPropertiesKHR(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
5513*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5514*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5515*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceExternalBufferPropertiesKHR(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
5516*b7893ccfSSadaf Ebrahimi     }
5517*b7893ccfSSadaf Ebrahimi }
5518*b7893ccfSSadaf Ebrahimi 
5519*b7893ccfSSadaf Ebrahimi 
5520*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
5521*b7893ccfSSadaf Ebrahimi 
GetMemoryWin32HandleKHR(VkDevice device,const VkMemoryGetWin32HandleInfoKHR * pGetWin32HandleInfo,HANDLE * pHandle)5522*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleKHR(
5523*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5524*b7893ccfSSadaf Ebrahimi     const VkMemoryGetWin32HandleInfoKHR*        pGetWin32HandleInfo,
5525*b7893ccfSSadaf Ebrahimi     HANDLE*                                     pHandle) {
5526*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5527*b7893ccfSSadaf Ebrahimi     bool skip = false;
5528*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5529*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5530*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetMemoryWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5531*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5532*b7893ccfSSadaf Ebrahimi     }
5533*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5534*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5535*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetMemoryWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5536*b7893ccfSSadaf Ebrahimi     }
5537*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetMemoryWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5538*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5539*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5540*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetMemoryWin32HandleKHR(device, pGetWin32HandleInfo, pHandle, result);
5541*b7893ccfSSadaf Ebrahimi     }
5542*b7893ccfSSadaf Ebrahimi     return result;
5543*b7893ccfSSadaf Ebrahimi }
5544*b7893ccfSSadaf Ebrahimi 
GetMemoryWin32HandlePropertiesKHR(VkDevice device,VkExternalMemoryHandleTypeFlagBits handleType,HANDLE handle,VkMemoryWin32HandlePropertiesKHR * pMemoryWin32HandleProperties)5545*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandlePropertiesKHR(
5546*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5547*b7893ccfSSadaf Ebrahimi     VkExternalMemoryHandleTypeFlagBits          handleType,
5548*b7893ccfSSadaf Ebrahimi     HANDLE                                      handle,
5549*b7893ccfSSadaf Ebrahimi     VkMemoryWin32HandlePropertiesKHR*           pMemoryWin32HandleProperties) {
5550*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5551*b7893ccfSSadaf Ebrahimi     bool skip = false;
5552*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5553*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5554*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetMemoryWin32HandlePropertiesKHR(device, handleType, handle, pMemoryWin32HandleProperties);
5555*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5556*b7893ccfSSadaf Ebrahimi     }
5557*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5558*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5559*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetMemoryWin32HandlePropertiesKHR(device, handleType, handle, pMemoryWin32HandleProperties);
5560*b7893ccfSSadaf Ebrahimi     }
5561*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetMemoryWin32HandlePropertiesKHR(device, handleType, handle, pMemoryWin32HandleProperties);
5562*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5563*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5564*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetMemoryWin32HandlePropertiesKHR(device, handleType, handle, pMemoryWin32HandleProperties, result);
5565*b7893ccfSSadaf Ebrahimi     }
5566*b7893ccfSSadaf Ebrahimi     return result;
5567*b7893ccfSSadaf Ebrahimi }
5568*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
5569*b7893ccfSSadaf Ebrahimi 
5570*b7893ccfSSadaf Ebrahimi 
GetMemoryFdKHR(VkDevice device,const VkMemoryGetFdInfoKHR * pGetFdInfo,int * pFd)5571*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdKHR(
5572*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5573*b7893ccfSSadaf Ebrahimi     const VkMemoryGetFdInfoKHR*                 pGetFdInfo,
5574*b7893ccfSSadaf Ebrahimi     int*                                        pFd) {
5575*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5576*b7893ccfSSadaf Ebrahimi     bool skip = false;
5577*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5578*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5579*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetMemoryFdKHR(device, pGetFdInfo, pFd);
5580*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5581*b7893ccfSSadaf Ebrahimi     }
5582*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5583*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5584*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetMemoryFdKHR(device, pGetFdInfo, pFd);
5585*b7893ccfSSadaf Ebrahimi     }
5586*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetMemoryFdKHR(device, pGetFdInfo, pFd);
5587*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5588*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5589*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetMemoryFdKHR(device, pGetFdInfo, pFd, result);
5590*b7893ccfSSadaf Ebrahimi     }
5591*b7893ccfSSadaf Ebrahimi     return result;
5592*b7893ccfSSadaf Ebrahimi }
5593*b7893ccfSSadaf Ebrahimi 
GetMemoryFdPropertiesKHR(VkDevice device,VkExternalMemoryHandleTypeFlagBits handleType,int fd,VkMemoryFdPropertiesKHR * pMemoryFdProperties)5594*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetMemoryFdPropertiesKHR(
5595*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5596*b7893ccfSSadaf Ebrahimi     VkExternalMemoryHandleTypeFlagBits          handleType,
5597*b7893ccfSSadaf Ebrahimi     int                                         fd,
5598*b7893ccfSSadaf Ebrahimi     VkMemoryFdPropertiesKHR*                    pMemoryFdProperties) {
5599*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5600*b7893ccfSSadaf Ebrahimi     bool skip = false;
5601*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5602*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5603*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties);
5604*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5605*b7893ccfSSadaf Ebrahimi     }
5606*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5607*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5608*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties);
5609*b7893ccfSSadaf Ebrahimi     }
5610*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties);
5611*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5612*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5613*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties, result);
5614*b7893ccfSSadaf Ebrahimi     }
5615*b7893ccfSSadaf Ebrahimi     return result;
5616*b7893ccfSSadaf Ebrahimi }
5617*b7893ccfSSadaf Ebrahimi 
5618*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
5619*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
5620*b7893ccfSSadaf Ebrahimi 
5621*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceExternalSemaphorePropertiesKHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo,VkExternalSemaphoreProperties * pExternalSemaphoreProperties)5622*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphorePropertiesKHR(
5623*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5624*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
5625*b7893ccfSSadaf Ebrahimi     VkExternalSemaphoreProperties*              pExternalSemaphoreProperties) {
5626*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5627*b7893ccfSSadaf Ebrahimi     bool skip = false;
5628*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5629*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5630*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceExternalSemaphorePropertiesKHR(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
5631*b7893ccfSSadaf Ebrahimi         if (skip) return;
5632*b7893ccfSSadaf Ebrahimi     }
5633*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5634*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5635*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceExternalSemaphorePropertiesKHR(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
5636*b7893ccfSSadaf Ebrahimi     }
5637*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceExternalSemaphorePropertiesKHR(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
5638*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5639*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5640*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceExternalSemaphorePropertiesKHR(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
5641*b7893ccfSSadaf Ebrahimi     }
5642*b7893ccfSSadaf Ebrahimi }
5643*b7893ccfSSadaf Ebrahimi 
5644*b7893ccfSSadaf Ebrahimi 
5645*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
5646*b7893ccfSSadaf Ebrahimi 
ImportSemaphoreWin32HandleKHR(VkDevice device,const VkImportSemaphoreWin32HandleInfoKHR * pImportSemaphoreWin32HandleInfo)5647*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreWin32HandleKHR(
5648*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5649*b7893ccfSSadaf Ebrahimi     const VkImportSemaphoreWin32HandleInfoKHR*  pImportSemaphoreWin32HandleInfo) {
5650*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5651*b7893ccfSSadaf Ebrahimi     bool skip = false;
5652*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5653*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5654*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateImportSemaphoreWin32HandleKHR(device, pImportSemaphoreWin32HandleInfo);
5655*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5656*b7893ccfSSadaf Ebrahimi     }
5657*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5658*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5659*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordImportSemaphoreWin32HandleKHR(device, pImportSemaphoreWin32HandleInfo);
5660*b7893ccfSSadaf Ebrahimi     }
5661*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchImportSemaphoreWin32HandleKHR(device, pImportSemaphoreWin32HandleInfo);
5662*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5663*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5664*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordImportSemaphoreWin32HandleKHR(device, pImportSemaphoreWin32HandleInfo, result);
5665*b7893ccfSSadaf Ebrahimi     }
5666*b7893ccfSSadaf Ebrahimi     return result;
5667*b7893ccfSSadaf Ebrahimi }
5668*b7893ccfSSadaf Ebrahimi 
GetSemaphoreWin32HandleKHR(VkDevice device,const VkSemaphoreGetWin32HandleInfoKHR * pGetWin32HandleInfo,HANDLE * pHandle)5669*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreWin32HandleKHR(
5670*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5671*b7893ccfSSadaf Ebrahimi     const VkSemaphoreGetWin32HandleInfoKHR*     pGetWin32HandleInfo,
5672*b7893ccfSSadaf Ebrahimi     HANDLE*                                     pHandle) {
5673*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5674*b7893ccfSSadaf Ebrahimi     bool skip = false;
5675*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5676*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5677*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetSemaphoreWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5678*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5679*b7893ccfSSadaf Ebrahimi     }
5680*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5681*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5682*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetSemaphoreWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5683*b7893ccfSSadaf Ebrahimi     }
5684*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetSemaphoreWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
5685*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5686*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5687*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetSemaphoreWin32HandleKHR(device, pGetWin32HandleInfo, pHandle, result);
5688*b7893ccfSSadaf Ebrahimi     }
5689*b7893ccfSSadaf Ebrahimi     return result;
5690*b7893ccfSSadaf Ebrahimi }
5691*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
5692*b7893ccfSSadaf Ebrahimi 
5693*b7893ccfSSadaf Ebrahimi 
ImportSemaphoreFdKHR(VkDevice device,const VkImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo)5694*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL ImportSemaphoreFdKHR(
5695*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5696*b7893ccfSSadaf Ebrahimi     const VkImportSemaphoreFdInfoKHR*           pImportSemaphoreFdInfo) {
5697*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5698*b7893ccfSSadaf Ebrahimi     bool skip = false;
5699*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5700*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5701*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo);
5702*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5703*b7893ccfSSadaf Ebrahimi     }
5704*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5705*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5706*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo);
5707*b7893ccfSSadaf Ebrahimi     }
5708*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo);
5709*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5710*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5711*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo, result);
5712*b7893ccfSSadaf Ebrahimi     }
5713*b7893ccfSSadaf Ebrahimi     return result;
5714*b7893ccfSSadaf Ebrahimi }
5715*b7893ccfSSadaf Ebrahimi 
GetSemaphoreFdKHR(VkDevice device,const VkSemaphoreGetFdInfoKHR * pGetFdInfo,int * pFd)5716*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetSemaphoreFdKHR(
5717*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5718*b7893ccfSSadaf Ebrahimi     const VkSemaphoreGetFdInfoKHR*              pGetFdInfo,
5719*b7893ccfSSadaf Ebrahimi     int*                                        pFd) {
5720*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5721*b7893ccfSSadaf Ebrahimi     bool skip = false;
5722*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5723*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5724*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetSemaphoreFdKHR(device, pGetFdInfo, pFd);
5725*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5726*b7893ccfSSadaf Ebrahimi     }
5727*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5728*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5729*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetSemaphoreFdKHR(device, pGetFdInfo, pFd);
5730*b7893ccfSSadaf Ebrahimi     }
5731*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetSemaphoreFdKHR(device, pGetFdInfo, pFd);
5732*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5733*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5734*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetSemaphoreFdKHR(device, pGetFdInfo, pFd, result);
5735*b7893ccfSSadaf Ebrahimi     }
5736*b7893ccfSSadaf Ebrahimi     return result;
5737*b7893ccfSSadaf Ebrahimi }
5738*b7893ccfSSadaf Ebrahimi 
5739*b7893ccfSSadaf Ebrahimi 
CmdPushDescriptorSetKHR(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipelineLayout layout,uint32_t set,uint32_t descriptorWriteCount,const VkWriteDescriptorSet * pDescriptorWrites)5740*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetKHR(
5741*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5742*b7893ccfSSadaf Ebrahimi     VkPipelineBindPoint                         pipelineBindPoint,
5743*b7893ccfSSadaf Ebrahimi     VkPipelineLayout                            layout,
5744*b7893ccfSSadaf Ebrahimi     uint32_t                                    set,
5745*b7893ccfSSadaf Ebrahimi     uint32_t                                    descriptorWriteCount,
5746*b7893ccfSSadaf Ebrahimi     const VkWriteDescriptorSet*                 pDescriptorWrites) {
5747*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5748*b7893ccfSSadaf Ebrahimi     bool skip = false;
5749*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5750*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5751*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
5752*b7893ccfSSadaf Ebrahimi         if (skip) return;
5753*b7893ccfSSadaf Ebrahimi     }
5754*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5755*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5756*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
5757*b7893ccfSSadaf Ebrahimi     }
5758*b7893ccfSSadaf Ebrahimi     DispatchCmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
5759*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5760*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5761*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
5762*b7893ccfSSadaf Ebrahimi     }
5763*b7893ccfSSadaf Ebrahimi }
5764*b7893ccfSSadaf Ebrahimi 
CmdPushDescriptorSetWithTemplateKHR(VkCommandBuffer commandBuffer,VkDescriptorUpdateTemplate descriptorUpdateTemplate,VkPipelineLayout layout,uint32_t set,const void * pData)5765*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdPushDescriptorSetWithTemplateKHR(
5766*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5767*b7893ccfSSadaf Ebrahimi     VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
5768*b7893ccfSSadaf Ebrahimi     VkPipelineLayout                            layout,
5769*b7893ccfSSadaf Ebrahimi     uint32_t                                    set,
5770*b7893ccfSSadaf Ebrahimi     const void*                                 pData) {
5771*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5772*b7893ccfSSadaf Ebrahimi     bool skip = false;
5773*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5774*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5775*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, pData);
5776*b7893ccfSSadaf Ebrahimi         if (skip) return;
5777*b7893ccfSSadaf Ebrahimi     }
5778*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5779*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5780*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, pData);
5781*b7893ccfSSadaf Ebrahimi     }
5782*b7893ccfSSadaf Ebrahimi     DispatchCmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, pData);
5783*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5784*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5785*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set, pData);
5786*b7893ccfSSadaf Ebrahimi     }
5787*b7893ccfSSadaf Ebrahimi }
5788*b7893ccfSSadaf Ebrahimi 
5789*b7893ccfSSadaf Ebrahimi 
5790*b7893ccfSSadaf Ebrahimi 
5791*b7893ccfSSadaf Ebrahimi 
5792*b7893ccfSSadaf Ebrahimi 
CreateDescriptorUpdateTemplateKHR(VkDevice device,const VkDescriptorUpdateTemplateCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorUpdateTemplate * pDescriptorUpdateTemplate)5793*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorUpdateTemplateKHR(
5794*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5795*b7893ccfSSadaf Ebrahimi     const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
5796*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5797*b7893ccfSSadaf Ebrahimi     VkDescriptorUpdateTemplate*                 pDescriptorUpdateTemplate) {
5798*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5799*b7893ccfSSadaf Ebrahimi     bool skip = false;
5800*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5801*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5802*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateDescriptorUpdateTemplateKHR(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
5803*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5804*b7893ccfSSadaf Ebrahimi     }
5805*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5806*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5807*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateDescriptorUpdateTemplateKHR(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
5808*b7893ccfSSadaf Ebrahimi     }
5809*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateDescriptorUpdateTemplateKHR(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
5810*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5811*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5812*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateDescriptorUpdateTemplateKHR(device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate, result);
5813*b7893ccfSSadaf Ebrahimi     }
5814*b7893ccfSSadaf Ebrahimi     return result;
5815*b7893ccfSSadaf Ebrahimi }
5816*b7893ccfSSadaf Ebrahimi 
DestroyDescriptorUpdateTemplateKHR(VkDevice device,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const VkAllocationCallbacks * pAllocator)5817*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyDescriptorUpdateTemplateKHR(
5818*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5819*b7893ccfSSadaf Ebrahimi     VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
5820*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
5821*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5822*b7893ccfSSadaf Ebrahimi     bool skip = false;
5823*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5824*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5825*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator);
5826*b7893ccfSSadaf Ebrahimi         if (skip) return;
5827*b7893ccfSSadaf Ebrahimi     }
5828*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5829*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5830*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator);
5831*b7893ccfSSadaf Ebrahimi     }
5832*b7893ccfSSadaf Ebrahimi     DispatchDestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator);
5833*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5834*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5835*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator);
5836*b7893ccfSSadaf Ebrahimi     }
5837*b7893ccfSSadaf Ebrahimi }
5838*b7893ccfSSadaf Ebrahimi 
UpdateDescriptorSetWithTemplateKHR(VkDevice device,VkDescriptorSet descriptorSet,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const void * pData)5839*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL UpdateDescriptorSetWithTemplateKHR(
5840*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5841*b7893ccfSSadaf Ebrahimi     VkDescriptorSet                             descriptorSet,
5842*b7893ccfSSadaf Ebrahimi     VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
5843*b7893ccfSSadaf Ebrahimi     const void*                                 pData) {
5844*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5845*b7893ccfSSadaf Ebrahimi     bool skip = false;
5846*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5847*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5848*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateUpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, pData);
5849*b7893ccfSSadaf Ebrahimi         if (skip) return;
5850*b7893ccfSSadaf Ebrahimi     }
5851*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5852*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5853*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordUpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, pData);
5854*b7893ccfSSadaf Ebrahimi     }
5855*b7893ccfSSadaf Ebrahimi     DispatchUpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, pData);
5856*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5857*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5858*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordUpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, pData);
5859*b7893ccfSSadaf Ebrahimi     }
5860*b7893ccfSSadaf Ebrahimi }
5861*b7893ccfSSadaf Ebrahimi 
5862*b7893ccfSSadaf Ebrahimi 
5863*b7893ccfSSadaf Ebrahimi 
CreateRenderPass2KHR(VkDevice device,const VkRenderPassCreateInfo2KHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkRenderPass * pRenderPass)5864*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass2KHR(
5865*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5866*b7893ccfSSadaf Ebrahimi     const VkRenderPassCreateInfo2KHR*           pCreateInfo,
5867*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5868*b7893ccfSSadaf Ebrahimi     VkRenderPass*                               pRenderPass) {
5869*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5870*b7893ccfSSadaf Ebrahimi     bool skip = false;
5871*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5872*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5873*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass);
5874*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5875*b7893ccfSSadaf Ebrahimi     }
5876*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5877*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5878*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass);
5879*b7893ccfSSadaf Ebrahimi     }
5880*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass);
5881*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5882*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5883*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass, result);
5884*b7893ccfSSadaf Ebrahimi     }
5885*b7893ccfSSadaf Ebrahimi     return result;
5886*b7893ccfSSadaf Ebrahimi }
5887*b7893ccfSSadaf Ebrahimi 
CmdBeginRenderPass2KHR(VkCommandBuffer commandBuffer,const VkRenderPassBeginInfo * pRenderPassBegin,const VkSubpassBeginInfoKHR * pSubpassBeginInfo)5888*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass2KHR(
5889*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5890*b7893ccfSSadaf Ebrahimi     const VkRenderPassBeginInfo*                pRenderPassBegin,
5891*b7893ccfSSadaf Ebrahimi     const VkSubpassBeginInfoKHR*                pSubpassBeginInfo) {
5892*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5893*b7893ccfSSadaf Ebrahimi     bool skip = false;
5894*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5895*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5896*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
5897*b7893ccfSSadaf Ebrahimi         if (skip) return;
5898*b7893ccfSSadaf Ebrahimi     }
5899*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5900*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5901*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
5902*b7893ccfSSadaf Ebrahimi     }
5903*b7893ccfSSadaf Ebrahimi     DispatchCmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
5904*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5905*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5906*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
5907*b7893ccfSSadaf Ebrahimi     }
5908*b7893ccfSSadaf Ebrahimi }
5909*b7893ccfSSadaf Ebrahimi 
CmdNextSubpass2KHR(VkCommandBuffer commandBuffer,const VkSubpassBeginInfoKHR * pSubpassBeginInfo,const VkSubpassEndInfoKHR * pSubpassEndInfo)5910*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdNextSubpass2KHR(
5911*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5912*b7893ccfSSadaf Ebrahimi     const VkSubpassBeginInfoKHR*                pSubpassBeginInfo,
5913*b7893ccfSSadaf Ebrahimi     const VkSubpassEndInfoKHR*                  pSubpassEndInfo) {
5914*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5915*b7893ccfSSadaf Ebrahimi     bool skip = false;
5916*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5917*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5918*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
5919*b7893ccfSSadaf Ebrahimi         if (skip) return;
5920*b7893ccfSSadaf Ebrahimi     }
5921*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5922*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5923*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
5924*b7893ccfSSadaf Ebrahimi     }
5925*b7893ccfSSadaf Ebrahimi     DispatchCmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
5926*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5927*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5928*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
5929*b7893ccfSSadaf Ebrahimi     }
5930*b7893ccfSSadaf Ebrahimi }
5931*b7893ccfSSadaf Ebrahimi 
CmdEndRenderPass2KHR(VkCommandBuffer commandBuffer,const VkSubpassEndInfoKHR * pSubpassEndInfo)5932*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass2KHR(
5933*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5934*b7893ccfSSadaf Ebrahimi     const VkSubpassEndInfoKHR*                  pSubpassEndInfo) {
5935*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5936*b7893ccfSSadaf Ebrahimi     bool skip = false;
5937*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5938*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5939*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo);
5940*b7893ccfSSadaf Ebrahimi         if (skip) return;
5941*b7893ccfSSadaf Ebrahimi     }
5942*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5943*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5944*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo);
5945*b7893ccfSSadaf Ebrahimi     }
5946*b7893ccfSSadaf Ebrahimi     DispatchCmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo);
5947*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5948*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5949*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo);
5950*b7893ccfSSadaf Ebrahimi     }
5951*b7893ccfSSadaf Ebrahimi }
5952*b7893ccfSSadaf Ebrahimi 
5953*b7893ccfSSadaf Ebrahimi 
GetSwapchainStatusKHR(VkDevice device,VkSwapchainKHR swapchain)5954*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainStatusKHR(
5955*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5956*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain) {
5957*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5958*b7893ccfSSadaf Ebrahimi     bool skip = false;
5959*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5960*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5961*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetSwapchainStatusKHR(device, swapchain);
5962*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
5963*b7893ccfSSadaf Ebrahimi     }
5964*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5965*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5966*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetSwapchainStatusKHR(device, swapchain);
5967*b7893ccfSSadaf Ebrahimi     }
5968*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetSwapchainStatusKHR(device, swapchain);
5969*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5970*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5971*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetSwapchainStatusKHR(device, swapchain, result);
5972*b7893ccfSSadaf Ebrahimi     }
5973*b7893ccfSSadaf Ebrahimi     return result;
5974*b7893ccfSSadaf Ebrahimi }
5975*b7893ccfSSadaf Ebrahimi 
5976*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceExternalFencePropertiesKHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo,VkExternalFenceProperties * pExternalFenceProperties)5977*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFencePropertiesKHR(
5978*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5979*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
5980*b7893ccfSSadaf Ebrahimi     VkExternalFenceProperties*                  pExternalFenceProperties) {
5981*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5982*b7893ccfSSadaf Ebrahimi     bool skip = false;
5983*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5984*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5985*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceExternalFencePropertiesKHR(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
5986*b7893ccfSSadaf Ebrahimi         if (skip) return;
5987*b7893ccfSSadaf Ebrahimi     }
5988*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5989*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5990*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceExternalFencePropertiesKHR(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
5991*b7893ccfSSadaf Ebrahimi     }
5992*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceExternalFencePropertiesKHR(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
5993*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
5994*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
5995*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceExternalFencePropertiesKHR(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
5996*b7893ccfSSadaf Ebrahimi     }
5997*b7893ccfSSadaf Ebrahimi }
5998*b7893ccfSSadaf Ebrahimi 
5999*b7893ccfSSadaf Ebrahimi 
6000*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
6001*b7893ccfSSadaf Ebrahimi 
ImportFenceWin32HandleKHR(VkDevice device,const VkImportFenceWin32HandleInfoKHR * pImportFenceWin32HandleInfo)6002*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL ImportFenceWin32HandleKHR(
6003*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6004*b7893ccfSSadaf Ebrahimi     const VkImportFenceWin32HandleInfoKHR*      pImportFenceWin32HandleInfo) {
6005*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6006*b7893ccfSSadaf Ebrahimi     bool skip = false;
6007*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6008*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6009*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateImportFenceWin32HandleKHR(device, pImportFenceWin32HandleInfo);
6010*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6011*b7893ccfSSadaf Ebrahimi     }
6012*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6013*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6014*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordImportFenceWin32HandleKHR(device, pImportFenceWin32HandleInfo);
6015*b7893ccfSSadaf Ebrahimi     }
6016*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchImportFenceWin32HandleKHR(device, pImportFenceWin32HandleInfo);
6017*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6018*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6019*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordImportFenceWin32HandleKHR(device, pImportFenceWin32HandleInfo, result);
6020*b7893ccfSSadaf Ebrahimi     }
6021*b7893ccfSSadaf Ebrahimi     return result;
6022*b7893ccfSSadaf Ebrahimi }
6023*b7893ccfSSadaf Ebrahimi 
GetFenceWin32HandleKHR(VkDevice device,const VkFenceGetWin32HandleInfoKHR * pGetWin32HandleInfo,HANDLE * pHandle)6024*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetFenceWin32HandleKHR(
6025*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6026*b7893ccfSSadaf Ebrahimi     const VkFenceGetWin32HandleInfoKHR*         pGetWin32HandleInfo,
6027*b7893ccfSSadaf Ebrahimi     HANDLE*                                     pHandle) {
6028*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6029*b7893ccfSSadaf Ebrahimi     bool skip = false;
6030*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6031*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6032*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetFenceWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
6033*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6034*b7893ccfSSadaf Ebrahimi     }
6035*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6036*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6037*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetFenceWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
6038*b7893ccfSSadaf Ebrahimi     }
6039*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetFenceWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
6040*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6041*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6042*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetFenceWin32HandleKHR(device, pGetWin32HandleInfo, pHandle, result);
6043*b7893ccfSSadaf Ebrahimi     }
6044*b7893ccfSSadaf Ebrahimi     return result;
6045*b7893ccfSSadaf Ebrahimi }
6046*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
6047*b7893ccfSSadaf Ebrahimi 
6048*b7893ccfSSadaf Ebrahimi 
ImportFenceFdKHR(VkDevice device,const VkImportFenceFdInfoKHR * pImportFenceFdInfo)6049*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL ImportFenceFdKHR(
6050*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6051*b7893ccfSSadaf Ebrahimi     const VkImportFenceFdInfoKHR*               pImportFenceFdInfo) {
6052*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6053*b7893ccfSSadaf Ebrahimi     bool skip = false;
6054*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6055*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6056*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateImportFenceFdKHR(device, pImportFenceFdInfo);
6057*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6058*b7893ccfSSadaf Ebrahimi     }
6059*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6060*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6061*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordImportFenceFdKHR(device, pImportFenceFdInfo);
6062*b7893ccfSSadaf Ebrahimi     }
6063*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchImportFenceFdKHR(device, pImportFenceFdInfo);
6064*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6065*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6066*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordImportFenceFdKHR(device, pImportFenceFdInfo, result);
6067*b7893ccfSSadaf Ebrahimi     }
6068*b7893ccfSSadaf Ebrahimi     return result;
6069*b7893ccfSSadaf Ebrahimi }
6070*b7893ccfSSadaf Ebrahimi 
GetFenceFdKHR(VkDevice device,const VkFenceGetFdInfoKHR * pGetFdInfo,int * pFd)6071*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetFenceFdKHR(
6072*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6073*b7893ccfSSadaf Ebrahimi     const VkFenceGetFdInfoKHR*                  pGetFdInfo,
6074*b7893ccfSSadaf Ebrahimi     int*                                        pFd) {
6075*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6076*b7893ccfSSadaf Ebrahimi     bool skip = false;
6077*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6078*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6079*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetFenceFdKHR(device, pGetFdInfo, pFd);
6080*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6081*b7893ccfSSadaf Ebrahimi     }
6082*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6083*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6084*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetFenceFdKHR(device, pGetFdInfo, pFd);
6085*b7893ccfSSadaf Ebrahimi     }
6086*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetFenceFdKHR(device, pGetFdInfo, pFd);
6087*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6088*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6089*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetFenceFdKHR(device, pGetFdInfo, pFd, result);
6090*b7893ccfSSadaf Ebrahimi     }
6091*b7893ccfSSadaf Ebrahimi     return result;
6092*b7893ccfSSadaf Ebrahimi }
6093*b7893ccfSSadaf Ebrahimi 
6094*b7893ccfSSadaf Ebrahimi 
6095*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,VkSurfaceCapabilities2KHR * pSurfaceCapabilities)6096*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2KHR(
6097*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
6098*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
6099*b7893ccfSSadaf Ebrahimi     VkSurfaceCapabilities2KHR*                  pSurfaceCapabilities) {
6100*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6101*b7893ccfSSadaf Ebrahimi     bool skip = false;
6102*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6103*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6104*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, pSurfaceInfo, pSurfaceCapabilities);
6105*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6106*b7893ccfSSadaf Ebrahimi     }
6107*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6108*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6109*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, pSurfaceInfo, pSurfaceCapabilities);
6110*b7893ccfSSadaf Ebrahimi     }
6111*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, pSurfaceInfo, pSurfaceCapabilities);
6112*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6113*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6114*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, pSurfaceInfo, pSurfaceCapabilities, result);
6115*b7893ccfSSadaf Ebrahimi     }
6116*b7893ccfSSadaf Ebrahimi     return result;
6117*b7893ccfSSadaf Ebrahimi }
6118*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,uint32_t * pSurfaceFormatCount,VkSurfaceFormat2KHR * pSurfaceFormats)6119*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormats2KHR(
6120*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
6121*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
6122*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pSurfaceFormatCount,
6123*b7893ccfSSadaf Ebrahimi     VkSurfaceFormat2KHR*                        pSurfaceFormats) {
6124*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6125*b7893ccfSSadaf Ebrahimi     bool skip = false;
6126*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6127*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6128*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceSurfaceFormats2KHR(physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats);
6129*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6130*b7893ccfSSadaf Ebrahimi     }
6131*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6132*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6133*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceSurfaceFormats2KHR(physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats);
6134*b7893ccfSSadaf Ebrahimi     }
6135*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceSurfaceFormats2KHR(physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats);
6136*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6137*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6138*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceSurfaceFormats2KHR(physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats, result);
6139*b7893ccfSSadaf Ebrahimi     }
6140*b7893ccfSSadaf Ebrahimi     return result;
6141*b7893ccfSSadaf Ebrahimi }
6142*b7893ccfSSadaf Ebrahimi 
6143*b7893ccfSSadaf Ebrahimi 
6144*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceDisplayProperties2KHR(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkDisplayProperties2KHR * pProperties)6145*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayProperties2KHR(
6146*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
6147*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
6148*b7893ccfSSadaf Ebrahimi     VkDisplayProperties2KHR*                    pProperties) {
6149*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6150*b7893ccfSSadaf Ebrahimi     bool skip = false;
6151*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6152*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6153*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceDisplayProperties2KHR(physicalDevice, pPropertyCount, pProperties);
6154*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6155*b7893ccfSSadaf Ebrahimi     }
6156*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6157*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6158*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceDisplayProperties2KHR(physicalDevice, pPropertyCount, pProperties);
6159*b7893ccfSSadaf Ebrahimi     }
6160*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceDisplayProperties2KHR(physicalDevice, pPropertyCount, pProperties);
6161*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6162*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6163*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceDisplayProperties2KHR(physicalDevice, pPropertyCount, pProperties, result);
6164*b7893ccfSSadaf Ebrahimi     }
6165*b7893ccfSSadaf Ebrahimi     return result;
6166*b7893ccfSSadaf Ebrahimi }
6167*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceDisplayPlaneProperties2KHR(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkDisplayPlaneProperties2KHR * pProperties)6168*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPlaneProperties2KHR(
6169*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
6170*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
6171*b7893ccfSSadaf Ebrahimi     VkDisplayPlaneProperties2KHR*               pProperties) {
6172*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6173*b7893ccfSSadaf Ebrahimi     bool skip = false;
6174*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6175*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6176*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceDisplayPlaneProperties2KHR(physicalDevice, pPropertyCount, pProperties);
6177*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6178*b7893ccfSSadaf Ebrahimi     }
6179*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6180*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6181*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceDisplayPlaneProperties2KHR(physicalDevice, pPropertyCount, pProperties);
6182*b7893ccfSSadaf Ebrahimi     }
6183*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceDisplayPlaneProperties2KHR(physicalDevice, pPropertyCount, pProperties);
6184*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6185*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6186*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceDisplayPlaneProperties2KHR(physicalDevice, pPropertyCount, pProperties, result);
6187*b7893ccfSSadaf Ebrahimi     }
6188*b7893ccfSSadaf Ebrahimi     return result;
6189*b7893ccfSSadaf Ebrahimi }
6190*b7893ccfSSadaf Ebrahimi 
GetDisplayModeProperties2KHR(VkPhysicalDevice physicalDevice,VkDisplayKHR display,uint32_t * pPropertyCount,VkDisplayModeProperties2KHR * pProperties)6191*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetDisplayModeProperties2KHR(
6192*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
6193*b7893ccfSSadaf Ebrahimi     VkDisplayKHR                                display,
6194*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
6195*b7893ccfSSadaf Ebrahimi     VkDisplayModeProperties2KHR*                pProperties) {
6196*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6197*b7893ccfSSadaf Ebrahimi     bool skip = false;
6198*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6199*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6200*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount, pProperties);
6201*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6202*b7893ccfSSadaf Ebrahimi     }
6203*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6204*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6205*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount, pProperties);
6206*b7893ccfSSadaf Ebrahimi     }
6207*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount, pProperties);
6208*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6209*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6210*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount, pProperties, result);
6211*b7893ccfSSadaf Ebrahimi     }
6212*b7893ccfSSadaf Ebrahimi     return result;
6213*b7893ccfSSadaf Ebrahimi }
6214*b7893ccfSSadaf Ebrahimi 
GetDisplayPlaneCapabilities2KHR(VkPhysicalDevice physicalDevice,const VkDisplayPlaneInfo2KHR * pDisplayPlaneInfo,VkDisplayPlaneCapabilities2KHR * pCapabilities)6215*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetDisplayPlaneCapabilities2KHR(
6216*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
6217*b7893ccfSSadaf Ebrahimi     const VkDisplayPlaneInfo2KHR*               pDisplayPlaneInfo,
6218*b7893ccfSSadaf Ebrahimi     VkDisplayPlaneCapabilities2KHR*             pCapabilities) {
6219*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6220*b7893ccfSSadaf Ebrahimi     bool skip = false;
6221*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6222*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6223*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDisplayPlaneCapabilities2KHR(physicalDevice, pDisplayPlaneInfo, pCapabilities);
6224*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6225*b7893ccfSSadaf Ebrahimi     }
6226*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6227*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6228*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDisplayPlaneCapabilities2KHR(physicalDevice, pDisplayPlaneInfo, pCapabilities);
6229*b7893ccfSSadaf Ebrahimi     }
6230*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetDisplayPlaneCapabilities2KHR(physicalDevice, pDisplayPlaneInfo, pCapabilities);
6231*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6232*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6233*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDisplayPlaneCapabilities2KHR(physicalDevice, pDisplayPlaneInfo, pCapabilities, result);
6234*b7893ccfSSadaf Ebrahimi     }
6235*b7893ccfSSadaf Ebrahimi     return result;
6236*b7893ccfSSadaf Ebrahimi }
6237*b7893ccfSSadaf Ebrahimi 
6238*b7893ccfSSadaf Ebrahimi 
6239*b7893ccfSSadaf Ebrahimi 
6240*b7893ccfSSadaf Ebrahimi 
6241*b7893ccfSSadaf Ebrahimi 
GetImageMemoryRequirements2KHR(VkDevice device,const VkImageMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements)6242*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements2KHR(
6243*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6244*b7893ccfSSadaf Ebrahimi     const VkImageMemoryRequirementsInfo2*       pInfo,
6245*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements2*                      pMemoryRequirements) {
6246*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6247*b7893ccfSSadaf Ebrahimi     bool skip = false;
6248*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6249*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6250*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6251*b7893ccfSSadaf Ebrahimi         if (skip) return;
6252*b7893ccfSSadaf Ebrahimi     }
6253*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6254*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6255*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6256*b7893ccfSSadaf Ebrahimi     }
6257*b7893ccfSSadaf Ebrahimi     DispatchGetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6258*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6259*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6260*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6261*b7893ccfSSadaf Ebrahimi     }
6262*b7893ccfSSadaf Ebrahimi }
6263*b7893ccfSSadaf Ebrahimi 
GetBufferMemoryRequirements2KHR(VkDevice device,const VkBufferMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements)6264*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements2KHR(
6265*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6266*b7893ccfSSadaf Ebrahimi     const VkBufferMemoryRequirementsInfo2*      pInfo,
6267*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements2*                      pMemoryRequirements) {
6268*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6269*b7893ccfSSadaf Ebrahimi     bool skip = false;
6270*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6271*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6272*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6273*b7893ccfSSadaf Ebrahimi         if (skip) return;
6274*b7893ccfSSadaf Ebrahimi     }
6275*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6276*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6277*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6278*b7893ccfSSadaf Ebrahimi     }
6279*b7893ccfSSadaf Ebrahimi     DispatchGetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6280*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6281*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6282*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
6283*b7893ccfSSadaf Ebrahimi     }
6284*b7893ccfSSadaf Ebrahimi }
6285*b7893ccfSSadaf Ebrahimi 
GetImageSparseMemoryRequirements2KHR(VkDevice device,const VkImageSparseMemoryRequirementsInfo2 * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements)6286*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements2KHR(
6287*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6288*b7893ccfSSadaf Ebrahimi     const VkImageSparseMemoryRequirementsInfo2* pInfo,
6289*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pSparseMemoryRequirementCount,
6290*b7893ccfSSadaf Ebrahimi     VkSparseImageMemoryRequirements2*           pSparseMemoryRequirements) {
6291*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6292*b7893ccfSSadaf Ebrahimi     bool skip = false;
6293*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6294*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6295*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
6296*b7893ccfSSadaf Ebrahimi         if (skip) return;
6297*b7893ccfSSadaf Ebrahimi     }
6298*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6299*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6300*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
6301*b7893ccfSSadaf Ebrahimi     }
6302*b7893ccfSSadaf Ebrahimi     DispatchGetImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
6303*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6304*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6305*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
6306*b7893ccfSSadaf Ebrahimi     }
6307*b7893ccfSSadaf Ebrahimi }
6308*b7893ccfSSadaf Ebrahimi 
6309*b7893ccfSSadaf Ebrahimi 
6310*b7893ccfSSadaf Ebrahimi 
CreateSamplerYcbcrConversionKHR(VkDevice device,const VkSamplerYcbcrConversionCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSamplerYcbcrConversion * pYcbcrConversion)6311*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateSamplerYcbcrConversionKHR(
6312*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6313*b7893ccfSSadaf Ebrahimi     const VkSamplerYcbcrConversionCreateInfo*   pCreateInfo,
6314*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
6315*b7893ccfSSadaf Ebrahimi     VkSamplerYcbcrConversion*                   pYcbcrConversion) {
6316*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6317*b7893ccfSSadaf Ebrahimi     bool skip = false;
6318*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6319*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6320*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateSamplerYcbcrConversionKHR(device, pCreateInfo, pAllocator, pYcbcrConversion);
6321*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6322*b7893ccfSSadaf Ebrahimi     }
6323*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6324*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6325*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateSamplerYcbcrConversionKHR(device, pCreateInfo, pAllocator, pYcbcrConversion);
6326*b7893ccfSSadaf Ebrahimi     }
6327*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateSamplerYcbcrConversionKHR(device, pCreateInfo, pAllocator, pYcbcrConversion);
6328*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6329*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6330*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateSamplerYcbcrConversionKHR(device, pCreateInfo, pAllocator, pYcbcrConversion, result);
6331*b7893ccfSSadaf Ebrahimi     }
6332*b7893ccfSSadaf Ebrahimi     return result;
6333*b7893ccfSSadaf Ebrahimi }
6334*b7893ccfSSadaf Ebrahimi 
DestroySamplerYcbcrConversionKHR(VkDevice device,VkSamplerYcbcrConversion ycbcrConversion,const VkAllocationCallbacks * pAllocator)6335*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroySamplerYcbcrConversionKHR(
6336*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6337*b7893ccfSSadaf Ebrahimi     VkSamplerYcbcrConversion                    ycbcrConversion,
6338*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
6339*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6340*b7893ccfSSadaf Ebrahimi     bool skip = false;
6341*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6342*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6343*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator);
6344*b7893ccfSSadaf Ebrahimi         if (skip) return;
6345*b7893ccfSSadaf Ebrahimi     }
6346*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6347*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6348*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator);
6349*b7893ccfSSadaf Ebrahimi     }
6350*b7893ccfSSadaf Ebrahimi     DispatchDestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator);
6351*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6352*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6353*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator);
6354*b7893ccfSSadaf Ebrahimi     }
6355*b7893ccfSSadaf Ebrahimi }
6356*b7893ccfSSadaf Ebrahimi 
6357*b7893ccfSSadaf Ebrahimi 
BindBufferMemory2KHR(VkDevice device,uint32_t bindInfoCount,const VkBindBufferMemoryInfo * pBindInfos)6358*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory2KHR(
6359*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6360*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindInfoCount,
6361*b7893ccfSSadaf Ebrahimi     const VkBindBufferMemoryInfo*               pBindInfos) {
6362*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6363*b7893ccfSSadaf Ebrahimi     bool skip = false;
6364*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6365*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6366*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateBindBufferMemory2KHR(device, bindInfoCount, pBindInfos);
6367*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6368*b7893ccfSSadaf Ebrahimi     }
6369*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6370*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6371*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordBindBufferMemory2KHR(device, bindInfoCount, pBindInfos);
6372*b7893ccfSSadaf Ebrahimi     }
6373*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchBindBufferMemory2KHR(device, bindInfoCount, pBindInfos);
6374*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6375*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6376*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordBindBufferMemory2KHR(device, bindInfoCount, pBindInfos, result);
6377*b7893ccfSSadaf Ebrahimi     }
6378*b7893ccfSSadaf Ebrahimi     return result;
6379*b7893ccfSSadaf Ebrahimi }
6380*b7893ccfSSadaf Ebrahimi 
BindImageMemory2KHR(VkDevice device,uint32_t bindInfoCount,const VkBindImageMemoryInfo * pBindInfos)6381*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory2KHR(
6382*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6383*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindInfoCount,
6384*b7893ccfSSadaf Ebrahimi     const VkBindImageMemoryInfo*                pBindInfos) {
6385*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6386*b7893ccfSSadaf Ebrahimi     bool skip = false;
6387*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6388*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6389*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateBindImageMemory2KHR(device, bindInfoCount, pBindInfos);
6390*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6391*b7893ccfSSadaf Ebrahimi     }
6392*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6393*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6394*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordBindImageMemory2KHR(device, bindInfoCount, pBindInfos);
6395*b7893ccfSSadaf Ebrahimi     }
6396*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchBindImageMemory2KHR(device, bindInfoCount, pBindInfos);
6397*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6398*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6399*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordBindImageMemory2KHR(device, bindInfoCount, pBindInfos, result);
6400*b7893ccfSSadaf Ebrahimi     }
6401*b7893ccfSSadaf Ebrahimi     return result;
6402*b7893ccfSSadaf Ebrahimi }
6403*b7893ccfSSadaf Ebrahimi 
6404*b7893ccfSSadaf Ebrahimi 
GetDescriptorSetLayoutSupportKHR(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,VkDescriptorSetLayoutSupport * pSupport)6405*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetDescriptorSetLayoutSupportKHR(
6406*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6407*b7893ccfSSadaf Ebrahimi     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
6408*b7893ccfSSadaf Ebrahimi     VkDescriptorSetLayoutSupport*               pSupport) {
6409*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6410*b7893ccfSSadaf Ebrahimi     bool skip = false;
6411*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6412*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6413*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDescriptorSetLayoutSupportKHR(device, pCreateInfo, pSupport);
6414*b7893ccfSSadaf Ebrahimi         if (skip) return;
6415*b7893ccfSSadaf Ebrahimi     }
6416*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6417*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6418*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDescriptorSetLayoutSupportKHR(device, pCreateInfo, pSupport);
6419*b7893ccfSSadaf Ebrahimi     }
6420*b7893ccfSSadaf Ebrahimi     DispatchGetDescriptorSetLayoutSupportKHR(device, pCreateInfo, pSupport);
6421*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6422*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6423*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDescriptorSetLayoutSupportKHR(device, pCreateInfo, pSupport);
6424*b7893ccfSSadaf Ebrahimi     }
6425*b7893ccfSSadaf Ebrahimi }
6426*b7893ccfSSadaf Ebrahimi 
6427*b7893ccfSSadaf Ebrahimi 
CmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)6428*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountKHR(
6429*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6430*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
6431*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
6432*b7893ccfSSadaf Ebrahimi     VkBuffer                                    countBuffer,
6433*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                countBufferOffset,
6434*b7893ccfSSadaf Ebrahimi     uint32_t                                    maxDrawCount,
6435*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride) {
6436*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6437*b7893ccfSSadaf Ebrahimi     bool skip = false;
6438*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6439*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6440*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6441*b7893ccfSSadaf Ebrahimi         if (skip) return;
6442*b7893ccfSSadaf Ebrahimi     }
6443*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6444*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6445*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6446*b7893ccfSSadaf Ebrahimi     }
6447*b7893ccfSSadaf Ebrahimi     DispatchCmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6448*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6449*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6450*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6451*b7893ccfSSadaf Ebrahimi     }
6452*b7893ccfSSadaf Ebrahimi }
6453*b7893ccfSSadaf Ebrahimi 
CmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)6454*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountKHR(
6455*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6456*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
6457*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
6458*b7893ccfSSadaf Ebrahimi     VkBuffer                                    countBuffer,
6459*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                countBufferOffset,
6460*b7893ccfSSadaf Ebrahimi     uint32_t                                    maxDrawCount,
6461*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride) {
6462*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6463*b7893ccfSSadaf Ebrahimi     bool skip = false;
6464*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6465*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6466*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6467*b7893ccfSSadaf Ebrahimi         if (skip) return;
6468*b7893ccfSSadaf Ebrahimi     }
6469*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6470*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6471*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6472*b7893ccfSSadaf Ebrahimi     }
6473*b7893ccfSSadaf Ebrahimi     DispatchCmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6474*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6475*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6476*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6477*b7893ccfSSadaf Ebrahimi     }
6478*b7893ccfSSadaf Ebrahimi }
6479*b7893ccfSSadaf Ebrahimi 
6480*b7893ccfSSadaf Ebrahimi 
6481*b7893ccfSSadaf Ebrahimi 
6482*b7893ccfSSadaf Ebrahimi 
6483*b7893ccfSSadaf Ebrahimi 
6484*b7893ccfSSadaf Ebrahimi 
6485*b7893ccfSSadaf Ebrahimi 
6486*b7893ccfSSadaf Ebrahimi 
6487*b7893ccfSSadaf Ebrahimi 
6488*b7893ccfSSadaf Ebrahimi 
6489*b7893ccfSSadaf Ebrahimi 
GetPipelineExecutablePropertiesKHR(VkDevice device,const VkPipelineInfoKHR * pPipelineInfo,uint32_t * pExecutableCount,VkPipelineExecutablePropertiesKHR * pProperties)6490*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutablePropertiesKHR(
6491*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6492*b7893ccfSSadaf Ebrahimi     const VkPipelineInfoKHR*                    pPipelineInfo,
6493*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pExecutableCount,
6494*b7893ccfSSadaf Ebrahimi     VkPipelineExecutablePropertiesKHR*          pProperties) {
6495*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6496*b7893ccfSSadaf Ebrahimi     bool skip = false;
6497*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6498*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6499*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPipelineExecutablePropertiesKHR(device, pPipelineInfo, pExecutableCount, pProperties);
6500*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6501*b7893ccfSSadaf Ebrahimi     }
6502*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6503*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6504*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPipelineExecutablePropertiesKHR(device, pPipelineInfo, pExecutableCount, pProperties);
6505*b7893ccfSSadaf Ebrahimi     }
6506*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPipelineExecutablePropertiesKHR(device, pPipelineInfo, pExecutableCount, pProperties);
6507*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6508*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6509*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPipelineExecutablePropertiesKHR(device, pPipelineInfo, pExecutableCount, pProperties, result);
6510*b7893ccfSSadaf Ebrahimi     }
6511*b7893ccfSSadaf Ebrahimi     return result;
6512*b7893ccfSSadaf Ebrahimi }
6513*b7893ccfSSadaf Ebrahimi 
GetPipelineExecutableStatisticsKHR(VkDevice device,const VkPipelineExecutableInfoKHR * pExecutableInfo,uint32_t * pStatisticCount,VkPipelineExecutableStatisticKHR * pStatistics)6514*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutableStatisticsKHR(
6515*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6516*b7893ccfSSadaf Ebrahimi     const VkPipelineExecutableInfoKHR*          pExecutableInfo,
6517*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pStatisticCount,
6518*b7893ccfSSadaf Ebrahimi     VkPipelineExecutableStatisticKHR*           pStatistics) {
6519*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6520*b7893ccfSSadaf Ebrahimi     bool skip = false;
6521*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6522*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6523*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPipelineExecutableStatisticsKHR(device, pExecutableInfo, pStatisticCount, pStatistics);
6524*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6525*b7893ccfSSadaf Ebrahimi     }
6526*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6527*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6528*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPipelineExecutableStatisticsKHR(device, pExecutableInfo, pStatisticCount, pStatistics);
6529*b7893ccfSSadaf Ebrahimi     }
6530*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPipelineExecutableStatisticsKHR(device, pExecutableInfo, pStatisticCount, pStatistics);
6531*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6532*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6533*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPipelineExecutableStatisticsKHR(device, pExecutableInfo, pStatisticCount, pStatistics, result);
6534*b7893ccfSSadaf Ebrahimi     }
6535*b7893ccfSSadaf Ebrahimi     return result;
6536*b7893ccfSSadaf Ebrahimi }
6537*b7893ccfSSadaf Ebrahimi 
GetPipelineExecutableInternalRepresentationsKHR(VkDevice device,const VkPipelineExecutableInfoKHR * pExecutableInfo,uint32_t * pInternalRepresentationCount,VkPipelineExecutableInternalRepresentationKHR * pInternalRepresentations)6538*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPipelineExecutableInternalRepresentationsKHR(
6539*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6540*b7893ccfSSadaf Ebrahimi     const VkPipelineExecutableInfoKHR*          pExecutableInfo,
6541*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pInternalRepresentationCount,
6542*b7893ccfSSadaf Ebrahimi     VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations) {
6543*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6544*b7893ccfSSadaf Ebrahimi     bool skip = false;
6545*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6546*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6547*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPipelineExecutableInternalRepresentationsKHR(device, pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations);
6548*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6549*b7893ccfSSadaf Ebrahimi     }
6550*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6551*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6552*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPipelineExecutableInternalRepresentationsKHR(device, pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations);
6553*b7893ccfSSadaf Ebrahimi     }
6554*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPipelineExecutableInternalRepresentationsKHR(device, pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations);
6555*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6556*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6557*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPipelineExecutableInternalRepresentationsKHR(device, pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations, result);
6558*b7893ccfSSadaf Ebrahimi     }
6559*b7893ccfSSadaf Ebrahimi     return result;
6560*b7893ccfSSadaf Ebrahimi }
6561*b7893ccfSSadaf Ebrahimi 
6562*b7893ccfSSadaf Ebrahimi 
CreateDebugReportCallbackEXT(VkInstance instance,const VkDebugReportCallbackCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDebugReportCallbackEXT * pCallback)6563*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(
6564*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
6565*b7893ccfSSadaf Ebrahimi     const VkDebugReportCallbackCreateInfoEXT*   pCreateInfo,
6566*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
6567*b7893ccfSSadaf Ebrahimi     VkDebugReportCallbackEXT*                   pCallback) {
6568*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
6569*b7893ccfSSadaf Ebrahimi     bool skip = false;
6570*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6571*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6572*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback);
6573*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6574*b7893ccfSSadaf Ebrahimi     }
6575*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6576*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6577*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback);
6578*b7893ccfSSadaf Ebrahimi     }
6579*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback);
6580*b7893ccfSSadaf Ebrahimi     layer_create_report_callback(layer_data->report_data, false, pCreateInfo, pAllocator, pCallback);
6581*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6582*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6583*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback, result);
6584*b7893ccfSSadaf Ebrahimi     }
6585*b7893ccfSSadaf Ebrahimi     return result;
6586*b7893ccfSSadaf Ebrahimi }
6587*b7893ccfSSadaf Ebrahimi 
DestroyDebugReportCallbackEXT(VkInstance instance,VkDebugReportCallbackEXT callback,const VkAllocationCallbacks * pAllocator)6588*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyDebugReportCallbackEXT(
6589*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
6590*b7893ccfSSadaf Ebrahimi     VkDebugReportCallbackEXT                    callback,
6591*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
6592*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
6593*b7893ccfSSadaf Ebrahimi     bool skip = false;
6594*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6595*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6596*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyDebugReportCallbackEXT(instance, callback, pAllocator);
6597*b7893ccfSSadaf Ebrahimi         if (skip) return;
6598*b7893ccfSSadaf Ebrahimi     }
6599*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6600*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6601*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyDebugReportCallbackEXT(instance, callback, pAllocator);
6602*b7893ccfSSadaf Ebrahimi     }
6603*b7893ccfSSadaf Ebrahimi     DispatchDestroyDebugReportCallbackEXT(instance, callback, pAllocator);
6604*b7893ccfSSadaf Ebrahimi     layer_destroy_report_callback(layer_data->report_data, callback, pAllocator);
6605*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6606*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6607*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyDebugReportCallbackEXT(instance, callback, pAllocator);
6608*b7893ccfSSadaf Ebrahimi     }
6609*b7893ccfSSadaf Ebrahimi }
6610*b7893ccfSSadaf Ebrahimi 
DebugReportMessageEXT(VkInstance instance,VkDebugReportFlagsEXT flags,VkDebugReportObjectTypeEXT objectType,uint64_t object,size_t location,int32_t messageCode,const char * pLayerPrefix,const char * pMessage)6611*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DebugReportMessageEXT(
6612*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
6613*b7893ccfSSadaf Ebrahimi     VkDebugReportFlagsEXT                       flags,
6614*b7893ccfSSadaf Ebrahimi     VkDebugReportObjectTypeEXT                  objectType,
6615*b7893ccfSSadaf Ebrahimi     uint64_t                                    object,
6616*b7893ccfSSadaf Ebrahimi     size_t                                      location,
6617*b7893ccfSSadaf Ebrahimi     int32_t                                     messageCode,
6618*b7893ccfSSadaf Ebrahimi     const char*                                 pLayerPrefix,
6619*b7893ccfSSadaf Ebrahimi     const char*                                 pMessage) {
6620*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
6621*b7893ccfSSadaf Ebrahimi     bool skip = false;
6622*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6623*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6624*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDebugReportMessageEXT(instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage);
6625*b7893ccfSSadaf Ebrahimi         if (skip) return;
6626*b7893ccfSSadaf Ebrahimi     }
6627*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6628*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6629*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDebugReportMessageEXT(instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage);
6630*b7893ccfSSadaf Ebrahimi     }
6631*b7893ccfSSadaf Ebrahimi     DispatchDebugReportMessageEXT(instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage);
6632*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6633*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6634*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDebugReportMessageEXT(instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage);
6635*b7893ccfSSadaf Ebrahimi     }
6636*b7893ccfSSadaf Ebrahimi }
6637*b7893ccfSSadaf Ebrahimi 
6638*b7893ccfSSadaf Ebrahimi 
6639*b7893ccfSSadaf Ebrahimi 
6640*b7893ccfSSadaf Ebrahimi 
6641*b7893ccfSSadaf Ebrahimi 
6642*b7893ccfSSadaf Ebrahimi 
6643*b7893ccfSSadaf Ebrahimi 
6644*b7893ccfSSadaf Ebrahimi 
DebugMarkerSetObjectTagEXT(VkDevice device,const VkDebugMarkerObjectTagInfoEXT * pTagInfo)6645*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(
6646*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6647*b7893ccfSSadaf Ebrahimi     const VkDebugMarkerObjectTagInfoEXT*        pTagInfo) {
6648*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6649*b7893ccfSSadaf Ebrahimi     bool skip = false;
6650*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6651*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6652*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDebugMarkerSetObjectTagEXT(device, pTagInfo);
6653*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6654*b7893ccfSSadaf Ebrahimi     }
6655*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6656*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6657*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDebugMarkerSetObjectTagEXT(device, pTagInfo);
6658*b7893ccfSSadaf Ebrahimi     }
6659*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchDebugMarkerSetObjectTagEXT(device, pTagInfo);
6660*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6661*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6662*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDebugMarkerSetObjectTagEXT(device, pTagInfo, result);
6663*b7893ccfSSadaf Ebrahimi     }
6664*b7893ccfSSadaf Ebrahimi     return result;
6665*b7893ccfSSadaf Ebrahimi }
6666*b7893ccfSSadaf Ebrahimi 
DebugMarkerSetObjectNameEXT(VkDevice device,const VkDebugMarkerObjectNameInfoEXT * pNameInfo)6667*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(
6668*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6669*b7893ccfSSadaf Ebrahimi     const VkDebugMarkerObjectNameInfoEXT*       pNameInfo) {
6670*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6671*b7893ccfSSadaf Ebrahimi     bool skip = false;
6672*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6673*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6674*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDebugMarkerSetObjectNameEXT(device, pNameInfo);
6675*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6676*b7893ccfSSadaf Ebrahimi     }
6677*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6678*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6679*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDebugMarkerSetObjectNameEXT(device, pNameInfo);
6680*b7893ccfSSadaf Ebrahimi     }
6681*b7893ccfSSadaf Ebrahimi     layer_data->report_data->DebugReportSetMarkerObjectName(pNameInfo);
6682*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchDebugMarkerSetObjectNameEXT(device, pNameInfo);
6683*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6684*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6685*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDebugMarkerSetObjectNameEXT(device, pNameInfo, result);
6686*b7893ccfSSadaf Ebrahimi     }
6687*b7893ccfSSadaf Ebrahimi     return result;
6688*b7893ccfSSadaf Ebrahimi }
6689*b7893ccfSSadaf Ebrahimi 
CmdDebugMarkerBeginEXT(VkCommandBuffer commandBuffer,const VkDebugMarkerMarkerInfoEXT * pMarkerInfo)6690*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerBeginEXT(
6691*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6692*b7893ccfSSadaf Ebrahimi     const VkDebugMarkerMarkerInfoEXT*           pMarkerInfo) {
6693*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6694*b7893ccfSSadaf Ebrahimi     bool skip = false;
6695*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6696*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6697*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
6698*b7893ccfSSadaf Ebrahimi         if (skip) return;
6699*b7893ccfSSadaf Ebrahimi     }
6700*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6701*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6702*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
6703*b7893ccfSSadaf Ebrahimi     }
6704*b7893ccfSSadaf Ebrahimi     DispatchCmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
6705*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6706*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6707*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
6708*b7893ccfSSadaf Ebrahimi     }
6709*b7893ccfSSadaf Ebrahimi }
6710*b7893ccfSSadaf Ebrahimi 
CmdDebugMarkerEndEXT(VkCommandBuffer commandBuffer)6711*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerEndEXT(
6712*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer) {
6713*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6714*b7893ccfSSadaf Ebrahimi     bool skip = false;
6715*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6716*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6717*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDebugMarkerEndEXT(commandBuffer);
6718*b7893ccfSSadaf Ebrahimi         if (skip) return;
6719*b7893ccfSSadaf Ebrahimi     }
6720*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6721*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6722*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDebugMarkerEndEXT(commandBuffer);
6723*b7893ccfSSadaf Ebrahimi     }
6724*b7893ccfSSadaf Ebrahimi     DispatchCmdDebugMarkerEndEXT(commandBuffer);
6725*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6726*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6727*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDebugMarkerEndEXT(commandBuffer);
6728*b7893ccfSSadaf Ebrahimi     }
6729*b7893ccfSSadaf Ebrahimi }
6730*b7893ccfSSadaf Ebrahimi 
CmdDebugMarkerInsertEXT(VkCommandBuffer commandBuffer,const VkDebugMarkerMarkerInfoEXT * pMarkerInfo)6731*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDebugMarkerInsertEXT(
6732*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6733*b7893ccfSSadaf Ebrahimi     const VkDebugMarkerMarkerInfoEXT*           pMarkerInfo) {
6734*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6735*b7893ccfSSadaf Ebrahimi     bool skip = false;
6736*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6737*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6738*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
6739*b7893ccfSSadaf Ebrahimi         if (skip) return;
6740*b7893ccfSSadaf Ebrahimi     }
6741*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6742*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6743*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
6744*b7893ccfSSadaf Ebrahimi     }
6745*b7893ccfSSadaf Ebrahimi     DispatchCmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
6746*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6747*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6748*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
6749*b7893ccfSSadaf Ebrahimi     }
6750*b7893ccfSSadaf Ebrahimi }
6751*b7893ccfSSadaf Ebrahimi 
6752*b7893ccfSSadaf Ebrahimi 
6753*b7893ccfSSadaf Ebrahimi 
6754*b7893ccfSSadaf Ebrahimi 
CmdBindTransformFeedbackBuffersEXT(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const VkBuffer * pBuffers,const VkDeviceSize * pOffsets,const VkDeviceSize * pSizes)6755*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBindTransformFeedbackBuffersEXT(
6756*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6757*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstBinding,
6758*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindingCount,
6759*b7893ccfSSadaf Ebrahimi     const VkBuffer*                             pBuffers,
6760*b7893ccfSSadaf Ebrahimi     const VkDeviceSize*                         pOffsets,
6761*b7893ccfSSadaf Ebrahimi     const VkDeviceSize*                         pSizes) {
6762*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6763*b7893ccfSSadaf Ebrahimi     bool skip = false;
6764*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6765*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6766*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes);
6767*b7893ccfSSadaf Ebrahimi         if (skip) return;
6768*b7893ccfSSadaf Ebrahimi     }
6769*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6770*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6771*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes);
6772*b7893ccfSSadaf Ebrahimi     }
6773*b7893ccfSSadaf Ebrahimi     DispatchCmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes);
6774*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6775*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6776*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes);
6777*b7893ccfSSadaf Ebrahimi     }
6778*b7893ccfSSadaf Ebrahimi }
6779*b7893ccfSSadaf Ebrahimi 
CmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer,uint32_t firstCounterBuffer,uint32_t counterBufferCount,const VkBuffer * pCounterBuffers,const VkDeviceSize * pCounterBufferOffsets)6780*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBeginTransformFeedbackEXT(
6781*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6782*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstCounterBuffer,
6783*b7893ccfSSadaf Ebrahimi     uint32_t                                    counterBufferCount,
6784*b7893ccfSSadaf Ebrahimi     const VkBuffer*                             pCounterBuffers,
6785*b7893ccfSSadaf Ebrahimi     const VkDeviceSize*                         pCounterBufferOffsets) {
6786*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6787*b7893ccfSSadaf Ebrahimi     bool skip = false;
6788*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6789*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6790*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6791*b7893ccfSSadaf Ebrahimi         if (skip) return;
6792*b7893ccfSSadaf Ebrahimi     }
6793*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6794*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6795*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6796*b7893ccfSSadaf Ebrahimi     }
6797*b7893ccfSSadaf Ebrahimi     DispatchCmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6798*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6799*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6800*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6801*b7893ccfSSadaf Ebrahimi     }
6802*b7893ccfSSadaf Ebrahimi }
6803*b7893ccfSSadaf Ebrahimi 
CmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer,uint32_t firstCounterBuffer,uint32_t counterBufferCount,const VkBuffer * pCounterBuffers,const VkDeviceSize * pCounterBufferOffsets)6804*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdEndTransformFeedbackEXT(
6805*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6806*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstCounterBuffer,
6807*b7893ccfSSadaf Ebrahimi     uint32_t                                    counterBufferCount,
6808*b7893ccfSSadaf Ebrahimi     const VkBuffer*                             pCounterBuffers,
6809*b7893ccfSSadaf Ebrahimi     const VkDeviceSize*                         pCounterBufferOffsets) {
6810*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6811*b7893ccfSSadaf Ebrahimi     bool skip = false;
6812*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6813*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6814*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6815*b7893ccfSSadaf Ebrahimi         if (skip) return;
6816*b7893ccfSSadaf Ebrahimi     }
6817*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6818*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6819*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6820*b7893ccfSSadaf Ebrahimi     }
6821*b7893ccfSSadaf Ebrahimi     DispatchCmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6822*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6823*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6824*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
6825*b7893ccfSSadaf Ebrahimi     }
6826*b7893ccfSSadaf Ebrahimi }
6827*b7893ccfSSadaf Ebrahimi 
CmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,VkQueryControlFlags flags,uint32_t index)6828*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBeginQueryIndexedEXT(
6829*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6830*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
6831*b7893ccfSSadaf Ebrahimi     uint32_t                                    query,
6832*b7893ccfSSadaf Ebrahimi     VkQueryControlFlags                         flags,
6833*b7893ccfSSadaf Ebrahimi     uint32_t                                    index) {
6834*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6835*b7893ccfSSadaf Ebrahimi     bool skip = false;
6836*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6837*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6838*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index);
6839*b7893ccfSSadaf Ebrahimi         if (skip) return;
6840*b7893ccfSSadaf Ebrahimi     }
6841*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6842*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6843*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index);
6844*b7893ccfSSadaf Ebrahimi     }
6845*b7893ccfSSadaf Ebrahimi     DispatchCmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index);
6846*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6847*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6848*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index);
6849*b7893ccfSSadaf Ebrahimi     }
6850*b7893ccfSSadaf Ebrahimi }
6851*b7893ccfSSadaf Ebrahimi 
CmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,uint32_t index)6852*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdEndQueryIndexedEXT(
6853*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6854*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
6855*b7893ccfSSadaf Ebrahimi     uint32_t                                    query,
6856*b7893ccfSSadaf Ebrahimi     uint32_t                                    index) {
6857*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6858*b7893ccfSSadaf Ebrahimi     bool skip = false;
6859*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6860*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6861*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index);
6862*b7893ccfSSadaf Ebrahimi         if (skip) return;
6863*b7893ccfSSadaf Ebrahimi     }
6864*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6865*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6866*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index);
6867*b7893ccfSSadaf Ebrahimi     }
6868*b7893ccfSSadaf Ebrahimi     DispatchCmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index);
6869*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6870*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6871*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index);
6872*b7893ccfSSadaf Ebrahimi     }
6873*b7893ccfSSadaf Ebrahimi }
6874*b7893ccfSSadaf Ebrahimi 
CmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer,uint32_t instanceCount,uint32_t firstInstance,VkBuffer counterBuffer,VkDeviceSize counterBufferOffset,uint32_t counterOffset,uint32_t vertexStride)6875*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectByteCountEXT(
6876*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6877*b7893ccfSSadaf Ebrahimi     uint32_t                                    instanceCount,
6878*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstInstance,
6879*b7893ccfSSadaf Ebrahimi     VkBuffer                                    counterBuffer,
6880*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                counterBufferOffset,
6881*b7893ccfSSadaf Ebrahimi     uint32_t                                    counterOffset,
6882*b7893ccfSSadaf Ebrahimi     uint32_t                                    vertexStride) {
6883*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6884*b7893ccfSSadaf Ebrahimi     bool skip = false;
6885*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6886*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6887*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride);
6888*b7893ccfSSadaf Ebrahimi         if (skip) return;
6889*b7893ccfSSadaf Ebrahimi     }
6890*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6891*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6892*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride);
6893*b7893ccfSSadaf Ebrahimi     }
6894*b7893ccfSSadaf Ebrahimi     DispatchCmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride);
6895*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6896*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6897*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride);
6898*b7893ccfSSadaf Ebrahimi     }
6899*b7893ccfSSadaf Ebrahimi }
6900*b7893ccfSSadaf Ebrahimi 
6901*b7893ccfSSadaf Ebrahimi 
GetImageViewHandleNVX(VkDevice device,const VkImageViewHandleInfoNVX * pInfo)6902*b7893ccfSSadaf Ebrahimi VKAPI_ATTR uint32_t VKAPI_CALL GetImageViewHandleNVX(
6903*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6904*b7893ccfSSadaf Ebrahimi     const VkImageViewHandleInfoNVX*             pInfo) {
6905*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6906*b7893ccfSSadaf Ebrahimi     bool skip = false;
6907*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6908*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6909*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetImageViewHandleNVX(device, pInfo);
6910*b7893ccfSSadaf Ebrahimi         if (skip) return 0;
6911*b7893ccfSSadaf Ebrahimi     }
6912*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6913*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6914*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetImageViewHandleNVX(device, pInfo);
6915*b7893ccfSSadaf Ebrahimi     }
6916*b7893ccfSSadaf Ebrahimi     uint32_t result = DispatchGetImageViewHandleNVX(device, pInfo);
6917*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6918*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6919*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetImageViewHandleNVX(device, pInfo);
6920*b7893ccfSSadaf Ebrahimi     }
6921*b7893ccfSSadaf Ebrahimi     return result;
6922*b7893ccfSSadaf Ebrahimi }
6923*b7893ccfSSadaf Ebrahimi 
6924*b7893ccfSSadaf Ebrahimi 
CmdDrawIndirectCountAMD(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)6925*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountAMD(
6926*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6927*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
6928*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
6929*b7893ccfSSadaf Ebrahimi     VkBuffer                                    countBuffer,
6930*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                countBufferOffset,
6931*b7893ccfSSadaf Ebrahimi     uint32_t                                    maxDrawCount,
6932*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride) {
6933*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6934*b7893ccfSSadaf Ebrahimi     bool skip = false;
6935*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6936*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6937*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6938*b7893ccfSSadaf Ebrahimi         if (skip) return;
6939*b7893ccfSSadaf Ebrahimi     }
6940*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6941*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6942*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6943*b7893ccfSSadaf Ebrahimi     }
6944*b7893ccfSSadaf Ebrahimi     DispatchCmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6945*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6946*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6947*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6948*b7893ccfSSadaf Ebrahimi     }
6949*b7893ccfSSadaf Ebrahimi }
6950*b7893ccfSSadaf Ebrahimi 
CmdDrawIndexedIndirectCountAMD(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)6951*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountAMD(
6952*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6953*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
6954*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
6955*b7893ccfSSadaf Ebrahimi     VkBuffer                                    countBuffer,
6956*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                countBufferOffset,
6957*b7893ccfSSadaf Ebrahimi     uint32_t                                    maxDrawCount,
6958*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride) {
6959*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6960*b7893ccfSSadaf Ebrahimi     bool skip = false;
6961*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6962*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6963*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6964*b7893ccfSSadaf Ebrahimi         if (skip) return;
6965*b7893ccfSSadaf Ebrahimi     }
6966*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6967*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6968*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6969*b7893ccfSSadaf Ebrahimi     }
6970*b7893ccfSSadaf Ebrahimi     DispatchCmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6971*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6972*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6973*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6974*b7893ccfSSadaf Ebrahimi     }
6975*b7893ccfSSadaf Ebrahimi }
6976*b7893ccfSSadaf Ebrahimi 
6977*b7893ccfSSadaf Ebrahimi 
6978*b7893ccfSSadaf Ebrahimi 
6979*b7893ccfSSadaf Ebrahimi 
6980*b7893ccfSSadaf Ebrahimi 
6981*b7893ccfSSadaf Ebrahimi 
GetShaderInfoAMD(VkDevice device,VkPipeline pipeline,VkShaderStageFlagBits shaderStage,VkShaderInfoTypeAMD infoType,size_t * pInfoSize,void * pInfo)6982*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetShaderInfoAMD(
6983*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6984*b7893ccfSSadaf Ebrahimi     VkPipeline                                  pipeline,
6985*b7893ccfSSadaf Ebrahimi     VkShaderStageFlagBits                       shaderStage,
6986*b7893ccfSSadaf Ebrahimi     VkShaderInfoTypeAMD                         infoType,
6987*b7893ccfSSadaf Ebrahimi     size_t*                                     pInfoSize,
6988*b7893ccfSSadaf Ebrahimi     void*                                       pInfo) {
6989*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6990*b7893ccfSSadaf Ebrahimi     bool skip = false;
6991*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6992*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6993*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo);
6994*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
6995*b7893ccfSSadaf Ebrahimi     }
6996*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
6997*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
6998*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo);
6999*b7893ccfSSadaf Ebrahimi     }
7000*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo);
7001*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7002*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7003*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo, result);
7004*b7893ccfSSadaf Ebrahimi     }
7005*b7893ccfSSadaf Ebrahimi     return result;
7006*b7893ccfSSadaf Ebrahimi }
7007*b7893ccfSSadaf Ebrahimi 
7008*b7893ccfSSadaf Ebrahimi 
7009*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_GGP
7010*b7893ccfSSadaf Ebrahimi 
CreateStreamDescriptorSurfaceGGP(VkInstance instance,const VkStreamDescriptorSurfaceCreateInfoGGP * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)7011*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateStreamDescriptorSurfaceGGP(
7012*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
7013*b7893ccfSSadaf Ebrahimi     const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
7014*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
7015*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface) {
7016*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
7017*b7893ccfSSadaf Ebrahimi     bool skip = false;
7018*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7019*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7020*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateStreamDescriptorSurfaceGGP(instance, pCreateInfo, pAllocator, pSurface);
7021*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7022*b7893ccfSSadaf Ebrahimi     }
7023*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7024*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7025*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateStreamDescriptorSurfaceGGP(instance, pCreateInfo, pAllocator, pSurface);
7026*b7893ccfSSadaf Ebrahimi     }
7027*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateStreamDescriptorSurfaceGGP(instance, pCreateInfo, pAllocator, pSurface);
7028*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7029*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7030*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateStreamDescriptorSurfaceGGP(instance, pCreateInfo, pAllocator, pSurface, result);
7031*b7893ccfSSadaf Ebrahimi     }
7032*b7893ccfSSadaf Ebrahimi     return result;
7033*b7893ccfSSadaf Ebrahimi }
7034*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_GGP
7035*b7893ccfSSadaf Ebrahimi 
7036*b7893ccfSSadaf Ebrahimi 
7037*b7893ccfSSadaf Ebrahimi 
7038*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceExternalImageFormatPropertiesNV(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkImageTiling tiling,VkImageUsageFlags usage,VkImageCreateFlags flags,VkExternalMemoryHandleTypeFlagsNV externalHandleType,VkExternalImageFormatPropertiesNV * pExternalImageFormatProperties)7039*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceExternalImageFormatPropertiesNV(
7040*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
7041*b7893ccfSSadaf Ebrahimi     VkFormat                                    format,
7042*b7893ccfSSadaf Ebrahimi     VkImageType                                 type,
7043*b7893ccfSSadaf Ebrahimi     VkImageTiling                               tiling,
7044*b7893ccfSSadaf Ebrahimi     VkImageUsageFlags                           usage,
7045*b7893ccfSSadaf Ebrahimi     VkImageCreateFlags                          flags,
7046*b7893ccfSSadaf Ebrahimi     VkExternalMemoryHandleTypeFlagsNV           externalHandleType,
7047*b7893ccfSSadaf Ebrahimi     VkExternalImageFormatPropertiesNV*          pExternalImageFormatProperties) {
7048*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
7049*b7893ccfSSadaf Ebrahimi     bool skip = false;
7050*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7051*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7052*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties);
7053*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7054*b7893ccfSSadaf Ebrahimi     }
7055*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7056*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7057*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties);
7058*b7893ccfSSadaf Ebrahimi     }
7059*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties);
7060*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7061*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7062*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties, result);
7063*b7893ccfSSadaf Ebrahimi     }
7064*b7893ccfSSadaf Ebrahimi     return result;
7065*b7893ccfSSadaf Ebrahimi }
7066*b7893ccfSSadaf Ebrahimi 
7067*b7893ccfSSadaf Ebrahimi 
7068*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
7069*b7893ccfSSadaf Ebrahimi 
GetMemoryWin32HandleNV(VkDevice device,VkDeviceMemory memory,VkExternalMemoryHandleTypeFlagsNV handleType,HANDLE * pHandle)7070*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleNV(
7071*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7072*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory,
7073*b7893ccfSSadaf Ebrahimi     VkExternalMemoryHandleTypeFlagsNV           handleType,
7074*b7893ccfSSadaf Ebrahimi     HANDLE*                                     pHandle) {
7075*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7076*b7893ccfSSadaf Ebrahimi     bool skip = false;
7077*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7078*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7079*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetMemoryWin32HandleNV(device, memory, handleType, pHandle);
7080*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7081*b7893ccfSSadaf Ebrahimi     }
7082*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7083*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7084*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetMemoryWin32HandleNV(device, memory, handleType, pHandle);
7085*b7893ccfSSadaf Ebrahimi     }
7086*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetMemoryWin32HandleNV(device, memory, handleType, pHandle);
7087*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7088*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7089*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetMemoryWin32HandleNV(device, memory, handleType, pHandle, result);
7090*b7893ccfSSadaf Ebrahimi     }
7091*b7893ccfSSadaf Ebrahimi     return result;
7092*b7893ccfSSadaf Ebrahimi }
7093*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
7094*b7893ccfSSadaf Ebrahimi 
7095*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
7096*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
7097*b7893ccfSSadaf Ebrahimi 
7098*b7893ccfSSadaf Ebrahimi 
7099*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_VI_NN
7100*b7893ccfSSadaf Ebrahimi 
CreateViSurfaceNN(VkInstance instance,const VkViSurfaceCreateInfoNN * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)7101*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateViSurfaceNN(
7102*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
7103*b7893ccfSSadaf Ebrahimi     const VkViSurfaceCreateInfoNN*              pCreateInfo,
7104*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
7105*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface) {
7106*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
7107*b7893ccfSSadaf Ebrahimi     bool skip = false;
7108*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7109*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7110*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface);
7111*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7112*b7893ccfSSadaf Ebrahimi     }
7113*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7114*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7115*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface);
7116*b7893ccfSSadaf Ebrahimi     }
7117*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface);
7118*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7119*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7120*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface, result);
7121*b7893ccfSSadaf Ebrahimi     }
7122*b7893ccfSSadaf Ebrahimi     return result;
7123*b7893ccfSSadaf Ebrahimi }
7124*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_VI_NN
7125*b7893ccfSSadaf Ebrahimi 
7126*b7893ccfSSadaf Ebrahimi 
7127*b7893ccfSSadaf Ebrahimi 
7128*b7893ccfSSadaf Ebrahimi 
7129*b7893ccfSSadaf Ebrahimi 
7130*b7893ccfSSadaf Ebrahimi 
CmdBeginConditionalRenderingEXT(VkCommandBuffer commandBuffer,const VkConditionalRenderingBeginInfoEXT * pConditionalRenderingBegin)7131*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBeginConditionalRenderingEXT(
7132*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
7133*b7893ccfSSadaf Ebrahimi     const VkConditionalRenderingBeginInfoEXT*   pConditionalRenderingBegin) {
7134*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7135*b7893ccfSSadaf Ebrahimi     bool skip = false;
7136*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7137*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7138*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin);
7139*b7893ccfSSadaf Ebrahimi         if (skip) return;
7140*b7893ccfSSadaf Ebrahimi     }
7141*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7142*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7143*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin);
7144*b7893ccfSSadaf Ebrahimi     }
7145*b7893ccfSSadaf Ebrahimi     DispatchCmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin);
7146*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7147*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7148*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin);
7149*b7893ccfSSadaf Ebrahimi     }
7150*b7893ccfSSadaf Ebrahimi }
7151*b7893ccfSSadaf Ebrahimi 
CmdEndConditionalRenderingEXT(VkCommandBuffer commandBuffer)7152*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdEndConditionalRenderingEXT(
7153*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer) {
7154*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7155*b7893ccfSSadaf Ebrahimi     bool skip = false;
7156*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7157*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7158*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdEndConditionalRenderingEXT(commandBuffer);
7159*b7893ccfSSadaf Ebrahimi         if (skip) return;
7160*b7893ccfSSadaf Ebrahimi     }
7161*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7162*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7163*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdEndConditionalRenderingEXT(commandBuffer);
7164*b7893ccfSSadaf Ebrahimi     }
7165*b7893ccfSSadaf Ebrahimi     DispatchCmdEndConditionalRenderingEXT(commandBuffer);
7166*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7167*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7168*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdEndConditionalRenderingEXT(commandBuffer);
7169*b7893ccfSSadaf Ebrahimi     }
7170*b7893ccfSSadaf Ebrahimi }
7171*b7893ccfSSadaf Ebrahimi 
7172*b7893ccfSSadaf Ebrahimi 
CmdProcessCommandsNVX(VkCommandBuffer commandBuffer,const VkCmdProcessCommandsInfoNVX * pProcessCommandsInfo)7173*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdProcessCommandsNVX(
7174*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
7175*b7893ccfSSadaf Ebrahimi     const VkCmdProcessCommandsInfoNVX*          pProcessCommandsInfo) {
7176*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7177*b7893ccfSSadaf Ebrahimi     bool skip = false;
7178*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7179*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7180*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdProcessCommandsNVX(commandBuffer, pProcessCommandsInfo);
7181*b7893ccfSSadaf Ebrahimi         if (skip) return;
7182*b7893ccfSSadaf Ebrahimi     }
7183*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7184*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7185*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdProcessCommandsNVX(commandBuffer, pProcessCommandsInfo);
7186*b7893ccfSSadaf Ebrahimi     }
7187*b7893ccfSSadaf Ebrahimi     DispatchCmdProcessCommandsNVX(commandBuffer, pProcessCommandsInfo);
7188*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7189*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7190*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdProcessCommandsNVX(commandBuffer, pProcessCommandsInfo);
7191*b7893ccfSSadaf Ebrahimi     }
7192*b7893ccfSSadaf Ebrahimi }
7193*b7893ccfSSadaf Ebrahimi 
CmdReserveSpaceForCommandsNVX(VkCommandBuffer commandBuffer,const VkCmdReserveSpaceForCommandsInfoNVX * pReserveSpaceInfo)7194*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdReserveSpaceForCommandsNVX(
7195*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
7196*b7893ccfSSadaf Ebrahimi     const VkCmdReserveSpaceForCommandsInfoNVX*  pReserveSpaceInfo) {
7197*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7198*b7893ccfSSadaf Ebrahimi     bool skip = false;
7199*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7200*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7201*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdReserveSpaceForCommandsNVX(commandBuffer, pReserveSpaceInfo);
7202*b7893ccfSSadaf Ebrahimi         if (skip) return;
7203*b7893ccfSSadaf Ebrahimi     }
7204*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7205*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7206*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdReserveSpaceForCommandsNVX(commandBuffer, pReserveSpaceInfo);
7207*b7893ccfSSadaf Ebrahimi     }
7208*b7893ccfSSadaf Ebrahimi     DispatchCmdReserveSpaceForCommandsNVX(commandBuffer, pReserveSpaceInfo);
7209*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7210*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7211*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdReserveSpaceForCommandsNVX(commandBuffer, pReserveSpaceInfo);
7212*b7893ccfSSadaf Ebrahimi     }
7213*b7893ccfSSadaf Ebrahimi }
7214*b7893ccfSSadaf Ebrahimi 
CreateIndirectCommandsLayoutNVX(VkDevice device,const VkIndirectCommandsLayoutCreateInfoNVX * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkIndirectCommandsLayoutNVX * pIndirectCommandsLayout)7215*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateIndirectCommandsLayoutNVX(
7216*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7217*b7893ccfSSadaf Ebrahimi     const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo,
7218*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
7219*b7893ccfSSadaf Ebrahimi     VkIndirectCommandsLayoutNVX*                pIndirectCommandsLayout) {
7220*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7221*b7893ccfSSadaf Ebrahimi     bool skip = false;
7222*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7223*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7224*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateIndirectCommandsLayoutNVX(device, pCreateInfo, pAllocator, pIndirectCommandsLayout);
7225*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7226*b7893ccfSSadaf Ebrahimi     }
7227*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7228*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7229*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateIndirectCommandsLayoutNVX(device, pCreateInfo, pAllocator, pIndirectCommandsLayout);
7230*b7893ccfSSadaf Ebrahimi     }
7231*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateIndirectCommandsLayoutNVX(device, pCreateInfo, pAllocator, pIndirectCommandsLayout);
7232*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7233*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7234*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateIndirectCommandsLayoutNVX(device, pCreateInfo, pAllocator, pIndirectCommandsLayout, result);
7235*b7893ccfSSadaf Ebrahimi     }
7236*b7893ccfSSadaf Ebrahimi     return result;
7237*b7893ccfSSadaf Ebrahimi }
7238*b7893ccfSSadaf Ebrahimi 
DestroyIndirectCommandsLayoutNVX(VkDevice device,VkIndirectCommandsLayoutNVX indirectCommandsLayout,const VkAllocationCallbacks * pAllocator)7239*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyIndirectCommandsLayoutNVX(
7240*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7241*b7893ccfSSadaf Ebrahimi     VkIndirectCommandsLayoutNVX                 indirectCommandsLayout,
7242*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
7243*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7244*b7893ccfSSadaf Ebrahimi     bool skip = false;
7245*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7246*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7247*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyIndirectCommandsLayoutNVX(device, indirectCommandsLayout, pAllocator);
7248*b7893ccfSSadaf Ebrahimi         if (skip) return;
7249*b7893ccfSSadaf Ebrahimi     }
7250*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7251*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7252*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyIndirectCommandsLayoutNVX(device, indirectCommandsLayout, pAllocator);
7253*b7893ccfSSadaf Ebrahimi     }
7254*b7893ccfSSadaf Ebrahimi     DispatchDestroyIndirectCommandsLayoutNVX(device, indirectCommandsLayout, pAllocator);
7255*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7256*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7257*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyIndirectCommandsLayoutNVX(device, indirectCommandsLayout, pAllocator);
7258*b7893ccfSSadaf Ebrahimi     }
7259*b7893ccfSSadaf Ebrahimi }
7260*b7893ccfSSadaf Ebrahimi 
CreateObjectTableNVX(VkDevice device,const VkObjectTableCreateInfoNVX * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkObjectTableNVX * pObjectTable)7261*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateObjectTableNVX(
7262*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7263*b7893ccfSSadaf Ebrahimi     const VkObjectTableCreateInfoNVX*           pCreateInfo,
7264*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
7265*b7893ccfSSadaf Ebrahimi     VkObjectTableNVX*                           pObjectTable) {
7266*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7267*b7893ccfSSadaf Ebrahimi     bool skip = false;
7268*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7269*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7270*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateObjectTableNVX(device, pCreateInfo, pAllocator, pObjectTable);
7271*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7272*b7893ccfSSadaf Ebrahimi     }
7273*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7274*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7275*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateObjectTableNVX(device, pCreateInfo, pAllocator, pObjectTable);
7276*b7893ccfSSadaf Ebrahimi     }
7277*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateObjectTableNVX(device, pCreateInfo, pAllocator, pObjectTable);
7278*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7279*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7280*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateObjectTableNVX(device, pCreateInfo, pAllocator, pObjectTable, result);
7281*b7893ccfSSadaf Ebrahimi     }
7282*b7893ccfSSadaf Ebrahimi     return result;
7283*b7893ccfSSadaf Ebrahimi }
7284*b7893ccfSSadaf Ebrahimi 
DestroyObjectTableNVX(VkDevice device,VkObjectTableNVX objectTable,const VkAllocationCallbacks * pAllocator)7285*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyObjectTableNVX(
7286*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7287*b7893ccfSSadaf Ebrahimi     VkObjectTableNVX                            objectTable,
7288*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
7289*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7290*b7893ccfSSadaf Ebrahimi     bool skip = false;
7291*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7292*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7293*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyObjectTableNVX(device, objectTable, pAllocator);
7294*b7893ccfSSadaf Ebrahimi         if (skip) return;
7295*b7893ccfSSadaf Ebrahimi     }
7296*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7297*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7298*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyObjectTableNVX(device, objectTable, pAllocator);
7299*b7893ccfSSadaf Ebrahimi     }
7300*b7893ccfSSadaf Ebrahimi     DispatchDestroyObjectTableNVX(device, objectTable, pAllocator);
7301*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7302*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7303*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyObjectTableNVX(device, objectTable, pAllocator);
7304*b7893ccfSSadaf Ebrahimi     }
7305*b7893ccfSSadaf Ebrahimi }
7306*b7893ccfSSadaf Ebrahimi 
RegisterObjectsNVX(VkDevice device,VkObjectTableNVX objectTable,uint32_t objectCount,const VkObjectTableEntryNVX * const * ppObjectTableEntries,const uint32_t * pObjectIndices)7307*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL RegisterObjectsNVX(
7308*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7309*b7893ccfSSadaf Ebrahimi     VkObjectTableNVX                            objectTable,
7310*b7893ccfSSadaf Ebrahimi     uint32_t                                    objectCount,
7311*b7893ccfSSadaf Ebrahimi     const VkObjectTableEntryNVX* const*         ppObjectTableEntries,
7312*b7893ccfSSadaf Ebrahimi     const uint32_t*                             pObjectIndices) {
7313*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7314*b7893ccfSSadaf Ebrahimi     bool skip = false;
7315*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7316*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7317*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateRegisterObjectsNVX(device, objectTable, objectCount, ppObjectTableEntries, pObjectIndices);
7318*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7319*b7893ccfSSadaf Ebrahimi     }
7320*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7321*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7322*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordRegisterObjectsNVX(device, objectTable, objectCount, ppObjectTableEntries, pObjectIndices);
7323*b7893ccfSSadaf Ebrahimi     }
7324*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchRegisterObjectsNVX(device, objectTable, objectCount, ppObjectTableEntries, pObjectIndices);
7325*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7326*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7327*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordRegisterObjectsNVX(device, objectTable, objectCount, ppObjectTableEntries, pObjectIndices, result);
7328*b7893ccfSSadaf Ebrahimi     }
7329*b7893ccfSSadaf Ebrahimi     return result;
7330*b7893ccfSSadaf Ebrahimi }
7331*b7893ccfSSadaf Ebrahimi 
UnregisterObjectsNVX(VkDevice device,VkObjectTableNVX objectTable,uint32_t objectCount,const VkObjectEntryTypeNVX * pObjectEntryTypes,const uint32_t * pObjectIndices)7332*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL UnregisterObjectsNVX(
7333*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7334*b7893ccfSSadaf Ebrahimi     VkObjectTableNVX                            objectTable,
7335*b7893ccfSSadaf Ebrahimi     uint32_t                                    objectCount,
7336*b7893ccfSSadaf Ebrahimi     const VkObjectEntryTypeNVX*                 pObjectEntryTypes,
7337*b7893ccfSSadaf Ebrahimi     const uint32_t*                             pObjectIndices) {
7338*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7339*b7893ccfSSadaf Ebrahimi     bool skip = false;
7340*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7341*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7342*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateUnregisterObjectsNVX(device, objectTable, objectCount, pObjectEntryTypes, pObjectIndices);
7343*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7344*b7893ccfSSadaf Ebrahimi     }
7345*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7346*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7347*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordUnregisterObjectsNVX(device, objectTable, objectCount, pObjectEntryTypes, pObjectIndices);
7348*b7893ccfSSadaf Ebrahimi     }
7349*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchUnregisterObjectsNVX(device, objectTable, objectCount, pObjectEntryTypes, pObjectIndices);
7350*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7351*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7352*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordUnregisterObjectsNVX(device, objectTable, objectCount, pObjectEntryTypes, pObjectIndices, result);
7353*b7893ccfSSadaf Ebrahimi     }
7354*b7893ccfSSadaf Ebrahimi     return result;
7355*b7893ccfSSadaf Ebrahimi }
7356*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceGeneratedCommandsPropertiesNVX(VkPhysicalDevice physicalDevice,VkDeviceGeneratedCommandsFeaturesNVX * pFeatures,VkDeviceGeneratedCommandsLimitsNVX * pLimits)7357*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceGeneratedCommandsPropertiesNVX(
7358*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
7359*b7893ccfSSadaf Ebrahimi     VkDeviceGeneratedCommandsFeaturesNVX*       pFeatures,
7360*b7893ccfSSadaf Ebrahimi     VkDeviceGeneratedCommandsLimitsNVX*         pLimits) {
7361*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
7362*b7893ccfSSadaf Ebrahimi     bool skip = false;
7363*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7364*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7365*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceGeneratedCommandsPropertiesNVX(physicalDevice, pFeatures, pLimits);
7366*b7893ccfSSadaf Ebrahimi         if (skip) return;
7367*b7893ccfSSadaf Ebrahimi     }
7368*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7369*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7370*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceGeneratedCommandsPropertiesNVX(physicalDevice, pFeatures, pLimits);
7371*b7893ccfSSadaf Ebrahimi     }
7372*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceGeneratedCommandsPropertiesNVX(physicalDevice, pFeatures, pLimits);
7373*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7374*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7375*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceGeneratedCommandsPropertiesNVX(physicalDevice, pFeatures, pLimits);
7376*b7893ccfSSadaf Ebrahimi     }
7377*b7893ccfSSadaf Ebrahimi }
7378*b7893ccfSSadaf Ebrahimi 
7379*b7893ccfSSadaf Ebrahimi 
CmdSetViewportWScalingNV(VkCommandBuffer commandBuffer,uint32_t firstViewport,uint32_t viewportCount,const VkViewportWScalingNV * pViewportWScalings)7380*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetViewportWScalingNV(
7381*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
7382*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstViewport,
7383*b7893ccfSSadaf Ebrahimi     uint32_t                                    viewportCount,
7384*b7893ccfSSadaf Ebrahimi     const VkViewportWScalingNV*                 pViewportWScalings) {
7385*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7386*b7893ccfSSadaf Ebrahimi     bool skip = false;
7387*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7388*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7389*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings);
7390*b7893ccfSSadaf Ebrahimi         if (skip) return;
7391*b7893ccfSSadaf Ebrahimi     }
7392*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7393*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7394*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings);
7395*b7893ccfSSadaf Ebrahimi     }
7396*b7893ccfSSadaf Ebrahimi     DispatchCmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings);
7397*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7398*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7399*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings);
7400*b7893ccfSSadaf Ebrahimi     }
7401*b7893ccfSSadaf Ebrahimi }
7402*b7893ccfSSadaf Ebrahimi 
7403*b7893ccfSSadaf Ebrahimi 
ReleaseDisplayEXT(VkPhysicalDevice physicalDevice,VkDisplayKHR display)7404*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL ReleaseDisplayEXT(
7405*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
7406*b7893ccfSSadaf Ebrahimi     VkDisplayKHR                                display) {
7407*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
7408*b7893ccfSSadaf Ebrahimi     bool skip = false;
7409*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7410*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7411*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateReleaseDisplayEXT(physicalDevice, display);
7412*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7413*b7893ccfSSadaf Ebrahimi     }
7414*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7415*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7416*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordReleaseDisplayEXT(physicalDevice, display);
7417*b7893ccfSSadaf Ebrahimi     }
7418*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchReleaseDisplayEXT(physicalDevice, display);
7419*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7420*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7421*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordReleaseDisplayEXT(physicalDevice, display, result);
7422*b7893ccfSSadaf Ebrahimi     }
7423*b7893ccfSSadaf Ebrahimi     return result;
7424*b7893ccfSSadaf Ebrahimi }
7425*b7893ccfSSadaf Ebrahimi 
7426*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
7427*b7893ccfSSadaf Ebrahimi 
AcquireXlibDisplayEXT(VkPhysicalDevice physicalDevice,Display * dpy,VkDisplayKHR display)7428*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL AcquireXlibDisplayEXT(
7429*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
7430*b7893ccfSSadaf Ebrahimi     Display*                                    dpy,
7431*b7893ccfSSadaf Ebrahimi     VkDisplayKHR                                display) {
7432*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
7433*b7893ccfSSadaf Ebrahimi     bool skip = false;
7434*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7435*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7436*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateAcquireXlibDisplayEXT(physicalDevice, dpy, display);
7437*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7438*b7893ccfSSadaf Ebrahimi     }
7439*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7440*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7441*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordAcquireXlibDisplayEXT(physicalDevice, dpy, display);
7442*b7893ccfSSadaf Ebrahimi     }
7443*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchAcquireXlibDisplayEXT(physicalDevice, dpy, display);
7444*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7445*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7446*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordAcquireXlibDisplayEXT(physicalDevice, dpy, display, result);
7447*b7893ccfSSadaf Ebrahimi     }
7448*b7893ccfSSadaf Ebrahimi     return result;
7449*b7893ccfSSadaf Ebrahimi }
7450*b7893ccfSSadaf Ebrahimi 
GetRandROutputDisplayEXT(VkPhysicalDevice physicalDevice,Display * dpy,RROutput rrOutput,VkDisplayKHR * pDisplay)7451*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetRandROutputDisplayEXT(
7452*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
7453*b7893ccfSSadaf Ebrahimi     Display*                                    dpy,
7454*b7893ccfSSadaf Ebrahimi     RROutput                                    rrOutput,
7455*b7893ccfSSadaf Ebrahimi     VkDisplayKHR*                               pDisplay) {
7456*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
7457*b7893ccfSSadaf Ebrahimi     bool skip = false;
7458*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7459*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7460*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetRandROutputDisplayEXT(physicalDevice, dpy, rrOutput, pDisplay);
7461*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7462*b7893ccfSSadaf Ebrahimi     }
7463*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7464*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7465*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetRandROutputDisplayEXT(physicalDevice, dpy, rrOutput, pDisplay);
7466*b7893ccfSSadaf Ebrahimi     }
7467*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetRandROutputDisplayEXT(physicalDevice, dpy, rrOutput, pDisplay);
7468*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7469*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7470*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetRandROutputDisplayEXT(physicalDevice, dpy, rrOutput, pDisplay, result);
7471*b7893ccfSSadaf Ebrahimi     }
7472*b7893ccfSSadaf Ebrahimi     return result;
7473*b7893ccfSSadaf Ebrahimi }
7474*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
7475*b7893ccfSSadaf Ebrahimi 
7476*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceSurfaceCapabilities2EXT(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,VkSurfaceCapabilities2EXT * pSurfaceCapabilities)7477*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2EXT(
7478*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
7479*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
7480*b7893ccfSSadaf Ebrahimi     VkSurfaceCapabilities2EXT*                  pSurfaceCapabilities) {
7481*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
7482*b7893ccfSSadaf Ebrahimi     bool skip = false;
7483*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7484*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7485*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities);
7486*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7487*b7893ccfSSadaf Ebrahimi     }
7488*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7489*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7490*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities);
7491*b7893ccfSSadaf Ebrahimi     }
7492*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities);
7493*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7494*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7495*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities, result);
7496*b7893ccfSSadaf Ebrahimi     }
7497*b7893ccfSSadaf Ebrahimi     return result;
7498*b7893ccfSSadaf Ebrahimi }
7499*b7893ccfSSadaf Ebrahimi 
7500*b7893ccfSSadaf Ebrahimi 
DisplayPowerControlEXT(VkDevice device,VkDisplayKHR display,const VkDisplayPowerInfoEXT * pDisplayPowerInfo)7501*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL DisplayPowerControlEXT(
7502*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7503*b7893ccfSSadaf Ebrahimi     VkDisplayKHR                                display,
7504*b7893ccfSSadaf Ebrahimi     const VkDisplayPowerInfoEXT*                pDisplayPowerInfo) {
7505*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7506*b7893ccfSSadaf Ebrahimi     bool skip = false;
7507*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7508*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7509*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDisplayPowerControlEXT(device, display, pDisplayPowerInfo);
7510*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7511*b7893ccfSSadaf Ebrahimi     }
7512*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7513*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7514*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDisplayPowerControlEXT(device, display, pDisplayPowerInfo);
7515*b7893ccfSSadaf Ebrahimi     }
7516*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchDisplayPowerControlEXT(device, display, pDisplayPowerInfo);
7517*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7518*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7519*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDisplayPowerControlEXT(device, display, pDisplayPowerInfo, result);
7520*b7893ccfSSadaf Ebrahimi     }
7521*b7893ccfSSadaf Ebrahimi     return result;
7522*b7893ccfSSadaf Ebrahimi }
7523*b7893ccfSSadaf Ebrahimi 
RegisterDeviceEventEXT(VkDevice device,const VkDeviceEventInfoEXT * pDeviceEventInfo,const VkAllocationCallbacks * pAllocator,VkFence * pFence)7524*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL RegisterDeviceEventEXT(
7525*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7526*b7893ccfSSadaf Ebrahimi     const VkDeviceEventInfoEXT*                 pDeviceEventInfo,
7527*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
7528*b7893ccfSSadaf Ebrahimi     VkFence*                                    pFence) {
7529*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7530*b7893ccfSSadaf Ebrahimi     bool skip = false;
7531*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7532*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7533*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateRegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence);
7534*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7535*b7893ccfSSadaf Ebrahimi     }
7536*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7537*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7538*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordRegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence);
7539*b7893ccfSSadaf Ebrahimi     }
7540*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchRegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence);
7541*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7542*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7543*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordRegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence, result);
7544*b7893ccfSSadaf Ebrahimi     }
7545*b7893ccfSSadaf Ebrahimi     return result;
7546*b7893ccfSSadaf Ebrahimi }
7547*b7893ccfSSadaf Ebrahimi 
RegisterDisplayEventEXT(VkDevice device,VkDisplayKHR display,const VkDisplayEventInfoEXT * pDisplayEventInfo,const VkAllocationCallbacks * pAllocator,VkFence * pFence)7548*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL RegisterDisplayEventEXT(
7549*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7550*b7893ccfSSadaf Ebrahimi     VkDisplayKHR                                display,
7551*b7893ccfSSadaf Ebrahimi     const VkDisplayEventInfoEXT*                pDisplayEventInfo,
7552*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
7553*b7893ccfSSadaf Ebrahimi     VkFence*                                    pFence) {
7554*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7555*b7893ccfSSadaf Ebrahimi     bool skip = false;
7556*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7557*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7558*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateRegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence);
7559*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7560*b7893ccfSSadaf Ebrahimi     }
7561*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7562*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7563*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordRegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence);
7564*b7893ccfSSadaf Ebrahimi     }
7565*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchRegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence);
7566*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7567*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7568*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordRegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence, result);
7569*b7893ccfSSadaf Ebrahimi     }
7570*b7893ccfSSadaf Ebrahimi     return result;
7571*b7893ccfSSadaf Ebrahimi }
7572*b7893ccfSSadaf Ebrahimi 
GetSwapchainCounterEXT(VkDevice device,VkSwapchainKHR swapchain,VkSurfaceCounterFlagBitsEXT counter,uint64_t * pCounterValue)7573*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainCounterEXT(
7574*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7575*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain,
7576*b7893ccfSSadaf Ebrahimi     VkSurfaceCounterFlagBitsEXT                 counter,
7577*b7893ccfSSadaf Ebrahimi     uint64_t*                                   pCounterValue) {
7578*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7579*b7893ccfSSadaf Ebrahimi     bool skip = false;
7580*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7581*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7582*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetSwapchainCounterEXT(device, swapchain, counter, pCounterValue);
7583*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7584*b7893ccfSSadaf Ebrahimi     }
7585*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7586*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7587*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetSwapchainCounterEXT(device, swapchain, counter, pCounterValue);
7588*b7893ccfSSadaf Ebrahimi     }
7589*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetSwapchainCounterEXT(device, swapchain, counter, pCounterValue);
7590*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7591*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7592*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetSwapchainCounterEXT(device, swapchain, counter, pCounterValue, result);
7593*b7893ccfSSadaf Ebrahimi     }
7594*b7893ccfSSadaf Ebrahimi     return result;
7595*b7893ccfSSadaf Ebrahimi }
7596*b7893ccfSSadaf Ebrahimi 
7597*b7893ccfSSadaf Ebrahimi 
GetRefreshCycleDurationGOOGLE(VkDevice device,VkSwapchainKHR swapchain,VkRefreshCycleDurationGOOGLE * pDisplayTimingProperties)7598*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetRefreshCycleDurationGOOGLE(
7599*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7600*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain,
7601*b7893ccfSSadaf Ebrahimi     VkRefreshCycleDurationGOOGLE*               pDisplayTimingProperties) {
7602*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7603*b7893ccfSSadaf Ebrahimi     bool skip = false;
7604*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7605*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7606*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties);
7607*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7608*b7893ccfSSadaf Ebrahimi     }
7609*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7610*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7611*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties);
7612*b7893ccfSSadaf Ebrahimi     }
7613*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties);
7614*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7615*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7616*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties, result);
7617*b7893ccfSSadaf Ebrahimi     }
7618*b7893ccfSSadaf Ebrahimi     return result;
7619*b7893ccfSSadaf Ebrahimi }
7620*b7893ccfSSadaf Ebrahimi 
GetPastPresentationTimingGOOGLE(VkDevice device,VkSwapchainKHR swapchain,uint32_t * pPresentationTimingCount,VkPastPresentationTimingGOOGLE * pPresentationTimings)7621*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPastPresentationTimingGOOGLE(
7622*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7623*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain,
7624*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPresentationTimingCount,
7625*b7893ccfSSadaf Ebrahimi     VkPastPresentationTimingGOOGLE*             pPresentationTimings) {
7626*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7627*b7893ccfSSadaf Ebrahimi     bool skip = false;
7628*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7629*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7630*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings);
7631*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7632*b7893ccfSSadaf Ebrahimi     }
7633*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7634*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7635*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings);
7636*b7893ccfSSadaf Ebrahimi     }
7637*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings);
7638*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7639*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7640*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings, result);
7641*b7893ccfSSadaf Ebrahimi     }
7642*b7893ccfSSadaf Ebrahimi     return result;
7643*b7893ccfSSadaf Ebrahimi }
7644*b7893ccfSSadaf Ebrahimi 
7645*b7893ccfSSadaf Ebrahimi 
7646*b7893ccfSSadaf Ebrahimi 
7647*b7893ccfSSadaf Ebrahimi 
7648*b7893ccfSSadaf Ebrahimi 
7649*b7893ccfSSadaf Ebrahimi 
7650*b7893ccfSSadaf Ebrahimi 
CmdSetDiscardRectangleEXT(VkCommandBuffer commandBuffer,uint32_t firstDiscardRectangle,uint32_t discardRectangleCount,const VkRect2D * pDiscardRectangles)7651*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetDiscardRectangleEXT(
7652*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
7653*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstDiscardRectangle,
7654*b7893ccfSSadaf Ebrahimi     uint32_t                                    discardRectangleCount,
7655*b7893ccfSSadaf Ebrahimi     const VkRect2D*                             pDiscardRectangles) {
7656*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7657*b7893ccfSSadaf Ebrahimi     bool skip = false;
7658*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7659*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7660*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
7661*b7893ccfSSadaf Ebrahimi         if (skip) return;
7662*b7893ccfSSadaf Ebrahimi     }
7663*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7664*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7665*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
7666*b7893ccfSSadaf Ebrahimi     }
7667*b7893ccfSSadaf Ebrahimi     DispatchCmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
7668*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7669*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7670*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
7671*b7893ccfSSadaf Ebrahimi     }
7672*b7893ccfSSadaf Ebrahimi }
7673*b7893ccfSSadaf Ebrahimi 
7674*b7893ccfSSadaf Ebrahimi 
7675*b7893ccfSSadaf Ebrahimi 
7676*b7893ccfSSadaf Ebrahimi 
7677*b7893ccfSSadaf Ebrahimi 
SetHdrMetadataEXT(VkDevice device,uint32_t swapchainCount,const VkSwapchainKHR * pSwapchains,const VkHdrMetadataEXT * pMetadata)7678*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL SetHdrMetadataEXT(
7679*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7680*b7893ccfSSadaf Ebrahimi     uint32_t                                    swapchainCount,
7681*b7893ccfSSadaf Ebrahimi     const VkSwapchainKHR*                       pSwapchains,
7682*b7893ccfSSadaf Ebrahimi     const VkHdrMetadataEXT*                     pMetadata) {
7683*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7684*b7893ccfSSadaf Ebrahimi     bool skip = false;
7685*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7686*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7687*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateSetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
7688*b7893ccfSSadaf Ebrahimi         if (skip) return;
7689*b7893ccfSSadaf Ebrahimi     }
7690*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7691*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7692*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordSetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
7693*b7893ccfSSadaf Ebrahimi     }
7694*b7893ccfSSadaf Ebrahimi     DispatchSetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
7695*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7696*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7697*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordSetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
7698*b7893ccfSSadaf Ebrahimi     }
7699*b7893ccfSSadaf Ebrahimi }
7700*b7893ccfSSadaf Ebrahimi 
7701*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_IOS_MVK
7702*b7893ccfSSadaf Ebrahimi 
CreateIOSSurfaceMVK(VkInstance instance,const VkIOSSurfaceCreateInfoMVK * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)7703*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateIOSSurfaceMVK(
7704*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
7705*b7893ccfSSadaf Ebrahimi     const VkIOSSurfaceCreateInfoMVK*            pCreateInfo,
7706*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
7707*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface) {
7708*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
7709*b7893ccfSSadaf Ebrahimi     bool skip = false;
7710*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7711*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7712*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
7713*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7714*b7893ccfSSadaf Ebrahimi     }
7715*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7716*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7717*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
7718*b7893ccfSSadaf Ebrahimi     }
7719*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
7720*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7721*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7722*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface, result);
7723*b7893ccfSSadaf Ebrahimi     }
7724*b7893ccfSSadaf Ebrahimi     return result;
7725*b7893ccfSSadaf Ebrahimi }
7726*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_IOS_MVK
7727*b7893ccfSSadaf Ebrahimi 
7728*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_MACOS_MVK
7729*b7893ccfSSadaf Ebrahimi 
CreateMacOSSurfaceMVK(VkInstance instance,const VkMacOSSurfaceCreateInfoMVK * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)7730*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateMacOSSurfaceMVK(
7731*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
7732*b7893ccfSSadaf Ebrahimi     const VkMacOSSurfaceCreateInfoMVK*          pCreateInfo,
7733*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
7734*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface) {
7735*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
7736*b7893ccfSSadaf Ebrahimi     bool skip = false;
7737*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7738*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7739*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
7740*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7741*b7893ccfSSadaf Ebrahimi     }
7742*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7743*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7744*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
7745*b7893ccfSSadaf Ebrahimi     }
7746*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
7747*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7748*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7749*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface, result);
7750*b7893ccfSSadaf Ebrahimi     }
7751*b7893ccfSSadaf Ebrahimi     return result;
7752*b7893ccfSSadaf Ebrahimi }
7753*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_MACOS_MVK
7754*b7893ccfSSadaf Ebrahimi 
7755*b7893ccfSSadaf Ebrahimi 
7756*b7893ccfSSadaf Ebrahimi 
7757*b7893ccfSSadaf Ebrahimi 
SetDebugUtilsObjectNameEXT(VkDevice device,const VkDebugUtilsObjectNameInfoEXT * pNameInfo)7758*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectNameEXT(
7759*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7760*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsObjectNameInfoEXT*        pNameInfo) {
7761*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7762*b7893ccfSSadaf Ebrahimi     bool skip = false;
7763*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7764*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7765*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateSetDebugUtilsObjectNameEXT(device, pNameInfo);
7766*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7767*b7893ccfSSadaf Ebrahimi     }
7768*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7769*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7770*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordSetDebugUtilsObjectNameEXT(device, pNameInfo);
7771*b7893ccfSSadaf Ebrahimi     }
7772*b7893ccfSSadaf Ebrahimi     layer_data->report_data->DebugReportSetUtilsObjectName(pNameInfo);
7773*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchSetDebugUtilsObjectNameEXT(device, pNameInfo);
7774*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7775*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7776*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordSetDebugUtilsObjectNameEXT(device, pNameInfo, result);
7777*b7893ccfSSadaf Ebrahimi     }
7778*b7893ccfSSadaf Ebrahimi     return result;
7779*b7893ccfSSadaf Ebrahimi }
7780*b7893ccfSSadaf Ebrahimi 
SetDebugUtilsObjectTagEXT(VkDevice device,const VkDebugUtilsObjectTagInfoEXT * pTagInfo)7781*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL SetDebugUtilsObjectTagEXT(
7782*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
7783*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsObjectTagInfoEXT*         pTagInfo) {
7784*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
7785*b7893ccfSSadaf Ebrahimi     bool skip = false;
7786*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7787*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7788*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateSetDebugUtilsObjectTagEXT(device, pTagInfo);
7789*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7790*b7893ccfSSadaf Ebrahimi     }
7791*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7792*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7793*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordSetDebugUtilsObjectTagEXT(device, pTagInfo);
7794*b7893ccfSSadaf Ebrahimi     }
7795*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchSetDebugUtilsObjectTagEXT(device, pTagInfo);
7796*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7797*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7798*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordSetDebugUtilsObjectTagEXT(device, pTagInfo, result);
7799*b7893ccfSSadaf Ebrahimi     }
7800*b7893ccfSSadaf Ebrahimi     return result;
7801*b7893ccfSSadaf Ebrahimi }
7802*b7893ccfSSadaf Ebrahimi 
QueueBeginDebugUtilsLabelEXT(VkQueue queue,const VkDebugUtilsLabelEXT * pLabelInfo)7803*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL QueueBeginDebugUtilsLabelEXT(
7804*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue,
7805*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsLabelEXT*                 pLabelInfo) {
7806*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
7807*b7893ccfSSadaf Ebrahimi     bool skip = false;
7808*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7809*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7810*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateQueueBeginDebugUtilsLabelEXT(queue, pLabelInfo);
7811*b7893ccfSSadaf Ebrahimi         if (skip) return;
7812*b7893ccfSSadaf Ebrahimi     }
7813*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7814*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7815*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordQueueBeginDebugUtilsLabelEXT(queue, pLabelInfo);
7816*b7893ccfSSadaf Ebrahimi     }
7817*b7893ccfSSadaf Ebrahimi     BeginQueueDebugUtilsLabel(layer_data->report_data, queue, pLabelInfo);
7818*b7893ccfSSadaf Ebrahimi     DispatchQueueBeginDebugUtilsLabelEXT(queue, pLabelInfo);
7819*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7820*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7821*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordQueueBeginDebugUtilsLabelEXT(queue, pLabelInfo);
7822*b7893ccfSSadaf Ebrahimi     }
7823*b7893ccfSSadaf Ebrahimi }
7824*b7893ccfSSadaf Ebrahimi 
QueueEndDebugUtilsLabelEXT(VkQueue queue)7825*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL QueueEndDebugUtilsLabelEXT(
7826*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue) {
7827*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
7828*b7893ccfSSadaf Ebrahimi     bool skip = false;
7829*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7830*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7831*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateQueueEndDebugUtilsLabelEXT(queue);
7832*b7893ccfSSadaf Ebrahimi         if (skip) return;
7833*b7893ccfSSadaf Ebrahimi     }
7834*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7835*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7836*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordQueueEndDebugUtilsLabelEXT(queue);
7837*b7893ccfSSadaf Ebrahimi     }
7838*b7893ccfSSadaf Ebrahimi     DispatchQueueEndDebugUtilsLabelEXT(queue);
7839*b7893ccfSSadaf Ebrahimi     EndQueueDebugUtilsLabel(layer_data->report_data, queue);
7840*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7841*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7842*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordQueueEndDebugUtilsLabelEXT(queue);
7843*b7893ccfSSadaf Ebrahimi     }
7844*b7893ccfSSadaf Ebrahimi }
7845*b7893ccfSSadaf Ebrahimi 
QueueInsertDebugUtilsLabelEXT(VkQueue queue,const VkDebugUtilsLabelEXT * pLabelInfo)7846*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL QueueInsertDebugUtilsLabelEXT(
7847*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue,
7848*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsLabelEXT*                 pLabelInfo) {
7849*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
7850*b7893ccfSSadaf Ebrahimi     bool skip = false;
7851*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7852*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7853*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateQueueInsertDebugUtilsLabelEXT(queue, pLabelInfo);
7854*b7893ccfSSadaf Ebrahimi         if (skip) return;
7855*b7893ccfSSadaf Ebrahimi     }
7856*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7857*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7858*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordQueueInsertDebugUtilsLabelEXT(queue, pLabelInfo);
7859*b7893ccfSSadaf Ebrahimi     }
7860*b7893ccfSSadaf Ebrahimi     InsertQueueDebugUtilsLabel(layer_data->report_data, queue, pLabelInfo);
7861*b7893ccfSSadaf Ebrahimi     DispatchQueueInsertDebugUtilsLabelEXT(queue, pLabelInfo);
7862*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7863*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7864*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordQueueInsertDebugUtilsLabelEXT(queue, pLabelInfo);
7865*b7893ccfSSadaf Ebrahimi     }
7866*b7893ccfSSadaf Ebrahimi }
7867*b7893ccfSSadaf Ebrahimi 
CmdBeginDebugUtilsLabelEXT(VkCommandBuffer commandBuffer,const VkDebugUtilsLabelEXT * pLabelInfo)7868*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBeginDebugUtilsLabelEXT(
7869*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
7870*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsLabelEXT*                 pLabelInfo) {
7871*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7872*b7893ccfSSadaf Ebrahimi     bool skip = false;
7873*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7874*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7875*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7876*b7893ccfSSadaf Ebrahimi         if (skip) return;
7877*b7893ccfSSadaf Ebrahimi     }
7878*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7879*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7880*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7881*b7893ccfSSadaf Ebrahimi     }
7882*b7893ccfSSadaf Ebrahimi     DispatchCmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7883*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7884*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7885*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7886*b7893ccfSSadaf Ebrahimi     }
7887*b7893ccfSSadaf Ebrahimi }
7888*b7893ccfSSadaf Ebrahimi 
CmdEndDebugUtilsLabelEXT(VkCommandBuffer commandBuffer)7889*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdEndDebugUtilsLabelEXT(
7890*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer) {
7891*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7892*b7893ccfSSadaf Ebrahimi     bool skip = false;
7893*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7894*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7895*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdEndDebugUtilsLabelEXT(commandBuffer);
7896*b7893ccfSSadaf Ebrahimi         if (skip) return;
7897*b7893ccfSSadaf Ebrahimi     }
7898*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7899*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7900*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdEndDebugUtilsLabelEXT(commandBuffer);
7901*b7893ccfSSadaf Ebrahimi     }
7902*b7893ccfSSadaf Ebrahimi     DispatchCmdEndDebugUtilsLabelEXT(commandBuffer);
7903*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7904*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7905*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdEndDebugUtilsLabelEXT(commandBuffer);
7906*b7893ccfSSadaf Ebrahimi     }
7907*b7893ccfSSadaf Ebrahimi }
7908*b7893ccfSSadaf Ebrahimi 
CmdInsertDebugUtilsLabelEXT(VkCommandBuffer commandBuffer,const VkDebugUtilsLabelEXT * pLabelInfo)7909*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdInsertDebugUtilsLabelEXT(
7910*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
7911*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsLabelEXT*                 pLabelInfo) {
7912*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
7913*b7893ccfSSadaf Ebrahimi     bool skip = false;
7914*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7915*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7916*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7917*b7893ccfSSadaf Ebrahimi         if (skip) return;
7918*b7893ccfSSadaf Ebrahimi     }
7919*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7920*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7921*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7922*b7893ccfSSadaf Ebrahimi     }
7923*b7893ccfSSadaf Ebrahimi     DispatchCmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7924*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7925*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7926*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
7927*b7893ccfSSadaf Ebrahimi     }
7928*b7893ccfSSadaf Ebrahimi }
7929*b7893ccfSSadaf Ebrahimi 
CreateDebugUtilsMessengerEXT(VkInstance instance,const VkDebugUtilsMessengerCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDebugUtilsMessengerEXT * pMessenger)7930*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateDebugUtilsMessengerEXT(
7931*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
7932*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsMessengerCreateInfoEXT*   pCreateInfo,
7933*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
7934*b7893ccfSSadaf Ebrahimi     VkDebugUtilsMessengerEXT*                   pMessenger) {
7935*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
7936*b7893ccfSSadaf Ebrahimi     bool skip = false;
7937*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7938*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7939*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger);
7940*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
7941*b7893ccfSSadaf Ebrahimi     }
7942*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7943*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7944*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger);
7945*b7893ccfSSadaf Ebrahimi     }
7946*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger);
7947*b7893ccfSSadaf Ebrahimi     layer_create_messenger_callback(layer_data->report_data, false, pCreateInfo, pAllocator, pMessenger);
7948*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7949*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7950*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger, result);
7951*b7893ccfSSadaf Ebrahimi     }
7952*b7893ccfSSadaf Ebrahimi     return result;
7953*b7893ccfSSadaf Ebrahimi }
7954*b7893ccfSSadaf Ebrahimi 
DestroyDebugUtilsMessengerEXT(VkInstance instance,VkDebugUtilsMessengerEXT messenger,const VkAllocationCallbacks * pAllocator)7955*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyDebugUtilsMessengerEXT(
7956*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
7957*b7893ccfSSadaf Ebrahimi     VkDebugUtilsMessengerEXT                    messenger,
7958*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
7959*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
7960*b7893ccfSSadaf Ebrahimi     bool skip = false;
7961*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7962*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7963*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator);
7964*b7893ccfSSadaf Ebrahimi         if (skip) return;
7965*b7893ccfSSadaf Ebrahimi     }
7966*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7967*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7968*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator);
7969*b7893ccfSSadaf Ebrahimi     }
7970*b7893ccfSSadaf Ebrahimi     DispatchDestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator);
7971*b7893ccfSSadaf Ebrahimi     layer_destroy_messenger_callback(layer_data->report_data, messenger, pAllocator);
7972*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7973*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7974*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator);
7975*b7893ccfSSadaf Ebrahimi     }
7976*b7893ccfSSadaf Ebrahimi }
7977*b7893ccfSSadaf Ebrahimi 
SubmitDebugUtilsMessageEXT(VkInstance instance,VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,VkDebugUtilsMessageTypeFlagsEXT messageTypes,const VkDebugUtilsMessengerCallbackDataEXT * pCallbackData)7978*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL SubmitDebugUtilsMessageEXT(
7979*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
7980*b7893ccfSSadaf Ebrahimi     VkDebugUtilsMessageSeverityFlagBitsEXT      messageSeverity,
7981*b7893ccfSSadaf Ebrahimi     VkDebugUtilsMessageTypeFlagsEXT             messageTypes,
7982*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData) {
7983*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
7984*b7893ccfSSadaf Ebrahimi     bool skip = false;
7985*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7986*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7987*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateSubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, pCallbackData);
7988*b7893ccfSSadaf Ebrahimi         if (skip) return;
7989*b7893ccfSSadaf Ebrahimi     }
7990*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7991*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7992*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordSubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, pCallbackData);
7993*b7893ccfSSadaf Ebrahimi     }
7994*b7893ccfSSadaf Ebrahimi     DispatchSubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, pCallbackData);
7995*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
7996*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
7997*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordSubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, pCallbackData);
7998*b7893ccfSSadaf Ebrahimi     }
7999*b7893ccfSSadaf Ebrahimi }
8000*b7893ccfSSadaf Ebrahimi 
8001*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_ANDROID_KHR
8002*b7893ccfSSadaf Ebrahimi 
GetAndroidHardwareBufferPropertiesANDROID(VkDevice device,const struct AHardwareBuffer * buffer,VkAndroidHardwareBufferPropertiesANDROID * pProperties)8003*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetAndroidHardwareBufferPropertiesANDROID(
8004*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8005*b7893ccfSSadaf Ebrahimi     const struct AHardwareBuffer*               buffer,
8006*b7893ccfSSadaf Ebrahimi     VkAndroidHardwareBufferPropertiesANDROID*   pProperties) {
8007*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8008*b7893ccfSSadaf Ebrahimi     bool skip = false;
8009*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8010*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8011*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties);
8012*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8013*b7893ccfSSadaf Ebrahimi     }
8014*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8015*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8016*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties);
8017*b7893ccfSSadaf Ebrahimi     }
8018*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties);
8019*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8020*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8021*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties, result);
8022*b7893ccfSSadaf Ebrahimi     }
8023*b7893ccfSSadaf Ebrahimi     return result;
8024*b7893ccfSSadaf Ebrahimi }
8025*b7893ccfSSadaf Ebrahimi 
GetMemoryAndroidHardwareBufferANDROID(VkDevice device,const VkMemoryGetAndroidHardwareBufferInfoANDROID * pInfo,struct AHardwareBuffer ** pBuffer)8026*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetMemoryAndroidHardwareBufferANDROID(
8027*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8028*b7893ccfSSadaf Ebrahimi     const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
8029*b7893ccfSSadaf Ebrahimi     struct AHardwareBuffer**                    pBuffer) {
8030*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8031*b7893ccfSSadaf Ebrahimi     bool skip = false;
8032*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8033*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8034*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetMemoryAndroidHardwareBufferANDROID(device, pInfo, pBuffer);
8035*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8036*b7893ccfSSadaf Ebrahimi     }
8037*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8038*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8039*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetMemoryAndroidHardwareBufferANDROID(device, pInfo, pBuffer);
8040*b7893ccfSSadaf Ebrahimi     }
8041*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetMemoryAndroidHardwareBufferANDROID(device, pInfo, pBuffer);
8042*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8043*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8044*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetMemoryAndroidHardwareBufferANDROID(device, pInfo, pBuffer, result);
8045*b7893ccfSSadaf Ebrahimi     }
8046*b7893ccfSSadaf Ebrahimi     return result;
8047*b7893ccfSSadaf Ebrahimi }
8048*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_ANDROID_KHR
8049*b7893ccfSSadaf Ebrahimi 
8050*b7893ccfSSadaf Ebrahimi 
8051*b7893ccfSSadaf Ebrahimi 
8052*b7893ccfSSadaf Ebrahimi 
8053*b7893ccfSSadaf Ebrahimi 
8054*b7893ccfSSadaf Ebrahimi 
8055*b7893ccfSSadaf Ebrahimi 
8056*b7893ccfSSadaf Ebrahimi 
CmdSetSampleLocationsEXT(VkCommandBuffer commandBuffer,const VkSampleLocationsInfoEXT * pSampleLocationsInfo)8057*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetSampleLocationsEXT(
8058*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8059*b7893ccfSSadaf Ebrahimi     const VkSampleLocationsInfoEXT*             pSampleLocationsInfo) {
8060*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8061*b7893ccfSSadaf Ebrahimi     bool skip = false;
8062*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8063*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8064*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
8065*b7893ccfSSadaf Ebrahimi         if (skip) return;
8066*b7893ccfSSadaf Ebrahimi     }
8067*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8068*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8069*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
8070*b7893ccfSSadaf Ebrahimi     }
8071*b7893ccfSSadaf Ebrahimi     DispatchCmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
8072*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8073*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8074*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
8075*b7893ccfSSadaf Ebrahimi     }
8076*b7893ccfSSadaf Ebrahimi }
8077*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceMultisamplePropertiesEXT(VkPhysicalDevice physicalDevice,VkSampleCountFlagBits samples,VkMultisamplePropertiesEXT * pMultisampleProperties)8078*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMultisamplePropertiesEXT(
8079*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
8080*b7893ccfSSadaf Ebrahimi     VkSampleCountFlagBits                       samples,
8081*b7893ccfSSadaf Ebrahimi     VkMultisamplePropertiesEXT*                 pMultisampleProperties) {
8082*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
8083*b7893ccfSSadaf Ebrahimi     bool skip = false;
8084*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8085*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8086*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties);
8087*b7893ccfSSadaf Ebrahimi         if (skip) return;
8088*b7893ccfSSadaf Ebrahimi     }
8089*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8090*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8091*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties);
8092*b7893ccfSSadaf Ebrahimi     }
8093*b7893ccfSSadaf Ebrahimi     DispatchGetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties);
8094*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8095*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8096*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties);
8097*b7893ccfSSadaf Ebrahimi     }
8098*b7893ccfSSadaf Ebrahimi }
8099*b7893ccfSSadaf Ebrahimi 
8100*b7893ccfSSadaf Ebrahimi 
8101*b7893ccfSSadaf Ebrahimi 
8102*b7893ccfSSadaf Ebrahimi 
8103*b7893ccfSSadaf Ebrahimi 
8104*b7893ccfSSadaf Ebrahimi 
8105*b7893ccfSSadaf Ebrahimi 
8106*b7893ccfSSadaf Ebrahimi 
GetImageDrmFormatModifierPropertiesEXT(VkDevice device,VkImage image,VkImageDrmFormatModifierPropertiesEXT * pProperties)8107*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetImageDrmFormatModifierPropertiesEXT(
8108*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8109*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
8110*b7893ccfSSadaf Ebrahimi     VkImageDrmFormatModifierPropertiesEXT*      pProperties) {
8111*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8112*b7893ccfSSadaf Ebrahimi     bool skip = false;
8113*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8114*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8115*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetImageDrmFormatModifierPropertiesEXT(device, image, pProperties);
8116*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8117*b7893ccfSSadaf Ebrahimi     }
8118*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8119*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8120*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetImageDrmFormatModifierPropertiesEXT(device, image, pProperties);
8121*b7893ccfSSadaf Ebrahimi     }
8122*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetImageDrmFormatModifierPropertiesEXT(device, image, pProperties);
8123*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8124*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8125*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetImageDrmFormatModifierPropertiesEXT(device, image, pProperties, result);
8126*b7893ccfSSadaf Ebrahimi     }
8127*b7893ccfSSadaf Ebrahimi     return result;
8128*b7893ccfSSadaf Ebrahimi }
8129*b7893ccfSSadaf Ebrahimi 
8130*b7893ccfSSadaf Ebrahimi 
8131*b7893ccfSSadaf Ebrahimi 
8132*b7893ccfSSadaf Ebrahimi 
8133*b7893ccfSSadaf Ebrahimi 
CmdBindShadingRateImageNV(VkCommandBuffer commandBuffer,VkImageView imageView,VkImageLayout imageLayout)8134*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBindShadingRateImageNV(
8135*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8136*b7893ccfSSadaf Ebrahimi     VkImageView                                 imageView,
8137*b7893ccfSSadaf Ebrahimi     VkImageLayout                               imageLayout) {
8138*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8139*b7893ccfSSadaf Ebrahimi     bool skip = false;
8140*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8141*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8142*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout);
8143*b7893ccfSSadaf Ebrahimi         if (skip) return;
8144*b7893ccfSSadaf Ebrahimi     }
8145*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8146*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8147*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout);
8148*b7893ccfSSadaf Ebrahimi     }
8149*b7893ccfSSadaf Ebrahimi     DispatchCmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout);
8150*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8151*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8152*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout);
8153*b7893ccfSSadaf Ebrahimi     }
8154*b7893ccfSSadaf Ebrahimi }
8155*b7893ccfSSadaf Ebrahimi 
CmdSetViewportShadingRatePaletteNV(VkCommandBuffer commandBuffer,uint32_t firstViewport,uint32_t viewportCount,const VkShadingRatePaletteNV * pShadingRatePalettes)8156*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetViewportShadingRatePaletteNV(
8157*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8158*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstViewport,
8159*b7893ccfSSadaf Ebrahimi     uint32_t                                    viewportCount,
8160*b7893ccfSSadaf Ebrahimi     const VkShadingRatePaletteNV*               pShadingRatePalettes) {
8161*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8162*b7893ccfSSadaf Ebrahimi     bool skip = false;
8163*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8164*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8165*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes);
8166*b7893ccfSSadaf Ebrahimi         if (skip) return;
8167*b7893ccfSSadaf Ebrahimi     }
8168*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8169*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8170*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes);
8171*b7893ccfSSadaf Ebrahimi     }
8172*b7893ccfSSadaf Ebrahimi     DispatchCmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes);
8173*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8174*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8175*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes);
8176*b7893ccfSSadaf Ebrahimi     }
8177*b7893ccfSSadaf Ebrahimi }
8178*b7893ccfSSadaf Ebrahimi 
CmdSetCoarseSampleOrderNV(VkCommandBuffer commandBuffer,VkCoarseSampleOrderTypeNV sampleOrderType,uint32_t customSampleOrderCount,const VkCoarseSampleOrderCustomNV * pCustomSampleOrders)8179*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetCoarseSampleOrderNV(
8180*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8181*b7893ccfSSadaf Ebrahimi     VkCoarseSampleOrderTypeNV                   sampleOrderType,
8182*b7893ccfSSadaf Ebrahimi     uint32_t                                    customSampleOrderCount,
8183*b7893ccfSSadaf Ebrahimi     const VkCoarseSampleOrderCustomNV*          pCustomSampleOrders) {
8184*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8185*b7893ccfSSadaf Ebrahimi     bool skip = false;
8186*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8187*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8188*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders);
8189*b7893ccfSSadaf Ebrahimi         if (skip) return;
8190*b7893ccfSSadaf Ebrahimi     }
8191*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8192*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8193*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders);
8194*b7893ccfSSadaf Ebrahimi     }
8195*b7893ccfSSadaf Ebrahimi     DispatchCmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders);
8196*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8197*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8198*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders);
8199*b7893ccfSSadaf Ebrahimi     }
8200*b7893ccfSSadaf Ebrahimi }
8201*b7893ccfSSadaf Ebrahimi 
8202*b7893ccfSSadaf Ebrahimi 
CreateAccelerationStructureNV(VkDevice device,const VkAccelerationStructureCreateInfoNV * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkAccelerationStructureNV * pAccelerationStructure)8203*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateAccelerationStructureNV(
8204*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8205*b7893ccfSSadaf Ebrahimi     const VkAccelerationStructureCreateInfoNV*  pCreateInfo,
8206*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
8207*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV*                  pAccelerationStructure) {
8208*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8209*b7893ccfSSadaf Ebrahimi     bool skip = false;
8210*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8211*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8212*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateAccelerationStructureNV(device, pCreateInfo, pAllocator, pAccelerationStructure);
8213*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8214*b7893ccfSSadaf Ebrahimi     }
8215*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8216*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8217*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateAccelerationStructureNV(device, pCreateInfo, pAllocator, pAccelerationStructure);
8218*b7893ccfSSadaf Ebrahimi     }
8219*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateAccelerationStructureNV(device, pCreateInfo, pAllocator, pAccelerationStructure);
8220*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8221*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8222*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateAccelerationStructureNV(device, pCreateInfo, pAllocator, pAccelerationStructure, result);
8223*b7893ccfSSadaf Ebrahimi     }
8224*b7893ccfSSadaf Ebrahimi     return result;
8225*b7893ccfSSadaf Ebrahimi }
8226*b7893ccfSSadaf Ebrahimi 
DestroyAccelerationStructureNV(VkDevice device,VkAccelerationStructureNV accelerationStructure,const VkAllocationCallbacks * pAllocator)8227*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL DestroyAccelerationStructureNV(
8228*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8229*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV                   accelerationStructure,
8230*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator) {
8231*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8232*b7893ccfSSadaf Ebrahimi     bool skip = false;
8233*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8234*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8235*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateDestroyAccelerationStructureNV(device, accelerationStructure, pAllocator);
8236*b7893ccfSSadaf Ebrahimi         if (skip) return;
8237*b7893ccfSSadaf Ebrahimi     }
8238*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8239*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8240*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordDestroyAccelerationStructureNV(device, accelerationStructure, pAllocator);
8241*b7893ccfSSadaf Ebrahimi     }
8242*b7893ccfSSadaf Ebrahimi     DispatchDestroyAccelerationStructureNV(device, accelerationStructure, pAllocator);
8243*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8244*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8245*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordDestroyAccelerationStructureNV(device, accelerationStructure, pAllocator);
8246*b7893ccfSSadaf Ebrahimi     }
8247*b7893ccfSSadaf Ebrahimi }
8248*b7893ccfSSadaf Ebrahimi 
GetAccelerationStructureMemoryRequirementsNV(VkDevice device,const VkAccelerationStructureMemoryRequirementsInfoNV * pInfo,VkMemoryRequirements2KHR * pMemoryRequirements)8249*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetAccelerationStructureMemoryRequirementsNV(
8250*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8251*b7893ccfSSadaf Ebrahimi     const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo,
8252*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements2KHR*                   pMemoryRequirements) {
8253*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8254*b7893ccfSSadaf Ebrahimi     bool skip = false;
8255*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8256*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8257*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetAccelerationStructureMemoryRequirementsNV(device, pInfo, pMemoryRequirements);
8258*b7893ccfSSadaf Ebrahimi         if (skip) return;
8259*b7893ccfSSadaf Ebrahimi     }
8260*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8261*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8262*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetAccelerationStructureMemoryRequirementsNV(device, pInfo, pMemoryRequirements);
8263*b7893ccfSSadaf Ebrahimi     }
8264*b7893ccfSSadaf Ebrahimi     DispatchGetAccelerationStructureMemoryRequirementsNV(device, pInfo, pMemoryRequirements);
8265*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8266*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8267*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetAccelerationStructureMemoryRequirementsNV(device, pInfo, pMemoryRequirements);
8268*b7893ccfSSadaf Ebrahimi     }
8269*b7893ccfSSadaf Ebrahimi }
8270*b7893ccfSSadaf Ebrahimi 
BindAccelerationStructureMemoryNV(VkDevice device,uint32_t bindInfoCount,const VkBindAccelerationStructureMemoryInfoNV * pBindInfos)8271*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL BindAccelerationStructureMemoryNV(
8272*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8273*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindInfoCount,
8274*b7893ccfSSadaf Ebrahimi     const VkBindAccelerationStructureMemoryInfoNV* pBindInfos) {
8275*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8276*b7893ccfSSadaf Ebrahimi     bool skip = false;
8277*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8278*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8279*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateBindAccelerationStructureMemoryNV(device, bindInfoCount, pBindInfos);
8280*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8281*b7893ccfSSadaf Ebrahimi     }
8282*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8283*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8284*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordBindAccelerationStructureMemoryNV(device, bindInfoCount, pBindInfos);
8285*b7893ccfSSadaf Ebrahimi     }
8286*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchBindAccelerationStructureMemoryNV(device, bindInfoCount, pBindInfos);
8287*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8288*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8289*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordBindAccelerationStructureMemoryNV(device, bindInfoCount, pBindInfos, result);
8290*b7893ccfSSadaf Ebrahimi     }
8291*b7893ccfSSadaf Ebrahimi     return result;
8292*b7893ccfSSadaf Ebrahimi }
8293*b7893ccfSSadaf Ebrahimi 
CmdBuildAccelerationStructureNV(VkCommandBuffer commandBuffer,const VkAccelerationStructureInfoNV * pInfo,VkBuffer instanceData,VkDeviceSize instanceOffset,VkBool32 update,VkAccelerationStructureNV dst,VkAccelerationStructureNV src,VkBuffer scratch,VkDeviceSize scratchOffset)8294*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdBuildAccelerationStructureNV(
8295*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8296*b7893ccfSSadaf Ebrahimi     const VkAccelerationStructureInfoNV*        pInfo,
8297*b7893ccfSSadaf Ebrahimi     VkBuffer                                    instanceData,
8298*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                instanceOffset,
8299*b7893ccfSSadaf Ebrahimi     VkBool32                                    update,
8300*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV                   dst,
8301*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV                   src,
8302*b7893ccfSSadaf Ebrahimi     VkBuffer                                    scratch,
8303*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                scratchOffset) {
8304*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8305*b7893ccfSSadaf Ebrahimi     bool skip = false;
8306*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8307*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8308*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
8309*b7893ccfSSadaf Ebrahimi         if (skip) return;
8310*b7893ccfSSadaf Ebrahimi     }
8311*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8312*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8313*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
8314*b7893ccfSSadaf Ebrahimi     }
8315*b7893ccfSSadaf Ebrahimi     DispatchCmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
8316*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8317*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8318*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
8319*b7893ccfSSadaf Ebrahimi     }
8320*b7893ccfSSadaf Ebrahimi }
8321*b7893ccfSSadaf Ebrahimi 
CmdCopyAccelerationStructureNV(VkCommandBuffer commandBuffer,VkAccelerationStructureNV dst,VkAccelerationStructureNV src,VkCopyAccelerationStructureModeNV mode)8322*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdCopyAccelerationStructureNV(
8323*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8324*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV                   dst,
8325*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV                   src,
8326*b7893ccfSSadaf Ebrahimi     VkCopyAccelerationStructureModeNV           mode) {
8327*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8328*b7893ccfSSadaf Ebrahimi     bool skip = false;
8329*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8330*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8331*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode);
8332*b7893ccfSSadaf Ebrahimi         if (skip) return;
8333*b7893ccfSSadaf Ebrahimi     }
8334*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8335*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8336*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode);
8337*b7893ccfSSadaf Ebrahimi     }
8338*b7893ccfSSadaf Ebrahimi     DispatchCmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode);
8339*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8340*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8341*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode);
8342*b7893ccfSSadaf Ebrahimi     }
8343*b7893ccfSSadaf Ebrahimi }
8344*b7893ccfSSadaf Ebrahimi 
CmdTraceRaysNV(VkCommandBuffer commandBuffer,VkBuffer raygenShaderBindingTableBuffer,VkDeviceSize raygenShaderBindingOffset,VkBuffer missShaderBindingTableBuffer,VkDeviceSize missShaderBindingOffset,VkDeviceSize missShaderBindingStride,VkBuffer hitShaderBindingTableBuffer,VkDeviceSize hitShaderBindingOffset,VkDeviceSize hitShaderBindingStride,VkBuffer callableShaderBindingTableBuffer,VkDeviceSize callableShaderBindingOffset,VkDeviceSize callableShaderBindingStride,uint32_t width,uint32_t height,uint32_t depth)8345*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdTraceRaysNV(
8346*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8347*b7893ccfSSadaf Ebrahimi     VkBuffer                                    raygenShaderBindingTableBuffer,
8348*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                raygenShaderBindingOffset,
8349*b7893ccfSSadaf Ebrahimi     VkBuffer                                    missShaderBindingTableBuffer,
8350*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                missShaderBindingOffset,
8351*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                missShaderBindingStride,
8352*b7893ccfSSadaf Ebrahimi     VkBuffer                                    hitShaderBindingTableBuffer,
8353*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                hitShaderBindingOffset,
8354*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                hitShaderBindingStride,
8355*b7893ccfSSadaf Ebrahimi     VkBuffer                                    callableShaderBindingTableBuffer,
8356*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                callableShaderBindingOffset,
8357*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                callableShaderBindingStride,
8358*b7893ccfSSadaf Ebrahimi     uint32_t                                    width,
8359*b7893ccfSSadaf Ebrahimi     uint32_t                                    height,
8360*b7893ccfSSadaf Ebrahimi     uint32_t                                    depth) {
8361*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8362*b7893ccfSSadaf Ebrahimi     bool skip = false;
8363*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8364*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8365*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth);
8366*b7893ccfSSadaf Ebrahimi         if (skip) return;
8367*b7893ccfSSadaf Ebrahimi     }
8368*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8369*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8370*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth);
8371*b7893ccfSSadaf Ebrahimi     }
8372*b7893ccfSSadaf Ebrahimi     DispatchCmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth);
8373*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8374*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8375*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth);
8376*b7893ccfSSadaf Ebrahimi     }
8377*b7893ccfSSadaf Ebrahimi }
8378*b7893ccfSSadaf Ebrahimi 
GetRayTracingShaderGroupHandlesNV(VkDevice device,VkPipeline pipeline,uint32_t firstGroup,uint32_t groupCount,size_t dataSize,void * pData)8379*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetRayTracingShaderGroupHandlesNV(
8380*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8381*b7893ccfSSadaf Ebrahimi     VkPipeline                                  pipeline,
8382*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstGroup,
8383*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCount,
8384*b7893ccfSSadaf Ebrahimi     size_t                                      dataSize,
8385*b7893ccfSSadaf Ebrahimi     void*                                       pData) {
8386*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8387*b7893ccfSSadaf Ebrahimi     bool skip = false;
8388*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8389*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8390*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetRayTracingShaderGroupHandlesNV(device, pipeline, firstGroup, groupCount, dataSize, pData);
8391*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8392*b7893ccfSSadaf Ebrahimi     }
8393*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8394*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8395*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetRayTracingShaderGroupHandlesNV(device, pipeline, firstGroup, groupCount, dataSize, pData);
8396*b7893ccfSSadaf Ebrahimi     }
8397*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetRayTracingShaderGroupHandlesNV(device, pipeline, firstGroup, groupCount, dataSize, pData);
8398*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8399*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8400*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetRayTracingShaderGroupHandlesNV(device, pipeline, firstGroup, groupCount, dataSize, pData, result);
8401*b7893ccfSSadaf Ebrahimi     }
8402*b7893ccfSSadaf Ebrahimi     return result;
8403*b7893ccfSSadaf Ebrahimi }
8404*b7893ccfSSadaf Ebrahimi 
GetAccelerationStructureHandleNV(VkDevice device,VkAccelerationStructureNV accelerationStructure,size_t dataSize,void * pData)8405*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetAccelerationStructureHandleNV(
8406*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8407*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV                   accelerationStructure,
8408*b7893ccfSSadaf Ebrahimi     size_t                                      dataSize,
8409*b7893ccfSSadaf Ebrahimi     void*                                       pData) {
8410*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8411*b7893ccfSSadaf Ebrahimi     bool skip = false;
8412*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8413*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8414*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetAccelerationStructureHandleNV(device, accelerationStructure, dataSize, pData);
8415*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8416*b7893ccfSSadaf Ebrahimi     }
8417*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8418*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8419*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetAccelerationStructureHandleNV(device, accelerationStructure, dataSize, pData);
8420*b7893ccfSSadaf Ebrahimi     }
8421*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetAccelerationStructureHandleNV(device, accelerationStructure, dataSize, pData);
8422*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8423*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8424*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetAccelerationStructureHandleNV(device, accelerationStructure, dataSize, pData, result);
8425*b7893ccfSSadaf Ebrahimi     }
8426*b7893ccfSSadaf Ebrahimi     return result;
8427*b7893ccfSSadaf Ebrahimi }
8428*b7893ccfSSadaf Ebrahimi 
CmdWriteAccelerationStructuresPropertiesNV(VkCommandBuffer commandBuffer,uint32_t accelerationStructureCount,const VkAccelerationStructureNV * pAccelerationStructures,VkQueryType queryType,VkQueryPool queryPool,uint32_t firstQuery)8429*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdWriteAccelerationStructuresPropertiesNV(
8430*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8431*b7893ccfSSadaf Ebrahimi     uint32_t                                    accelerationStructureCount,
8432*b7893ccfSSadaf Ebrahimi     const VkAccelerationStructureNV*            pAccelerationStructures,
8433*b7893ccfSSadaf Ebrahimi     VkQueryType                                 queryType,
8434*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
8435*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstQuery) {
8436*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8437*b7893ccfSSadaf Ebrahimi     bool skip = false;
8438*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8439*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8440*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
8441*b7893ccfSSadaf Ebrahimi         if (skip) return;
8442*b7893ccfSSadaf Ebrahimi     }
8443*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8444*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8445*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
8446*b7893ccfSSadaf Ebrahimi     }
8447*b7893ccfSSadaf Ebrahimi     DispatchCmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
8448*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8449*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8450*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
8451*b7893ccfSSadaf Ebrahimi     }
8452*b7893ccfSSadaf Ebrahimi }
8453*b7893ccfSSadaf Ebrahimi 
CompileDeferredNV(VkDevice device,VkPipeline pipeline,uint32_t shader)8454*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CompileDeferredNV(
8455*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8456*b7893ccfSSadaf Ebrahimi     VkPipeline                                  pipeline,
8457*b7893ccfSSadaf Ebrahimi     uint32_t                                    shader) {
8458*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8459*b7893ccfSSadaf Ebrahimi     bool skip = false;
8460*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8461*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8462*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCompileDeferredNV(device, pipeline, shader);
8463*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8464*b7893ccfSSadaf Ebrahimi     }
8465*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8466*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8467*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCompileDeferredNV(device, pipeline, shader);
8468*b7893ccfSSadaf Ebrahimi     }
8469*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCompileDeferredNV(device, pipeline, shader);
8470*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8471*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8472*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCompileDeferredNV(device, pipeline, shader, result);
8473*b7893ccfSSadaf Ebrahimi     }
8474*b7893ccfSSadaf Ebrahimi     return result;
8475*b7893ccfSSadaf Ebrahimi }
8476*b7893ccfSSadaf Ebrahimi 
8477*b7893ccfSSadaf Ebrahimi 
8478*b7893ccfSSadaf Ebrahimi 
8479*b7893ccfSSadaf Ebrahimi 
8480*b7893ccfSSadaf Ebrahimi 
GetMemoryHostPointerPropertiesEXT(VkDevice device,VkExternalMemoryHandleTypeFlagBits handleType,const void * pHostPointer,VkMemoryHostPointerPropertiesEXT * pMemoryHostPointerProperties)8481*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetMemoryHostPointerPropertiesEXT(
8482*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8483*b7893ccfSSadaf Ebrahimi     VkExternalMemoryHandleTypeFlagBits          handleType,
8484*b7893ccfSSadaf Ebrahimi     const void*                                 pHostPointer,
8485*b7893ccfSSadaf Ebrahimi     VkMemoryHostPointerPropertiesEXT*           pMemoryHostPointerProperties) {
8486*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8487*b7893ccfSSadaf Ebrahimi     bool skip = false;
8488*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8489*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8490*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties);
8491*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8492*b7893ccfSSadaf Ebrahimi     }
8493*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8494*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8495*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties);
8496*b7893ccfSSadaf Ebrahimi     }
8497*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties);
8498*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8499*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8500*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties, result);
8501*b7893ccfSSadaf Ebrahimi     }
8502*b7893ccfSSadaf Ebrahimi     return result;
8503*b7893ccfSSadaf Ebrahimi }
8504*b7893ccfSSadaf Ebrahimi 
8505*b7893ccfSSadaf Ebrahimi 
CmdWriteBufferMarkerAMD(VkCommandBuffer commandBuffer,VkPipelineStageFlagBits pipelineStage,VkBuffer dstBuffer,VkDeviceSize dstOffset,uint32_t marker)8506*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdWriteBufferMarkerAMD(
8507*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8508*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlagBits                     pipelineStage,
8509*b7893ccfSSadaf Ebrahimi     VkBuffer                                    dstBuffer,
8510*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                dstOffset,
8511*b7893ccfSSadaf Ebrahimi     uint32_t                                    marker) {
8512*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8513*b7893ccfSSadaf Ebrahimi     bool skip = false;
8514*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8515*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8516*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker);
8517*b7893ccfSSadaf Ebrahimi         if (skip) return;
8518*b7893ccfSSadaf Ebrahimi     }
8519*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8520*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8521*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker);
8522*b7893ccfSSadaf Ebrahimi     }
8523*b7893ccfSSadaf Ebrahimi     DispatchCmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker);
8524*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8525*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8526*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker);
8527*b7893ccfSSadaf Ebrahimi     }
8528*b7893ccfSSadaf Ebrahimi }
8529*b7893ccfSSadaf Ebrahimi 
8530*b7893ccfSSadaf Ebrahimi 
8531*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceCalibrateableTimeDomainsEXT(VkPhysicalDevice physicalDevice,uint32_t * pTimeDomainCount,VkTimeDomainEXT * pTimeDomains)8532*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCalibrateableTimeDomainsEXT(
8533*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
8534*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pTimeDomainCount,
8535*b7893ccfSSadaf Ebrahimi     VkTimeDomainEXT*                            pTimeDomains) {
8536*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
8537*b7893ccfSSadaf Ebrahimi     bool skip = false;
8538*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8539*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8540*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceCalibrateableTimeDomainsEXT(physicalDevice, pTimeDomainCount, pTimeDomains);
8541*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8542*b7893ccfSSadaf Ebrahimi     }
8543*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8544*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8545*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceCalibrateableTimeDomainsEXT(physicalDevice, pTimeDomainCount, pTimeDomains);
8546*b7893ccfSSadaf Ebrahimi     }
8547*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceCalibrateableTimeDomainsEXT(physicalDevice, pTimeDomainCount, pTimeDomains);
8548*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8549*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8550*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceCalibrateableTimeDomainsEXT(physicalDevice, pTimeDomainCount, pTimeDomains, result);
8551*b7893ccfSSadaf Ebrahimi     }
8552*b7893ccfSSadaf Ebrahimi     return result;
8553*b7893ccfSSadaf Ebrahimi }
8554*b7893ccfSSadaf Ebrahimi 
GetCalibratedTimestampsEXT(VkDevice device,uint32_t timestampCount,const VkCalibratedTimestampInfoEXT * pTimestampInfos,uint64_t * pTimestamps,uint64_t * pMaxDeviation)8555*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetCalibratedTimestampsEXT(
8556*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8557*b7893ccfSSadaf Ebrahimi     uint32_t                                    timestampCount,
8558*b7893ccfSSadaf Ebrahimi     const VkCalibratedTimestampInfoEXT*         pTimestampInfos,
8559*b7893ccfSSadaf Ebrahimi     uint64_t*                                   pTimestamps,
8560*b7893ccfSSadaf Ebrahimi     uint64_t*                                   pMaxDeviation) {
8561*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8562*b7893ccfSSadaf Ebrahimi     bool skip = false;
8563*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8564*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8565*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation);
8566*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8567*b7893ccfSSadaf Ebrahimi     }
8568*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8569*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8570*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation);
8571*b7893ccfSSadaf Ebrahimi     }
8572*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation);
8573*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8574*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8575*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation, result);
8576*b7893ccfSSadaf Ebrahimi     }
8577*b7893ccfSSadaf Ebrahimi     return result;
8578*b7893ccfSSadaf Ebrahimi }
8579*b7893ccfSSadaf Ebrahimi 
8580*b7893ccfSSadaf Ebrahimi 
8581*b7893ccfSSadaf Ebrahimi 
8582*b7893ccfSSadaf Ebrahimi 
8583*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_GGP
8584*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_GGP
8585*b7893ccfSSadaf Ebrahimi 
8586*b7893ccfSSadaf Ebrahimi 
8587*b7893ccfSSadaf Ebrahimi 
8588*b7893ccfSSadaf Ebrahimi 
8589*b7893ccfSSadaf Ebrahimi 
CmdDrawMeshTasksNV(VkCommandBuffer commandBuffer,uint32_t taskCount,uint32_t firstTask)8590*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksNV(
8591*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8592*b7893ccfSSadaf Ebrahimi     uint32_t                                    taskCount,
8593*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstTask) {
8594*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8595*b7893ccfSSadaf Ebrahimi     bool skip = false;
8596*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8597*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8598*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask);
8599*b7893ccfSSadaf Ebrahimi         if (skip) return;
8600*b7893ccfSSadaf Ebrahimi     }
8601*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8602*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8603*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask);
8604*b7893ccfSSadaf Ebrahimi     }
8605*b7893ccfSSadaf Ebrahimi     DispatchCmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask);
8606*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8607*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8608*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask);
8609*b7893ccfSSadaf Ebrahimi     }
8610*b7893ccfSSadaf Ebrahimi }
8611*b7893ccfSSadaf Ebrahimi 
CmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride)8612*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectNV(
8613*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8614*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
8615*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
8616*b7893ccfSSadaf Ebrahimi     uint32_t                                    drawCount,
8617*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride) {
8618*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8619*b7893ccfSSadaf Ebrahimi     bool skip = false;
8620*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8621*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8622*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride);
8623*b7893ccfSSadaf Ebrahimi         if (skip) return;
8624*b7893ccfSSadaf Ebrahimi     }
8625*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8626*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8627*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride);
8628*b7893ccfSSadaf Ebrahimi     }
8629*b7893ccfSSadaf Ebrahimi     DispatchCmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride);
8630*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8631*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8632*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride);
8633*b7893ccfSSadaf Ebrahimi     }
8634*b7893ccfSSadaf Ebrahimi }
8635*b7893ccfSSadaf Ebrahimi 
CmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)8636*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectCountNV(
8637*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8638*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
8639*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
8640*b7893ccfSSadaf Ebrahimi     VkBuffer                                    countBuffer,
8641*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                countBufferOffset,
8642*b7893ccfSSadaf Ebrahimi     uint32_t                                    maxDrawCount,
8643*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride) {
8644*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8645*b7893ccfSSadaf Ebrahimi     bool skip = false;
8646*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8647*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8648*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
8649*b7893ccfSSadaf Ebrahimi         if (skip) return;
8650*b7893ccfSSadaf Ebrahimi     }
8651*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8652*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8653*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
8654*b7893ccfSSadaf Ebrahimi     }
8655*b7893ccfSSadaf Ebrahimi     DispatchCmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
8656*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8657*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8658*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
8659*b7893ccfSSadaf Ebrahimi     }
8660*b7893ccfSSadaf Ebrahimi }
8661*b7893ccfSSadaf Ebrahimi 
8662*b7893ccfSSadaf Ebrahimi 
8663*b7893ccfSSadaf Ebrahimi 
8664*b7893ccfSSadaf Ebrahimi 
CmdSetExclusiveScissorNV(VkCommandBuffer commandBuffer,uint32_t firstExclusiveScissor,uint32_t exclusiveScissorCount,const VkRect2D * pExclusiveScissors)8665*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetExclusiveScissorNV(
8666*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8667*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstExclusiveScissor,
8668*b7893ccfSSadaf Ebrahimi     uint32_t                                    exclusiveScissorCount,
8669*b7893ccfSSadaf Ebrahimi     const VkRect2D*                             pExclusiveScissors) {
8670*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8671*b7893ccfSSadaf Ebrahimi     bool skip = false;
8672*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8673*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8674*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors);
8675*b7893ccfSSadaf Ebrahimi         if (skip) return;
8676*b7893ccfSSadaf Ebrahimi     }
8677*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8678*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8679*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors);
8680*b7893ccfSSadaf Ebrahimi     }
8681*b7893ccfSSadaf Ebrahimi     DispatchCmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors);
8682*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8683*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8684*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors);
8685*b7893ccfSSadaf Ebrahimi     }
8686*b7893ccfSSadaf Ebrahimi }
8687*b7893ccfSSadaf Ebrahimi 
8688*b7893ccfSSadaf Ebrahimi 
CmdSetCheckpointNV(VkCommandBuffer commandBuffer,const void * pCheckpointMarker)8689*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetCheckpointNV(
8690*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8691*b7893ccfSSadaf Ebrahimi     const void*                                 pCheckpointMarker) {
8692*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8693*b7893ccfSSadaf Ebrahimi     bool skip = false;
8694*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8695*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8696*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetCheckpointNV(commandBuffer, pCheckpointMarker);
8697*b7893ccfSSadaf Ebrahimi         if (skip) return;
8698*b7893ccfSSadaf Ebrahimi     }
8699*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8700*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8701*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetCheckpointNV(commandBuffer, pCheckpointMarker);
8702*b7893ccfSSadaf Ebrahimi     }
8703*b7893ccfSSadaf Ebrahimi     DispatchCmdSetCheckpointNV(commandBuffer, pCheckpointMarker);
8704*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8705*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8706*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetCheckpointNV(commandBuffer, pCheckpointMarker);
8707*b7893ccfSSadaf Ebrahimi     }
8708*b7893ccfSSadaf Ebrahimi }
8709*b7893ccfSSadaf Ebrahimi 
GetQueueCheckpointDataNV(VkQueue queue,uint32_t * pCheckpointDataCount,VkCheckpointDataNV * pCheckpointData)8710*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL GetQueueCheckpointDataNV(
8711*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue,
8712*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pCheckpointDataCount,
8713*b7893ccfSSadaf Ebrahimi     VkCheckpointDataNV*                         pCheckpointData) {
8714*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
8715*b7893ccfSSadaf Ebrahimi     bool skip = false;
8716*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8717*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8718*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData);
8719*b7893ccfSSadaf Ebrahimi         if (skip) return;
8720*b7893ccfSSadaf Ebrahimi     }
8721*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8722*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8723*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData);
8724*b7893ccfSSadaf Ebrahimi     }
8725*b7893ccfSSadaf Ebrahimi     DispatchGetQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData);
8726*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8727*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8728*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData);
8729*b7893ccfSSadaf Ebrahimi     }
8730*b7893ccfSSadaf Ebrahimi }
8731*b7893ccfSSadaf Ebrahimi 
8732*b7893ccfSSadaf Ebrahimi 
8733*b7893ccfSSadaf Ebrahimi 
InitializePerformanceApiINTEL(VkDevice device,const VkInitializePerformanceApiInfoINTEL * pInitializeInfo)8734*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL InitializePerformanceApiINTEL(
8735*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8736*b7893ccfSSadaf Ebrahimi     const VkInitializePerformanceApiInfoINTEL*  pInitializeInfo) {
8737*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8738*b7893ccfSSadaf Ebrahimi     bool skip = false;
8739*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8740*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8741*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateInitializePerformanceApiINTEL(device, pInitializeInfo);
8742*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8743*b7893ccfSSadaf Ebrahimi     }
8744*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8745*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8746*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordInitializePerformanceApiINTEL(device, pInitializeInfo);
8747*b7893ccfSSadaf Ebrahimi     }
8748*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchInitializePerformanceApiINTEL(device, pInitializeInfo);
8749*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8750*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8751*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordInitializePerformanceApiINTEL(device, pInitializeInfo, result);
8752*b7893ccfSSadaf Ebrahimi     }
8753*b7893ccfSSadaf Ebrahimi     return result;
8754*b7893ccfSSadaf Ebrahimi }
8755*b7893ccfSSadaf Ebrahimi 
UninitializePerformanceApiINTEL(VkDevice device)8756*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL UninitializePerformanceApiINTEL(
8757*b7893ccfSSadaf Ebrahimi     VkDevice                                    device) {
8758*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8759*b7893ccfSSadaf Ebrahimi     bool skip = false;
8760*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8761*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8762*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateUninitializePerformanceApiINTEL(device);
8763*b7893ccfSSadaf Ebrahimi         if (skip) return;
8764*b7893ccfSSadaf Ebrahimi     }
8765*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8766*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8767*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordUninitializePerformanceApiINTEL(device);
8768*b7893ccfSSadaf Ebrahimi     }
8769*b7893ccfSSadaf Ebrahimi     DispatchUninitializePerformanceApiINTEL(device);
8770*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8771*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8772*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordUninitializePerformanceApiINTEL(device);
8773*b7893ccfSSadaf Ebrahimi     }
8774*b7893ccfSSadaf Ebrahimi }
8775*b7893ccfSSadaf Ebrahimi 
CmdSetPerformanceMarkerINTEL(VkCommandBuffer commandBuffer,const VkPerformanceMarkerInfoINTEL * pMarkerInfo)8776*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceMarkerINTEL(
8777*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8778*b7893ccfSSadaf Ebrahimi     const VkPerformanceMarkerInfoINTEL*         pMarkerInfo) {
8779*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8780*b7893ccfSSadaf Ebrahimi     bool skip = false;
8781*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8782*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8783*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo);
8784*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8785*b7893ccfSSadaf Ebrahimi     }
8786*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8787*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8788*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo);
8789*b7893ccfSSadaf Ebrahimi     }
8790*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo);
8791*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8792*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8793*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo, result);
8794*b7893ccfSSadaf Ebrahimi     }
8795*b7893ccfSSadaf Ebrahimi     return result;
8796*b7893ccfSSadaf Ebrahimi }
8797*b7893ccfSSadaf Ebrahimi 
CmdSetPerformanceStreamMarkerINTEL(VkCommandBuffer commandBuffer,const VkPerformanceStreamMarkerInfoINTEL * pMarkerInfo)8798*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceStreamMarkerINTEL(
8799*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8800*b7893ccfSSadaf Ebrahimi     const VkPerformanceStreamMarkerInfoINTEL*   pMarkerInfo) {
8801*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8802*b7893ccfSSadaf Ebrahimi     bool skip = false;
8803*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8804*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8805*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo);
8806*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8807*b7893ccfSSadaf Ebrahimi     }
8808*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8809*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8810*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo);
8811*b7893ccfSSadaf Ebrahimi     }
8812*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo);
8813*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8814*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8815*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo, result);
8816*b7893ccfSSadaf Ebrahimi     }
8817*b7893ccfSSadaf Ebrahimi     return result;
8818*b7893ccfSSadaf Ebrahimi }
8819*b7893ccfSSadaf Ebrahimi 
CmdSetPerformanceOverrideINTEL(VkCommandBuffer commandBuffer,const VkPerformanceOverrideInfoINTEL * pOverrideInfo)8820*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CmdSetPerformanceOverrideINTEL(
8821*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
8822*b7893ccfSSadaf Ebrahimi     const VkPerformanceOverrideInfoINTEL*       pOverrideInfo) {
8823*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
8824*b7893ccfSSadaf Ebrahimi     bool skip = false;
8825*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8826*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8827*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo);
8828*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8829*b7893ccfSSadaf Ebrahimi     }
8830*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8831*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8832*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo);
8833*b7893ccfSSadaf Ebrahimi     }
8834*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo);
8835*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8836*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8837*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo, result);
8838*b7893ccfSSadaf Ebrahimi     }
8839*b7893ccfSSadaf Ebrahimi     return result;
8840*b7893ccfSSadaf Ebrahimi }
8841*b7893ccfSSadaf Ebrahimi 
AcquirePerformanceConfigurationINTEL(VkDevice device,const VkPerformanceConfigurationAcquireInfoINTEL * pAcquireInfo,VkPerformanceConfigurationINTEL * pConfiguration)8842*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL AcquirePerformanceConfigurationINTEL(
8843*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8844*b7893ccfSSadaf Ebrahimi     const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo,
8845*b7893ccfSSadaf Ebrahimi     VkPerformanceConfigurationINTEL*            pConfiguration) {
8846*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8847*b7893ccfSSadaf Ebrahimi     bool skip = false;
8848*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8849*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8850*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateAcquirePerformanceConfigurationINTEL(device, pAcquireInfo, pConfiguration);
8851*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8852*b7893ccfSSadaf Ebrahimi     }
8853*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8854*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8855*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordAcquirePerformanceConfigurationINTEL(device, pAcquireInfo, pConfiguration);
8856*b7893ccfSSadaf Ebrahimi     }
8857*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchAcquirePerformanceConfigurationINTEL(device, pAcquireInfo, pConfiguration);
8858*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8859*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8860*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordAcquirePerformanceConfigurationINTEL(device, pAcquireInfo, pConfiguration, result);
8861*b7893ccfSSadaf Ebrahimi     }
8862*b7893ccfSSadaf Ebrahimi     return result;
8863*b7893ccfSSadaf Ebrahimi }
8864*b7893ccfSSadaf Ebrahimi 
ReleasePerformanceConfigurationINTEL(VkDevice device,VkPerformanceConfigurationINTEL configuration)8865*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL ReleasePerformanceConfigurationINTEL(
8866*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8867*b7893ccfSSadaf Ebrahimi     VkPerformanceConfigurationINTEL             configuration) {
8868*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8869*b7893ccfSSadaf Ebrahimi     bool skip = false;
8870*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8871*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8872*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateReleasePerformanceConfigurationINTEL(device, configuration);
8873*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8874*b7893ccfSSadaf Ebrahimi     }
8875*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8876*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8877*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordReleasePerformanceConfigurationINTEL(device, configuration);
8878*b7893ccfSSadaf Ebrahimi     }
8879*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchReleasePerformanceConfigurationINTEL(device, configuration);
8880*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8881*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8882*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordReleasePerformanceConfigurationINTEL(device, configuration, result);
8883*b7893ccfSSadaf Ebrahimi     }
8884*b7893ccfSSadaf Ebrahimi     return result;
8885*b7893ccfSSadaf Ebrahimi }
8886*b7893ccfSSadaf Ebrahimi 
QueueSetPerformanceConfigurationINTEL(VkQueue queue,VkPerformanceConfigurationINTEL configuration)8887*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL QueueSetPerformanceConfigurationINTEL(
8888*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue,
8889*b7893ccfSSadaf Ebrahimi     VkPerformanceConfigurationINTEL             configuration) {
8890*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
8891*b7893ccfSSadaf Ebrahimi     bool skip = false;
8892*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8893*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8894*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateQueueSetPerformanceConfigurationINTEL(queue, configuration);
8895*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8896*b7893ccfSSadaf Ebrahimi     }
8897*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8898*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8899*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordQueueSetPerformanceConfigurationINTEL(queue, configuration);
8900*b7893ccfSSadaf Ebrahimi     }
8901*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchQueueSetPerformanceConfigurationINTEL(queue, configuration);
8902*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8903*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8904*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordQueueSetPerformanceConfigurationINTEL(queue, configuration, result);
8905*b7893ccfSSadaf Ebrahimi     }
8906*b7893ccfSSadaf Ebrahimi     return result;
8907*b7893ccfSSadaf Ebrahimi }
8908*b7893ccfSSadaf Ebrahimi 
GetPerformanceParameterINTEL(VkDevice device,VkPerformanceParameterTypeINTEL parameter,VkPerformanceValueINTEL * pValue)8909*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPerformanceParameterINTEL(
8910*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8911*b7893ccfSSadaf Ebrahimi     VkPerformanceParameterTypeINTEL             parameter,
8912*b7893ccfSSadaf Ebrahimi     VkPerformanceValueINTEL*                    pValue) {
8913*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8914*b7893ccfSSadaf Ebrahimi     bool skip = false;
8915*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8916*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8917*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPerformanceParameterINTEL(device, parameter, pValue);
8918*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8919*b7893ccfSSadaf Ebrahimi     }
8920*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8921*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8922*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPerformanceParameterINTEL(device, parameter, pValue);
8923*b7893ccfSSadaf Ebrahimi     }
8924*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPerformanceParameterINTEL(device, parameter, pValue);
8925*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8926*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8927*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPerformanceParameterINTEL(device, parameter, pValue, result);
8928*b7893ccfSSadaf Ebrahimi     }
8929*b7893ccfSSadaf Ebrahimi     return result;
8930*b7893ccfSSadaf Ebrahimi }
8931*b7893ccfSSadaf Ebrahimi 
8932*b7893ccfSSadaf Ebrahimi 
8933*b7893ccfSSadaf Ebrahimi 
SetLocalDimmingAMD(VkDevice device,VkSwapchainKHR swapChain,VkBool32 localDimmingEnable)8934*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL SetLocalDimmingAMD(
8935*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
8936*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapChain,
8937*b7893ccfSSadaf Ebrahimi     VkBool32                                    localDimmingEnable) {
8938*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
8939*b7893ccfSSadaf Ebrahimi     bool skip = false;
8940*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8941*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8942*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateSetLocalDimmingAMD(device, swapChain, localDimmingEnable);
8943*b7893ccfSSadaf Ebrahimi         if (skip) return;
8944*b7893ccfSSadaf Ebrahimi     }
8945*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8946*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8947*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordSetLocalDimmingAMD(device, swapChain, localDimmingEnable);
8948*b7893ccfSSadaf Ebrahimi     }
8949*b7893ccfSSadaf Ebrahimi     DispatchSetLocalDimmingAMD(device, swapChain, localDimmingEnable);
8950*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8951*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8952*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordSetLocalDimmingAMD(device, swapChain, localDimmingEnable);
8953*b7893ccfSSadaf Ebrahimi     }
8954*b7893ccfSSadaf Ebrahimi }
8955*b7893ccfSSadaf Ebrahimi 
8956*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_FUCHSIA
8957*b7893ccfSSadaf Ebrahimi 
CreateImagePipeSurfaceFUCHSIA(VkInstance instance,const VkImagePipeSurfaceCreateInfoFUCHSIA * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)8958*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateImagePipeSurfaceFUCHSIA(
8959*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
8960*b7893ccfSSadaf Ebrahimi     const VkImagePipeSurfaceCreateInfoFUCHSIA*  pCreateInfo,
8961*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
8962*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface) {
8963*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
8964*b7893ccfSSadaf Ebrahimi     bool skip = false;
8965*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8966*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8967*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateImagePipeSurfaceFUCHSIA(instance, pCreateInfo, pAllocator, pSurface);
8968*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8969*b7893ccfSSadaf Ebrahimi     }
8970*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8971*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8972*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateImagePipeSurfaceFUCHSIA(instance, pCreateInfo, pAllocator, pSurface);
8973*b7893ccfSSadaf Ebrahimi     }
8974*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateImagePipeSurfaceFUCHSIA(instance, pCreateInfo, pAllocator, pSurface);
8975*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8976*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8977*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateImagePipeSurfaceFUCHSIA(instance, pCreateInfo, pAllocator, pSurface, result);
8978*b7893ccfSSadaf Ebrahimi     }
8979*b7893ccfSSadaf Ebrahimi     return result;
8980*b7893ccfSSadaf Ebrahimi }
8981*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_FUCHSIA
8982*b7893ccfSSadaf Ebrahimi 
8983*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_METAL_EXT
8984*b7893ccfSSadaf Ebrahimi 
CreateMetalSurfaceEXT(VkInstance instance,const VkMetalSurfaceCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)8985*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateMetalSurfaceEXT(
8986*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
8987*b7893ccfSSadaf Ebrahimi     const VkMetalSurfaceCreateInfoEXT*          pCreateInfo,
8988*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
8989*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface) {
8990*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
8991*b7893ccfSSadaf Ebrahimi     bool skip = false;
8992*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8993*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8994*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateMetalSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
8995*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
8996*b7893ccfSSadaf Ebrahimi     }
8997*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
8998*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
8999*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateMetalSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
9000*b7893ccfSSadaf Ebrahimi     }
9001*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateMetalSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
9002*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9003*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9004*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateMetalSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface, result);
9005*b7893ccfSSadaf Ebrahimi     }
9006*b7893ccfSSadaf Ebrahimi     return result;
9007*b7893ccfSSadaf Ebrahimi }
9008*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_METAL_EXT
9009*b7893ccfSSadaf Ebrahimi 
9010*b7893ccfSSadaf Ebrahimi 
9011*b7893ccfSSadaf Ebrahimi 
9012*b7893ccfSSadaf Ebrahimi 
9013*b7893ccfSSadaf Ebrahimi 
9014*b7893ccfSSadaf Ebrahimi 
9015*b7893ccfSSadaf Ebrahimi 
9016*b7893ccfSSadaf Ebrahimi 
9017*b7893ccfSSadaf Ebrahimi 
9018*b7893ccfSSadaf Ebrahimi 
9019*b7893ccfSSadaf Ebrahimi 
9020*b7893ccfSSadaf Ebrahimi 
GetBufferDeviceAddressEXT(VkDevice device,const VkBufferDeviceAddressInfoEXT * pInfo)9021*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkDeviceAddress VKAPI_CALL GetBufferDeviceAddressEXT(
9022*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
9023*b7893ccfSSadaf Ebrahimi     const VkBufferDeviceAddressInfoEXT*         pInfo) {
9024*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
9025*b7893ccfSSadaf Ebrahimi     bool skip = false;
9026*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9027*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9028*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetBufferDeviceAddressEXT(device, pInfo);
9029*b7893ccfSSadaf Ebrahimi         if (skip) return 0;
9030*b7893ccfSSadaf Ebrahimi     }
9031*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9032*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9033*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetBufferDeviceAddressEXT(device, pInfo);
9034*b7893ccfSSadaf Ebrahimi     }
9035*b7893ccfSSadaf Ebrahimi     VkDeviceAddress result = DispatchGetBufferDeviceAddressEXT(device, pInfo);
9036*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9037*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9038*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetBufferDeviceAddressEXT(device, pInfo);
9039*b7893ccfSSadaf Ebrahimi     }
9040*b7893ccfSSadaf Ebrahimi     return result;
9041*b7893ccfSSadaf Ebrahimi }
9042*b7893ccfSSadaf Ebrahimi 
9043*b7893ccfSSadaf Ebrahimi 
9044*b7893ccfSSadaf Ebrahimi 
9045*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceCooperativeMatrixPropertiesNV(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkCooperativeMatrixPropertiesNV * pProperties)9046*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceCooperativeMatrixPropertiesNV(
9047*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
9048*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
9049*b7893ccfSSadaf Ebrahimi     VkCooperativeMatrixPropertiesNV*            pProperties) {
9050*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
9051*b7893ccfSSadaf Ebrahimi     bool skip = false;
9052*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9053*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9054*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceCooperativeMatrixPropertiesNV(physicalDevice, pPropertyCount, pProperties);
9055*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
9056*b7893ccfSSadaf Ebrahimi     }
9057*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9058*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9059*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceCooperativeMatrixPropertiesNV(physicalDevice, pPropertyCount, pProperties);
9060*b7893ccfSSadaf Ebrahimi     }
9061*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceCooperativeMatrixPropertiesNV(physicalDevice, pPropertyCount, pProperties);
9062*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9063*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9064*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceCooperativeMatrixPropertiesNV(physicalDevice, pPropertyCount, pProperties, result);
9065*b7893ccfSSadaf Ebrahimi     }
9066*b7893ccfSSadaf Ebrahimi     return result;
9067*b7893ccfSSadaf Ebrahimi }
9068*b7893ccfSSadaf Ebrahimi 
9069*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(VkPhysicalDevice physicalDevice,uint32_t * pCombinationCount,VkFramebufferMixedSamplesCombinationNV * pCombinations)9070*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(
9071*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
9072*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pCombinationCount,
9073*b7893ccfSSadaf Ebrahimi     VkFramebufferMixedSamplesCombinationNV*     pCombinations) {
9074*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
9075*b7893ccfSSadaf Ebrahimi     bool skip = false;
9076*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9077*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9078*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(physicalDevice, pCombinationCount, pCombinations);
9079*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
9080*b7893ccfSSadaf Ebrahimi     }
9081*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9082*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9083*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(physicalDevice, pCombinationCount, pCombinations);
9084*b7893ccfSSadaf Ebrahimi     }
9085*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(physicalDevice, pCombinationCount, pCombinations);
9086*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9087*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9088*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(physicalDevice, pCombinationCount, pCombinations, result);
9089*b7893ccfSSadaf Ebrahimi     }
9090*b7893ccfSSadaf Ebrahimi     return result;
9091*b7893ccfSSadaf Ebrahimi }
9092*b7893ccfSSadaf Ebrahimi 
9093*b7893ccfSSadaf Ebrahimi 
9094*b7893ccfSSadaf Ebrahimi 
9095*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9096*b7893ccfSSadaf Ebrahimi 
GetPhysicalDeviceSurfacePresentModes2EXT(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,uint32_t * pPresentModeCount,VkPresentModeKHR * pPresentModes)9097*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModes2EXT(
9098*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
9099*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
9100*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPresentModeCount,
9101*b7893ccfSSadaf Ebrahimi     VkPresentModeKHR*                           pPresentModes) {
9102*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
9103*b7893ccfSSadaf Ebrahimi     bool skip = false;
9104*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9105*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9106*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetPhysicalDeviceSurfacePresentModes2EXT(physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes);
9107*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
9108*b7893ccfSSadaf Ebrahimi     }
9109*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9110*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9111*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetPhysicalDeviceSurfacePresentModes2EXT(physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes);
9112*b7893ccfSSadaf Ebrahimi     }
9113*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetPhysicalDeviceSurfacePresentModes2EXT(physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes);
9114*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9115*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9116*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetPhysicalDeviceSurfacePresentModes2EXT(physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes, result);
9117*b7893ccfSSadaf Ebrahimi     }
9118*b7893ccfSSadaf Ebrahimi     return result;
9119*b7893ccfSSadaf Ebrahimi }
9120*b7893ccfSSadaf Ebrahimi 
AcquireFullScreenExclusiveModeEXT(VkDevice device,VkSwapchainKHR swapchain)9121*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL AcquireFullScreenExclusiveModeEXT(
9122*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
9123*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain) {
9124*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
9125*b7893ccfSSadaf Ebrahimi     bool skip = false;
9126*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9127*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9128*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateAcquireFullScreenExclusiveModeEXT(device, swapchain);
9129*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
9130*b7893ccfSSadaf Ebrahimi     }
9131*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9132*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9133*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordAcquireFullScreenExclusiveModeEXT(device, swapchain);
9134*b7893ccfSSadaf Ebrahimi     }
9135*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchAcquireFullScreenExclusiveModeEXT(device, swapchain);
9136*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9137*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9138*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordAcquireFullScreenExclusiveModeEXT(device, swapchain, result);
9139*b7893ccfSSadaf Ebrahimi     }
9140*b7893ccfSSadaf Ebrahimi     return result;
9141*b7893ccfSSadaf Ebrahimi }
9142*b7893ccfSSadaf Ebrahimi 
ReleaseFullScreenExclusiveModeEXT(VkDevice device,VkSwapchainKHR swapchain)9143*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL ReleaseFullScreenExclusiveModeEXT(
9144*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
9145*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain) {
9146*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
9147*b7893ccfSSadaf Ebrahimi     bool skip = false;
9148*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9149*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9150*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateReleaseFullScreenExclusiveModeEXT(device, swapchain);
9151*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
9152*b7893ccfSSadaf Ebrahimi     }
9153*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9154*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9155*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordReleaseFullScreenExclusiveModeEXT(device, swapchain);
9156*b7893ccfSSadaf Ebrahimi     }
9157*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchReleaseFullScreenExclusiveModeEXT(device, swapchain);
9158*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9159*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9160*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordReleaseFullScreenExclusiveModeEXT(device, swapchain, result);
9161*b7893ccfSSadaf Ebrahimi     }
9162*b7893ccfSSadaf Ebrahimi     return result;
9163*b7893ccfSSadaf Ebrahimi }
9164*b7893ccfSSadaf Ebrahimi 
GetDeviceGroupSurfacePresentModes2EXT(VkDevice device,const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,VkDeviceGroupPresentModeFlagsKHR * pModes)9165*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModes2EXT(
9166*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
9167*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
9168*b7893ccfSSadaf Ebrahimi     VkDeviceGroupPresentModeFlagsKHR*           pModes) {
9169*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
9170*b7893ccfSSadaf Ebrahimi     bool skip = false;
9171*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9172*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9173*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateGetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes);
9174*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
9175*b7893ccfSSadaf Ebrahimi     }
9176*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9177*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9178*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordGetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes);
9179*b7893ccfSSadaf Ebrahimi     }
9180*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchGetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes);
9181*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9182*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9183*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordGetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes, result);
9184*b7893ccfSSadaf Ebrahimi     }
9185*b7893ccfSSadaf Ebrahimi     return result;
9186*b7893ccfSSadaf Ebrahimi }
9187*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
9188*b7893ccfSSadaf Ebrahimi 
9189*b7893ccfSSadaf Ebrahimi 
CreateHeadlessSurfaceEXT(VkInstance instance,const VkHeadlessSurfaceCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)9190*b7893ccfSSadaf Ebrahimi VKAPI_ATTR VkResult VKAPI_CALL CreateHeadlessSurfaceEXT(
9191*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
9192*b7893ccfSSadaf Ebrahimi     const VkHeadlessSurfaceCreateInfoEXT*       pCreateInfo,
9193*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
9194*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface) {
9195*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
9196*b7893ccfSSadaf Ebrahimi     bool skip = false;
9197*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9198*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9199*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCreateHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
9200*b7893ccfSSadaf Ebrahimi         if (skip) return VK_ERROR_VALIDATION_FAILED_EXT;
9201*b7893ccfSSadaf Ebrahimi     }
9202*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9203*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9204*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCreateHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
9205*b7893ccfSSadaf Ebrahimi     }
9206*b7893ccfSSadaf Ebrahimi     VkResult result = DispatchCreateHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
9207*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9208*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9209*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCreateHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface, result);
9210*b7893ccfSSadaf Ebrahimi     }
9211*b7893ccfSSadaf Ebrahimi     return result;
9212*b7893ccfSSadaf Ebrahimi }
9213*b7893ccfSSadaf Ebrahimi 
9214*b7893ccfSSadaf Ebrahimi 
CmdSetLineStippleEXT(VkCommandBuffer commandBuffer,uint32_t lineStippleFactor,uint16_t lineStipplePattern)9215*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL CmdSetLineStippleEXT(
9216*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
9217*b7893ccfSSadaf Ebrahimi     uint32_t                                    lineStippleFactor,
9218*b7893ccfSSadaf Ebrahimi     uint16_t                                    lineStipplePattern) {
9219*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
9220*b7893ccfSSadaf Ebrahimi     bool skip = false;
9221*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9222*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9223*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateCmdSetLineStippleEXT(commandBuffer, lineStippleFactor, lineStipplePattern);
9224*b7893ccfSSadaf Ebrahimi         if (skip) return;
9225*b7893ccfSSadaf Ebrahimi     }
9226*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9227*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9228*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordCmdSetLineStippleEXT(commandBuffer, lineStippleFactor, lineStipplePattern);
9229*b7893ccfSSadaf Ebrahimi     }
9230*b7893ccfSSadaf Ebrahimi     DispatchCmdSetLineStippleEXT(commandBuffer, lineStippleFactor, lineStipplePattern);
9231*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9232*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9233*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordCmdSetLineStippleEXT(commandBuffer, lineStippleFactor, lineStipplePattern);
9234*b7893ccfSSadaf Ebrahimi     }
9235*b7893ccfSSadaf Ebrahimi }
9236*b7893ccfSSadaf Ebrahimi 
9237*b7893ccfSSadaf Ebrahimi 
ResetQueryPoolEXT(VkDevice device,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount)9238*b7893ccfSSadaf Ebrahimi VKAPI_ATTR void VKAPI_CALL ResetQueryPoolEXT(
9239*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
9240*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
9241*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstQuery,
9242*b7893ccfSSadaf Ebrahimi     uint32_t                                    queryCount) {
9243*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
9244*b7893ccfSSadaf Ebrahimi     bool skip = false;
9245*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9246*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9247*b7893ccfSSadaf Ebrahimi         skip |= intercept->PreCallValidateResetQueryPoolEXT(device, queryPool, firstQuery, queryCount);
9248*b7893ccfSSadaf Ebrahimi         if (skip) return;
9249*b7893ccfSSadaf Ebrahimi     }
9250*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9251*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9252*b7893ccfSSadaf Ebrahimi         intercept->PreCallRecordResetQueryPoolEXT(device, queryPool, firstQuery, queryCount);
9253*b7893ccfSSadaf Ebrahimi     }
9254*b7893ccfSSadaf Ebrahimi     DispatchResetQueryPoolEXT(device, queryPool, firstQuery, queryCount);
9255*b7893ccfSSadaf Ebrahimi     for (auto intercept : layer_data->object_dispatch) {
9256*b7893ccfSSadaf Ebrahimi         auto lock = intercept->write_lock();
9257*b7893ccfSSadaf Ebrahimi         intercept->PostCallRecordResetQueryPoolEXT(device, queryPool, firstQuery, queryCount);
9258*b7893ccfSSadaf Ebrahimi     }
9259*b7893ccfSSadaf Ebrahimi }
9260*b7893ccfSSadaf Ebrahimi 
9261*b7893ccfSSadaf Ebrahimi 
9262*b7893ccfSSadaf Ebrahimi 
9263*b7893ccfSSadaf Ebrahimi 
9264*b7893ccfSSadaf Ebrahimi // Map of intercepted ApiName to its associated function data
9265*b7893ccfSSadaf Ebrahimi const std::unordered_map<std::string, function_data> name_to_funcptr_map = {
9266*b7893ccfSSadaf Ebrahimi     {"vkCreateInstance", {true, (void*)CreateInstance}},
9267*b7893ccfSSadaf Ebrahimi     {"vkDestroyInstance", {true, (void*)DestroyInstance}},
9268*b7893ccfSSadaf Ebrahimi     {"vkEnumeratePhysicalDevices", {true, (void*)EnumeratePhysicalDevices}},
9269*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceFeatures", {true, (void*)GetPhysicalDeviceFeatures}},
9270*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceFormatProperties", {true, (void*)GetPhysicalDeviceFormatProperties}},
9271*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceImageFormatProperties", {true, (void*)GetPhysicalDeviceImageFormatProperties}},
9272*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceProperties", {true, (void*)GetPhysicalDeviceProperties}},
9273*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceQueueFamilyProperties", {true, (void*)GetPhysicalDeviceQueueFamilyProperties}},
9274*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceMemoryProperties", {true, (void*)GetPhysicalDeviceMemoryProperties}},
9275*b7893ccfSSadaf Ebrahimi     {"vkGetInstanceProcAddr", {true, (void*)GetInstanceProcAddr}},
9276*b7893ccfSSadaf Ebrahimi     {"vkGetDeviceProcAddr", {false, (void*)GetDeviceProcAddr}},
9277*b7893ccfSSadaf Ebrahimi     {"vkCreateDevice", {true, (void*)CreateDevice}},
9278*b7893ccfSSadaf Ebrahimi     {"vkDestroyDevice", {false, (void*)DestroyDevice}},
9279*b7893ccfSSadaf Ebrahimi     {"vkEnumerateInstanceExtensionProperties", {false, (void*)EnumerateInstanceExtensionProperties}},
9280*b7893ccfSSadaf Ebrahimi     {"vkEnumerateDeviceExtensionProperties", {true, (void*)EnumerateDeviceExtensionProperties}},
9281*b7893ccfSSadaf Ebrahimi     {"vkEnumerateInstanceLayerProperties", {false, (void*)EnumerateInstanceLayerProperties}},
9282*b7893ccfSSadaf Ebrahimi     {"vkEnumerateDeviceLayerProperties", {true, (void*)EnumerateDeviceLayerProperties}},
9283*b7893ccfSSadaf Ebrahimi     {"vkGetDeviceQueue", {false, (void*)GetDeviceQueue}},
9284*b7893ccfSSadaf Ebrahimi     {"vkQueueSubmit", {false, (void*)QueueSubmit}},
9285*b7893ccfSSadaf Ebrahimi     {"vkQueueWaitIdle", {false, (void*)QueueWaitIdle}},
9286*b7893ccfSSadaf Ebrahimi     {"vkDeviceWaitIdle", {false, (void*)DeviceWaitIdle}},
9287*b7893ccfSSadaf Ebrahimi     {"vkAllocateMemory", {false, (void*)AllocateMemory}},
9288*b7893ccfSSadaf Ebrahimi     {"vkFreeMemory", {false, (void*)FreeMemory}},
9289*b7893ccfSSadaf Ebrahimi     {"vkMapMemory", {false, (void*)MapMemory}},
9290*b7893ccfSSadaf Ebrahimi     {"vkUnmapMemory", {false, (void*)UnmapMemory}},
9291*b7893ccfSSadaf Ebrahimi     {"vkFlushMappedMemoryRanges", {false, (void*)FlushMappedMemoryRanges}},
9292*b7893ccfSSadaf Ebrahimi     {"vkInvalidateMappedMemoryRanges", {false, (void*)InvalidateMappedMemoryRanges}},
9293*b7893ccfSSadaf Ebrahimi     {"vkGetDeviceMemoryCommitment", {false, (void*)GetDeviceMemoryCommitment}},
9294*b7893ccfSSadaf Ebrahimi     {"vkBindBufferMemory", {false, (void*)BindBufferMemory}},
9295*b7893ccfSSadaf Ebrahimi     {"vkBindImageMemory", {false, (void*)BindImageMemory}},
9296*b7893ccfSSadaf Ebrahimi     {"vkGetBufferMemoryRequirements", {false, (void*)GetBufferMemoryRequirements}},
9297*b7893ccfSSadaf Ebrahimi     {"vkGetImageMemoryRequirements", {false, (void*)GetImageMemoryRequirements}},
9298*b7893ccfSSadaf Ebrahimi     {"vkGetImageSparseMemoryRequirements", {false, (void*)GetImageSparseMemoryRequirements}},
9299*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceSparseImageFormatProperties", {true, (void*)GetPhysicalDeviceSparseImageFormatProperties}},
9300*b7893ccfSSadaf Ebrahimi     {"vkQueueBindSparse", {false, (void*)QueueBindSparse}},
9301*b7893ccfSSadaf Ebrahimi     {"vkCreateFence", {false, (void*)CreateFence}},
9302*b7893ccfSSadaf Ebrahimi     {"vkDestroyFence", {false, (void*)DestroyFence}},
9303*b7893ccfSSadaf Ebrahimi     {"vkResetFences", {false, (void*)ResetFences}},
9304*b7893ccfSSadaf Ebrahimi     {"vkGetFenceStatus", {false, (void*)GetFenceStatus}},
9305*b7893ccfSSadaf Ebrahimi     {"vkWaitForFences", {false, (void*)WaitForFences}},
9306*b7893ccfSSadaf Ebrahimi     {"vkCreateSemaphore", {false, (void*)CreateSemaphore}},
9307*b7893ccfSSadaf Ebrahimi     {"vkDestroySemaphore", {false, (void*)DestroySemaphore}},
9308*b7893ccfSSadaf Ebrahimi     {"vkCreateEvent", {false, (void*)CreateEvent}},
9309*b7893ccfSSadaf Ebrahimi     {"vkDestroyEvent", {false, (void*)DestroyEvent}},
9310*b7893ccfSSadaf Ebrahimi     {"vkGetEventStatus", {false, (void*)GetEventStatus}},
9311*b7893ccfSSadaf Ebrahimi     {"vkSetEvent", {false, (void*)SetEvent}},
9312*b7893ccfSSadaf Ebrahimi     {"vkResetEvent", {false, (void*)ResetEvent}},
9313*b7893ccfSSadaf Ebrahimi     {"vkCreateQueryPool", {false, (void*)CreateQueryPool}},
9314*b7893ccfSSadaf Ebrahimi     {"vkDestroyQueryPool", {false, (void*)DestroyQueryPool}},
9315*b7893ccfSSadaf Ebrahimi     {"vkGetQueryPoolResults", {false, (void*)GetQueryPoolResults}},
9316*b7893ccfSSadaf Ebrahimi     {"vkCreateBuffer", {false, (void*)CreateBuffer}},
9317*b7893ccfSSadaf Ebrahimi     {"vkDestroyBuffer", {false, (void*)DestroyBuffer}},
9318*b7893ccfSSadaf Ebrahimi     {"vkCreateBufferView", {false, (void*)CreateBufferView}},
9319*b7893ccfSSadaf Ebrahimi     {"vkDestroyBufferView", {false, (void*)DestroyBufferView}},
9320*b7893ccfSSadaf Ebrahimi     {"vkCreateImage", {false, (void*)CreateImage}},
9321*b7893ccfSSadaf Ebrahimi     {"vkDestroyImage", {false, (void*)DestroyImage}},
9322*b7893ccfSSadaf Ebrahimi     {"vkGetImageSubresourceLayout", {false, (void*)GetImageSubresourceLayout}},
9323*b7893ccfSSadaf Ebrahimi     {"vkCreateImageView", {false, (void*)CreateImageView}},
9324*b7893ccfSSadaf Ebrahimi     {"vkDestroyImageView", {false, (void*)DestroyImageView}},
9325*b7893ccfSSadaf Ebrahimi     {"vkCreateShaderModule", {false, (void*)CreateShaderModule}},
9326*b7893ccfSSadaf Ebrahimi     {"vkDestroyShaderModule", {false, (void*)DestroyShaderModule}},
9327*b7893ccfSSadaf Ebrahimi     {"vkCreatePipelineCache", {false, (void*)CreatePipelineCache}},
9328*b7893ccfSSadaf Ebrahimi     {"vkDestroyPipelineCache", {false, (void*)DestroyPipelineCache}},
9329*b7893ccfSSadaf Ebrahimi     {"vkGetPipelineCacheData", {false, (void*)GetPipelineCacheData}},
9330*b7893ccfSSadaf Ebrahimi     {"vkMergePipelineCaches", {false, (void*)MergePipelineCaches}},
9331*b7893ccfSSadaf Ebrahimi     {"vkCreateGraphicsPipelines", {false, (void*)CreateGraphicsPipelines}},
9332*b7893ccfSSadaf Ebrahimi     {"vkCreateComputePipelines", {false, (void*)CreateComputePipelines}},
9333*b7893ccfSSadaf Ebrahimi     {"vkDestroyPipeline", {false, (void*)DestroyPipeline}},
9334*b7893ccfSSadaf Ebrahimi     {"vkCreatePipelineLayout", {false, (void*)CreatePipelineLayout}},
9335*b7893ccfSSadaf Ebrahimi     {"vkDestroyPipelineLayout", {false, (void*)DestroyPipelineLayout}},
9336*b7893ccfSSadaf Ebrahimi     {"vkCreateSampler", {false, (void*)CreateSampler}},
9337*b7893ccfSSadaf Ebrahimi     {"vkDestroySampler", {false, (void*)DestroySampler}},
9338*b7893ccfSSadaf Ebrahimi     {"vkCreateDescriptorSetLayout", {false, (void*)CreateDescriptorSetLayout}},
9339*b7893ccfSSadaf Ebrahimi     {"vkDestroyDescriptorSetLayout", {false, (void*)DestroyDescriptorSetLayout}},
9340*b7893ccfSSadaf Ebrahimi     {"vkCreateDescriptorPool", {false, (void*)CreateDescriptorPool}},
9341*b7893ccfSSadaf Ebrahimi     {"vkDestroyDescriptorPool", {false, (void*)DestroyDescriptorPool}},
9342*b7893ccfSSadaf Ebrahimi     {"vkResetDescriptorPool", {false, (void*)ResetDescriptorPool}},
9343*b7893ccfSSadaf Ebrahimi     {"vkAllocateDescriptorSets", {false, (void*)AllocateDescriptorSets}},
9344*b7893ccfSSadaf Ebrahimi     {"vkFreeDescriptorSets", {false, (void*)FreeDescriptorSets}},
9345*b7893ccfSSadaf Ebrahimi     {"vkUpdateDescriptorSets", {false, (void*)UpdateDescriptorSets}},
9346*b7893ccfSSadaf Ebrahimi     {"vkCreateFramebuffer", {false, (void*)CreateFramebuffer}},
9347*b7893ccfSSadaf Ebrahimi     {"vkDestroyFramebuffer", {false, (void*)DestroyFramebuffer}},
9348*b7893ccfSSadaf Ebrahimi     {"vkCreateRenderPass", {false, (void*)CreateRenderPass}},
9349*b7893ccfSSadaf Ebrahimi     {"vkDestroyRenderPass", {false, (void*)DestroyRenderPass}},
9350*b7893ccfSSadaf Ebrahimi     {"vkGetRenderAreaGranularity", {false, (void*)GetRenderAreaGranularity}},
9351*b7893ccfSSadaf Ebrahimi     {"vkCreateCommandPool", {false, (void*)CreateCommandPool}},
9352*b7893ccfSSadaf Ebrahimi     {"vkDestroyCommandPool", {false, (void*)DestroyCommandPool}},
9353*b7893ccfSSadaf Ebrahimi     {"vkResetCommandPool", {false, (void*)ResetCommandPool}},
9354*b7893ccfSSadaf Ebrahimi     {"vkAllocateCommandBuffers", {false, (void*)AllocateCommandBuffers}},
9355*b7893ccfSSadaf Ebrahimi     {"vkFreeCommandBuffers", {false, (void*)FreeCommandBuffers}},
9356*b7893ccfSSadaf Ebrahimi     {"vkBeginCommandBuffer", {false, (void*)BeginCommandBuffer}},
9357*b7893ccfSSadaf Ebrahimi     {"vkEndCommandBuffer", {false, (void*)EndCommandBuffer}},
9358*b7893ccfSSadaf Ebrahimi     {"vkResetCommandBuffer", {false, (void*)ResetCommandBuffer}},
9359*b7893ccfSSadaf Ebrahimi     {"vkCmdBindPipeline", {false, (void*)CmdBindPipeline}},
9360*b7893ccfSSadaf Ebrahimi     {"vkCmdSetViewport", {false, (void*)CmdSetViewport}},
9361*b7893ccfSSadaf Ebrahimi     {"vkCmdSetScissor", {false, (void*)CmdSetScissor}},
9362*b7893ccfSSadaf Ebrahimi     {"vkCmdSetLineWidth", {false, (void*)CmdSetLineWidth}},
9363*b7893ccfSSadaf Ebrahimi     {"vkCmdSetDepthBias", {false, (void*)CmdSetDepthBias}},
9364*b7893ccfSSadaf Ebrahimi     {"vkCmdSetBlendConstants", {false, (void*)CmdSetBlendConstants}},
9365*b7893ccfSSadaf Ebrahimi     {"vkCmdSetDepthBounds", {false, (void*)CmdSetDepthBounds}},
9366*b7893ccfSSadaf Ebrahimi     {"vkCmdSetStencilCompareMask", {false, (void*)CmdSetStencilCompareMask}},
9367*b7893ccfSSadaf Ebrahimi     {"vkCmdSetStencilWriteMask", {false, (void*)CmdSetStencilWriteMask}},
9368*b7893ccfSSadaf Ebrahimi     {"vkCmdSetStencilReference", {false, (void*)CmdSetStencilReference}},
9369*b7893ccfSSadaf Ebrahimi     {"vkCmdBindDescriptorSets", {false, (void*)CmdBindDescriptorSets}},
9370*b7893ccfSSadaf Ebrahimi     {"vkCmdBindIndexBuffer", {false, (void*)CmdBindIndexBuffer}},
9371*b7893ccfSSadaf Ebrahimi     {"vkCmdBindVertexBuffers", {false, (void*)CmdBindVertexBuffers}},
9372*b7893ccfSSadaf Ebrahimi     {"vkCmdDraw", {false, (void*)CmdDraw}},
9373*b7893ccfSSadaf Ebrahimi     {"vkCmdDrawIndexed", {false, (void*)CmdDrawIndexed}},
9374*b7893ccfSSadaf Ebrahimi     {"vkCmdDrawIndirect", {false, (void*)CmdDrawIndirect}},
9375*b7893ccfSSadaf Ebrahimi     {"vkCmdDrawIndexedIndirect", {false, (void*)CmdDrawIndexedIndirect}},
9376*b7893ccfSSadaf Ebrahimi     {"vkCmdDispatch", {false, (void*)CmdDispatch}},
9377*b7893ccfSSadaf Ebrahimi     {"vkCmdDispatchIndirect", {false, (void*)CmdDispatchIndirect}},
9378*b7893ccfSSadaf Ebrahimi     {"vkCmdCopyBuffer", {false, (void*)CmdCopyBuffer}},
9379*b7893ccfSSadaf Ebrahimi     {"vkCmdCopyImage", {false, (void*)CmdCopyImage}},
9380*b7893ccfSSadaf Ebrahimi     {"vkCmdBlitImage", {false, (void*)CmdBlitImage}},
9381*b7893ccfSSadaf Ebrahimi     {"vkCmdCopyBufferToImage", {false, (void*)CmdCopyBufferToImage}},
9382*b7893ccfSSadaf Ebrahimi     {"vkCmdCopyImageToBuffer", {false, (void*)CmdCopyImageToBuffer}},
9383*b7893ccfSSadaf Ebrahimi     {"vkCmdUpdateBuffer", {false, (void*)CmdUpdateBuffer}},
9384*b7893ccfSSadaf Ebrahimi     {"vkCmdFillBuffer", {false, (void*)CmdFillBuffer}},
9385*b7893ccfSSadaf Ebrahimi     {"vkCmdClearColorImage", {false, (void*)CmdClearColorImage}},
9386*b7893ccfSSadaf Ebrahimi     {"vkCmdClearDepthStencilImage", {false, (void*)CmdClearDepthStencilImage}},
9387*b7893ccfSSadaf Ebrahimi     {"vkCmdClearAttachments", {false, (void*)CmdClearAttachments}},
9388*b7893ccfSSadaf Ebrahimi     {"vkCmdResolveImage", {false, (void*)CmdResolveImage}},
9389*b7893ccfSSadaf Ebrahimi     {"vkCmdSetEvent", {false, (void*)CmdSetEvent}},
9390*b7893ccfSSadaf Ebrahimi     {"vkCmdResetEvent", {false, (void*)CmdResetEvent}},
9391*b7893ccfSSadaf Ebrahimi     {"vkCmdWaitEvents", {false, (void*)CmdWaitEvents}},
9392*b7893ccfSSadaf Ebrahimi     {"vkCmdPipelineBarrier", {false, (void*)CmdPipelineBarrier}},
9393*b7893ccfSSadaf Ebrahimi     {"vkCmdBeginQuery", {false, (void*)CmdBeginQuery}},
9394*b7893ccfSSadaf Ebrahimi     {"vkCmdEndQuery", {false, (void*)CmdEndQuery}},
9395*b7893ccfSSadaf Ebrahimi     {"vkCmdResetQueryPool", {false, (void*)CmdResetQueryPool}},
9396*b7893ccfSSadaf Ebrahimi     {"vkCmdWriteTimestamp", {false, (void*)CmdWriteTimestamp}},
9397*b7893ccfSSadaf Ebrahimi     {"vkCmdCopyQueryPoolResults", {false, (void*)CmdCopyQueryPoolResults}},
9398*b7893ccfSSadaf Ebrahimi     {"vkCmdPushConstants", {false, (void*)CmdPushConstants}},
9399*b7893ccfSSadaf Ebrahimi     {"vkCmdBeginRenderPass", {false, (void*)CmdBeginRenderPass}},
9400*b7893ccfSSadaf Ebrahimi     {"vkCmdNextSubpass", {false, (void*)CmdNextSubpass}},
9401*b7893ccfSSadaf Ebrahimi     {"vkCmdEndRenderPass", {false, (void*)CmdEndRenderPass}},
9402*b7893ccfSSadaf Ebrahimi     {"vkCmdExecuteCommands", {false, (void*)CmdExecuteCommands}},
9403*b7893ccfSSadaf Ebrahimi     {"vkBindBufferMemory2", {false, (void*)BindBufferMemory2}},
9404*b7893ccfSSadaf Ebrahimi     {"vkBindImageMemory2", {false, (void*)BindImageMemory2}},
9405*b7893ccfSSadaf Ebrahimi     {"vkGetDeviceGroupPeerMemoryFeatures", {false, (void*)GetDeviceGroupPeerMemoryFeatures}},
9406*b7893ccfSSadaf Ebrahimi     {"vkCmdSetDeviceMask", {false, (void*)CmdSetDeviceMask}},
9407*b7893ccfSSadaf Ebrahimi     {"vkCmdDispatchBase", {false, (void*)CmdDispatchBase}},
9408*b7893ccfSSadaf Ebrahimi     {"vkEnumeratePhysicalDeviceGroups", {true, (void*)EnumeratePhysicalDeviceGroups}},
9409*b7893ccfSSadaf Ebrahimi     {"vkGetImageMemoryRequirements2", {false, (void*)GetImageMemoryRequirements2}},
9410*b7893ccfSSadaf Ebrahimi     {"vkGetBufferMemoryRequirements2", {false, (void*)GetBufferMemoryRequirements2}},
9411*b7893ccfSSadaf Ebrahimi     {"vkGetImageSparseMemoryRequirements2", {false, (void*)GetImageSparseMemoryRequirements2}},
9412*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceFeatures2", {true, (void*)GetPhysicalDeviceFeatures2}},
9413*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceProperties2", {true, (void*)GetPhysicalDeviceProperties2}},
9414*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceFormatProperties2", {true, (void*)GetPhysicalDeviceFormatProperties2}},
9415*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceImageFormatProperties2", {true, (void*)GetPhysicalDeviceImageFormatProperties2}},
9416*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceQueueFamilyProperties2", {true, (void*)GetPhysicalDeviceQueueFamilyProperties2}},
9417*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceMemoryProperties2", {true, (void*)GetPhysicalDeviceMemoryProperties2}},
9418*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceSparseImageFormatProperties2", {true, (void*)GetPhysicalDeviceSparseImageFormatProperties2}},
9419*b7893ccfSSadaf Ebrahimi     {"vkTrimCommandPool", {false, (void*)TrimCommandPool}},
9420*b7893ccfSSadaf Ebrahimi     {"vkGetDeviceQueue2", {false, (void*)GetDeviceQueue2}},
9421*b7893ccfSSadaf Ebrahimi     {"vkCreateSamplerYcbcrConversion", {false, (void*)CreateSamplerYcbcrConversion}},
9422*b7893ccfSSadaf Ebrahimi     {"vkDestroySamplerYcbcrConversion", {false, (void*)DestroySamplerYcbcrConversion}},
9423*b7893ccfSSadaf Ebrahimi     {"vkCreateDescriptorUpdateTemplate", {false, (void*)CreateDescriptorUpdateTemplate}},
9424*b7893ccfSSadaf Ebrahimi     {"vkDestroyDescriptorUpdateTemplate", {false, (void*)DestroyDescriptorUpdateTemplate}},
9425*b7893ccfSSadaf Ebrahimi     {"vkUpdateDescriptorSetWithTemplate", {false, (void*)UpdateDescriptorSetWithTemplate}},
9426*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceExternalBufferProperties", {true, (void*)GetPhysicalDeviceExternalBufferProperties}},
9427*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceExternalFenceProperties", {true, (void*)GetPhysicalDeviceExternalFenceProperties}},
9428*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceExternalSemaphoreProperties", {true, (void*)GetPhysicalDeviceExternalSemaphoreProperties}},
9429*b7893ccfSSadaf Ebrahimi     {"vkGetDescriptorSetLayoutSupport", {false, (void*)GetDescriptorSetLayoutSupport}},
9430*b7893ccfSSadaf Ebrahimi     {"vkDestroySurfaceKHR", {true, (void*)DestroySurfaceKHR}},
9431*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceSurfaceSupportKHR", {true, (void*)GetPhysicalDeviceSurfaceSupportKHR}},
9432*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceSurfaceCapabilitiesKHR", {true, (void*)GetPhysicalDeviceSurfaceCapabilitiesKHR}},
9433*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceSurfaceFormatsKHR", {true, (void*)GetPhysicalDeviceSurfaceFormatsKHR}},
9434*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceSurfacePresentModesKHR", {true, (void*)GetPhysicalDeviceSurfacePresentModesKHR}},
9435*b7893ccfSSadaf Ebrahimi     {"vkCreateSwapchainKHR", {false, (void*)CreateSwapchainKHR}},
9436*b7893ccfSSadaf Ebrahimi     {"vkDestroySwapchainKHR", {false, (void*)DestroySwapchainKHR}},
9437*b7893ccfSSadaf Ebrahimi     {"vkGetSwapchainImagesKHR", {false, (void*)GetSwapchainImagesKHR}},
9438*b7893ccfSSadaf Ebrahimi     {"vkAcquireNextImageKHR", {false, (void*)AcquireNextImageKHR}},
9439*b7893ccfSSadaf Ebrahimi     {"vkQueuePresentKHR", {false, (void*)QueuePresentKHR}},
9440*b7893ccfSSadaf Ebrahimi     {"vkGetDeviceGroupPresentCapabilitiesKHR", {false, (void*)GetDeviceGroupPresentCapabilitiesKHR}},
9441*b7893ccfSSadaf Ebrahimi     {"vkGetDeviceGroupSurfacePresentModesKHR", {false, (void*)GetDeviceGroupSurfacePresentModesKHR}},
9442*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDevicePresentRectanglesKHR", {true, (void*)GetPhysicalDevicePresentRectanglesKHR}},
9443*b7893ccfSSadaf Ebrahimi     {"vkAcquireNextImage2KHR", {false, (void*)AcquireNextImage2KHR}},
9444*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceDisplayPropertiesKHR", {true, (void*)GetPhysicalDeviceDisplayPropertiesKHR}},
9445*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceDisplayPlanePropertiesKHR", {true, (void*)GetPhysicalDeviceDisplayPlanePropertiesKHR}},
9446*b7893ccfSSadaf Ebrahimi     {"vkGetDisplayPlaneSupportedDisplaysKHR", {true, (void*)GetDisplayPlaneSupportedDisplaysKHR}},
9447*b7893ccfSSadaf Ebrahimi     {"vkGetDisplayModePropertiesKHR", {true, (void*)GetDisplayModePropertiesKHR}},
9448*b7893ccfSSadaf Ebrahimi     {"vkCreateDisplayModeKHR", {true, (void*)CreateDisplayModeKHR}},
9449*b7893ccfSSadaf Ebrahimi     {"vkGetDisplayPlaneCapabilitiesKHR", {true, (void*)GetDisplayPlaneCapabilitiesKHR}},
9450*b7893ccfSSadaf Ebrahimi     {"vkCreateDisplayPlaneSurfaceKHR", {true, (void*)CreateDisplayPlaneSurfaceKHR}},
9451*b7893ccfSSadaf Ebrahimi     {"vkCreateSharedSwapchainsKHR", {false, (void*)CreateSharedSwapchainsKHR}},
9452*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_KHR
9453*b7893ccfSSadaf Ebrahimi     {"vkCreateXlibSurfaceKHR", {true, (void*)CreateXlibSurfaceKHR}},
9454*b7893ccfSSadaf Ebrahimi #endif
9455*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_KHR
9456*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceXlibPresentationSupportKHR", {true, (void*)GetPhysicalDeviceXlibPresentationSupportKHR}},
9457*b7893ccfSSadaf Ebrahimi #endif
9458*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XCB_KHR
9459*b7893ccfSSadaf Ebrahimi     {"vkCreateXcbSurfaceKHR", {true, (void*)CreateXcbSurfaceKHR}},
9460*b7893ccfSSadaf Ebrahimi #endif
9461*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XCB_KHR
9462*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceXcbPresentationSupportKHR", {true, (void*)GetPhysicalDeviceXcbPresentationSupportKHR}},
9463*b7893ccfSSadaf Ebrahimi #endif
9464*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WAYLAND_KHR
9465*b7893ccfSSadaf Ebrahimi     {"vkCreateWaylandSurfaceKHR", {true, (void*)CreateWaylandSurfaceKHR}},
9466*b7893ccfSSadaf Ebrahimi #endif
9467*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WAYLAND_KHR
9468*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceWaylandPresentationSupportKHR", {true, (void*)GetPhysicalDeviceWaylandPresentationSupportKHR}},
9469*b7893ccfSSadaf Ebrahimi #endif
9470*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_ANDROID_KHR
9471*b7893ccfSSadaf Ebrahimi     {"vkCreateAndroidSurfaceKHR", {true, (void*)CreateAndroidSurfaceKHR}},
9472*b7893ccfSSadaf Ebrahimi #endif
9473*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9474*b7893ccfSSadaf Ebrahimi     {"vkCreateWin32SurfaceKHR", {true, (void*)CreateWin32SurfaceKHR}},
9475*b7893ccfSSadaf Ebrahimi #endif
9476*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9477*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceWin32PresentationSupportKHR", {true, (void*)GetPhysicalDeviceWin32PresentationSupportKHR}},
9478*b7893ccfSSadaf Ebrahimi #endif
9479*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceFeatures2KHR", {true, (void*)GetPhysicalDeviceFeatures2KHR}},
9480*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceProperties2KHR", {true, (void*)GetPhysicalDeviceProperties2KHR}},
9481*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceFormatProperties2KHR", {true, (void*)GetPhysicalDeviceFormatProperties2KHR}},
9482*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceImageFormatProperties2KHR", {true, (void*)GetPhysicalDeviceImageFormatProperties2KHR}},
9483*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceQueueFamilyProperties2KHR", {true, (void*)GetPhysicalDeviceQueueFamilyProperties2KHR}},
9484*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceMemoryProperties2KHR", {true, (void*)GetPhysicalDeviceMemoryProperties2KHR}},
9485*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceSparseImageFormatProperties2KHR", {true, (void*)GetPhysicalDeviceSparseImageFormatProperties2KHR}},
9486*b7893ccfSSadaf Ebrahimi     {"vkGetDeviceGroupPeerMemoryFeaturesKHR", {false, (void*)GetDeviceGroupPeerMemoryFeaturesKHR}},
9487*b7893ccfSSadaf Ebrahimi     {"vkCmdSetDeviceMaskKHR", {false, (void*)CmdSetDeviceMaskKHR}},
9488*b7893ccfSSadaf Ebrahimi     {"vkCmdDispatchBaseKHR", {false, (void*)CmdDispatchBaseKHR}},
9489*b7893ccfSSadaf Ebrahimi     {"vkTrimCommandPoolKHR", {false, (void*)TrimCommandPoolKHR}},
9490*b7893ccfSSadaf Ebrahimi     {"vkEnumeratePhysicalDeviceGroupsKHR", {true, (void*)EnumeratePhysicalDeviceGroupsKHR}},
9491*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceExternalBufferPropertiesKHR", {true, (void*)GetPhysicalDeviceExternalBufferPropertiesKHR}},
9492*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9493*b7893ccfSSadaf Ebrahimi     {"vkGetMemoryWin32HandleKHR", {false, (void*)GetMemoryWin32HandleKHR}},
9494*b7893ccfSSadaf Ebrahimi #endif
9495*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9496*b7893ccfSSadaf Ebrahimi     {"vkGetMemoryWin32HandlePropertiesKHR", {false, (void*)GetMemoryWin32HandlePropertiesKHR}},
9497*b7893ccfSSadaf Ebrahimi #endif
9498*b7893ccfSSadaf Ebrahimi     {"vkGetMemoryFdKHR", {false, (void*)GetMemoryFdKHR}},
9499*b7893ccfSSadaf Ebrahimi     {"vkGetMemoryFdPropertiesKHR", {false, (void*)GetMemoryFdPropertiesKHR}},
9500*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceExternalSemaphorePropertiesKHR", {true, (void*)GetPhysicalDeviceExternalSemaphorePropertiesKHR}},
9501*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9502*b7893ccfSSadaf Ebrahimi     {"vkImportSemaphoreWin32HandleKHR", {false, (void*)ImportSemaphoreWin32HandleKHR}},
9503*b7893ccfSSadaf Ebrahimi #endif
9504*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9505*b7893ccfSSadaf Ebrahimi     {"vkGetSemaphoreWin32HandleKHR", {false, (void*)GetSemaphoreWin32HandleKHR}},
9506*b7893ccfSSadaf Ebrahimi #endif
9507*b7893ccfSSadaf Ebrahimi     {"vkImportSemaphoreFdKHR", {false, (void*)ImportSemaphoreFdKHR}},
9508*b7893ccfSSadaf Ebrahimi     {"vkGetSemaphoreFdKHR", {false, (void*)GetSemaphoreFdKHR}},
9509*b7893ccfSSadaf Ebrahimi     {"vkCmdPushDescriptorSetKHR", {false, (void*)CmdPushDescriptorSetKHR}},
9510*b7893ccfSSadaf Ebrahimi     {"vkCmdPushDescriptorSetWithTemplateKHR", {false, (void*)CmdPushDescriptorSetWithTemplateKHR}},
9511*b7893ccfSSadaf Ebrahimi     {"vkCreateDescriptorUpdateTemplateKHR", {false, (void*)CreateDescriptorUpdateTemplateKHR}},
9512*b7893ccfSSadaf Ebrahimi     {"vkDestroyDescriptorUpdateTemplateKHR", {false, (void*)DestroyDescriptorUpdateTemplateKHR}},
9513*b7893ccfSSadaf Ebrahimi     {"vkUpdateDescriptorSetWithTemplateKHR", {false, (void*)UpdateDescriptorSetWithTemplateKHR}},
9514*b7893ccfSSadaf Ebrahimi     {"vkCreateRenderPass2KHR", {false, (void*)CreateRenderPass2KHR}},
9515*b7893ccfSSadaf Ebrahimi     {"vkCmdBeginRenderPass2KHR", {false, (void*)CmdBeginRenderPass2KHR}},
9516*b7893ccfSSadaf Ebrahimi     {"vkCmdNextSubpass2KHR", {false, (void*)CmdNextSubpass2KHR}},
9517*b7893ccfSSadaf Ebrahimi     {"vkCmdEndRenderPass2KHR", {false, (void*)CmdEndRenderPass2KHR}},
9518*b7893ccfSSadaf Ebrahimi     {"vkGetSwapchainStatusKHR", {false, (void*)GetSwapchainStatusKHR}},
9519*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceExternalFencePropertiesKHR", {true, (void*)GetPhysicalDeviceExternalFencePropertiesKHR}},
9520*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9521*b7893ccfSSadaf Ebrahimi     {"vkImportFenceWin32HandleKHR", {false, (void*)ImportFenceWin32HandleKHR}},
9522*b7893ccfSSadaf Ebrahimi #endif
9523*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9524*b7893ccfSSadaf Ebrahimi     {"vkGetFenceWin32HandleKHR", {false, (void*)GetFenceWin32HandleKHR}},
9525*b7893ccfSSadaf Ebrahimi #endif
9526*b7893ccfSSadaf Ebrahimi     {"vkImportFenceFdKHR", {false, (void*)ImportFenceFdKHR}},
9527*b7893ccfSSadaf Ebrahimi     {"vkGetFenceFdKHR", {false, (void*)GetFenceFdKHR}},
9528*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceSurfaceCapabilities2KHR", {true, (void*)GetPhysicalDeviceSurfaceCapabilities2KHR}},
9529*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceSurfaceFormats2KHR", {true, (void*)GetPhysicalDeviceSurfaceFormats2KHR}},
9530*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceDisplayProperties2KHR", {true, (void*)GetPhysicalDeviceDisplayProperties2KHR}},
9531*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceDisplayPlaneProperties2KHR", {true, (void*)GetPhysicalDeviceDisplayPlaneProperties2KHR}},
9532*b7893ccfSSadaf Ebrahimi     {"vkGetDisplayModeProperties2KHR", {true, (void*)GetDisplayModeProperties2KHR}},
9533*b7893ccfSSadaf Ebrahimi     {"vkGetDisplayPlaneCapabilities2KHR", {true, (void*)GetDisplayPlaneCapabilities2KHR}},
9534*b7893ccfSSadaf Ebrahimi     {"vkGetImageMemoryRequirements2KHR", {false, (void*)GetImageMemoryRequirements2KHR}},
9535*b7893ccfSSadaf Ebrahimi     {"vkGetBufferMemoryRequirements2KHR", {false, (void*)GetBufferMemoryRequirements2KHR}},
9536*b7893ccfSSadaf Ebrahimi     {"vkGetImageSparseMemoryRequirements2KHR", {false, (void*)GetImageSparseMemoryRequirements2KHR}},
9537*b7893ccfSSadaf Ebrahimi     {"vkCreateSamplerYcbcrConversionKHR", {false, (void*)CreateSamplerYcbcrConversionKHR}},
9538*b7893ccfSSadaf Ebrahimi     {"vkDestroySamplerYcbcrConversionKHR", {false, (void*)DestroySamplerYcbcrConversionKHR}},
9539*b7893ccfSSadaf Ebrahimi     {"vkBindBufferMemory2KHR", {false, (void*)BindBufferMemory2KHR}},
9540*b7893ccfSSadaf Ebrahimi     {"vkBindImageMemory2KHR", {false, (void*)BindImageMemory2KHR}},
9541*b7893ccfSSadaf Ebrahimi     {"vkGetDescriptorSetLayoutSupportKHR", {false, (void*)GetDescriptorSetLayoutSupportKHR}},
9542*b7893ccfSSadaf Ebrahimi     {"vkCmdDrawIndirectCountKHR", {false, (void*)CmdDrawIndirectCountKHR}},
9543*b7893ccfSSadaf Ebrahimi     {"vkCmdDrawIndexedIndirectCountKHR", {false, (void*)CmdDrawIndexedIndirectCountKHR}},
9544*b7893ccfSSadaf Ebrahimi     {"vkGetPipelineExecutablePropertiesKHR", {false, (void*)GetPipelineExecutablePropertiesKHR}},
9545*b7893ccfSSadaf Ebrahimi     {"vkGetPipelineExecutableStatisticsKHR", {false, (void*)GetPipelineExecutableStatisticsKHR}},
9546*b7893ccfSSadaf Ebrahimi     {"vkGetPipelineExecutableInternalRepresentationsKHR", {false, (void*)GetPipelineExecutableInternalRepresentationsKHR}},
9547*b7893ccfSSadaf Ebrahimi     {"vkCreateDebugReportCallbackEXT", {true, (void*)CreateDebugReportCallbackEXT}},
9548*b7893ccfSSadaf Ebrahimi     {"vkDestroyDebugReportCallbackEXT", {true, (void*)DestroyDebugReportCallbackEXT}},
9549*b7893ccfSSadaf Ebrahimi     {"vkDebugReportMessageEXT", {true, (void*)DebugReportMessageEXT}},
9550*b7893ccfSSadaf Ebrahimi     {"vkDebugMarkerSetObjectTagEXT", {false, (void*)DebugMarkerSetObjectTagEXT}},
9551*b7893ccfSSadaf Ebrahimi     {"vkDebugMarkerSetObjectNameEXT", {false, (void*)DebugMarkerSetObjectNameEXT}},
9552*b7893ccfSSadaf Ebrahimi     {"vkCmdDebugMarkerBeginEXT", {false, (void*)CmdDebugMarkerBeginEXT}},
9553*b7893ccfSSadaf Ebrahimi     {"vkCmdDebugMarkerEndEXT", {false, (void*)CmdDebugMarkerEndEXT}},
9554*b7893ccfSSadaf Ebrahimi     {"vkCmdDebugMarkerInsertEXT", {false, (void*)CmdDebugMarkerInsertEXT}},
9555*b7893ccfSSadaf Ebrahimi     {"vkCmdBindTransformFeedbackBuffersEXT", {false, (void*)CmdBindTransformFeedbackBuffersEXT}},
9556*b7893ccfSSadaf Ebrahimi     {"vkCmdBeginTransformFeedbackEXT", {false, (void*)CmdBeginTransformFeedbackEXT}},
9557*b7893ccfSSadaf Ebrahimi     {"vkCmdEndTransformFeedbackEXT", {false, (void*)CmdEndTransformFeedbackEXT}},
9558*b7893ccfSSadaf Ebrahimi     {"vkCmdBeginQueryIndexedEXT", {false, (void*)CmdBeginQueryIndexedEXT}},
9559*b7893ccfSSadaf Ebrahimi     {"vkCmdEndQueryIndexedEXT", {false, (void*)CmdEndQueryIndexedEXT}},
9560*b7893ccfSSadaf Ebrahimi     {"vkCmdDrawIndirectByteCountEXT", {false, (void*)CmdDrawIndirectByteCountEXT}},
9561*b7893ccfSSadaf Ebrahimi     {"vkGetImageViewHandleNVX", {false, (void*)GetImageViewHandleNVX}},
9562*b7893ccfSSadaf Ebrahimi     {"vkCmdDrawIndirectCountAMD", {false, (void*)CmdDrawIndirectCountAMD}},
9563*b7893ccfSSadaf Ebrahimi     {"vkCmdDrawIndexedIndirectCountAMD", {false, (void*)CmdDrawIndexedIndirectCountAMD}},
9564*b7893ccfSSadaf Ebrahimi     {"vkGetShaderInfoAMD", {false, (void*)GetShaderInfoAMD}},
9565*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_GGP
9566*b7893ccfSSadaf Ebrahimi     {"vkCreateStreamDescriptorSurfaceGGP", {true, (void*)CreateStreamDescriptorSurfaceGGP}},
9567*b7893ccfSSadaf Ebrahimi #endif
9568*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceExternalImageFormatPropertiesNV", {true, (void*)GetPhysicalDeviceExternalImageFormatPropertiesNV}},
9569*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9570*b7893ccfSSadaf Ebrahimi     {"vkGetMemoryWin32HandleNV", {false, (void*)GetMemoryWin32HandleNV}},
9571*b7893ccfSSadaf Ebrahimi #endif
9572*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_VI_NN
9573*b7893ccfSSadaf Ebrahimi     {"vkCreateViSurfaceNN", {true, (void*)CreateViSurfaceNN}},
9574*b7893ccfSSadaf Ebrahimi #endif
9575*b7893ccfSSadaf Ebrahimi     {"vkCmdBeginConditionalRenderingEXT", {false, (void*)CmdBeginConditionalRenderingEXT}},
9576*b7893ccfSSadaf Ebrahimi     {"vkCmdEndConditionalRenderingEXT", {false, (void*)CmdEndConditionalRenderingEXT}},
9577*b7893ccfSSadaf Ebrahimi     {"vkCmdProcessCommandsNVX", {false, (void*)CmdProcessCommandsNVX}},
9578*b7893ccfSSadaf Ebrahimi     {"vkCmdReserveSpaceForCommandsNVX", {false, (void*)CmdReserveSpaceForCommandsNVX}},
9579*b7893ccfSSadaf Ebrahimi     {"vkCreateIndirectCommandsLayoutNVX", {false, (void*)CreateIndirectCommandsLayoutNVX}},
9580*b7893ccfSSadaf Ebrahimi     {"vkDestroyIndirectCommandsLayoutNVX", {false, (void*)DestroyIndirectCommandsLayoutNVX}},
9581*b7893ccfSSadaf Ebrahimi     {"vkCreateObjectTableNVX", {false, (void*)CreateObjectTableNVX}},
9582*b7893ccfSSadaf Ebrahimi     {"vkDestroyObjectTableNVX", {false, (void*)DestroyObjectTableNVX}},
9583*b7893ccfSSadaf Ebrahimi     {"vkRegisterObjectsNVX", {false, (void*)RegisterObjectsNVX}},
9584*b7893ccfSSadaf Ebrahimi     {"vkUnregisterObjectsNVX", {false, (void*)UnregisterObjectsNVX}},
9585*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX", {true, (void*)GetPhysicalDeviceGeneratedCommandsPropertiesNVX}},
9586*b7893ccfSSadaf Ebrahimi     {"vkCmdSetViewportWScalingNV", {false, (void*)CmdSetViewportWScalingNV}},
9587*b7893ccfSSadaf Ebrahimi     {"vkReleaseDisplayEXT", {true, (void*)ReleaseDisplayEXT}},
9588*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
9589*b7893ccfSSadaf Ebrahimi     {"vkAcquireXlibDisplayEXT", {true, (void*)AcquireXlibDisplayEXT}},
9590*b7893ccfSSadaf Ebrahimi #endif
9591*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
9592*b7893ccfSSadaf Ebrahimi     {"vkGetRandROutputDisplayEXT", {true, (void*)GetRandROutputDisplayEXT}},
9593*b7893ccfSSadaf Ebrahimi #endif
9594*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceSurfaceCapabilities2EXT", {true, (void*)GetPhysicalDeviceSurfaceCapabilities2EXT}},
9595*b7893ccfSSadaf Ebrahimi     {"vkDisplayPowerControlEXT", {false, (void*)DisplayPowerControlEXT}},
9596*b7893ccfSSadaf Ebrahimi     {"vkRegisterDeviceEventEXT", {false, (void*)RegisterDeviceEventEXT}},
9597*b7893ccfSSadaf Ebrahimi     {"vkRegisterDisplayEventEXT", {false, (void*)RegisterDisplayEventEXT}},
9598*b7893ccfSSadaf Ebrahimi     {"vkGetSwapchainCounterEXT", {false, (void*)GetSwapchainCounterEXT}},
9599*b7893ccfSSadaf Ebrahimi     {"vkGetRefreshCycleDurationGOOGLE", {false, (void*)GetRefreshCycleDurationGOOGLE}},
9600*b7893ccfSSadaf Ebrahimi     {"vkGetPastPresentationTimingGOOGLE", {false, (void*)GetPastPresentationTimingGOOGLE}},
9601*b7893ccfSSadaf Ebrahimi     {"vkCmdSetDiscardRectangleEXT", {false, (void*)CmdSetDiscardRectangleEXT}},
9602*b7893ccfSSadaf Ebrahimi     {"vkSetHdrMetadataEXT", {false, (void*)SetHdrMetadataEXT}},
9603*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_IOS_MVK
9604*b7893ccfSSadaf Ebrahimi     {"vkCreateIOSSurfaceMVK", {true, (void*)CreateIOSSurfaceMVK}},
9605*b7893ccfSSadaf Ebrahimi #endif
9606*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_MACOS_MVK
9607*b7893ccfSSadaf Ebrahimi     {"vkCreateMacOSSurfaceMVK", {true, (void*)CreateMacOSSurfaceMVK}},
9608*b7893ccfSSadaf Ebrahimi #endif
9609*b7893ccfSSadaf Ebrahimi     {"vkSetDebugUtilsObjectNameEXT", {false, (void*)SetDebugUtilsObjectNameEXT}},
9610*b7893ccfSSadaf Ebrahimi     {"vkSetDebugUtilsObjectTagEXT", {false, (void*)SetDebugUtilsObjectTagEXT}},
9611*b7893ccfSSadaf Ebrahimi     {"vkQueueBeginDebugUtilsLabelEXT", {false, (void*)QueueBeginDebugUtilsLabelEXT}},
9612*b7893ccfSSadaf Ebrahimi     {"vkQueueEndDebugUtilsLabelEXT", {false, (void*)QueueEndDebugUtilsLabelEXT}},
9613*b7893ccfSSadaf Ebrahimi     {"vkQueueInsertDebugUtilsLabelEXT", {false, (void*)QueueInsertDebugUtilsLabelEXT}},
9614*b7893ccfSSadaf Ebrahimi     {"vkCmdBeginDebugUtilsLabelEXT", {false, (void*)CmdBeginDebugUtilsLabelEXT}},
9615*b7893ccfSSadaf Ebrahimi     {"vkCmdEndDebugUtilsLabelEXT", {false, (void*)CmdEndDebugUtilsLabelEXT}},
9616*b7893ccfSSadaf Ebrahimi     {"vkCmdInsertDebugUtilsLabelEXT", {false, (void*)CmdInsertDebugUtilsLabelEXT}},
9617*b7893ccfSSadaf Ebrahimi     {"vkCreateDebugUtilsMessengerEXT", {true, (void*)CreateDebugUtilsMessengerEXT}},
9618*b7893ccfSSadaf Ebrahimi     {"vkDestroyDebugUtilsMessengerEXT", {true, (void*)DestroyDebugUtilsMessengerEXT}},
9619*b7893ccfSSadaf Ebrahimi     {"vkSubmitDebugUtilsMessageEXT", {true, (void*)SubmitDebugUtilsMessageEXT}},
9620*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_ANDROID_KHR
9621*b7893ccfSSadaf Ebrahimi     {"vkGetAndroidHardwareBufferPropertiesANDROID", {false, (void*)GetAndroidHardwareBufferPropertiesANDROID}},
9622*b7893ccfSSadaf Ebrahimi #endif
9623*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_ANDROID_KHR
9624*b7893ccfSSadaf Ebrahimi     {"vkGetMemoryAndroidHardwareBufferANDROID", {false, (void*)GetMemoryAndroidHardwareBufferANDROID}},
9625*b7893ccfSSadaf Ebrahimi #endif
9626*b7893ccfSSadaf Ebrahimi     {"vkCmdSetSampleLocationsEXT", {false, (void*)CmdSetSampleLocationsEXT}},
9627*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceMultisamplePropertiesEXT", {true, (void*)GetPhysicalDeviceMultisamplePropertiesEXT}},
9628*b7893ccfSSadaf Ebrahimi     {"vkGetImageDrmFormatModifierPropertiesEXT", {false, (void*)GetImageDrmFormatModifierPropertiesEXT}},
9629*b7893ccfSSadaf Ebrahimi #ifdef BUILD_CORE_VALIDATION
9630*b7893ccfSSadaf Ebrahimi     {"vkCreateValidationCacheEXT", {false, (void*)CreateValidationCacheEXT}},
9631*b7893ccfSSadaf Ebrahimi #endif
9632*b7893ccfSSadaf Ebrahimi #ifdef BUILD_CORE_VALIDATION
9633*b7893ccfSSadaf Ebrahimi     {"vkDestroyValidationCacheEXT", {false, (void*)DestroyValidationCacheEXT}},
9634*b7893ccfSSadaf Ebrahimi #endif
9635*b7893ccfSSadaf Ebrahimi #ifdef BUILD_CORE_VALIDATION
9636*b7893ccfSSadaf Ebrahimi     {"vkMergeValidationCachesEXT", {false, (void*)MergeValidationCachesEXT}},
9637*b7893ccfSSadaf Ebrahimi #endif
9638*b7893ccfSSadaf Ebrahimi #ifdef BUILD_CORE_VALIDATION
9639*b7893ccfSSadaf Ebrahimi     {"vkGetValidationCacheDataEXT", {false, (void*)GetValidationCacheDataEXT}},
9640*b7893ccfSSadaf Ebrahimi #endif
9641*b7893ccfSSadaf Ebrahimi     {"vkCmdBindShadingRateImageNV", {false, (void*)CmdBindShadingRateImageNV}},
9642*b7893ccfSSadaf Ebrahimi     {"vkCmdSetViewportShadingRatePaletteNV", {false, (void*)CmdSetViewportShadingRatePaletteNV}},
9643*b7893ccfSSadaf Ebrahimi     {"vkCmdSetCoarseSampleOrderNV", {false, (void*)CmdSetCoarseSampleOrderNV}},
9644*b7893ccfSSadaf Ebrahimi     {"vkCreateAccelerationStructureNV", {false, (void*)CreateAccelerationStructureNV}},
9645*b7893ccfSSadaf Ebrahimi     {"vkDestroyAccelerationStructureNV", {false, (void*)DestroyAccelerationStructureNV}},
9646*b7893ccfSSadaf Ebrahimi     {"vkGetAccelerationStructureMemoryRequirementsNV", {false, (void*)GetAccelerationStructureMemoryRequirementsNV}},
9647*b7893ccfSSadaf Ebrahimi     {"vkBindAccelerationStructureMemoryNV", {false, (void*)BindAccelerationStructureMemoryNV}},
9648*b7893ccfSSadaf Ebrahimi     {"vkCmdBuildAccelerationStructureNV", {false, (void*)CmdBuildAccelerationStructureNV}},
9649*b7893ccfSSadaf Ebrahimi     {"vkCmdCopyAccelerationStructureNV", {false, (void*)CmdCopyAccelerationStructureNV}},
9650*b7893ccfSSadaf Ebrahimi     {"vkCmdTraceRaysNV", {false, (void*)CmdTraceRaysNV}},
9651*b7893ccfSSadaf Ebrahimi     {"vkCreateRayTracingPipelinesNV", {false, (void*)CreateRayTracingPipelinesNV}},
9652*b7893ccfSSadaf Ebrahimi     {"vkGetRayTracingShaderGroupHandlesNV", {false, (void*)GetRayTracingShaderGroupHandlesNV}},
9653*b7893ccfSSadaf Ebrahimi     {"vkGetAccelerationStructureHandleNV", {false, (void*)GetAccelerationStructureHandleNV}},
9654*b7893ccfSSadaf Ebrahimi     {"vkCmdWriteAccelerationStructuresPropertiesNV", {false, (void*)CmdWriteAccelerationStructuresPropertiesNV}},
9655*b7893ccfSSadaf Ebrahimi     {"vkCompileDeferredNV", {false, (void*)CompileDeferredNV}},
9656*b7893ccfSSadaf Ebrahimi     {"vkGetMemoryHostPointerPropertiesEXT", {false, (void*)GetMemoryHostPointerPropertiesEXT}},
9657*b7893ccfSSadaf Ebrahimi     {"vkCmdWriteBufferMarkerAMD", {false, (void*)CmdWriteBufferMarkerAMD}},
9658*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceCalibrateableTimeDomainsEXT", {true, (void*)GetPhysicalDeviceCalibrateableTimeDomainsEXT}},
9659*b7893ccfSSadaf Ebrahimi     {"vkGetCalibratedTimestampsEXT", {false, (void*)GetCalibratedTimestampsEXT}},
9660*b7893ccfSSadaf Ebrahimi     {"vkCmdDrawMeshTasksNV", {false, (void*)CmdDrawMeshTasksNV}},
9661*b7893ccfSSadaf Ebrahimi     {"vkCmdDrawMeshTasksIndirectNV", {false, (void*)CmdDrawMeshTasksIndirectNV}},
9662*b7893ccfSSadaf Ebrahimi     {"vkCmdDrawMeshTasksIndirectCountNV", {false, (void*)CmdDrawMeshTasksIndirectCountNV}},
9663*b7893ccfSSadaf Ebrahimi     {"vkCmdSetExclusiveScissorNV", {false, (void*)CmdSetExclusiveScissorNV}},
9664*b7893ccfSSadaf Ebrahimi     {"vkCmdSetCheckpointNV", {false, (void*)CmdSetCheckpointNV}},
9665*b7893ccfSSadaf Ebrahimi     {"vkGetQueueCheckpointDataNV", {false, (void*)GetQueueCheckpointDataNV}},
9666*b7893ccfSSadaf Ebrahimi     {"vkInitializePerformanceApiINTEL", {false, (void*)InitializePerformanceApiINTEL}},
9667*b7893ccfSSadaf Ebrahimi     {"vkUninitializePerformanceApiINTEL", {false, (void*)UninitializePerformanceApiINTEL}},
9668*b7893ccfSSadaf Ebrahimi     {"vkCmdSetPerformanceMarkerINTEL", {false, (void*)CmdSetPerformanceMarkerINTEL}},
9669*b7893ccfSSadaf Ebrahimi     {"vkCmdSetPerformanceStreamMarkerINTEL", {false, (void*)CmdSetPerformanceStreamMarkerINTEL}},
9670*b7893ccfSSadaf Ebrahimi     {"vkCmdSetPerformanceOverrideINTEL", {false, (void*)CmdSetPerformanceOverrideINTEL}},
9671*b7893ccfSSadaf Ebrahimi     {"vkAcquirePerformanceConfigurationINTEL", {false, (void*)AcquirePerformanceConfigurationINTEL}},
9672*b7893ccfSSadaf Ebrahimi     {"vkReleasePerformanceConfigurationINTEL", {false, (void*)ReleasePerformanceConfigurationINTEL}},
9673*b7893ccfSSadaf Ebrahimi     {"vkQueueSetPerformanceConfigurationINTEL", {false, (void*)QueueSetPerformanceConfigurationINTEL}},
9674*b7893ccfSSadaf Ebrahimi     {"vkGetPerformanceParameterINTEL", {false, (void*)GetPerformanceParameterINTEL}},
9675*b7893ccfSSadaf Ebrahimi     {"vkSetLocalDimmingAMD", {false, (void*)SetLocalDimmingAMD}},
9676*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_FUCHSIA
9677*b7893ccfSSadaf Ebrahimi     {"vkCreateImagePipeSurfaceFUCHSIA", {true, (void*)CreateImagePipeSurfaceFUCHSIA}},
9678*b7893ccfSSadaf Ebrahimi #endif
9679*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_METAL_EXT
9680*b7893ccfSSadaf Ebrahimi     {"vkCreateMetalSurfaceEXT", {true, (void*)CreateMetalSurfaceEXT}},
9681*b7893ccfSSadaf Ebrahimi #endif
9682*b7893ccfSSadaf Ebrahimi     {"vkGetBufferDeviceAddressEXT", {false, (void*)GetBufferDeviceAddressEXT}},
9683*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceCooperativeMatrixPropertiesNV", {true, (void*)GetPhysicalDeviceCooperativeMatrixPropertiesNV}},
9684*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV", {true, (void*)GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV}},
9685*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9686*b7893ccfSSadaf Ebrahimi     {"vkGetPhysicalDeviceSurfacePresentModes2EXT", {true, (void*)GetPhysicalDeviceSurfacePresentModes2EXT}},
9687*b7893ccfSSadaf Ebrahimi #endif
9688*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9689*b7893ccfSSadaf Ebrahimi     {"vkAcquireFullScreenExclusiveModeEXT", {false, (void*)AcquireFullScreenExclusiveModeEXT}},
9690*b7893ccfSSadaf Ebrahimi #endif
9691*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9692*b7893ccfSSadaf Ebrahimi     {"vkReleaseFullScreenExclusiveModeEXT", {false, (void*)ReleaseFullScreenExclusiveModeEXT}},
9693*b7893ccfSSadaf Ebrahimi #endif
9694*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
9695*b7893ccfSSadaf Ebrahimi     {"vkGetDeviceGroupSurfacePresentModes2EXT", {false, (void*)GetDeviceGroupSurfacePresentModes2EXT}},
9696*b7893ccfSSadaf Ebrahimi #endif
9697*b7893ccfSSadaf Ebrahimi     {"vkCreateHeadlessSurfaceEXT", {true, (void*)CreateHeadlessSurfaceEXT}},
9698*b7893ccfSSadaf Ebrahimi     {"vkCmdSetLineStippleEXT", {false, (void*)CmdSetLineStippleEXT}},
9699*b7893ccfSSadaf Ebrahimi     {"vkResetQueryPoolEXT", {false, (void*)ResetQueryPoolEXT}},
9700*b7893ccfSSadaf Ebrahimi };
9701*b7893ccfSSadaf Ebrahimi 
9702*b7893ccfSSadaf Ebrahimi 
9703*b7893ccfSSadaf Ebrahimi } // namespace vulkan_layer_chassis
9704*b7893ccfSSadaf Ebrahimi 
9705*b7893ccfSSadaf Ebrahimi // loader-layer interface v0, just wrappers since there is only a layer
9706*b7893ccfSSadaf Ebrahimi 
vkEnumerateInstanceExtensionProperties(const char * pLayerName,uint32_t * pCount,VkExtensionProperties * pProperties)9707*b7893ccfSSadaf Ebrahimi VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount,
9708*b7893ccfSSadaf Ebrahimi                                                                                       VkExtensionProperties *pProperties) {
9709*b7893ccfSSadaf Ebrahimi     return vulkan_layer_chassis::EnumerateInstanceExtensionProperties(pLayerName, pCount, pProperties);
9710*b7893ccfSSadaf Ebrahimi }
9711*b7893ccfSSadaf Ebrahimi 
vkEnumerateInstanceLayerProperties(uint32_t * pCount,VkLayerProperties * pProperties)9712*b7893ccfSSadaf Ebrahimi VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t *pCount,
9713*b7893ccfSSadaf Ebrahimi                                                                                   VkLayerProperties *pProperties) {
9714*b7893ccfSSadaf Ebrahimi     return vulkan_layer_chassis::EnumerateInstanceLayerProperties(pCount, pProperties);
9715*b7893ccfSSadaf Ebrahimi }
9716*b7893ccfSSadaf Ebrahimi 
vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice,uint32_t * pCount,VkLayerProperties * pProperties)9717*b7893ccfSSadaf Ebrahimi VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount,
9718*b7893ccfSSadaf Ebrahimi                                                                                 VkLayerProperties *pProperties) {
9719*b7893ccfSSadaf Ebrahimi     // the layer command handles VK_NULL_HANDLE just fine internally
9720*b7893ccfSSadaf Ebrahimi     assert(physicalDevice == VK_NULL_HANDLE);
9721*b7893ccfSSadaf Ebrahimi     return vulkan_layer_chassis::EnumerateDeviceLayerProperties(VK_NULL_HANDLE, pCount, pProperties);
9722*b7893ccfSSadaf Ebrahimi }
9723*b7893ccfSSadaf Ebrahimi 
vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice,const char * pLayerName,uint32_t * pCount,VkExtensionProperties * pProperties)9724*b7893ccfSSadaf Ebrahimi VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice,
9725*b7893ccfSSadaf Ebrahimi                                                                                     const char *pLayerName, uint32_t *pCount,
9726*b7893ccfSSadaf Ebrahimi                                                                                     VkExtensionProperties *pProperties) {
9727*b7893ccfSSadaf Ebrahimi     // the layer command handles VK_NULL_HANDLE just fine internally
9728*b7893ccfSSadaf Ebrahimi     assert(physicalDevice == VK_NULL_HANDLE);
9729*b7893ccfSSadaf Ebrahimi     return vulkan_layer_chassis::EnumerateDeviceExtensionProperties(VK_NULL_HANDLE, pLayerName, pCount, pProperties);
9730*b7893ccfSSadaf Ebrahimi }
9731*b7893ccfSSadaf Ebrahimi 
vkGetDeviceProcAddr(VkDevice dev,const char * funcName)9732*b7893ccfSSadaf Ebrahimi VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice dev, const char *funcName) {
9733*b7893ccfSSadaf Ebrahimi     return vulkan_layer_chassis::GetDeviceProcAddr(dev, funcName);
9734*b7893ccfSSadaf Ebrahimi }
9735*b7893ccfSSadaf Ebrahimi 
vkGetInstanceProcAddr(VkInstance instance,const char * funcName)9736*b7893ccfSSadaf Ebrahimi VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *funcName) {
9737*b7893ccfSSadaf Ebrahimi     return vulkan_layer_chassis::GetInstanceProcAddr(instance, funcName);
9738*b7893ccfSSadaf Ebrahimi }
9739*b7893ccfSSadaf Ebrahimi 
vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface * pVersionStruct)9740*b7893ccfSSadaf Ebrahimi VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct) {
9741*b7893ccfSSadaf Ebrahimi     assert(pVersionStruct != NULL);
9742*b7893ccfSSadaf Ebrahimi     assert(pVersionStruct->sType == LAYER_NEGOTIATE_INTERFACE_STRUCT);
9743*b7893ccfSSadaf Ebrahimi 
9744*b7893ccfSSadaf Ebrahimi     // Fill in the function pointers if our version is at least capable of having the structure contain them.
9745*b7893ccfSSadaf Ebrahimi     if (pVersionStruct->loaderLayerInterfaceVersion >= 2) {
9746*b7893ccfSSadaf Ebrahimi         pVersionStruct->pfnGetInstanceProcAddr = vkGetInstanceProcAddr;
9747*b7893ccfSSadaf Ebrahimi         pVersionStruct->pfnGetDeviceProcAddr = vkGetDeviceProcAddr;
9748*b7893ccfSSadaf Ebrahimi         pVersionStruct->pfnGetPhysicalDeviceProcAddr = nullptr;
9749*b7893ccfSSadaf Ebrahimi     }
9750*b7893ccfSSadaf Ebrahimi 
9751*b7893ccfSSadaf Ebrahimi     return VK_SUCCESS;
9752*b7893ccfSSadaf Ebrahimi }
9753