xref: /aosp_15_r20/external/vulkan-validation-layers/layers/generated/layer_chassis_dispatch.cpp (revision b7893ccf7851cd6a48cc5a1e965257d8a5cdcc70)
1*b7893ccfSSadaf Ebrahimi 
2*b7893ccfSSadaf Ebrahimi // This file is ***GENERATED***.  Do Not Edit.
3*b7893ccfSSadaf Ebrahimi // See layer_chassis_dispatch_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 #include <mutex>
26*b7893ccfSSadaf Ebrahimi #include "chassis.h"
27*b7893ccfSSadaf Ebrahimi #include "layer_chassis_dispatch.h"
28*b7893ccfSSadaf Ebrahimi #include "vk_layer_utils.h"
29*b7893ccfSSadaf Ebrahimi 
30*b7893ccfSSadaf Ebrahimi // This intentionally includes a cpp file
31*b7893ccfSSadaf Ebrahimi #include "vk_safe_struct.cpp"
32*b7893ccfSSadaf Ebrahimi 
33*b7893ccfSSadaf Ebrahimi // shared_mutex support added in MSVC 2015 update 2
34*b7893ccfSSadaf Ebrahimi #if defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023918 && NTDDI_VERSION > NTDDI_WIN10_RS2
35*b7893ccfSSadaf Ebrahimi     #include <shared_mutex>
36*b7893ccfSSadaf Ebrahimi     typedef std::shared_mutex dispatch_lock_t;
37*b7893ccfSSadaf Ebrahimi     typedef std::shared_lock<dispatch_lock_t> read_dispatch_lock_guard_t;
38*b7893ccfSSadaf Ebrahimi     typedef std::unique_lock<dispatch_lock_t> write_dispatch_lock_guard_t;
39*b7893ccfSSadaf Ebrahimi #else
40*b7893ccfSSadaf Ebrahimi     typedef std::mutex dispatch_lock_t;
41*b7893ccfSSadaf Ebrahimi     typedef std::unique_lock<dispatch_lock_t> read_dispatch_lock_guard_t;
42*b7893ccfSSadaf Ebrahimi     typedef std::unique_lock<dispatch_lock_t> write_dispatch_lock_guard_t;
43*b7893ccfSSadaf Ebrahimi #endif
44*b7893ccfSSadaf Ebrahimi dispatch_lock_t dispatch_lock;
45*b7893ccfSSadaf Ebrahimi 
46*b7893ccfSSadaf Ebrahimi // Unique Objects pNext extension handling function
WrapPnextChainHandles(ValidationObject * layer_data,const void * pNext)47*b7893ccfSSadaf Ebrahimi void WrapPnextChainHandles(ValidationObject *layer_data, const void *pNext) {
48*b7893ccfSSadaf Ebrahimi     void *cur_pnext = const_cast<void *>(pNext);
49*b7893ccfSSadaf Ebrahimi     while (cur_pnext != NULL) {
50*b7893ccfSSadaf Ebrahimi         VkBaseOutStructure *header = reinterpret_cast<VkBaseOutStructure *>(cur_pnext);
51*b7893ccfSSadaf Ebrahimi 
52*b7893ccfSSadaf Ebrahimi         switch (header->sType) {
53*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
54*b7893ccfSSadaf Ebrahimi             case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR: {
55*b7893ccfSSadaf Ebrahimi                     safe_VkWin32KeyedMutexAcquireReleaseInfoKHR *safe_struct = reinterpret_cast<safe_VkWin32KeyedMutexAcquireReleaseInfoKHR *>(cur_pnext);
56*b7893ccfSSadaf Ebrahimi                     if (safe_struct->pAcquireSyncs) {
57*b7893ccfSSadaf Ebrahimi                         for (uint32_t index0 = 0; index0 < safe_struct->acquireCount; ++index0) {
58*b7893ccfSSadaf Ebrahimi                             safe_struct->pAcquireSyncs[index0] = layer_data->Unwrap(safe_struct->pAcquireSyncs[index0]);
59*b7893ccfSSadaf Ebrahimi                         }
60*b7893ccfSSadaf Ebrahimi                     }
61*b7893ccfSSadaf Ebrahimi                     if (safe_struct->pReleaseSyncs) {
62*b7893ccfSSadaf Ebrahimi                         for (uint32_t index0 = 0; index0 < safe_struct->releaseCount; ++index0) {
63*b7893ccfSSadaf Ebrahimi                             safe_struct->pReleaseSyncs[index0] = layer_data->Unwrap(safe_struct->pReleaseSyncs[index0]);
64*b7893ccfSSadaf Ebrahimi                         }
65*b7893ccfSSadaf Ebrahimi                     }
66*b7893ccfSSadaf Ebrahimi                 } break;
67*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
68*b7893ccfSSadaf Ebrahimi 
69*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
70*b7893ccfSSadaf Ebrahimi             case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV: {
71*b7893ccfSSadaf Ebrahimi                     safe_VkWin32KeyedMutexAcquireReleaseInfoNV *safe_struct = reinterpret_cast<safe_VkWin32KeyedMutexAcquireReleaseInfoNV *>(cur_pnext);
72*b7893ccfSSadaf Ebrahimi                     if (safe_struct->pAcquireSyncs) {
73*b7893ccfSSadaf Ebrahimi                         for (uint32_t index0 = 0; index0 < safe_struct->acquireCount; ++index0) {
74*b7893ccfSSadaf Ebrahimi                             safe_struct->pAcquireSyncs[index0] = layer_data->Unwrap(safe_struct->pAcquireSyncs[index0]);
75*b7893ccfSSadaf Ebrahimi                         }
76*b7893ccfSSadaf Ebrahimi                     }
77*b7893ccfSSadaf Ebrahimi                     if (safe_struct->pReleaseSyncs) {
78*b7893ccfSSadaf Ebrahimi                         for (uint32_t index0 = 0; index0 < safe_struct->releaseCount; ++index0) {
79*b7893ccfSSadaf Ebrahimi                             safe_struct->pReleaseSyncs[index0] = layer_data->Unwrap(safe_struct->pReleaseSyncs[index0]);
80*b7893ccfSSadaf Ebrahimi                         }
81*b7893ccfSSadaf Ebrahimi                     }
82*b7893ccfSSadaf Ebrahimi                 } break;
83*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
84*b7893ccfSSadaf Ebrahimi 
85*b7893ccfSSadaf Ebrahimi             case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV: {
86*b7893ccfSSadaf Ebrahimi                     safe_VkDedicatedAllocationMemoryAllocateInfoNV *safe_struct = reinterpret_cast<safe_VkDedicatedAllocationMemoryAllocateInfoNV *>(cur_pnext);
87*b7893ccfSSadaf Ebrahimi                     if (safe_struct->image) {
88*b7893ccfSSadaf Ebrahimi                         safe_struct->image = layer_data->Unwrap(safe_struct->image);
89*b7893ccfSSadaf Ebrahimi                     }
90*b7893ccfSSadaf Ebrahimi                     if (safe_struct->buffer) {
91*b7893ccfSSadaf Ebrahimi                         safe_struct->buffer = layer_data->Unwrap(safe_struct->buffer);
92*b7893ccfSSadaf Ebrahimi                     }
93*b7893ccfSSadaf Ebrahimi                 } break;
94*b7893ccfSSadaf Ebrahimi 
95*b7893ccfSSadaf Ebrahimi             case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO: {
96*b7893ccfSSadaf Ebrahimi                     safe_VkMemoryDedicatedAllocateInfo *safe_struct = reinterpret_cast<safe_VkMemoryDedicatedAllocateInfo *>(cur_pnext);
97*b7893ccfSSadaf Ebrahimi                     if (safe_struct->image) {
98*b7893ccfSSadaf Ebrahimi                         safe_struct->image = layer_data->Unwrap(safe_struct->image);
99*b7893ccfSSadaf Ebrahimi                     }
100*b7893ccfSSadaf Ebrahimi                     if (safe_struct->buffer) {
101*b7893ccfSSadaf Ebrahimi                         safe_struct->buffer = layer_data->Unwrap(safe_struct->buffer);
102*b7893ccfSSadaf Ebrahimi                     }
103*b7893ccfSSadaf Ebrahimi                 } break;
104*b7893ccfSSadaf Ebrahimi 
105*b7893ccfSSadaf Ebrahimi             case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR: {
106*b7893ccfSSadaf Ebrahimi                     safe_VkImageSwapchainCreateInfoKHR *safe_struct = reinterpret_cast<safe_VkImageSwapchainCreateInfoKHR *>(cur_pnext);
107*b7893ccfSSadaf Ebrahimi                     if (safe_struct->swapchain) {
108*b7893ccfSSadaf Ebrahimi                         safe_struct->swapchain = layer_data->Unwrap(safe_struct->swapchain);
109*b7893ccfSSadaf Ebrahimi                     }
110*b7893ccfSSadaf Ebrahimi                 } break;
111*b7893ccfSSadaf Ebrahimi 
112*b7893ccfSSadaf Ebrahimi             case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO: {
113*b7893ccfSSadaf Ebrahimi                     safe_VkSamplerYcbcrConversionInfo *safe_struct = reinterpret_cast<safe_VkSamplerYcbcrConversionInfo *>(cur_pnext);
114*b7893ccfSSadaf Ebrahimi                     if (safe_struct->conversion) {
115*b7893ccfSSadaf Ebrahimi                         safe_struct->conversion = layer_data->Unwrap(safe_struct->conversion);
116*b7893ccfSSadaf Ebrahimi                     }
117*b7893ccfSSadaf Ebrahimi                 } break;
118*b7893ccfSSadaf Ebrahimi 
119*b7893ccfSSadaf Ebrahimi             case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT: {
120*b7893ccfSSadaf Ebrahimi                     safe_VkShaderModuleValidationCacheCreateInfoEXT *safe_struct = reinterpret_cast<safe_VkShaderModuleValidationCacheCreateInfoEXT *>(cur_pnext);
121*b7893ccfSSadaf Ebrahimi                     if (safe_struct->validationCache) {
122*b7893ccfSSadaf Ebrahimi                         safe_struct->validationCache = layer_data->Unwrap(safe_struct->validationCache);
123*b7893ccfSSadaf Ebrahimi                     }
124*b7893ccfSSadaf Ebrahimi                 } break;
125*b7893ccfSSadaf Ebrahimi 
126*b7893ccfSSadaf Ebrahimi             case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV: {
127*b7893ccfSSadaf Ebrahimi                     safe_VkWriteDescriptorSetAccelerationStructureNV *safe_struct = reinterpret_cast<safe_VkWriteDescriptorSetAccelerationStructureNV *>(cur_pnext);
128*b7893ccfSSadaf Ebrahimi                     if (safe_struct->pAccelerationStructures) {
129*b7893ccfSSadaf Ebrahimi                         for (uint32_t index0 = 0; index0 < safe_struct->accelerationStructureCount; ++index0) {
130*b7893ccfSSadaf Ebrahimi                             safe_struct->pAccelerationStructures[index0] = layer_data->Unwrap(safe_struct->pAccelerationStructures[index0]);
131*b7893ccfSSadaf Ebrahimi                         }
132*b7893ccfSSadaf Ebrahimi                     }
133*b7893ccfSSadaf Ebrahimi                 } break;
134*b7893ccfSSadaf Ebrahimi 
135*b7893ccfSSadaf Ebrahimi             case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR: {
136*b7893ccfSSadaf Ebrahimi                     safe_VkRenderPassAttachmentBeginInfoKHR *safe_struct = reinterpret_cast<safe_VkRenderPassAttachmentBeginInfoKHR *>(cur_pnext);
137*b7893ccfSSadaf Ebrahimi                     if (safe_struct->pAttachments) {
138*b7893ccfSSadaf Ebrahimi                         for (uint32_t index0 = 0; index0 < safe_struct->attachmentCount; ++index0) {
139*b7893ccfSSadaf Ebrahimi                             safe_struct->pAttachments[index0] = layer_data->Unwrap(safe_struct->pAttachments[index0]);
140*b7893ccfSSadaf Ebrahimi                         }
141*b7893ccfSSadaf Ebrahimi                     }
142*b7893ccfSSadaf Ebrahimi                 } break;
143*b7893ccfSSadaf Ebrahimi 
144*b7893ccfSSadaf Ebrahimi             case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR: {
145*b7893ccfSSadaf Ebrahimi                     safe_VkBindImageMemorySwapchainInfoKHR *safe_struct = reinterpret_cast<safe_VkBindImageMemorySwapchainInfoKHR *>(cur_pnext);
146*b7893ccfSSadaf Ebrahimi                     if (safe_struct->swapchain) {
147*b7893ccfSSadaf Ebrahimi                         safe_struct->swapchain = layer_data->Unwrap(safe_struct->swapchain);
148*b7893ccfSSadaf Ebrahimi                     }
149*b7893ccfSSadaf Ebrahimi                 } break;
150*b7893ccfSSadaf Ebrahimi 
151*b7893ccfSSadaf Ebrahimi             default:
152*b7893ccfSSadaf Ebrahimi                 break;
153*b7893ccfSSadaf Ebrahimi         }
154*b7893ccfSSadaf Ebrahimi 
155*b7893ccfSSadaf Ebrahimi         // Process the next structure in the chain
156*b7893ccfSSadaf Ebrahimi         cur_pnext = header->pNext;
157*b7893ccfSSadaf Ebrahimi     }
158*b7893ccfSSadaf Ebrahimi }
159*b7893ccfSSadaf Ebrahimi 
160*b7893ccfSSadaf Ebrahimi 
161*b7893ccfSSadaf Ebrahimi // Manually written Dispatch routines
162*b7893ccfSSadaf Ebrahimi 
DispatchCreateComputePipelines(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const VkComputePipelineCreateInfo * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkPipeline * pPipelines)163*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount,
164*b7893ccfSSadaf Ebrahimi                                         const VkComputePipelineCreateInfo *pCreateInfos,
165*b7893ccfSSadaf Ebrahimi                                         const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines) {
166*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
167*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateComputePipelines(device, pipelineCache, createInfoCount,
168*b7893ccfSSadaf Ebrahimi                                                                                           pCreateInfos, pAllocator, pPipelines);
169*b7893ccfSSadaf Ebrahimi     safe_VkComputePipelineCreateInfo *local_pCreateInfos = NULL;
170*b7893ccfSSadaf Ebrahimi     if (pCreateInfos) {
171*b7893ccfSSadaf Ebrahimi         local_pCreateInfos = new safe_VkComputePipelineCreateInfo[createInfoCount];
172*b7893ccfSSadaf Ebrahimi         for (uint32_t idx0 = 0; idx0 < createInfoCount; ++idx0) {
173*b7893ccfSSadaf Ebrahimi             local_pCreateInfos[idx0].initialize(&pCreateInfos[idx0]);
174*b7893ccfSSadaf Ebrahimi             if (pCreateInfos[idx0].basePipelineHandle) {
175*b7893ccfSSadaf Ebrahimi                 local_pCreateInfos[idx0].basePipelineHandle = layer_data->Unwrap(pCreateInfos[idx0].basePipelineHandle);
176*b7893ccfSSadaf Ebrahimi             }
177*b7893ccfSSadaf Ebrahimi             if (pCreateInfos[idx0].layout) {
178*b7893ccfSSadaf Ebrahimi                 local_pCreateInfos[idx0].layout = layer_data->Unwrap(pCreateInfos[idx0].layout);
179*b7893ccfSSadaf Ebrahimi             }
180*b7893ccfSSadaf Ebrahimi             if (pCreateInfos[idx0].stage.module) {
181*b7893ccfSSadaf Ebrahimi                 local_pCreateInfos[idx0].stage.module = layer_data->Unwrap(pCreateInfos[idx0].stage.module);
182*b7893ccfSSadaf Ebrahimi             }
183*b7893ccfSSadaf Ebrahimi         }
184*b7893ccfSSadaf Ebrahimi     }
185*b7893ccfSSadaf Ebrahimi     if (pipelineCache) {
186*b7893ccfSSadaf Ebrahimi         pipelineCache = layer_data->Unwrap(pipelineCache);
187*b7893ccfSSadaf Ebrahimi     }
188*b7893ccfSSadaf Ebrahimi 
189*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateComputePipelines(device, pipelineCache, createInfoCount,
190*b7893ccfSSadaf Ebrahimi                                                                                local_pCreateInfos->ptr(), pAllocator, pPipelines);
191*b7893ccfSSadaf Ebrahimi     delete[] local_pCreateInfos;
192*b7893ccfSSadaf Ebrahimi     {
193*b7893ccfSSadaf Ebrahimi         for (uint32_t i = 0; i < createInfoCount; ++i) {
194*b7893ccfSSadaf Ebrahimi             if (pPipelines[i] != VK_NULL_HANDLE) {
195*b7893ccfSSadaf Ebrahimi                 pPipelines[i] = layer_data->WrapNew(pPipelines[i]);
196*b7893ccfSSadaf Ebrahimi             }
197*b7893ccfSSadaf Ebrahimi         }
198*b7893ccfSSadaf Ebrahimi     }
199*b7893ccfSSadaf Ebrahimi     return result;
200*b7893ccfSSadaf Ebrahimi }
201*b7893ccfSSadaf Ebrahimi 
DispatchCreateGraphicsPipelines(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const VkGraphicsPipelineCreateInfo * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkPipeline * pPipelines)202*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount,
203*b7893ccfSSadaf Ebrahimi                                          const VkGraphicsPipelineCreateInfo *pCreateInfos,
204*b7893ccfSSadaf Ebrahimi                                          const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines) {
205*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
206*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateGraphicsPipelines(device, pipelineCache, createInfoCount,
207*b7893ccfSSadaf Ebrahimi                                                                                            pCreateInfos, pAllocator, pPipelines);
208*b7893ccfSSadaf Ebrahimi     safe_VkGraphicsPipelineCreateInfo *local_pCreateInfos = nullptr;
209*b7893ccfSSadaf Ebrahimi     if (pCreateInfos) {
210*b7893ccfSSadaf Ebrahimi         local_pCreateInfos = new safe_VkGraphicsPipelineCreateInfo[createInfoCount];
211*b7893ccfSSadaf Ebrahimi         read_dispatch_lock_guard_t lock(dispatch_lock);
212*b7893ccfSSadaf Ebrahimi         for (uint32_t idx0 = 0; idx0 < createInfoCount; ++idx0) {
213*b7893ccfSSadaf Ebrahimi             bool uses_color_attachment = false;
214*b7893ccfSSadaf Ebrahimi             bool uses_depthstencil_attachment = false;
215*b7893ccfSSadaf Ebrahimi             {
216*b7893ccfSSadaf Ebrahimi                 const auto subpasses_uses_it = layer_data->renderpasses_states.find(layer_data->Unwrap(pCreateInfos[idx0].renderPass));
217*b7893ccfSSadaf Ebrahimi                 if (subpasses_uses_it != layer_data->renderpasses_states.end()) {
218*b7893ccfSSadaf Ebrahimi                     const auto &subpasses_uses = subpasses_uses_it->second;
219*b7893ccfSSadaf Ebrahimi                     if (subpasses_uses.subpasses_using_color_attachment.count(pCreateInfos[idx0].subpass))
220*b7893ccfSSadaf Ebrahimi                         uses_color_attachment = true;
221*b7893ccfSSadaf Ebrahimi                     if (subpasses_uses.subpasses_using_depthstencil_attachment.count(pCreateInfos[idx0].subpass))
222*b7893ccfSSadaf Ebrahimi                         uses_depthstencil_attachment = true;
223*b7893ccfSSadaf Ebrahimi                 }
224*b7893ccfSSadaf Ebrahimi             }
225*b7893ccfSSadaf Ebrahimi 
226*b7893ccfSSadaf Ebrahimi             local_pCreateInfos[idx0].initialize(&pCreateInfos[idx0], uses_color_attachment, uses_depthstencil_attachment);
227*b7893ccfSSadaf Ebrahimi 
228*b7893ccfSSadaf Ebrahimi             if (pCreateInfos[idx0].basePipelineHandle) {
229*b7893ccfSSadaf Ebrahimi                 local_pCreateInfos[idx0].basePipelineHandle = layer_data->Unwrap(pCreateInfos[idx0].basePipelineHandle);
230*b7893ccfSSadaf Ebrahimi             }
231*b7893ccfSSadaf Ebrahimi             if (pCreateInfos[idx0].layout) {
232*b7893ccfSSadaf Ebrahimi                 local_pCreateInfos[idx0].layout = layer_data->Unwrap(pCreateInfos[idx0].layout);
233*b7893ccfSSadaf Ebrahimi             }
234*b7893ccfSSadaf Ebrahimi             if (pCreateInfos[idx0].pStages) {
235*b7893ccfSSadaf Ebrahimi                 for (uint32_t idx1 = 0; idx1 < pCreateInfos[idx0].stageCount; ++idx1) {
236*b7893ccfSSadaf Ebrahimi                     if (pCreateInfos[idx0].pStages[idx1].module) {
237*b7893ccfSSadaf Ebrahimi                         local_pCreateInfos[idx0].pStages[idx1].module = layer_data->Unwrap(pCreateInfos[idx0].pStages[idx1].module);
238*b7893ccfSSadaf Ebrahimi                     }
239*b7893ccfSSadaf Ebrahimi                 }
240*b7893ccfSSadaf Ebrahimi             }
241*b7893ccfSSadaf Ebrahimi             if (pCreateInfos[idx0].renderPass) {
242*b7893ccfSSadaf Ebrahimi                 local_pCreateInfos[idx0].renderPass = layer_data->Unwrap(pCreateInfos[idx0].renderPass);
243*b7893ccfSSadaf Ebrahimi             }
244*b7893ccfSSadaf Ebrahimi         }
245*b7893ccfSSadaf Ebrahimi     }
246*b7893ccfSSadaf Ebrahimi     if (pipelineCache) {
247*b7893ccfSSadaf Ebrahimi         pipelineCache = layer_data->Unwrap(pipelineCache);
248*b7893ccfSSadaf Ebrahimi     }
249*b7893ccfSSadaf Ebrahimi 
250*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateGraphicsPipelines(device, pipelineCache, createInfoCount,
251*b7893ccfSSadaf Ebrahimi                                                                                 local_pCreateInfos->ptr(), pAllocator, pPipelines);
252*b7893ccfSSadaf Ebrahimi     delete[] local_pCreateInfos;
253*b7893ccfSSadaf Ebrahimi     {
254*b7893ccfSSadaf Ebrahimi         for (uint32_t i = 0; i < createInfoCount; ++i) {
255*b7893ccfSSadaf Ebrahimi             if (pPipelines[i] != VK_NULL_HANDLE) {
256*b7893ccfSSadaf Ebrahimi                 pPipelines[i] = layer_data->WrapNew(pPipelines[i]);
257*b7893ccfSSadaf Ebrahimi             }
258*b7893ccfSSadaf Ebrahimi         }
259*b7893ccfSSadaf Ebrahimi     }
260*b7893ccfSSadaf Ebrahimi     return result;
261*b7893ccfSSadaf Ebrahimi }
262*b7893ccfSSadaf Ebrahimi 
263*b7893ccfSSadaf Ebrahimi template <typename T>
UpdateCreateRenderPassState(ValidationObject * layer_data,const T * pCreateInfo,VkRenderPass renderPass)264*b7893ccfSSadaf Ebrahimi static void UpdateCreateRenderPassState(ValidationObject *layer_data, const T *pCreateInfo, VkRenderPass renderPass) {
265*b7893ccfSSadaf Ebrahimi     auto &renderpass_state = layer_data->renderpasses_states[renderPass];
266*b7893ccfSSadaf Ebrahimi 
267*b7893ccfSSadaf Ebrahimi     for (uint32_t subpass = 0; subpass < pCreateInfo->subpassCount; ++subpass) {
268*b7893ccfSSadaf Ebrahimi         bool uses_color = false;
269*b7893ccfSSadaf Ebrahimi         for (uint32_t i = 0; i < pCreateInfo->pSubpasses[subpass].colorAttachmentCount && !uses_color; ++i)
270*b7893ccfSSadaf Ebrahimi             if (pCreateInfo->pSubpasses[subpass].pColorAttachments[i].attachment != VK_ATTACHMENT_UNUSED) uses_color = true;
271*b7893ccfSSadaf Ebrahimi 
272*b7893ccfSSadaf Ebrahimi         bool uses_depthstencil = false;
273*b7893ccfSSadaf Ebrahimi         if (pCreateInfo->pSubpasses[subpass].pDepthStencilAttachment)
274*b7893ccfSSadaf Ebrahimi             if (pCreateInfo->pSubpasses[subpass].pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED)
275*b7893ccfSSadaf Ebrahimi                 uses_depthstencil = true;
276*b7893ccfSSadaf Ebrahimi 
277*b7893ccfSSadaf Ebrahimi         if (uses_color) renderpass_state.subpasses_using_color_attachment.insert(subpass);
278*b7893ccfSSadaf Ebrahimi         if (uses_depthstencil) renderpass_state.subpasses_using_depthstencil_attachment.insert(subpass);
279*b7893ccfSSadaf Ebrahimi     }
280*b7893ccfSSadaf Ebrahimi }
281*b7893ccfSSadaf Ebrahimi 
DispatchCreateRenderPass(VkDevice device,const VkRenderPassCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkRenderPass * pRenderPass)282*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo,
283*b7893ccfSSadaf Ebrahimi                                   const VkAllocationCallbacks *pAllocator, VkRenderPass *pRenderPass) {
284*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
285*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
286*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return result;
287*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
288*b7893ccfSSadaf Ebrahimi         write_dispatch_lock_guard_t lock(dispatch_lock);
289*b7893ccfSSadaf Ebrahimi         UpdateCreateRenderPassState(layer_data, pCreateInfo, *pRenderPass);
290*b7893ccfSSadaf Ebrahimi         *pRenderPass = layer_data->WrapNew(*pRenderPass);
291*b7893ccfSSadaf Ebrahimi     }
292*b7893ccfSSadaf Ebrahimi     return result;
293*b7893ccfSSadaf Ebrahimi }
294*b7893ccfSSadaf Ebrahimi 
DispatchCreateRenderPass2KHR(VkDevice device,const VkRenderPassCreateInfo2KHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkRenderPass * pRenderPass)295*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateRenderPass2KHR(VkDevice device, const VkRenderPassCreateInfo2KHR *pCreateInfo,
296*b7893ccfSSadaf Ebrahimi                                       const VkAllocationCallbacks *pAllocator, VkRenderPass *pRenderPass) {
297*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
298*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass);
299*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return result;
300*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
301*b7893ccfSSadaf Ebrahimi         write_dispatch_lock_guard_t lock(dispatch_lock);
302*b7893ccfSSadaf Ebrahimi         UpdateCreateRenderPassState(layer_data, pCreateInfo, *pRenderPass);
303*b7893ccfSSadaf Ebrahimi         *pRenderPass = layer_data->WrapNew(*pRenderPass);
304*b7893ccfSSadaf Ebrahimi     }
305*b7893ccfSSadaf Ebrahimi     return result;
306*b7893ccfSSadaf Ebrahimi }
307*b7893ccfSSadaf Ebrahimi 
DispatchDestroyRenderPass(VkDevice device,VkRenderPass renderPass,const VkAllocationCallbacks * pAllocator)308*b7893ccfSSadaf Ebrahimi void DispatchDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks *pAllocator) {
309*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
310*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyRenderPass(device, renderPass, pAllocator);
311*b7893ccfSSadaf Ebrahimi     uint64_t renderPass_id = reinterpret_cast<uint64_t &>(renderPass);
312*b7893ccfSSadaf Ebrahimi 
313*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(renderPass_id);
314*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
315*b7893ccfSSadaf Ebrahimi         renderPass = (VkRenderPass)iter->second;
316*b7893ccfSSadaf Ebrahimi     } else {
317*b7893ccfSSadaf Ebrahimi         renderPass = (VkRenderPass)0;
318*b7893ccfSSadaf Ebrahimi     }
319*b7893ccfSSadaf Ebrahimi 
320*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyRenderPass(device, renderPass, pAllocator);
321*b7893ccfSSadaf Ebrahimi 
322*b7893ccfSSadaf Ebrahimi     write_dispatch_lock_guard_t lock(dispatch_lock);
323*b7893ccfSSadaf Ebrahimi     layer_data->renderpasses_states.erase(renderPass);
324*b7893ccfSSadaf Ebrahimi }
325*b7893ccfSSadaf Ebrahimi 
DispatchCreateSwapchainKHR(VkDevice device,const VkSwapchainCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSwapchainKHR * pSwapchain)326*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo,
327*b7893ccfSSadaf Ebrahimi                                     const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain) {
328*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
329*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain);
330*b7893ccfSSadaf Ebrahimi     safe_VkSwapchainCreateInfoKHR *local_pCreateInfo = NULL;
331*b7893ccfSSadaf Ebrahimi     if (pCreateInfo) {
332*b7893ccfSSadaf Ebrahimi         local_pCreateInfo = new safe_VkSwapchainCreateInfoKHR(pCreateInfo);
333*b7893ccfSSadaf Ebrahimi         local_pCreateInfo->oldSwapchain = layer_data->Unwrap(pCreateInfo->oldSwapchain);
334*b7893ccfSSadaf Ebrahimi         // Surface is instance-level object
335*b7893ccfSSadaf Ebrahimi         local_pCreateInfo->surface = layer_data->Unwrap(pCreateInfo->surface);
336*b7893ccfSSadaf Ebrahimi     }
337*b7893ccfSSadaf Ebrahimi 
338*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateSwapchainKHR(device, local_pCreateInfo->ptr(), pAllocator, pSwapchain);
339*b7893ccfSSadaf Ebrahimi     delete local_pCreateInfo;
340*b7893ccfSSadaf Ebrahimi 
341*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
342*b7893ccfSSadaf Ebrahimi         *pSwapchain = layer_data->WrapNew(*pSwapchain);
343*b7893ccfSSadaf Ebrahimi     }
344*b7893ccfSSadaf Ebrahimi     return result;
345*b7893ccfSSadaf Ebrahimi }
346*b7893ccfSSadaf Ebrahimi 
DispatchCreateSharedSwapchainsKHR(VkDevice device,uint32_t swapchainCount,const VkSwapchainCreateInfoKHR * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkSwapchainKHR * pSwapchains)347*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR *pCreateInfos,
348*b7893ccfSSadaf Ebrahimi                                            const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchains) {
349*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
350*b7893ccfSSadaf Ebrahimi     if (!wrap_handles)
351*b7893ccfSSadaf Ebrahimi         return layer_data->device_dispatch_table.CreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator,
352*b7893ccfSSadaf Ebrahimi                                                                            pSwapchains);
353*b7893ccfSSadaf Ebrahimi     safe_VkSwapchainCreateInfoKHR *local_pCreateInfos = NULL;
354*b7893ccfSSadaf Ebrahimi     {
355*b7893ccfSSadaf Ebrahimi         if (pCreateInfos) {
356*b7893ccfSSadaf Ebrahimi             local_pCreateInfos = new safe_VkSwapchainCreateInfoKHR[swapchainCount];
357*b7893ccfSSadaf Ebrahimi             for (uint32_t i = 0; i < swapchainCount; ++i) {
358*b7893ccfSSadaf Ebrahimi                 local_pCreateInfos[i].initialize(&pCreateInfos[i]);
359*b7893ccfSSadaf Ebrahimi                 if (pCreateInfos[i].surface) {
360*b7893ccfSSadaf Ebrahimi                     // Surface is instance-level object
361*b7893ccfSSadaf Ebrahimi                     local_pCreateInfos[i].surface = layer_data->Unwrap(pCreateInfos[i].surface);
362*b7893ccfSSadaf Ebrahimi                 }
363*b7893ccfSSadaf Ebrahimi                 if (pCreateInfos[i].oldSwapchain) {
364*b7893ccfSSadaf Ebrahimi                     local_pCreateInfos[i].oldSwapchain = layer_data->Unwrap(pCreateInfos[i].oldSwapchain);
365*b7893ccfSSadaf Ebrahimi                 }
366*b7893ccfSSadaf Ebrahimi             }
367*b7893ccfSSadaf Ebrahimi         }
368*b7893ccfSSadaf Ebrahimi     }
369*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateSharedSwapchainsKHR(device, swapchainCount, local_pCreateInfos->ptr(),
370*b7893ccfSSadaf Ebrahimi                                                                                   pAllocator, pSwapchains);
371*b7893ccfSSadaf Ebrahimi     delete[] local_pCreateInfos;
372*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
373*b7893ccfSSadaf Ebrahimi         for (uint32_t i = 0; i < swapchainCount; i++) {
374*b7893ccfSSadaf Ebrahimi             pSwapchains[i] = layer_data->WrapNew(pSwapchains[i]);
375*b7893ccfSSadaf Ebrahimi         }
376*b7893ccfSSadaf Ebrahimi     }
377*b7893ccfSSadaf Ebrahimi     return result;
378*b7893ccfSSadaf Ebrahimi }
379*b7893ccfSSadaf Ebrahimi 
DispatchGetSwapchainImagesKHR(VkDevice device,VkSwapchainKHR swapchain,uint32_t * pSwapchainImageCount,VkImage * pSwapchainImages)380*b7893ccfSSadaf Ebrahimi VkResult DispatchGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t *pSwapchainImageCount,
381*b7893ccfSSadaf Ebrahimi                                        VkImage *pSwapchainImages) {
382*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
383*b7893ccfSSadaf Ebrahimi     if (!wrap_handles)
384*b7893ccfSSadaf Ebrahimi         return layer_data->device_dispatch_table.GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
385*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR wrapped_swapchain_handle = swapchain;
386*b7893ccfSSadaf Ebrahimi     if (VK_NULL_HANDLE != swapchain) {
387*b7893ccfSSadaf Ebrahimi         swapchain = layer_data->Unwrap(swapchain);
388*b7893ccfSSadaf Ebrahimi     }
389*b7893ccfSSadaf Ebrahimi     VkResult result =
390*b7893ccfSSadaf Ebrahimi         layer_data->device_dispatch_table.GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages);
391*b7893ccfSSadaf Ebrahimi     if ((VK_SUCCESS == result) || (VK_INCOMPLETE == result)) {
392*b7893ccfSSadaf Ebrahimi         if ((*pSwapchainImageCount > 0) && pSwapchainImages) {
393*b7893ccfSSadaf Ebrahimi             write_dispatch_lock_guard_t lock(dispatch_lock);
394*b7893ccfSSadaf Ebrahimi             auto &wrapped_swapchain_image_handles = layer_data->swapchain_wrapped_image_handle_map[wrapped_swapchain_handle];
395*b7893ccfSSadaf Ebrahimi             for (uint32_t i = static_cast<uint32_t>(wrapped_swapchain_image_handles.size()); i < *pSwapchainImageCount; i++) {
396*b7893ccfSSadaf Ebrahimi                 wrapped_swapchain_image_handles.emplace_back(layer_data->WrapNew(pSwapchainImages[i]));
397*b7893ccfSSadaf Ebrahimi             }
398*b7893ccfSSadaf Ebrahimi             for (uint32_t i = 0; i < *pSwapchainImageCount; i++) {
399*b7893ccfSSadaf Ebrahimi                 pSwapchainImages[i] = wrapped_swapchain_image_handles[i];
400*b7893ccfSSadaf Ebrahimi             }
401*b7893ccfSSadaf Ebrahimi         }
402*b7893ccfSSadaf Ebrahimi     }
403*b7893ccfSSadaf Ebrahimi     return result;
404*b7893ccfSSadaf Ebrahimi }
405*b7893ccfSSadaf Ebrahimi 
DispatchDestroySwapchainKHR(VkDevice device,VkSwapchainKHR swapchain,const VkAllocationCallbacks * pAllocator)406*b7893ccfSSadaf Ebrahimi void DispatchDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks *pAllocator) {
407*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
408*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroySwapchainKHR(device, swapchain, pAllocator);
409*b7893ccfSSadaf Ebrahimi     write_dispatch_lock_guard_t lock(dispatch_lock);
410*b7893ccfSSadaf Ebrahimi 
411*b7893ccfSSadaf Ebrahimi     auto &image_array = layer_data->swapchain_wrapped_image_handle_map[swapchain];
412*b7893ccfSSadaf Ebrahimi     for (auto &image_handle : image_array) {
413*b7893ccfSSadaf Ebrahimi         unique_id_mapping.erase(HandleToUint64(image_handle));
414*b7893ccfSSadaf Ebrahimi     }
415*b7893ccfSSadaf Ebrahimi     layer_data->swapchain_wrapped_image_handle_map.erase(swapchain);
416*b7893ccfSSadaf Ebrahimi     lock.unlock();
417*b7893ccfSSadaf Ebrahimi 
418*b7893ccfSSadaf Ebrahimi     uint64_t swapchain_id = HandleToUint64(swapchain);
419*b7893ccfSSadaf Ebrahimi 
420*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(swapchain_id);
421*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
422*b7893ccfSSadaf Ebrahimi         swapchain = (VkSwapchainKHR)iter->second;
423*b7893ccfSSadaf Ebrahimi     } else {
424*b7893ccfSSadaf Ebrahimi         swapchain = (VkSwapchainKHR)0;
425*b7893ccfSSadaf Ebrahimi     }
426*b7893ccfSSadaf Ebrahimi 
427*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroySwapchainKHR(device, swapchain, pAllocator);
428*b7893ccfSSadaf Ebrahimi }
429*b7893ccfSSadaf Ebrahimi 
DispatchQueuePresentKHR(VkQueue queue,const VkPresentInfoKHR * pPresentInfo)430*b7893ccfSSadaf Ebrahimi VkResult DispatchQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pPresentInfo) {
431*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
432*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.QueuePresentKHR(queue, pPresentInfo);
433*b7893ccfSSadaf Ebrahimi     safe_VkPresentInfoKHR *local_pPresentInfo = NULL;
434*b7893ccfSSadaf Ebrahimi     {
435*b7893ccfSSadaf Ebrahimi         if (pPresentInfo) {
436*b7893ccfSSadaf Ebrahimi             local_pPresentInfo = new safe_VkPresentInfoKHR(pPresentInfo);
437*b7893ccfSSadaf Ebrahimi             if (local_pPresentInfo->pWaitSemaphores) {
438*b7893ccfSSadaf Ebrahimi                 for (uint32_t index1 = 0; index1 < local_pPresentInfo->waitSemaphoreCount; ++index1) {
439*b7893ccfSSadaf Ebrahimi                     local_pPresentInfo->pWaitSemaphores[index1] = layer_data->Unwrap(pPresentInfo->pWaitSemaphores[index1]);
440*b7893ccfSSadaf Ebrahimi                 }
441*b7893ccfSSadaf Ebrahimi             }
442*b7893ccfSSadaf Ebrahimi             if (local_pPresentInfo->pSwapchains) {
443*b7893ccfSSadaf Ebrahimi                 for (uint32_t index1 = 0; index1 < local_pPresentInfo->swapchainCount; ++index1) {
444*b7893ccfSSadaf Ebrahimi                     local_pPresentInfo->pSwapchains[index1] = layer_data->Unwrap(pPresentInfo->pSwapchains[index1]);
445*b7893ccfSSadaf Ebrahimi                 }
446*b7893ccfSSadaf Ebrahimi             }
447*b7893ccfSSadaf Ebrahimi         }
448*b7893ccfSSadaf Ebrahimi     }
449*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.QueuePresentKHR(queue, local_pPresentInfo->ptr());
450*b7893ccfSSadaf Ebrahimi 
451*b7893ccfSSadaf Ebrahimi     // pResults is an output array embedded in a structure. The code generator neglects to copy back from the safe_* version,
452*b7893ccfSSadaf Ebrahimi     // so handle it as a special case here:
453*b7893ccfSSadaf Ebrahimi     if (pPresentInfo && pPresentInfo->pResults) {
454*b7893ccfSSadaf Ebrahimi         for (uint32_t i = 0; i < pPresentInfo->swapchainCount; i++) {
455*b7893ccfSSadaf Ebrahimi             pPresentInfo->pResults[i] = local_pPresentInfo->pResults[i];
456*b7893ccfSSadaf Ebrahimi         }
457*b7893ccfSSadaf Ebrahimi     }
458*b7893ccfSSadaf Ebrahimi     delete local_pPresentInfo;
459*b7893ccfSSadaf Ebrahimi     return result;
460*b7893ccfSSadaf Ebrahimi }
461*b7893ccfSSadaf Ebrahimi 
DispatchDestroyDescriptorPool(VkDevice device,VkDescriptorPool descriptorPool,const VkAllocationCallbacks * pAllocator)462*b7893ccfSSadaf Ebrahimi void DispatchDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks *pAllocator) {
463*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
464*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyDescriptorPool(device, descriptorPool, pAllocator);
465*b7893ccfSSadaf Ebrahimi     write_dispatch_lock_guard_t lock(dispatch_lock);
466*b7893ccfSSadaf Ebrahimi 
467*b7893ccfSSadaf Ebrahimi     // remove references to implicitly freed descriptor sets
468*b7893ccfSSadaf Ebrahimi     for(auto descriptor_set : layer_data->pool_descriptor_sets_map[descriptorPool]) {
469*b7893ccfSSadaf Ebrahimi         unique_id_mapping.erase(reinterpret_cast<uint64_t &>(descriptor_set));
470*b7893ccfSSadaf Ebrahimi     }
471*b7893ccfSSadaf Ebrahimi     layer_data->pool_descriptor_sets_map.erase(descriptorPool);
472*b7893ccfSSadaf Ebrahimi     lock.unlock();
473*b7893ccfSSadaf Ebrahimi 
474*b7893ccfSSadaf Ebrahimi     uint64_t descriptorPool_id = reinterpret_cast<uint64_t &>(descriptorPool);
475*b7893ccfSSadaf Ebrahimi 
476*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(descriptorPool_id);
477*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
478*b7893ccfSSadaf Ebrahimi         descriptorPool = (VkDescriptorPool)iter->second;
479*b7893ccfSSadaf Ebrahimi     } else {
480*b7893ccfSSadaf Ebrahimi         descriptorPool = (VkDescriptorPool)0;
481*b7893ccfSSadaf Ebrahimi     }
482*b7893ccfSSadaf Ebrahimi 
483*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyDescriptorPool(device, descriptorPool, pAllocator);
484*b7893ccfSSadaf Ebrahimi }
485*b7893ccfSSadaf Ebrahimi 
DispatchResetDescriptorPool(VkDevice device,VkDescriptorPool descriptorPool,VkDescriptorPoolResetFlags flags)486*b7893ccfSSadaf Ebrahimi VkResult DispatchResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) {
487*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
488*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.ResetDescriptorPool(device, descriptorPool, flags);
489*b7893ccfSSadaf Ebrahimi     VkDescriptorPool local_descriptor_pool = VK_NULL_HANDLE;
490*b7893ccfSSadaf Ebrahimi     {
491*b7893ccfSSadaf Ebrahimi         local_descriptor_pool = layer_data->Unwrap(descriptorPool);
492*b7893ccfSSadaf Ebrahimi     }
493*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.ResetDescriptorPool(device, local_descriptor_pool, flags);
494*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
495*b7893ccfSSadaf Ebrahimi         write_dispatch_lock_guard_t lock(dispatch_lock);
496*b7893ccfSSadaf Ebrahimi         // remove references to implicitly freed descriptor sets
497*b7893ccfSSadaf Ebrahimi         for(auto descriptor_set : layer_data->pool_descriptor_sets_map[descriptorPool]) {
498*b7893ccfSSadaf Ebrahimi             unique_id_mapping.erase(reinterpret_cast<uint64_t &>(descriptor_set));
499*b7893ccfSSadaf Ebrahimi         }
500*b7893ccfSSadaf Ebrahimi         layer_data->pool_descriptor_sets_map[descriptorPool].clear();
501*b7893ccfSSadaf Ebrahimi     }
502*b7893ccfSSadaf Ebrahimi 
503*b7893ccfSSadaf Ebrahimi     return result;
504*b7893ccfSSadaf Ebrahimi }
505*b7893ccfSSadaf Ebrahimi 
DispatchAllocateDescriptorSets(VkDevice device,const VkDescriptorSetAllocateInfo * pAllocateInfo,VkDescriptorSet * pDescriptorSets)506*b7893ccfSSadaf Ebrahimi VkResult DispatchAllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo *pAllocateInfo,
507*b7893ccfSSadaf Ebrahimi                                         VkDescriptorSet *pDescriptorSets) {
508*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
509*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
510*b7893ccfSSadaf Ebrahimi     safe_VkDescriptorSetAllocateInfo *local_pAllocateInfo = NULL;
511*b7893ccfSSadaf Ebrahimi     {
512*b7893ccfSSadaf Ebrahimi         if (pAllocateInfo) {
513*b7893ccfSSadaf Ebrahimi             local_pAllocateInfo = new safe_VkDescriptorSetAllocateInfo(pAllocateInfo);
514*b7893ccfSSadaf Ebrahimi             if (pAllocateInfo->descriptorPool) {
515*b7893ccfSSadaf Ebrahimi                 local_pAllocateInfo->descriptorPool = layer_data->Unwrap(pAllocateInfo->descriptorPool);
516*b7893ccfSSadaf Ebrahimi             }
517*b7893ccfSSadaf Ebrahimi             if (local_pAllocateInfo->pSetLayouts) {
518*b7893ccfSSadaf Ebrahimi                 for (uint32_t index1 = 0; index1 < local_pAllocateInfo->descriptorSetCount; ++index1) {
519*b7893ccfSSadaf Ebrahimi                     local_pAllocateInfo->pSetLayouts[index1] = layer_data->Unwrap(local_pAllocateInfo->pSetLayouts[index1]);
520*b7893ccfSSadaf Ebrahimi                 }
521*b7893ccfSSadaf Ebrahimi             }
522*b7893ccfSSadaf Ebrahimi         }
523*b7893ccfSSadaf Ebrahimi     }
524*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.AllocateDescriptorSets(
525*b7893ccfSSadaf Ebrahimi         device, (const VkDescriptorSetAllocateInfo *)local_pAllocateInfo, pDescriptorSets);
526*b7893ccfSSadaf Ebrahimi     if (local_pAllocateInfo) {
527*b7893ccfSSadaf Ebrahimi         delete local_pAllocateInfo;
528*b7893ccfSSadaf Ebrahimi     }
529*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
530*b7893ccfSSadaf Ebrahimi         write_dispatch_lock_guard_t lock(dispatch_lock);
531*b7893ccfSSadaf Ebrahimi         auto &pool_descriptor_sets = layer_data->pool_descriptor_sets_map[pAllocateInfo->descriptorPool];
532*b7893ccfSSadaf Ebrahimi         for (uint32_t index0 = 0; index0 < pAllocateInfo->descriptorSetCount; index0++) {
533*b7893ccfSSadaf Ebrahimi             pDescriptorSets[index0] = layer_data->WrapNew(pDescriptorSets[index0]);
534*b7893ccfSSadaf Ebrahimi             pool_descriptor_sets.insert(pDescriptorSets[index0]);
535*b7893ccfSSadaf Ebrahimi         }
536*b7893ccfSSadaf Ebrahimi     }
537*b7893ccfSSadaf Ebrahimi     return result;
538*b7893ccfSSadaf Ebrahimi }
539*b7893ccfSSadaf Ebrahimi 
DispatchFreeDescriptorSets(VkDevice device,VkDescriptorPool descriptorPool,uint32_t descriptorSetCount,const VkDescriptorSet * pDescriptorSets)540*b7893ccfSSadaf Ebrahimi VkResult DispatchFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount,
541*b7893ccfSSadaf Ebrahimi                                     const VkDescriptorSet *pDescriptorSets) {
542*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
543*b7893ccfSSadaf Ebrahimi     if (!wrap_handles)
544*b7893ccfSSadaf Ebrahimi         return layer_data->device_dispatch_table.FreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);
545*b7893ccfSSadaf Ebrahimi     VkDescriptorSet *local_pDescriptorSets = NULL;
546*b7893ccfSSadaf Ebrahimi     VkDescriptorPool local_descriptor_pool = VK_NULL_HANDLE;
547*b7893ccfSSadaf Ebrahimi     {
548*b7893ccfSSadaf Ebrahimi         local_descriptor_pool = layer_data->Unwrap(descriptorPool);
549*b7893ccfSSadaf Ebrahimi         if (pDescriptorSets) {
550*b7893ccfSSadaf Ebrahimi             local_pDescriptorSets = new VkDescriptorSet[descriptorSetCount];
551*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < descriptorSetCount; ++index0) {
552*b7893ccfSSadaf Ebrahimi                 local_pDescriptorSets[index0] = layer_data->Unwrap(pDescriptorSets[index0]);
553*b7893ccfSSadaf Ebrahimi             }
554*b7893ccfSSadaf Ebrahimi         }
555*b7893ccfSSadaf Ebrahimi     }
556*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.FreeDescriptorSets(device, local_descriptor_pool, descriptorSetCount,
557*b7893ccfSSadaf Ebrahimi                                                                            (const VkDescriptorSet *)local_pDescriptorSets);
558*b7893ccfSSadaf Ebrahimi     if (local_pDescriptorSets) delete[] local_pDescriptorSets;
559*b7893ccfSSadaf Ebrahimi     if ((VK_SUCCESS == result) && (pDescriptorSets)) {
560*b7893ccfSSadaf Ebrahimi         write_dispatch_lock_guard_t lock(dispatch_lock);
561*b7893ccfSSadaf Ebrahimi         auto &pool_descriptor_sets = layer_data->pool_descriptor_sets_map[descriptorPool];
562*b7893ccfSSadaf Ebrahimi         for (uint32_t index0 = 0; index0 < descriptorSetCount; index0++) {
563*b7893ccfSSadaf Ebrahimi             VkDescriptorSet handle = pDescriptorSets[index0];
564*b7893ccfSSadaf Ebrahimi             pool_descriptor_sets.erase(handle);
565*b7893ccfSSadaf Ebrahimi             uint64_t unique_id = reinterpret_cast<uint64_t &>(handle);
566*b7893ccfSSadaf Ebrahimi             unique_id_mapping.erase(unique_id);
567*b7893ccfSSadaf Ebrahimi         }
568*b7893ccfSSadaf Ebrahimi     }
569*b7893ccfSSadaf Ebrahimi     return result;
570*b7893ccfSSadaf Ebrahimi }
571*b7893ccfSSadaf Ebrahimi 
572*b7893ccfSSadaf Ebrahimi // This is the core version of this routine.  The extension version is below.
DispatchCreateDescriptorUpdateTemplate(VkDevice device,const VkDescriptorUpdateTemplateCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorUpdateTemplateKHR * pDescriptorUpdateTemplate)573*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateDescriptorUpdateTemplate(VkDevice device, const VkDescriptorUpdateTemplateCreateInfoKHR *pCreateInfo,
574*b7893ccfSSadaf Ebrahimi                                                 const VkAllocationCallbacks *pAllocator,
575*b7893ccfSSadaf Ebrahimi                                                 VkDescriptorUpdateTemplateKHR *pDescriptorUpdateTemplate) {
576*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
577*b7893ccfSSadaf Ebrahimi     if (!wrap_handles)
578*b7893ccfSSadaf Ebrahimi         return layer_data->device_dispatch_table.CreateDescriptorUpdateTemplate(device, pCreateInfo, pAllocator,
579*b7893ccfSSadaf Ebrahimi                                                                                 pDescriptorUpdateTemplate);
580*b7893ccfSSadaf Ebrahimi     safe_VkDescriptorUpdateTemplateCreateInfo *local_create_info = NULL;
581*b7893ccfSSadaf Ebrahimi     {
582*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
583*b7893ccfSSadaf Ebrahimi             local_create_info = new safe_VkDescriptorUpdateTemplateCreateInfo(pCreateInfo);
584*b7893ccfSSadaf Ebrahimi             if (pCreateInfo->descriptorSetLayout) {
585*b7893ccfSSadaf Ebrahimi                 local_create_info->descriptorSetLayout = layer_data->Unwrap(pCreateInfo->descriptorSetLayout);
586*b7893ccfSSadaf Ebrahimi             }
587*b7893ccfSSadaf Ebrahimi             if (pCreateInfo->pipelineLayout) {
588*b7893ccfSSadaf Ebrahimi                 local_create_info->pipelineLayout = layer_data->Unwrap(pCreateInfo->pipelineLayout);
589*b7893ccfSSadaf Ebrahimi             }
590*b7893ccfSSadaf Ebrahimi         }
591*b7893ccfSSadaf Ebrahimi     }
592*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateDescriptorUpdateTemplate(device, local_create_info->ptr(), pAllocator,
593*b7893ccfSSadaf Ebrahimi                                                                                        pDescriptorUpdateTemplate);
594*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
595*b7893ccfSSadaf Ebrahimi         write_dispatch_lock_guard_t lock(dispatch_lock);
596*b7893ccfSSadaf Ebrahimi         *pDescriptorUpdateTemplate = layer_data->WrapNew(*pDescriptorUpdateTemplate);
597*b7893ccfSSadaf Ebrahimi 
598*b7893ccfSSadaf Ebrahimi         // Shadow template createInfo for later updates
599*b7893ccfSSadaf Ebrahimi         std::unique_ptr<TEMPLATE_STATE> template_state(new TEMPLATE_STATE(*pDescriptorUpdateTemplate, local_create_info));
600*b7893ccfSSadaf Ebrahimi         layer_data->desc_template_createinfo_map[(uint64_t)*pDescriptorUpdateTemplate] = std::move(template_state);
601*b7893ccfSSadaf Ebrahimi     }
602*b7893ccfSSadaf Ebrahimi     return result;
603*b7893ccfSSadaf Ebrahimi }
604*b7893ccfSSadaf Ebrahimi 
605*b7893ccfSSadaf Ebrahimi // This is the extension version of this routine.  The core version is above.
DispatchCreateDescriptorUpdateTemplateKHR(VkDevice device,const VkDescriptorUpdateTemplateCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorUpdateTemplateKHR * pDescriptorUpdateTemplate)606*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateDescriptorUpdateTemplateKHR(VkDevice device, const VkDescriptorUpdateTemplateCreateInfoKHR *pCreateInfo,
607*b7893ccfSSadaf Ebrahimi                                                    const VkAllocationCallbacks *pAllocator,
608*b7893ccfSSadaf Ebrahimi                                                    VkDescriptorUpdateTemplateKHR *pDescriptorUpdateTemplate) {
609*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
610*b7893ccfSSadaf Ebrahimi     if (!wrap_handles)
611*b7893ccfSSadaf Ebrahimi         return layer_data->device_dispatch_table.CreateDescriptorUpdateTemplateKHR(device, pCreateInfo, pAllocator,
612*b7893ccfSSadaf Ebrahimi                                                                                    pDescriptorUpdateTemplate);
613*b7893ccfSSadaf Ebrahimi     safe_VkDescriptorUpdateTemplateCreateInfo *local_create_info = NULL;
614*b7893ccfSSadaf Ebrahimi     {
615*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
616*b7893ccfSSadaf Ebrahimi             local_create_info = new safe_VkDescriptorUpdateTemplateCreateInfo(pCreateInfo);
617*b7893ccfSSadaf Ebrahimi             if (pCreateInfo->descriptorSetLayout) {
618*b7893ccfSSadaf Ebrahimi                 local_create_info->descriptorSetLayout = layer_data->Unwrap(pCreateInfo->descriptorSetLayout);
619*b7893ccfSSadaf Ebrahimi             }
620*b7893ccfSSadaf Ebrahimi             if (pCreateInfo->pipelineLayout) {
621*b7893ccfSSadaf Ebrahimi                 local_create_info->pipelineLayout = layer_data->Unwrap(pCreateInfo->pipelineLayout);
622*b7893ccfSSadaf Ebrahimi             }
623*b7893ccfSSadaf Ebrahimi         }
624*b7893ccfSSadaf Ebrahimi     }
625*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateDescriptorUpdateTemplateKHR(device, local_create_info->ptr(), pAllocator,
626*b7893ccfSSadaf Ebrahimi                                                                                           pDescriptorUpdateTemplate);
627*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
628*b7893ccfSSadaf Ebrahimi         write_dispatch_lock_guard_t lock(dispatch_lock);
629*b7893ccfSSadaf Ebrahimi         *pDescriptorUpdateTemplate = layer_data->WrapNew(*pDescriptorUpdateTemplate);
630*b7893ccfSSadaf Ebrahimi 
631*b7893ccfSSadaf Ebrahimi         // Shadow template createInfo for later updates
632*b7893ccfSSadaf Ebrahimi         std::unique_ptr<TEMPLATE_STATE> template_state(new TEMPLATE_STATE(*pDescriptorUpdateTemplate, local_create_info));
633*b7893ccfSSadaf Ebrahimi         layer_data->desc_template_createinfo_map[(uint64_t)*pDescriptorUpdateTemplate] = std::move(template_state);
634*b7893ccfSSadaf Ebrahimi     }
635*b7893ccfSSadaf Ebrahimi     return result;
636*b7893ccfSSadaf Ebrahimi }
637*b7893ccfSSadaf Ebrahimi 
638*b7893ccfSSadaf Ebrahimi // This is the core version of this routine.  The extension version is below.
DispatchDestroyDescriptorUpdateTemplate(VkDevice device,VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,const VkAllocationCallbacks * pAllocator)639*b7893ccfSSadaf Ebrahimi void DispatchDestroyDescriptorUpdateTemplate(VkDevice device, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
640*b7893ccfSSadaf Ebrahimi                                              const VkAllocationCallbacks *pAllocator) {
641*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
642*b7893ccfSSadaf Ebrahimi     if (!wrap_handles)
643*b7893ccfSSadaf Ebrahimi         return layer_data->device_dispatch_table.DestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator);
644*b7893ccfSSadaf Ebrahimi     write_dispatch_lock_guard_t lock(dispatch_lock);
645*b7893ccfSSadaf Ebrahimi     uint64_t descriptor_update_template_id = reinterpret_cast<uint64_t &>(descriptorUpdateTemplate);
646*b7893ccfSSadaf Ebrahimi     layer_data->desc_template_createinfo_map.erase(descriptor_update_template_id);
647*b7893ccfSSadaf Ebrahimi     lock.unlock();
648*b7893ccfSSadaf Ebrahimi 
649*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(descriptor_update_template_id);
650*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
651*b7893ccfSSadaf Ebrahimi         descriptorUpdateTemplate = (VkDescriptorUpdateTemplate)iter->second;
652*b7893ccfSSadaf Ebrahimi     } else {
653*b7893ccfSSadaf Ebrahimi         descriptorUpdateTemplate = (VkDescriptorUpdateTemplate)0;
654*b7893ccfSSadaf Ebrahimi     }
655*b7893ccfSSadaf Ebrahimi 
656*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyDescriptorUpdateTemplate(device, descriptorUpdateTemplate, pAllocator);
657*b7893ccfSSadaf Ebrahimi }
658*b7893ccfSSadaf Ebrahimi 
659*b7893ccfSSadaf Ebrahimi // This is the extension version of this routine.  The core version is above.
DispatchDestroyDescriptorUpdateTemplateKHR(VkDevice device,VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,const VkAllocationCallbacks * pAllocator)660*b7893ccfSSadaf Ebrahimi void DispatchDestroyDescriptorUpdateTemplateKHR(VkDevice device, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
661*b7893ccfSSadaf Ebrahimi                                                 const VkAllocationCallbacks *pAllocator) {
662*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
663*b7893ccfSSadaf Ebrahimi     if (!wrap_handles)
664*b7893ccfSSadaf Ebrahimi         return layer_data->device_dispatch_table.DestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator);
665*b7893ccfSSadaf Ebrahimi     write_dispatch_lock_guard_t lock(dispatch_lock);
666*b7893ccfSSadaf Ebrahimi     uint64_t descriptor_update_template_id = reinterpret_cast<uint64_t &>(descriptorUpdateTemplate);
667*b7893ccfSSadaf Ebrahimi     layer_data->desc_template_createinfo_map.erase(descriptor_update_template_id);
668*b7893ccfSSadaf Ebrahimi     lock.unlock();
669*b7893ccfSSadaf Ebrahimi 
670*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(descriptor_update_template_id);
671*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
672*b7893ccfSSadaf Ebrahimi         descriptorUpdateTemplate = (VkDescriptorUpdateTemplate)iter->second;
673*b7893ccfSSadaf Ebrahimi     } else {
674*b7893ccfSSadaf Ebrahimi         descriptorUpdateTemplate = (VkDescriptorUpdateTemplate)0;
675*b7893ccfSSadaf Ebrahimi     }
676*b7893ccfSSadaf Ebrahimi 
677*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyDescriptorUpdateTemplateKHR(device, descriptorUpdateTemplate, pAllocator);
678*b7893ccfSSadaf Ebrahimi }
679*b7893ccfSSadaf Ebrahimi 
BuildUnwrappedUpdateTemplateBuffer(ValidationObject * layer_data,uint64_t descriptorUpdateTemplate,const void * pData)680*b7893ccfSSadaf Ebrahimi void *BuildUnwrappedUpdateTemplateBuffer(ValidationObject *layer_data, uint64_t descriptorUpdateTemplate, const void *pData) {
681*b7893ccfSSadaf Ebrahimi     auto const template_map_entry = layer_data->desc_template_createinfo_map.find(descriptorUpdateTemplate);
682*b7893ccfSSadaf Ebrahimi     if (template_map_entry == layer_data->desc_template_createinfo_map.end()) {
683*b7893ccfSSadaf Ebrahimi         assert(0);
684*b7893ccfSSadaf Ebrahimi     }
685*b7893ccfSSadaf Ebrahimi     auto const &create_info = template_map_entry->second->create_info;
686*b7893ccfSSadaf Ebrahimi     size_t allocation_size = 0;
687*b7893ccfSSadaf Ebrahimi     std::vector<std::tuple<size_t, VulkanObjectType, uint64_t, size_t>> template_entries;
688*b7893ccfSSadaf Ebrahimi 
689*b7893ccfSSadaf Ebrahimi     for (uint32_t i = 0; i < create_info.descriptorUpdateEntryCount; i++) {
690*b7893ccfSSadaf Ebrahimi         for (uint32_t j = 0; j < create_info.pDescriptorUpdateEntries[i].descriptorCount; j++) {
691*b7893ccfSSadaf Ebrahimi             size_t offset = create_info.pDescriptorUpdateEntries[i].offset + j * create_info.pDescriptorUpdateEntries[i].stride;
692*b7893ccfSSadaf Ebrahimi             char *update_entry = (char *)(pData) + offset;
693*b7893ccfSSadaf Ebrahimi 
694*b7893ccfSSadaf Ebrahimi             switch (create_info.pDescriptorUpdateEntries[i].descriptorType) {
695*b7893ccfSSadaf Ebrahimi                 case VK_DESCRIPTOR_TYPE_SAMPLER:
696*b7893ccfSSadaf Ebrahimi                 case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
697*b7893ccfSSadaf Ebrahimi                 case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
698*b7893ccfSSadaf Ebrahimi                 case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
699*b7893ccfSSadaf Ebrahimi                 case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: {
700*b7893ccfSSadaf Ebrahimi                     auto image_entry = reinterpret_cast<VkDescriptorImageInfo *>(update_entry);
701*b7893ccfSSadaf Ebrahimi                     allocation_size = std::max(allocation_size, offset + sizeof(VkDescriptorImageInfo));
702*b7893ccfSSadaf Ebrahimi 
703*b7893ccfSSadaf Ebrahimi                     VkDescriptorImageInfo *wrapped_entry = new VkDescriptorImageInfo(*image_entry);
704*b7893ccfSSadaf Ebrahimi                     wrapped_entry->sampler = layer_data->Unwrap(image_entry->sampler);
705*b7893ccfSSadaf Ebrahimi                     wrapped_entry->imageView = layer_data->Unwrap(image_entry->imageView);
706*b7893ccfSSadaf Ebrahimi                     template_entries.emplace_back(offset, kVulkanObjectTypeImage, CastToUint64(wrapped_entry), 0);
707*b7893ccfSSadaf Ebrahimi                 } break;
708*b7893ccfSSadaf Ebrahimi 
709*b7893ccfSSadaf Ebrahimi                 case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
710*b7893ccfSSadaf Ebrahimi                 case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
711*b7893ccfSSadaf Ebrahimi                 case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
712*b7893ccfSSadaf Ebrahimi                 case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: {
713*b7893ccfSSadaf Ebrahimi                     auto buffer_entry = reinterpret_cast<VkDescriptorBufferInfo *>(update_entry);
714*b7893ccfSSadaf Ebrahimi                     allocation_size = std::max(allocation_size, offset + sizeof(VkDescriptorBufferInfo));
715*b7893ccfSSadaf Ebrahimi 
716*b7893ccfSSadaf Ebrahimi                     VkDescriptorBufferInfo *wrapped_entry = new VkDescriptorBufferInfo(*buffer_entry);
717*b7893ccfSSadaf Ebrahimi                     wrapped_entry->buffer = layer_data->Unwrap(buffer_entry->buffer);
718*b7893ccfSSadaf Ebrahimi                     template_entries.emplace_back(offset, kVulkanObjectTypeBuffer, CastToUint64(wrapped_entry), 0);
719*b7893ccfSSadaf Ebrahimi                 } break;
720*b7893ccfSSadaf Ebrahimi 
721*b7893ccfSSadaf Ebrahimi                 case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
722*b7893ccfSSadaf Ebrahimi                 case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: {
723*b7893ccfSSadaf Ebrahimi                     auto buffer_view_handle = reinterpret_cast<VkBufferView *>(update_entry);
724*b7893ccfSSadaf Ebrahimi                     allocation_size = std::max(allocation_size, offset + sizeof(VkBufferView));
725*b7893ccfSSadaf Ebrahimi 
726*b7893ccfSSadaf Ebrahimi                     VkBufferView wrapped_entry = layer_data->Unwrap(*buffer_view_handle);
727*b7893ccfSSadaf Ebrahimi                     template_entries.emplace_back(offset, kVulkanObjectTypeBufferView, CastToUint64(wrapped_entry), 0);
728*b7893ccfSSadaf Ebrahimi                 } break;
729*b7893ccfSSadaf Ebrahimi                 case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT: {
730*b7893ccfSSadaf Ebrahimi                     size_t numBytes = create_info.pDescriptorUpdateEntries[i].descriptorCount;
731*b7893ccfSSadaf Ebrahimi                     allocation_size = std::max(allocation_size, offset + numBytes);
732*b7893ccfSSadaf Ebrahimi                     // nothing to unwrap, just plain data
733*b7893ccfSSadaf Ebrahimi                     template_entries.emplace_back(offset, kVulkanObjectTypeUnknown, CastToUint64(update_entry),
734*b7893ccfSSadaf Ebrahimi                                                   numBytes);
735*b7893ccfSSadaf Ebrahimi                     // to break out of the loop
736*b7893ccfSSadaf Ebrahimi                     j = create_info.pDescriptorUpdateEntries[i].descriptorCount;
737*b7893ccfSSadaf Ebrahimi                 } break;
738*b7893ccfSSadaf Ebrahimi                 default:
739*b7893ccfSSadaf Ebrahimi                     assert(0);
740*b7893ccfSSadaf Ebrahimi                     break;
741*b7893ccfSSadaf Ebrahimi             }
742*b7893ccfSSadaf Ebrahimi         }
743*b7893ccfSSadaf Ebrahimi     }
744*b7893ccfSSadaf Ebrahimi     // Allocate required buffer size and populate with source/unwrapped data
745*b7893ccfSSadaf Ebrahimi     void *unwrapped_data = malloc(allocation_size);
746*b7893ccfSSadaf Ebrahimi     for (auto &this_entry : template_entries) {
747*b7893ccfSSadaf Ebrahimi         VulkanObjectType type = std::get<1>(this_entry);
748*b7893ccfSSadaf Ebrahimi         void *destination = (char *)unwrapped_data + std::get<0>(this_entry);
749*b7893ccfSSadaf Ebrahimi         uint64_t source = std::get<2>(this_entry);
750*b7893ccfSSadaf Ebrahimi         size_t size = std::get<3>(this_entry);
751*b7893ccfSSadaf Ebrahimi 
752*b7893ccfSSadaf Ebrahimi         if (size != 0) {
753*b7893ccfSSadaf Ebrahimi             assert(type == kVulkanObjectTypeUnknown);
754*b7893ccfSSadaf Ebrahimi             memcpy(destination, CastFromUint64<void *>(source), size);
755*b7893ccfSSadaf Ebrahimi         } else {
756*b7893ccfSSadaf Ebrahimi             switch (type) {
757*b7893ccfSSadaf Ebrahimi                 case kVulkanObjectTypeImage:
758*b7893ccfSSadaf Ebrahimi                     *(reinterpret_cast<VkDescriptorImageInfo *>(destination)) =
759*b7893ccfSSadaf Ebrahimi                         *(reinterpret_cast<VkDescriptorImageInfo *>(source));
760*b7893ccfSSadaf Ebrahimi                     delete CastFromUint64<VkDescriptorImageInfo *>(source);
761*b7893ccfSSadaf Ebrahimi                     break;
762*b7893ccfSSadaf Ebrahimi                 case kVulkanObjectTypeBuffer:
763*b7893ccfSSadaf Ebrahimi                     *(reinterpret_cast<VkDescriptorBufferInfo *>(destination)) =
764*b7893ccfSSadaf Ebrahimi                         *(CastFromUint64<VkDescriptorBufferInfo *>(source));
765*b7893ccfSSadaf Ebrahimi                     delete CastFromUint64<VkDescriptorBufferInfo *>(source);
766*b7893ccfSSadaf Ebrahimi                     break;
767*b7893ccfSSadaf Ebrahimi                 case kVulkanObjectTypeBufferView:
768*b7893ccfSSadaf Ebrahimi                     *(reinterpret_cast<VkBufferView *>(destination)) = CastFromUint64<VkBufferView>(source);
769*b7893ccfSSadaf Ebrahimi                     break;
770*b7893ccfSSadaf Ebrahimi                 default:
771*b7893ccfSSadaf Ebrahimi                     assert(0);
772*b7893ccfSSadaf Ebrahimi                     break;
773*b7893ccfSSadaf Ebrahimi             }
774*b7893ccfSSadaf Ebrahimi         }
775*b7893ccfSSadaf Ebrahimi     }
776*b7893ccfSSadaf Ebrahimi     return (void *)unwrapped_data;
777*b7893ccfSSadaf Ebrahimi }
778*b7893ccfSSadaf Ebrahimi 
DispatchUpdateDescriptorSetWithTemplate(VkDevice device,VkDescriptorSet descriptorSet,VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,const void * pData)779*b7893ccfSSadaf Ebrahimi void DispatchUpdateDescriptorSetWithTemplate(VkDevice device, VkDescriptorSet descriptorSet,
780*b7893ccfSSadaf Ebrahimi                                              VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const void *pData) {
781*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
782*b7893ccfSSadaf Ebrahimi     if (!wrap_handles)
783*b7893ccfSSadaf Ebrahimi         return layer_data->device_dispatch_table.UpdateDescriptorSetWithTemplate(device, descriptorSet, descriptorUpdateTemplate,
784*b7893ccfSSadaf Ebrahimi                                                                                  pData);
785*b7893ccfSSadaf Ebrahimi     uint64_t template_handle = reinterpret_cast<uint64_t &>(descriptorUpdateTemplate);
786*b7893ccfSSadaf Ebrahimi     void *unwrapped_buffer = nullptr;
787*b7893ccfSSadaf Ebrahimi     {
788*b7893ccfSSadaf Ebrahimi         read_dispatch_lock_guard_t lock(dispatch_lock);
789*b7893ccfSSadaf Ebrahimi         descriptorSet = layer_data->Unwrap(descriptorSet);
790*b7893ccfSSadaf Ebrahimi         descriptorUpdateTemplate = (VkDescriptorUpdateTemplate)layer_data->Unwrap(descriptorUpdateTemplate);
791*b7893ccfSSadaf Ebrahimi         unwrapped_buffer = BuildUnwrappedUpdateTemplateBuffer(layer_data, template_handle, pData);
792*b7893ccfSSadaf Ebrahimi     }
793*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.UpdateDescriptorSetWithTemplate(device, descriptorSet, descriptorUpdateTemplate, unwrapped_buffer);
794*b7893ccfSSadaf Ebrahimi     free(unwrapped_buffer);
795*b7893ccfSSadaf Ebrahimi }
796*b7893ccfSSadaf Ebrahimi 
DispatchUpdateDescriptorSetWithTemplateKHR(VkDevice device,VkDescriptorSet descriptorSet,VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,const void * pData)797*b7893ccfSSadaf Ebrahimi void DispatchUpdateDescriptorSetWithTemplateKHR(VkDevice device, VkDescriptorSet descriptorSet,
798*b7893ccfSSadaf Ebrahimi                                                 VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const void *pData) {
799*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
800*b7893ccfSSadaf Ebrahimi     if (!wrap_handles)
801*b7893ccfSSadaf Ebrahimi         return layer_data->device_dispatch_table.UpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate,
802*b7893ccfSSadaf Ebrahimi                                                                                     pData);
803*b7893ccfSSadaf Ebrahimi     uint64_t template_handle = reinterpret_cast<uint64_t &>(descriptorUpdateTemplate);
804*b7893ccfSSadaf Ebrahimi     void *unwrapped_buffer = nullptr;
805*b7893ccfSSadaf Ebrahimi     {
806*b7893ccfSSadaf Ebrahimi         read_dispatch_lock_guard_t lock(dispatch_lock);
807*b7893ccfSSadaf Ebrahimi         descriptorSet = layer_data->Unwrap(descriptorSet);
808*b7893ccfSSadaf Ebrahimi         descriptorUpdateTemplate = layer_data->Unwrap(descriptorUpdateTemplate);
809*b7893ccfSSadaf Ebrahimi         unwrapped_buffer = BuildUnwrappedUpdateTemplateBuffer(layer_data, template_handle, pData);
810*b7893ccfSSadaf Ebrahimi     }
811*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.UpdateDescriptorSetWithTemplateKHR(device, descriptorSet, descriptorUpdateTemplate, unwrapped_buffer);
812*b7893ccfSSadaf Ebrahimi     free(unwrapped_buffer);
813*b7893ccfSSadaf Ebrahimi }
814*b7893ccfSSadaf Ebrahimi 
DispatchCmdPushDescriptorSetWithTemplateKHR(VkCommandBuffer commandBuffer,VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,VkPipelineLayout layout,uint32_t set,const void * pData)815*b7893ccfSSadaf Ebrahimi void DispatchCmdPushDescriptorSetWithTemplateKHR(VkCommandBuffer commandBuffer,
816*b7893ccfSSadaf Ebrahimi                                                  VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, VkPipelineLayout layout,
817*b7893ccfSSadaf Ebrahimi                                                  uint32_t set, const void *pData) {
818*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
819*b7893ccfSSadaf Ebrahimi     if (!wrap_handles)
820*b7893ccfSSadaf Ebrahimi         return layer_data->device_dispatch_table.CmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate,
821*b7893ccfSSadaf Ebrahimi                                                                                      layout, set, pData);
822*b7893ccfSSadaf Ebrahimi     uint64_t template_handle = reinterpret_cast<uint64_t &>(descriptorUpdateTemplate);
823*b7893ccfSSadaf Ebrahimi     void *unwrapped_buffer = nullptr;
824*b7893ccfSSadaf Ebrahimi     {
825*b7893ccfSSadaf Ebrahimi         read_dispatch_lock_guard_t lock(dispatch_lock);
826*b7893ccfSSadaf Ebrahimi         descriptorUpdateTemplate = layer_data->Unwrap(descriptorUpdateTemplate);
827*b7893ccfSSadaf Ebrahimi         layout = layer_data->Unwrap(layout);
828*b7893ccfSSadaf Ebrahimi         unwrapped_buffer = BuildUnwrappedUpdateTemplateBuffer(layer_data, template_handle, pData);
829*b7893ccfSSadaf Ebrahimi     }
830*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdPushDescriptorSetWithTemplateKHR(commandBuffer, descriptorUpdateTemplate, layout, set,
831*b7893ccfSSadaf Ebrahimi                                                                  unwrapped_buffer);
832*b7893ccfSSadaf Ebrahimi     free(unwrapped_buffer);
833*b7893ccfSSadaf Ebrahimi }
834*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkDisplayPropertiesKHR * pProperties)835*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount,
836*b7893ccfSSadaf Ebrahimi                                                        VkDisplayPropertiesKHR *pProperties) {
837*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
838*b7893ccfSSadaf Ebrahimi     VkResult result =
839*b7893ccfSSadaf Ebrahimi         layer_data->instance_dispatch_table.GetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, pPropertyCount, pProperties);
840*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return result;
841*b7893ccfSSadaf Ebrahimi     if ((result == VK_SUCCESS || result == VK_INCOMPLETE) && pProperties) {
842*b7893ccfSSadaf Ebrahimi         for (uint32_t idx0 = 0; idx0 < *pPropertyCount; ++idx0) {
843*b7893ccfSSadaf Ebrahimi             pProperties[idx0].display = layer_data->MaybeWrapDisplay(pProperties[idx0].display, layer_data);
844*b7893ccfSSadaf Ebrahimi         }
845*b7893ccfSSadaf Ebrahimi     }
846*b7893ccfSSadaf Ebrahimi     return result;
847*b7893ccfSSadaf Ebrahimi }
848*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceDisplayProperties2KHR(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkDisplayProperties2KHR * pProperties)849*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceDisplayProperties2KHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount,
850*b7893ccfSSadaf Ebrahimi                                                         VkDisplayProperties2KHR *pProperties) {
851*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
852*b7893ccfSSadaf Ebrahimi     VkResult result =
853*b7893ccfSSadaf Ebrahimi         layer_data->instance_dispatch_table.GetPhysicalDeviceDisplayProperties2KHR(physicalDevice, pPropertyCount, pProperties);
854*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return result;
855*b7893ccfSSadaf Ebrahimi     if ((result == VK_SUCCESS || result == VK_INCOMPLETE) && pProperties) {
856*b7893ccfSSadaf Ebrahimi         for (uint32_t idx0 = 0; idx0 < *pPropertyCount; ++idx0) {
857*b7893ccfSSadaf Ebrahimi             pProperties[idx0].displayProperties.display =
858*b7893ccfSSadaf Ebrahimi                 layer_data->MaybeWrapDisplay(pProperties[idx0].displayProperties.display, layer_data);
859*b7893ccfSSadaf Ebrahimi         }
860*b7893ccfSSadaf Ebrahimi     }
861*b7893ccfSSadaf Ebrahimi     return result;
862*b7893ccfSSadaf Ebrahimi }
863*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkDisplayPlanePropertiesKHR * pProperties)864*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount,
865*b7893ccfSSadaf Ebrahimi                                                             VkDisplayPlanePropertiesKHR *pProperties) {
866*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
867*b7893ccfSSadaf Ebrahimi     VkResult result =
868*b7893ccfSSadaf Ebrahimi         layer_data->instance_dispatch_table.GetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, pPropertyCount, pProperties);
869*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return result;
870*b7893ccfSSadaf Ebrahimi     if ((result == VK_SUCCESS || result == VK_INCOMPLETE) && pProperties) {
871*b7893ccfSSadaf Ebrahimi         for (uint32_t idx0 = 0; idx0 < *pPropertyCount; ++idx0) {
872*b7893ccfSSadaf Ebrahimi             VkDisplayKHR &opt_display = pProperties[idx0].currentDisplay;
873*b7893ccfSSadaf Ebrahimi             if (opt_display) opt_display = layer_data->MaybeWrapDisplay(opt_display, layer_data);
874*b7893ccfSSadaf Ebrahimi         }
875*b7893ccfSSadaf Ebrahimi     }
876*b7893ccfSSadaf Ebrahimi     return result;
877*b7893ccfSSadaf Ebrahimi }
878*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceDisplayPlaneProperties2KHR(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkDisplayPlaneProperties2KHR * pProperties)879*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceDisplayPlaneProperties2KHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount,
880*b7893ccfSSadaf Ebrahimi                                                              VkDisplayPlaneProperties2KHR *pProperties) {
881*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
882*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceDisplayPlaneProperties2KHR(physicalDevice,
883*b7893ccfSSadaf Ebrahimi                                                                                                       pPropertyCount, pProperties);
884*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return result;
885*b7893ccfSSadaf Ebrahimi     if ((result == VK_SUCCESS || result == VK_INCOMPLETE) && pProperties) {
886*b7893ccfSSadaf Ebrahimi         for (uint32_t idx0 = 0; idx0 < *pPropertyCount; ++idx0) {
887*b7893ccfSSadaf Ebrahimi             VkDisplayKHR &opt_display = pProperties[idx0].displayPlaneProperties.currentDisplay;
888*b7893ccfSSadaf Ebrahimi             if (opt_display) opt_display = layer_data->MaybeWrapDisplay(opt_display, layer_data);
889*b7893ccfSSadaf Ebrahimi         }
890*b7893ccfSSadaf Ebrahimi     }
891*b7893ccfSSadaf Ebrahimi     return result;
892*b7893ccfSSadaf Ebrahimi }
893*b7893ccfSSadaf Ebrahimi 
DispatchGetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice,uint32_t planeIndex,uint32_t * pDisplayCount,VkDisplayKHR * pDisplays)894*b7893ccfSSadaf Ebrahimi VkResult DispatchGetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t *pDisplayCount,
895*b7893ccfSSadaf Ebrahimi                                                      VkDisplayKHR *pDisplays) {
896*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
897*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex,
898*b7893ccfSSadaf Ebrahimi                                                                                               pDisplayCount, pDisplays);
899*b7893ccfSSadaf Ebrahimi     if ((result == VK_SUCCESS || result == VK_INCOMPLETE) && pDisplays) {
900*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return result;
901*b7893ccfSSadaf Ebrahimi         for (uint32_t i = 0; i < *pDisplayCount; ++i) {
902*b7893ccfSSadaf Ebrahimi             if (pDisplays[i]) pDisplays[i] = layer_data->MaybeWrapDisplay(pDisplays[i], layer_data);
903*b7893ccfSSadaf Ebrahimi         }
904*b7893ccfSSadaf Ebrahimi     }
905*b7893ccfSSadaf Ebrahimi     return result;
906*b7893ccfSSadaf Ebrahimi }
907*b7893ccfSSadaf Ebrahimi 
DispatchGetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice,VkDisplayKHR display,uint32_t * pPropertyCount,VkDisplayModePropertiesKHR * pProperties)908*b7893ccfSSadaf Ebrahimi VkResult DispatchGetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t *pPropertyCount,
909*b7893ccfSSadaf Ebrahimi                                              VkDisplayModePropertiesKHR *pProperties) {
910*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
911*b7893ccfSSadaf Ebrahimi     if (!wrap_handles)
912*b7893ccfSSadaf Ebrahimi         return layer_data->instance_dispatch_table.GetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount,
913*b7893ccfSSadaf Ebrahimi                                                                                pProperties);
914*b7893ccfSSadaf Ebrahimi     {
915*b7893ccfSSadaf Ebrahimi         display = layer_data->Unwrap(display);
916*b7893ccfSSadaf Ebrahimi     }
917*b7893ccfSSadaf Ebrahimi 
918*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetDisplayModePropertiesKHR(physicalDevice, display, pPropertyCount, pProperties);
919*b7893ccfSSadaf Ebrahimi     if ((result == VK_SUCCESS || result == VK_INCOMPLETE) && pProperties) {
920*b7893ccfSSadaf Ebrahimi         for (uint32_t idx0 = 0; idx0 < *pPropertyCount; ++idx0) {
921*b7893ccfSSadaf Ebrahimi             pProperties[idx0].displayMode = layer_data->WrapNew(pProperties[idx0].displayMode);
922*b7893ccfSSadaf Ebrahimi         }
923*b7893ccfSSadaf Ebrahimi     }
924*b7893ccfSSadaf Ebrahimi     return result;
925*b7893ccfSSadaf Ebrahimi }
926*b7893ccfSSadaf Ebrahimi 
DispatchGetDisplayModeProperties2KHR(VkPhysicalDevice physicalDevice,VkDisplayKHR display,uint32_t * pPropertyCount,VkDisplayModeProperties2KHR * pProperties)927*b7893ccfSSadaf Ebrahimi VkResult DispatchGetDisplayModeProperties2KHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t *pPropertyCount,
928*b7893ccfSSadaf Ebrahimi                                               VkDisplayModeProperties2KHR *pProperties) {
929*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
930*b7893ccfSSadaf Ebrahimi     if (!wrap_handles)
931*b7893ccfSSadaf Ebrahimi         return layer_data->instance_dispatch_table.GetDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount,
932*b7893ccfSSadaf Ebrahimi                                                                                 pProperties);
933*b7893ccfSSadaf Ebrahimi     {
934*b7893ccfSSadaf Ebrahimi         display = layer_data->Unwrap(display);
935*b7893ccfSSadaf Ebrahimi     }
936*b7893ccfSSadaf Ebrahimi 
937*b7893ccfSSadaf Ebrahimi     VkResult result =
938*b7893ccfSSadaf Ebrahimi         layer_data->instance_dispatch_table.GetDisplayModeProperties2KHR(physicalDevice, display, pPropertyCount, pProperties);
939*b7893ccfSSadaf Ebrahimi     if ((result == VK_SUCCESS || result == VK_INCOMPLETE) && pProperties) {
940*b7893ccfSSadaf Ebrahimi         for (uint32_t idx0 = 0; idx0 < *pPropertyCount; ++idx0) {
941*b7893ccfSSadaf Ebrahimi             pProperties[idx0].displayModeProperties.displayMode = layer_data->WrapNew(pProperties[idx0].displayModeProperties.displayMode);
942*b7893ccfSSadaf Ebrahimi         }
943*b7893ccfSSadaf Ebrahimi     }
944*b7893ccfSSadaf Ebrahimi     return result;
945*b7893ccfSSadaf Ebrahimi }
946*b7893ccfSSadaf Ebrahimi 
DispatchDebugMarkerSetObjectTagEXT(VkDevice device,const VkDebugMarkerObjectTagInfoEXT * pTagInfo)947*b7893ccfSSadaf Ebrahimi VkResult DispatchDebugMarkerSetObjectTagEXT(VkDevice device, const VkDebugMarkerObjectTagInfoEXT *pTagInfo) {
948*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
949*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DebugMarkerSetObjectTagEXT(device, pTagInfo);
950*b7893ccfSSadaf Ebrahimi     safe_VkDebugMarkerObjectTagInfoEXT local_tag_info(pTagInfo);
951*b7893ccfSSadaf Ebrahimi     {
952*b7893ccfSSadaf Ebrahimi         auto it = unique_id_mapping.find(reinterpret_cast<uint64_t &>(local_tag_info.object));
953*b7893ccfSSadaf Ebrahimi         if (it != unique_id_mapping.end()) {
954*b7893ccfSSadaf Ebrahimi             local_tag_info.object = it->second;
955*b7893ccfSSadaf Ebrahimi         }
956*b7893ccfSSadaf Ebrahimi     }
957*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.DebugMarkerSetObjectTagEXT(device,
958*b7893ccfSSadaf Ebrahimi                                                                                    reinterpret_cast<VkDebugMarkerObjectTagInfoEXT *>(&local_tag_info));
959*b7893ccfSSadaf Ebrahimi     return result;
960*b7893ccfSSadaf Ebrahimi }
961*b7893ccfSSadaf Ebrahimi 
DispatchDebugMarkerSetObjectNameEXT(VkDevice device,const VkDebugMarkerObjectNameInfoEXT * pNameInfo)962*b7893ccfSSadaf Ebrahimi VkResult DispatchDebugMarkerSetObjectNameEXT(VkDevice device, const VkDebugMarkerObjectNameInfoEXT *pNameInfo) {
963*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
964*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DebugMarkerSetObjectNameEXT(device, pNameInfo);
965*b7893ccfSSadaf Ebrahimi     safe_VkDebugMarkerObjectNameInfoEXT local_name_info(pNameInfo);
966*b7893ccfSSadaf Ebrahimi     {
967*b7893ccfSSadaf Ebrahimi         auto it = unique_id_mapping.find(reinterpret_cast<uint64_t &>(local_name_info.object));
968*b7893ccfSSadaf Ebrahimi         if (it != unique_id_mapping.end()) {
969*b7893ccfSSadaf Ebrahimi             local_name_info.object = it->second;
970*b7893ccfSSadaf Ebrahimi         }
971*b7893ccfSSadaf Ebrahimi     }
972*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.DebugMarkerSetObjectNameEXT(
973*b7893ccfSSadaf Ebrahimi         device, reinterpret_cast<VkDebugMarkerObjectNameInfoEXT *>(&local_name_info));
974*b7893ccfSSadaf Ebrahimi     return result;
975*b7893ccfSSadaf Ebrahimi }
976*b7893ccfSSadaf Ebrahimi 
977*b7893ccfSSadaf Ebrahimi // VK_EXT_debug_utils
DispatchSetDebugUtilsObjectTagEXT(VkDevice device,const VkDebugUtilsObjectTagInfoEXT * pTagInfo)978*b7893ccfSSadaf Ebrahimi VkResult DispatchSetDebugUtilsObjectTagEXT(VkDevice device, const VkDebugUtilsObjectTagInfoEXT *pTagInfo) {
979*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
980*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.SetDebugUtilsObjectTagEXT(device, pTagInfo);
981*b7893ccfSSadaf Ebrahimi     safe_VkDebugUtilsObjectTagInfoEXT local_tag_info(pTagInfo);
982*b7893ccfSSadaf Ebrahimi     {
983*b7893ccfSSadaf Ebrahimi         auto it = unique_id_mapping.find(reinterpret_cast<uint64_t &>(local_tag_info.objectHandle));
984*b7893ccfSSadaf Ebrahimi         if (it != unique_id_mapping.end()) {
985*b7893ccfSSadaf Ebrahimi             local_tag_info.objectHandle = it->second;
986*b7893ccfSSadaf Ebrahimi         }
987*b7893ccfSSadaf Ebrahimi     }
988*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.SetDebugUtilsObjectTagEXT(
989*b7893ccfSSadaf Ebrahimi         device, reinterpret_cast<const VkDebugUtilsObjectTagInfoEXT *>(&local_tag_info));
990*b7893ccfSSadaf Ebrahimi     return result;
991*b7893ccfSSadaf Ebrahimi }
992*b7893ccfSSadaf Ebrahimi 
DispatchSetDebugUtilsObjectNameEXT(VkDevice device,const VkDebugUtilsObjectNameInfoEXT * pNameInfo)993*b7893ccfSSadaf Ebrahimi VkResult DispatchSetDebugUtilsObjectNameEXT(VkDevice device, const VkDebugUtilsObjectNameInfoEXT *pNameInfo) {
994*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
995*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.SetDebugUtilsObjectNameEXT(device, pNameInfo);
996*b7893ccfSSadaf Ebrahimi     safe_VkDebugUtilsObjectNameInfoEXT local_name_info(pNameInfo);
997*b7893ccfSSadaf Ebrahimi     {
998*b7893ccfSSadaf Ebrahimi         auto it = unique_id_mapping.find(reinterpret_cast<uint64_t &>(local_name_info.objectHandle));
999*b7893ccfSSadaf Ebrahimi         if (it != unique_id_mapping.end()) {
1000*b7893ccfSSadaf Ebrahimi             local_name_info.objectHandle = it->second;
1001*b7893ccfSSadaf Ebrahimi         }
1002*b7893ccfSSadaf Ebrahimi     }
1003*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.SetDebugUtilsObjectNameEXT(
1004*b7893ccfSSadaf Ebrahimi         device, reinterpret_cast<const VkDebugUtilsObjectNameInfoEXT *>(&local_name_info));
1005*b7893ccfSSadaf Ebrahimi     return result;
1006*b7893ccfSSadaf Ebrahimi }
1007*b7893ccfSSadaf Ebrahimi 
1008*b7893ccfSSadaf Ebrahimi 
1009*b7893ccfSSadaf Ebrahimi 
1010*b7893ccfSSadaf Ebrahimi 
1011*b7893ccfSSadaf Ebrahimi // Skip vkCreateInstance dispatch, manually generated
1012*b7893ccfSSadaf Ebrahimi 
1013*b7893ccfSSadaf Ebrahimi // Skip vkDestroyInstance dispatch, manually generated
1014*b7893ccfSSadaf Ebrahimi 
DispatchEnumeratePhysicalDevices(VkInstance instance,uint32_t * pPhysicalDeviceCount,VkPhysicalDevice * pPhysicalDevices)1015*b7893ccfSSadaf Ebrahimi VkResult DispatchEnumeratePhysicalDevices(
1016*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
1017*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPhysicalDeviceCount,
1018*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice*                           pPhysicalDevices)
1019*b7893ccfSSadaf Ebrahimi {
1020*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
1021*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1022*b7893ccfSSadaf Ebrahimi 
1023*b7893ccfSSadaf Ebrahimi     return result;
1024*b7893ccfSSadaf Ebrahimi }
1025*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures * pFeatures)1026*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceFeatures(
1027*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1028*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceFeatures*                   pFeatures)
1029*b7893ccfSSadaf Ebrahimi {
1030*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1031*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1032*b7893ccfSSadaf Ebrahimi 
1033*b7893ccfSSadaf Ebrahimi }
1034*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties * pFormatProperties)1035*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceFormatProperties(
1036*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1037*b7893ccfSSadaf Ebrahimi     VkFormat                                    format,
1038*b7893ccfSSadaf Ebrahimi     VkFormatProperties*                         pFormatProperties)
1039*b7893ccfSSadaf Ebrahimi {
1040*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1041*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
1042*b7893ccfSSadaf Ebrahimi 
1043*b7893ccfSSadaf Ebrahimi }
1044*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkImageTiling tiling,VkImageUsageFlags usage,VkImageCreateFlags flags,VkImageFormatProperties * pImageFormatProperties)1045*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceImageFormatProperties(
1046*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1047*b7893ccfSSadaf Ebrahimi     VkFormat                                    format,
1048*b7893ccfSSadaf Ebrahimi     VkImageType                                 type,
1049*b7893ccfSSadaf Ebrahimi     VkImageTiling                               tiling,
1050*b7893ccfSSadaf Ebrahimi     VkImageUsageFlags                           usage,
1051*b7893ccfSSadaf Ebrahimi     VkImageCreateFlags                          flags,
1052*b7893ccfSSadaf Ebrahimi     VkImageFormatProperties*                    pImageFormatProperties)
1053*b7893ccfSSadaf Ebrahimi {
1054*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1055*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
1056*b7893ccfSSadaf Ebrahimi 
1057*b7893ccfSSadaf Ebrahimi     return result;
1058*b7893ccfSSadaf Ebrahimi }
1059*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties * pProperties)1060*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceProperties(
1061*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1062*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceProperties*                 pProperties)
1063*b7893ccfSSadaf Ebrahimi {
1064*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1065*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceProperties(physicalDevice, pProperties);
1066*b7893ccfSSadaf Ebrahimi 
1067*b7893ccfSSadaf Ebrahimi }
1068*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties * pQueueFamilyProperties)1069*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceQueueFamilyProperties(
1070*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1071*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pQueueFamilyPropertyCount,
1072*b7893ccfSSadaf Ebrahimi     VkQueueFamilyProperties*                    pQueueFamilyProperties)
1073*b7893ccfSSadaf Ebrahimi {
1074*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1075*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
1076*b7893ccfSSadaf Ebrahimi 
1077*b7893ccfSSadaf Ebrahimi }
1078*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties * pMemoryProperties)1079*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceMemoryProperties(
1080*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1081*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceMemoryProperties*           pMemoryProperties)
1082*b7893ccfSSadaf Ebrahimi {
1083*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1084*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
1085*b7893ccfSSadaf Ebrahimi 
1086*b7893ccfSSadaf Ebrahimi }
1087*b7893ccfSSadaf Ebrahimi 
DispatchGetInstanceProcAddr(VkInstance instance,const char * pName)1088*b7893ccfSSadaf Ebrahimi PFN_vkVoidFunction DispatchGetInstanceProcAddr(
1089*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
1090*b7893ccfSSadaf Ebrahimi     const char*                                 pName)
1091*b7893ccfSSadaf Ebrahimi {
1092*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
1093*b7893ccfSSadaf Ebrahimi     PFN_vkVoidFunction result = layer_data->instance_dispatch_table.GetInstanceProcAddr(instance, pName);
1094*b7893ccfSSadaf Ebrahimi 
1095*b7893ccfSSadaf Ebrahimi     return result;
1096*b7893ccfSSadaf Ebrahimi }
1097*b7893ccfSSadaf Ebrahimi 
DispatchGetDeviceProcAddr(VkDevice device,const char * pName)1098*b7893ccfSSadaf Ebrahimi PFN_vkVoidFunction DispatchGetDeviceProcAddr(
1099*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1100*b7893ccfSSadaf Ebrahimi     const char*                                 pName)
1101*b7893ccfSSadaf Ebrahimi {
1102*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1103*b7893ccfSSadaf Ebrahimi     PFN_vkVoidFunction result = layer_data->device_dispatch_table.GetDeviceProcAddr(device, pName);
1104*b7893ccfSSadaf Ebrahimi 
1105*b7893ccfSSadaf Ebrahimi     return result;
1106*b7893ccfSSadaf Ebrahimi }
1107*b7893ccfSSadaf Ebrahimi 
1108*b7893ccfSSadaf Ebrahimi // Skip vkCreateDevice dispatch, manually generated
1109*b7893ccfSSadaf Ebrahimi 
1110*b7893ccfSSadaf Ebrahimi // Skip vkDestroyDevice dispatch, manually generated
1111*b7893ccfSSadaf Ebrahimi 
1112*b7893ccfSSadaf Ebrahimi // Skip vkEnumerateInstanceExtensionProperties dispatch, manually generated
1113*b7893ccfSSadaf Ebrahimi 
1114*b7893ccfSSadaf Ebrahimi // Skip vkEnumerateDeviceExtensionProperties dispatch, manually generated
1115*b7893ccfSSadaf Ebrahimi 
1116*b7893ccfSSadaf Ebrahimi // Skip vkEnumerateInstanceLayerProperties dispatch, manually generated
1117*b7893ccfSSadaf Ebrahimi 
1118*b7893ccfSSadaf Ebrahimi // Skip vkEnumerateDeviceLayerProperties dispatch, manually generated
1119*b7893ccfSSadaf Ebrahimi 
DispatchGetDeviceQueue(VkDevice device,uint32_t queueFamilyIndex,uint32_t queueIndex,VkQueue * pQueue)1120*b7893ccfSSadaf Ebrahimi void DispatchGetDeviceQueue(
1121*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1122*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueFamilyIndex,
1123*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueIndex,
1124*b7893ccfSSadaf Ebrahimi     VkQueue*                                    pQueue)
1125*b7893ccfSSadaf Ebrahimi {
1126*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1127*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
1128*b7893ccfSSadaf Ebrahimi 
1129*b7893ccfSSadaf Ebrahimi }
1130*b7893ccfSSadaf Ebrahimi 
DispatchQueueSubmit(VkQueue queue,uint32_t submitCount,const VkSubmitInfo * pSubmits,VkFence fence)1131*b7893ccfSSadaf Ebrahimi VkResult DispatchQueueSubmit(
1132*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue,
1133*b7893ccfSSadaf Ebrahimi     uint32_t                                    submitCount,
1134*b7893ccfSSadaf Ebrahimi     const VkSubmitInfo*                         pSubmits,
1135*b7893ccfSSadaf Ebrahimi     VkFence                                     fence)
1136*b7893ccfSSadaf Ebrahimi {
1137*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
1138*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.QueueSubmit(queue, submitCount, pSubmits, fence);
1139*b7893ccfSSadaf Ebrahimi     safe_VkSubmitInfo *local_pSubmits = NULL;
1140*b7893ccfSSadaf Ebrahimi     {
1141*b7893ccfSSadaf Ebrahimi         if (pSubmits) {
1142*b7893ccfSSadaf Ebrahimi             local_pSubmits = new safe_VkSubmitInfo[submitCount];
1143*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < submitCount; ++index0) {
1144*b7893ccfSSadaf Ebrahimi                 local_pSubmits[index0].initialize(&pSubmits[index0]);
1145*b7893ccfSSadaf Ebrahimi                 WrapPnextChainHandles(layer_data, local_pSubmits[index0].pNext);
1146*b7893ccfSSadaf Ebrahimi                 if (local_pSubmits[index0].pWaitSemaphores) {
1147*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pSubmits[index0].waitSemaphoreCount; ++index1) {
1148*b7893ccfSSadaf Ebrahimi                         local_pSubmits[index0].pWaitSemaphores[index1] = layer_data->Unwrap(local_pSubmits[index0].pWaitSemaphores[index1]);
1149*b7893ccfSSadaf Ebrahimi                     }
1150*b7893ccfSSadaf Ebrahimi                 }
1151*b7893ccfSSadaf Ebrahimi                 if (local_pSubmits[index0].pSignalSemaphores) {
1152*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pSubmits[index0].signalSemaphoreCount; ++index1) {
1153*b7893ccfSSadaf Ebrahimi                         local_pSubmits[index0].pSignalSemaphores[index1] = layer_data->Unwrap(local_pSubmits[index0].pSignalSemaphores[index1]);
1154*b7893ccfSSadaf Ebrahimi                     }
1155*b7893ccfSSadaf Ebrahimi                 }
1156*b7893ccfSSadaf Ebrahimi             }
1157*b7893ccfSSadaf Ebrahimi         }
1158*b7893ccfSSadaf Ebrahimi         fence = layer_data->Unwrap(fence);
1159*b7893ccfSSadaf Ebrahimi     }
1160*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.QueueSubmit(queue, submitCount, (const VkSubmitInfo*)local_pSubmits, fence);
1161*b7893ccfSSadaf Ebrahimi     if (local_pSubmits) {
1162*b7893ccfSSadaf Ebrahimi         delete[] local_pSubmits;
1163*b7893ccfSSadaf Ebrahimi     }
1164*b7893ccfSSadaf Ebrahimi     return result;
1165*b7893ccfSSadaf Ebrahimi }
1166*b7893ccfSSadaf Ebrahimi 
DispatchQueueWaitIdle(VkQueue queue)1167*b7893ccfSSadaf Ebrahimi VkResult DispatchQueueWaitIdle(
1168*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue)
1169*b7893ccfSSadaf Ebrahimi {
1170*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
1171*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.QueueWaitIdle(queue);
1172*b7893ccfSSadaf Ebrahimi 
1173*b7893ccfSSadaf Ebrahimi     return result;
1174*b7893ccfSSadaf Ebrahimi }
1175*b7893ccfSSadaf Ebrahimi 
DispatchDeviceWaitIdle(VkDevice device)1176*b7893ccfSSadaf Ebrahimi VkResult DispatchDeviceWaitIdle(
1177*b7893ccfSSadaf Ebrahimi     VkDevice                                    device)
1178*b7893ccfSSadaf Ebrahimi {
1179*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1180*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.DeviceWaitIdle(device);
1181*b7893ccfSSadaf Ebrahimi 
1182*b7893ccfSSadaf Ebrahimi     return result;
1183*b7893ccfSSadaf Ebrahimi }
1184*b7893ccfSSadaf Ebrahimi 
DispatchAllocateMemory(VkDevice device,const VkMemoryAllocateInfo * pAllocateInfo,const VkAllocationCallbacks * pAllocator,VkDeviceMemory * pMemory)1185*b7893ccfSSadaf Ebrahimi VkResult DispatchAllocateMemory(
1186*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1187*b7893ccfSSadaf Ebrahimi     const VkMemoryAllocateInfo*                 pAllocateInfo,
1188*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1189*b7893ccfSSadaf Ebrahimi     VkDeviceMemory*                             pMemory)
1190*b7893ccfSSadaf Ebrahimi {
1191*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1192*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
1193*b7893ccfSSadaf Ebrahimi     safe_VkMemoryAllocateInfo *local_pAllocateInfo = NULL;
1194*b7893ccfSSadaf Ebrahimi     {
1195*b7893ccfSSadaf Ebrahimi         if (pAllocateInfo) {
1196*b7893ccfSSadaf Ebrahimi             local_pAllocateInfo = new safe_VkMemoryAllocateInfo(pAllocateInfo);
1197*b7893ccfSSadaf Ebrahimi             WrapPnextChainHandles(layer_data, local_pAllocateInfo->pNext);
1198*b7893ccfSSadaf Ebrahimi         }
1199*b7893ccfSSadaf Ebrahimi     }
1200*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.AllocateMemory(device, (const VkMemoryAllocateInfo*)local_pAllocateInfo, pAllocator, pMemory);
1201*b7893ccfSSadaf Ebrahimi     if (local_pAllocateInfo) {
1202*b7893ccfSSadaf Ebrahimi         delete local_pAllocateInfo;
1203*b7893ccfSSadaf Ebrahimi     }
1204*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
1205*b7893ccfSSadaf Ebrahimi         *pMemory = layer_data->WrapNew(*pMemory);
1206*b7893ccfSSadaf Ebrahimi     }
1207*b7893ccfSSadaf Ebrahimi     return result;
1208*b7893ccfSSadaf Ebrahimi }
1209*b7893ccfSSadaf Ebrahimi 
DispatchFreeMemory(VkDevice device,VkDeviceMemory memory,const VkAllocationCallbacks * pAllocator)1210*b7893ccfSSadaf Ebrahimi void DispatchFreeMemory(
1211*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1212*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory,
1213*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
1214*b7893ccfSSadaf Ebrahimi {
1215*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1216*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.FreeMemory(device, memory, pAllocator);
1217*b7893ccfSSadaf Ebrahimi     uint64_t memory_id = reinterpret_cast<uint64_t &>(memory);
1218*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(memory_id);
1219*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
1220*b7893ccfSSadaf Ebrahimi         memory = (VkDeviceMemory)iter->second;
1221*b7893ccfSSadaf Ebrahimi     } else {
1222*b7893ccfSSadaf Ebrahimi         memory = (VkDeviceMemory)0;
1223*b7893ccfSSadaf Ebrahimi     }
1224*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.FreeMemory(device, memory, pAllocator);
1225*b7893ccfSSadaf Ebrahimi 
1226*b7893ccfSSadaf Ebrahimi }
1227*b7893ccfSSadaf Ebrahimi 
DispatchMapMemory(VkDevice device,VkDeviceMemory memory,VkDeviceSize offset,VkDeviceSize size,VkMemoryMapFlags flags,void ** ppData)1228*b7893ccfSSadaf Ebrahimi VkResult DispatchMapMemory(
1229*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1230*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory,
1231*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
1232*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                size,
1233*b7893ccfSSadaf Ebrahimi     VkMemoryMapFlags                            flags,
1234*b7893ccfSSadaf Ebrahimi     void**                                      ppData)
1235*b7893ccfSSadaf Ebrahimi {
1236*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1237*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.MapMemory(device, memory, offset, size, flags, ppData);
1238*b7893ccfSSadaf Ebrahimi     {
1239*b7893ccfSSadaf Ebrahimi         memory = layer_data->Unwrap(memory);
1240*b7893ccfSSadaf Ebrahimi     }
1241*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.MapMemory(device, memory, offset, size, flags, ppData);
1242*b7893ccfSSadaf Ebrahimi 
1243*b7893ccfSSadaf Ebrahimi     return result;
1244*b7893ccfSSadaf Ebrahimi }
1245*b7893ccfSSadaf Ebrahimi 
DispatchUnmapMemory(VkDevice device,VkDeviceMemory memory)1246*b7893ccfSSadaf Ebrahimi void DispatchUnmapMemory(
1247*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1248*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory)
1249*b7893ccfSSadaf Ebrahimi {
1250*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1251*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.UnmapMemory(device, memory);
1252*b7893ccfSSadaf Ebrahimi     {
1253*b7893ccfSSadaf Ebrahimi         memory = layer_data->Unwrap(memory);
1254*b7893ccfSSadaf Ebrahimi     }
1255*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.UnmapMemory(device, memory);
1256*b7893ccfSSadaf Ebrahimi 
1257*b7893ccfSSadaf Ebrahimi }
1258*b7893ccfSSadaf Ebrahimi 
DispatchFlushMappedMemoryRanges(VkDevice device,uint32_t memoryRangeCount,const VkMappedMemoryRange * pMemoryRanges)1259*b7893ccfSSadaf Ebrahimi VkResult DispatchFlushMappedMemoryRanges(
1260*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1261*b7893ccfSSadaf Ebrahimi     uint32_t                                    memoryRangeCount,
1262*b7893ccfSSadaf Ebrahimi     const VkMappedMemoryRange*                  pMemoryRanges)
1263*b7893ccfSSadaf Ebrahimi {
1264*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1265*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1266*b7893ccfSSadaf Ebrahimi     safe_VkMappedMemoryRange *local_pMemoryRanges = NULL;
1267*b7893ccfSSadaf Ebrahimi     {
1268*b7893ccfSSadaf Ebrahimi         if (pMemoryRanges) {
1269*b7893ccfSSadaf Ebrahimi             local_pMemoryRanges = new safe_VkMappedMemoryRange[memoryRangeCount];
1270*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < memoryRangeCount; ++index0) {
1271*b7893ccfSSadaf Ebrahimi                 local_pMemoryRanges[index0].initialize(&pMemoryRanges[index0]);
1272*b7893ccfSSadaf Ebrahimi                 if (pMemoryRanges[index0].memory) {
1273*b7893ccfSSadaf Ebrahimi                     local_pMemoryRanges[index0].memory = layer_data->Unwrap(pMemoryRanges[index0].memory);
1274*b7893ccfSSadaf Ebrahimi                 }
1275*b7893ccfSSadaf Ebrahimi             }
1276*b7893ccfSSadaf Ebrahimi         }
1277*b7893ccfSSadaf Ebrahimi     }
1278*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.FlushMappedMemoryRanges(device, memoryRangeCount, (const VkMappedMemoryRange*)local_pMemoryRanges);
1279*b7893ccfSSadaf Ebrahimi     if (local_pMemoryRanges) {
1280*b7893ccfSSadaf Ebrahimi         delete[] local_pMemoryRanges;
1281*b7893ccfSSadaf Ebrahimi     }
1282*b7893ccfSSadaf Ebrahimi     return result;
1283*b7893ccfSSadaf Ebrahimi }
1284*b7893ccfSSadaf Ebrahimi 
DispatchInvalidateMappedMemoryRanges(VkDevice device,uint32_t memoryRangeCount,const VkMappedMemoryRange * pMemoryRanges)1285*b7893ccfSSadaf Ebrahimi VkResult DispatchInvalidateMappedMemoryRanges(
1286*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1287*b7893ccfSSadaf Ebrahimi     uint32_t                                    memoryRangeCount,
1288*b7893ccfSSadaf Ebrahimi     const VkMappedMemoryRange*                  pMemoryRanges)
1289*b7893ccfSSadaf Ebrahimi {
1290*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1291*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
1292*b7893ccfSSadaf Ebrahimi     safe_VkMappedMemoryRange *local_pMemoryRanges = NULL;
1293*b7893ccfSSadaf Ebrahimi     {
1294*b7893ccfSSadaf Ebrahimi         if (pMemoryRanges) {
1295*b7893ccfSSadaf Ebrahimi             local_pMemoryRanges = new safe_VkMappedMemoryRange[memoryRangeCount];
1296*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < memoryRangeCount; ++index0) {
1297*b7893ccfSSadaf Ebrahimi                 local_pMemoryRanges[index0].initialize(&pMemoryRanges[index0]);
1298*b7893ccfSSadaf Ebrahimi                 if (pMemoryRanges[index0].memory) {
1299*b7893ccfSSadaf Ebrahimi                     local_pMemoryRanges[index0].memory = layer_data->Unwrap(pMemoryRanges[index0].memory);
1300*b7893ccfSSadaf Ebrahimi                 }
1301*b7893ccfSSadaf Ebrahimi             }
1302*b7893ccfSSadaf Ebrahimi         }
1303*b7893ccfSSadaf Ebrahimi     }
1304*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.InvalidateMappedMemoryRanges(device, memoryRangeCount, (const VkMappedMemoryRange*)local_pMemoryRanges);
1305*b7893ccfSSadaf Ebrahimi     if (local_pMemoryRanges) {
1306*b7893ccfSSadaf Ebrahimi         delete[] local_pMemoryRanges;
1307*b7893ccfSSadaf Ebrahimi     }
1308*b7893ccfSSadaf Ebrahimi     return result;
1309*b7893ccfSSadaf Ebrahimi }
1310*b7893ccfSSadaf Ebrahimi 
DispatchGetDeviceMemoryCommitment(VkDevice device,VkDeviceMemory memory,VkDeviceSize * pCommittedMemoryInBytes)1311*b7893ccfSSadaf Ebrahimi void DispatchGetDeviceMemoryCommitment(
1312*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1313*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory,
1314*b7893ccfSSadaf Ebrahimi     VkDeviceSize*                               pCommittedMemoryInBytes)
1315*b7893ccfSSadaf Ebrahimi {
1316*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1317*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
1318*b7893ccfSSadaf Ebrahimi     {
1319*b7893ccfSSadaf Ebrahimi         memory = layer_data->Unwrap(memory);
1320*b7893ccfSSadaf Ebrahimi     }
1321*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
1322*b7893ccfSSadaf Ebrahimi 
1323*b7893ccfSSadaf Ebrahimi }
1324*b7893ccfSSadaf Ebrahimi 
DispatchBindBufferMemory(VkDevice device,VkBuffer buffer,VkDeviceMemory memory,VkDeviceSize memoryOffset)1325*b7893ccfSSadaf Ebrahimi VkResult DispatchBindBufferMemory(
1326*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1327*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
1328*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory,
1329*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                memoryOffset)
1330*b7893ccfSSadaf Ebrahimi {
1331*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1332*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.BindBufferMemory(device, buffer, memory, memoryOffset);
1333*b7893ccfSSadaf Ebrahimi     {
1334*b7893ccfSSadaf Ebrahimi         buffer = layer_data->Unwrap(buffer);
1335*b7893ccfSSadaf Ebrahimi         memory = layer_data->Unwrap(memory);
1336*b7893ccfSSadaf Ebrahimi     }
1337*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.BindBufferMemory(device, buffer, memory, memoryOffset);
1338*b7893ccfSSadaf Ebrahimi 
1339*b7893ccfSSadaf Ebrahimi     return result;
1340*b7893ccfSSadaf Ebrahimi }
1341*b7893ccfSSadaf Ebrahimi 
DispatchBindImageMemory(VkDevice device,VkImage image,VkDeviceMemory memory,VkDeviceSize memoryOffset)1342*b7893ccfSSadaf Ebrahimi VkResult DispatchBindImageMemory(
1343*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1344*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
1345*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory,
1346*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                memoryOffset)
1347*b7893ccfSSadaf Ebrahimi {
1348*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1349*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.BindImageMemory(device, image, memory, memoryOffset);
1350*b7893ccfSSadaf Ebrahimi     {
1351*b7893ccfSSadaf Ebrahimi         image = layer_data->Unwrap(image);
1352*b7893ccfSSadaf Ebrahimi         memory = layer_data->Unwrap(memory);
1353*b7893ccfSSadaf Ebrahimi     }
1354*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.BindImageMemory(device, image, memory, memoryOffset);
1355*b7893ccfSSadaf Ebrahimi 
1356*b7893ccfSSadaf Ebrahimi     return result;
1357*b7893ccfSSadaf Ebrahimi }
1358*b7893ccfSSadaf Ebrahimi 
DispatchGetBufferMemoryRequirements(VkDevice device,VkBuffer buffer,VkMemoryRequirements * pMemoryRequirements)1359*b7893ccfSSadaf Ebrahimi void DispatchGetBufferMemoryRequirements(
1360*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1361*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
1362*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements*                       pMemoryRequirements)
1363*b7893ccfSSadaf Ebrahimi {
1364*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1365*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
1366*b7893ccfSSadaf Ebrahimi     {
1367*b7893ccfSSadaf Ebrahimi         buffer = layer_data->Unwrap(buffer);
1368*b7893ccfSSadaf Ebrahimi     }
1369*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
1370*b7893ccfSSadaf Ebrahimi 
1371*b7893ccfSSadaf Ebrahimi }
1372*b7893ccfSSadaf Ebrahimi 
DispatchGetImageMemoryRequirements(VkDevice device,VkImage image,VkMemoryRequirements * pMemoryRequirements)1373*b7893ccfSSadaf Ebrahimi void DispatchGetImageMemoryRequirements(
1374*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1375*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
1376*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements*                       pMemoryRequirements)
1377*b7893ccfSSadaf Ebrahimi {
1378*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1379*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetImageMemoryRequirements(device, image, pMemoryRequirements);
1380*b7893ccfSSadaf Ebrahimi     {
1381*b7893ccfSSadaf Ebrahimi         image = layer_data->Unwrap(image);
1382*b7893ccfSSadaf Ebrahimi     }
1383*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetImageMemoryRequirements(device, image, pMemoryRequirements);
1384*b7893ccfSSadaf Ebrahimi 
1385*b7893ccfSSadaf Ebrahimi }
1386*b7893ccfSSadaf Ebrahimi 
DispatchGetImageSparseMemoryRequirements(VkDevice device,VkImage image,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements * pSparseMemoryRequirements)1387*b7893ccfSSadaf Ebrahimi void DispatchGetImageSparseMemoryRequirements(
1388*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1389*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
1390*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pSparseMemoryRequirementCount,
1391*b7893ccfSSadaf Ebrahimi     VkSparseImageMemoryRequirements*            pSparseMemoryRequirements)
1392*b7893ccfSSadaf Ebrahimi {
1393*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1394*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
1395*b7893ccfSSadaf Ebrahimi     {
1396*b7893ccfSSadaf Ebrahimi         image = layer_data->Unwrap(image);
1397*b7893ccfSSadaf Ebrahimi     }
1398*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
1399*b7893ccfSSadaf Ebrahimi 
1400*b7893ccfSSadaf Ebrahimi }
1401*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkSampleCountFlagBits samples,VkImageUsageFlags usage,VkImageTiling tiling,uint32_t * pPropertyCount,VkSparseImageFormatProperties * pProperties)1402*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceSparseImageFormatProperties(
1403*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
1404*b7893ccfSSadaf Ebrahimi     VkFormat                                    format,
1405*b7893ccfSSadaf Ebrahimi     VkImageType                                 type,
1406*b7893ccfSSadaf Ebrahimi     VkSampleCountFlagBits                       samples,
1407*b7893ccfSSadaf Ebrahimi     VkImageUsageFlags                           usage,
1408*b7893ccfSSadaf Ebrahimi     VkImageTiling                               tiling,
1409*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
1410*b7893ccfSSadaf Ebrahimi     VkSparseImageFormatProperties*              pProperties)
1411*b7893ccfSSadaf Ebrahimi {
1412*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
1413*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
1414*b7893ccfSSadaf Ebrahimi 
1415*b7893ccfSSadaf Ebrahimi }
1416*b7893ccfSSadaf Ebrahimi 
DispatchQueueBindSparse(VkQueue queue,uint32_t bindInfoCount,const VkBindSparseInfo * pBindInfo,VkFence fence)1417*b7893ccfSSadaf Ebrahimi VkResult DispatchQueueBindSparse(
1418*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue,
1419*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindInfoCount,
1420*b7893ccfSSadaf Ebrahimi     const VkBindSparseInfo*                     pBindInfo,
1421*b7893ccfSSadaf Ebrahimi     VkFence                                     fence)
1422*b7893ccfSSadaf Ebrahimi {
1423*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
1424*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
1425*b7893ccfSSadaf Ebrahimi     safe_VkBindSparseInfo *local_pBindInfo = NULL;
1426*b7893ccfSSadaf Ebrahimi     {
1427*b7893ccfSSadaf Ebrahimi         if (pBindInfo) {
1428*b7893ccfSSadaf Ebrahimi             local_pBindInfo = new safe_VkBindSparseInfo[bindInfoCount];
1429*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < bindInfoCount; ++index0) {
1430*b7893ccfSSadaf Ebrahimi                 local_pBindInfo[index0].initialize(&pBindInfo[index0]);
1431*b7893ccfSSadaf Ebrahimi                 if (local_pBindInfo[index0].pWaitSemaphores) {
1432*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pBindInfo[index0].waitSemaphoreCount; ++index1) {
1433*b7893ccfSSadaf Ebrahimi                         local_pBindInfo[index0].pWaitSemaphores[index1] = layer_data->Unwrap(local_pBindInfo[index0].pWaitSemaphores[index1]);
1434*b7893ccfSSadaf Ebrahimi                     }
1435*b7893ccfSSadaf Ebrahimi                 }
1436*b7893ccfSSadaf Ebrahimi                 if (local_pBindInfo[index0].pBufferBinds) {
1437*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pBindInfo[index0].bufferBindCount; ++index1) {
1438*b7893ccfSSadaf Ebrahimi                         if (pBindInfo[index0].pBufferBinds[index1].buffer) {
1439*b7893ccfSSadaf Ebrahimi                             local_pBindInfo[index0].pBufferBinds[index1].buffer = layer_data->Unwrap(pBindInfo[index0].pBufferBinds[index1].buffer);
1440*b7893ccfSSadaf Ebrahimi                         }
1441*b7893ccfSSadaf Ebrahimi                         if (local_pBindInfo[index0].pBufferBinds[index1].pBinds) {
1442*b7893ccfSSadaf Ebrahimi                             for (uint32_t index2 = 0; index2 < local_pBindInfo[index0].pBufferBinds[index1].bindCount; ++index2) {
1443*b7893ccfSSadaf Ebrahimi                                 if (pBindInfo[index0].pBufferBinds[index1].pBinds[index2].memory) {
1444*b7893ccfSSadaf Ebrahimi                                     local_pBindInfo[index0].pBufferBinds[index1].pBinds[index2].memory = layer_data->Unwrap(pBindInfo[index0].pBufferBinds[index1].pBinds[index2].memory);
1445*b7893ccfSSadaf Ebrahimi                                 }
1446*b7893ccfSSadaf Ebrahimi                             }
1447*b7893ccfSSadaf Ebrahimi                         }
1448*b7893ccfSSadaf Ebrahimi                     }
1449*b7893ccfSSadaf Ebrahimi                 }
1450*b7893ccfSSadaf Ebrahimi                 if (local_pBindInfo[index0].pImageOpaqueBinds) {
1451*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pBindInfo[index0].imageOpaqueBindCount; ++index1) {
1452*b7893ccfSSadaf Ebrahimi                         if (pBindInfo[index0].pImageOpaqueBinds[index1].image) {
1453*b7893ccfSSadaf Ebrahimi                             local_pBindInfo[index0].pImageOpaqueBinds[index1].image = layer_data->Unwrap(pBindInfo[index0].pImageOpaqueBinds[index1].image);
1454*b7893ccfSSadaf Ebrahimi                         }
1455*b7893ccfSSadaf Ebrahimi                         if (local_pBindInfo[index0].pImageOpaqueBinds[index1].pBinds) {
1456*b7893ccfSSadaf Ebrahimi                             for (uint32_t index2 = 0; index2 < local_pBindInfo[index0].pImageOpaqueBinds[index1].bindCount; ++index2) {
1457*b7893ccfSSadaf Ebrahimi                                 if (pBindInfo[index0].pImageOpaqueBinds[index1].pBinds[index2].memory) {
1458*b7893ccfSSadaf Ebrahimi                                     local_pBindInfo[index0].pImageOpaqueBinds[index1].pBinds[index2].memory = layer_data->Unwrap(pBindInfo[index0].pImageOpaqueBinds[index1].pBinds[index2].memory);
1459*b7893ccfSSadaf Ebrahimi                                 }
1460*b7893ccfSSadaf Ebrahimi                             }
1461*b7893ccfSSadaf Ebrahimi                         }
1462*b7893ccfSSadaf Ebrahimi                     }
1463*b7893ccfSSadaf Ebrahimi                 }
1464*b7893ccfSSadaf Ebrahimi                 if (local_pBindInfo[index0].pImageBinds) {
1465*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pBindInfo[index0].imageBindCount; ++index1) {
1466*b7893ccfSSadaf Ebrahimi                         if (pBindInfo[index0].pImageBinds[index1].image) {
1467*b7893ccfSSadaf Ebrahimi                             local_pBindInfo[index0].pImageBinds[index1].image = layer_data->Unwrap(pBindInfo[index0].pImageBinds[index1].image);
1468*b7893ccfSSadaf Ebrahimi                         }
1469*b7893ccfSSadaf Ebrahimi                         if (local_pBindInfo[index0].pImageBinds[index1].pBinds) {
1470*b7893ccfSSadaf Ebrahimi                             for (uint32_t index2 = 0; index2 < local_pBindInfo[index0].pImageBinds[index1].bindCount; ++index2) {
1471*b7893ccfSSadaf Ebrahimi                                 if (pBindInfo[index0].pImageBinds[index1].pBinds[index2].memory) {
1472*b7893ccfSSadaf Ebrahimi                                     local_pBindInfo[index0].pImageBinds[index1].pBinds[index2].memory = layer_data->Unwrap(pBindInfo[index0].pImageBinds[index1].pBinds[index2].memory);
1473*b7893ccfSSadaf Ebrahimi                                 }
1474*b7893ccfSSadaf Ebrahimi                             }
1475*b7893ccfSSadaf Ebrahimi                         }
1476*b7893ccfSSadaf Ebrahimi                     }
1477*b7893ccfSSadaf Ebrahimi                 }
1478*b7893ccfSSadaf Ebrahimi                 if (local_pBindInfo[index0].pSignalSemaphores) {
1479*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pBindInfo[index0].signalSemaphoreCount; ++index1) {
1480*b7893ccfSSadaf Ebrahimi                         local_pBindInfo[index0].pSignalSemaphores[index1] = layer_data->Unwrap(local_pBindInfo[index0].pSignalSemaphores[index1]);
1481*b7893ccfSSadaf Ebrahimi                     }
1482*b7893ccfSSadaf Ebrahimi                 }
1483*b7893ccfSSadaf Ebrahimi             }
1484*b7893ccfSSadaf Ebrahimi         }
1485*b7893ccfSSadaf Ebrahimi         fence = layer_data->Unwrap(fence);
1486*b7893ccfSSadaf Ebrahimi     }
1487*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.QueueBindSparse(queue, bindInfoCount, (const VkBindSparseInfo*)local_pBindInfo, fence);
1488*b7893ccfSSadaf Ebrahimi     if (local_pBindInfo) {
1489*b7893ccfSSadaf Ebrahimi         delete[] local_pBindInfo;
1490*b7893ccfSSadaf Ebrahimi     }
1491*b7893ccfSSadaf Ebrahimi     return result;
1492*b7893ccfSSadaf Ebrahimi }
1493*b7893ccfSSadaf Ebrahimi 
DispatchCreateFence(VkDevice device,const VkFenceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkFence * pFence)1494*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateFence(
1495*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1496*b7893ccfSSadaf Ebrahimi     const VkFenceCreateInfo*                    pCreateInfo,
1497*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1498*b7893ccfSSadaf Ebrahimi     VkFence*                                    pFence)
1499*b7893ccfSSadaf Ebrahimi {
1500*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1501*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateFence(device, pCreateInfo, pAllocator, pFence);
1502*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateFence(device, pCreateInfo, pAllocator, pFence);
1503*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
1504*b7893ccfSSadaf Ebrahimi         *pFence = layer_data->WrapNew(*pFence);
1505*b7893ccfSSadaf Ebrahimi     }
1506*b7893ccfSSadaf Ebrahimi     return result;
1507*b7893ccfSSadaf Ebrahimi }
1508*b7893ccfSSadaf Ebrahimi 
DispatchDestroyFence(VkDevice device,VkFence fence,const VkAllocationCallbacks * pAllocator)1509*b7893ccfSSadaf Ebrahimi void DispatchDestroyFence(
1510*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1511*b7893ccfSSadaf Ebrahimi     VkFence                                     fence,
1512*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
1513*b7893ccfSSadaf Ebrahimi {
1514*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1515*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyFence(device, fence, pAllocator);
1516*b7893ccfSSadaf Ebrahimi     uint64_t fence_id = reinterpret_cast<uint64_t &>(fence);
1517*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(fence_id);
1518*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
1519*b7893ccfSSadaf Ebrahimi         fence = (VkFence)iter->second;
1520*b7893ccfSSadaf Ebrahimi     } else {
1521*b7893ccfSSadaf Ebrahimi         fence = (VkFence)0;
1522*b7893ccfSSadaf Ebrahimi     }
1523*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyFence(device, fence, pAllocator);
1524*b7893ccfSSadaf Ebrahimi 
1525*b7893ccfSSadaf Ebrahimi }
1526*b7893ccfSSadaf Ebrahimi 
DispatchResetFences(VkDevice device,uint32_t fenceCount,const VkFence * pFences)1527*b7893ccfSSadaf Ebrahimi VkResult DispatchResetFences(
1528*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1529*b7893ccfSSadaf Ebrahimi     uint32_t                                    fenceCount,
1530*b7893ccfSSadaf Ebrahimi     const VkFence*                              pFences)
1531*b7893ccfSSadaf Ebrahimi {
1532*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1533*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.ResetFences(device, fenceCount, pFences);
1534*b7893ccfSSadaf Ebrahimi     VkFence *local_pFences = NULL;
1535*b7893ccfSSadaf Ebrahimi     {
1536*b7893ccfSSadaf Ebrahimi         if (pFences) {
1537*b7893ccfSSadaf Ebrahimi             local_pFences = new VkFence[fenceCount];
1538*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < fenceCount; ++index0) {
1539*b7893ccfSSadaf Ebrahimi                 local_pFences[index0] = layer_data->Unwrap(pFences[index0]);
1540*b7893ccfSSadaf Ebrahimi             }
1541*b7893ccfSSadaf Ebrahimi         }
1542*b7893ccfSSadaf Ebrahimi     }
1543*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.ResetFences(device, fenceCount, (const VkFence*)local_pFences);
1544*b7893ccfSSadaf Ebrahimi     if (local_pFences)
1545*b7893ccfSSadaf Ebrahimi         delete[] local_pFences;
1546*b7893ccfSSadaf Ebrahimi     return result;
1547*b7893ccfSSadaf Ebrahimi }
1548*b7893ccfSSadaf Ebrahimi 
DispatchGetFenceStatus(VkDevice device,VkFence fence)1549*b7893ccfSSadaf Ebrahimi VkResult DispatchGetFenceStatus(
1550*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1551*b7893ccfSSadaf Ebrahimi     VkFence                                     fence)
1552*b7893ccfSSadaf Ebrahimi {
1553*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1554*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetFenceStatus(device, fence);
1555*b7893ccfSSadaf Ebrahimi     {
1556*b7893ccfSSadaf Ebrahimi         fence = layer_data->Unwrap(fence);
1557*b7893ccfSSadaf Ebrahimi     }
1558*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetFenceStatus(device, fence);
1559*b7893ccfSSadaf Ebrahimi 
1560*b7893ccfSSadaf Ebrahimi     return result;
1561*b7893ccfSSadaf Ebrahimi }
1562*b7893ccfSSadaf Ebrahimi 
DispatchWaitForFences(VkDevice device,uint32_t fenceCount,const VkFence * pFences,VkBool32 waitAll,uint64_t timeout)1563*b7893ccfSSadaf Ebrahimi VkResult DispatchWaitForFences(
1564*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1565*b7893ccfSSadaf Ebrahimi     uint32_t                                    fenceCount,
1566*b7893ccfSSadaf Ebrahimi     const VkFence*                              pFences,
1567*b7893ccfSSadaf Ebrahimi     VkBool32                                    waitAll,
1568*b7893ccfSSadaf Ebrahimi     uint64_t                                    timeout)
1569*b7893ccfSSadaf Ebrahimi {
1570*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1571*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.WaitForFences(device, fenceCount, pFences, waitAll, timeout);
1572*b7893ccfSSadaf Ebrahimi     VkFence *local_pFences = NULL;
1573*b7893ccfSSadaf Ebrahimi     {
1574*b7893ccfSSadaf Ebrahimi         if (pFences) {
1575*b7893ccfSSadaf Ebrahimi             local_pFences = new VkFence[fenceCount];
1576*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < fenceCount; ++index0) {
1577*b7893ccfSSadaf Ebrahimi                 local_pFences[index0] = layer_data->Unwrap(pFences[index0]);
1578*b7893ccfSSadaf Ebrahimi             }
1579*b7893ccfSSadaf Ebrahimi         }
1580*b7893ccfSSadaf Ebrahimi     }
1581*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.WaitForFences(device, fenceCount, (const VkFence*)local_pFences, waitAll, timeout);
1582*b7893ccfSSadaf Ebrahimi     if (local_pFences)
1583*b7893ccfSSadaf Ebrahimi         delete[] local_pFences;
1584*b7893ccfSSadaf Ebrahimi     return result;
1585*b7893ccfSSadaf Ebrahimi }
1586*b7893ccfSSadaf Ebrahimi 
DispatchCreateSemaphore(VkDevice device,const VkSemaphoreCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSemaphore * pSemaphore)1587*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateSemaphore(
1588*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1589*b7893ccfSSadaf Ebrahimi     const VkSemaphoreCreateInfo*                pCreateInfo,
1590*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1591*b7893ccfSSadaf Ebrahimi     VkSemaphore*                                pSemaphore)
1592*b7893ccfSSadaf Ebrahimi {
1593*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1594*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
1595*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
1596*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
1597*b7893ccfSSadaf Ebrahimi         *pSemaphore = layer_data->WrapNew(*pSemaphore);
1598*b7893ccfSSadaf Ebrahimi     }
1599*b7893ccfSSadaf Ebrahimi     return result;
1600*b7893ccfSSadaf Ebrahimi }
1601*b7893ccfSSadaf Ebrahimi 
DispatchDestroySemaphore(VkDevice device,VkSemaphore semaphore,const VkAllocationCallbacks * pAllocator)1602*b7893ccfSSadaf Ebrahimi void DispatchDestroySemaphore(
1603*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1604*b7893ccfSSadaf Ebrahimi     VkSemaphore                                 semaphore,
1605*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
1606*b7893ccfSSadaf Ebrahimi {
1607*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1608*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroySemaphore(device, semaphore, pAllocator);
1609*b7893ccfSSadaf Ebrahimi     uint64_t semaphore_id = reinterpret_cast<uint64_t &>(semaphore);
1610*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(semaphore_id);
1611*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
1612*b7893ccfSSadaf Ebrahimi         semaphore = (VkSemaphore)iter->second;
1613*b7893ccfSSadaf Ebrahimi     } else {
1614*b7893ccfSSadaf Ebrahimi         semaphore = (VkSemaphore)0;
1615*b7893ccfSSadaf Ebrahimi     }
1616*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroySemaphore(device, semaphore, pAllocator);
1617*b7893ccfSSadaf Ebrahimi 
1618*b7893ccfSSadaf Ebrahimi }
1619*b7893ccfSSadaf Ebrahimi 
DispatchCreateEvent(VkDevice device,const VkEventCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkEvent * pEvent)1620*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateEvent(
1621*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1622*b7893ccfSSadaf Ebrahimi     const VkEventCreateInfo*                    pCreateInfo,
1623*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1624*b7893ccfSSadaf Ebrahimi     VkEvent*                                    pEvent)
1625*b7893ccfSSadaf Ebrahimi {
1626*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1627*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateEvent(device, pCreateInfo, pAllocator, pEvent);
1628*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateEvent(device, pCreateInfo, pAllocator, pEvent);
1629*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
1630*b7893ccfSSadaf Ebrahimi         *pEvent = layer_data->WrapNew(*pEvent);
1631*b7893ccfSSadaf Ebrahimi     }
1632*b7893ccfSSadaf Ebrahimi     return result;
1633*b7893ccfSSadaf Ebrahimi }
1634*b7893ccfSSadaf Ebrahimi 
DispatchDestroyEvent(VkDevice device,VkEvent event,const VkAllocationCallbacks * pAllocator)1635*b7893ccfSSadaf Ebrahimi void DispatchDestroyEvent(
1636*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1637*b7893ccfSSadaf Ebrahimi     VkEvent                                     event,
1638*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
1639*b7893ccfSSadaf Ebrahimi {
1640*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1641*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyEvent(device, event, pAllocator);
1642*b7893ccfSSadaf Ebrahimi     uint64_t event_id = reinterpret_cast<uint64_t &>(event);
1643*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(event_id);
1644*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
1645*b7893ccfSSadaf Ebrahimi         event = (VkEvent)iter->second;
1646*b7893ccfSSadaf Ebrahimi     } else {
1647*b7893ccfSSadaf Ebrahimi         event = (VkEvent)0;
1648*b7893ccfSSadaf Ebrahimi     }
1649*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyEvent(device, event, pAllocator);
1650*b7893ccfSSadaf Ebrahimi 
1651*b7893ccfSSadaf Ebrahimi }
1652*b7893ccfSSadaf Ebrahimi 
DispatchGetEventStatus(VkDevice device,VkEvent event)1653*b7893ccfSSadaf Ebrahimi VkResult DispatchGetEventStatus(
1654*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1655*b7893ccfSSadaf Ebrahimi     VkEvent                                     event)
1656*b7893ccfSSadaf Ebrahimi {
1657*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1658*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetEventStatus(device, event);
1659*b7893ccfSSadaf Ebrahimi     {
1660*b7893ccfSSadaf Ebrahimi         event = layer_data->Unwrap(event);
1661*b7893ccfSSadaf Ebrahimi     }
1662*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetEventStatus(device, event);
1663*b7893ccfSSadaf Ebrahimi 
1664*b7893ccfSSadaf Ebrahimi     return result;
1665*b7893ccfSSadaf Ebrahimi }
1666*b7893ccfSSadaf Ebrahimi 
DispatchSetEvent(VkDevice device,VkEvent event)1667*b7893ccfSSadaf Ebrahimi VkResult DispatchSetEvent(
1668*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1669*b7893ccfSSadaf Ebrahimi     VkEvent                                     event)
1670*b7893ccfSSadaf Ebrahimi {
1671*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1672*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.SetEvent(device, event);
1673*b7893ccfSSadaf Ebrahimi     {
1674*b7893ccfSSadaf Ebrahimi         event = layer_data->Unwrap(event);
1675*b7893ccfSSadaf Ebrahimi     }
1676*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.SetEvent(device, event);
1677*b7893ccfSSadaf Ebrahimi 
1678*b7893ccfSSadaf Ebrahimi     return result;
1679*b7893ccfSSadaf Ebrahimi }
1680*b7893ccfSSadaf Ebrahimi 
DispatchResetEvent(VkDevice device,VkEvent event)1681*b7893ccfSSadaf Ebrahimi VkResult DispatchResetEvent(
1682*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1683*b7893ccfSSadaf Ebrahimi     VkEvent                                     event)
1684*b7893ccfSSadaf Ebrahimi {
1685*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1686*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.ResetEvent(device, event);
1687*b7893ccfSSadaf Ebrahimi     {
1688*b7893ccfSSadaf Ebrahimi         event = layer_data->Unwrap(event);
1689*b7893ccfSSadaf Ebrahimi     }
1690*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.ResetEvent(device, event);
1691*b7893ccfSSadaf Ebrahimi 
1692*b7893ccfSSadaf Ebrahimi     return result;
1693*b7893ccfSSadaf Ebrahimi }
1694*b7893ccfSSadaf Ebrahimi 
DispatchCreateQueryPool(VkDevice device,const VkQueryPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkQueryPool * pQueryPool)1695*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateQueryPool(
1696*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1697*b7893ccfSSadaf Ebrahimi     const VkQueryPoolCreateInfo*                pCreateInfo,
1698*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1699*b7893ccfSSadaf Ebrahimi     VkQueryPool*                                pQueryPool)
1700*b7893ccfSSadaf Ebrahimi {
1701*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1702*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
1703*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
1704*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
1705*b7893ccfSSadaf Ebrahimi         *pQueryPool = layer_data->WrapNew(*pQueryPool);
1706*b7893ccfSSadaf Ebrahimi     }
1707*b7893ccfSSadaf Ebrahimi     return result;
1708*b7893ccfSSadaf Ebrahimi }
1709*b7893ccfSSadaf Ebrahimi 
DispatchDestroyQueryPool(VkDevice device,VkQueryPool queryPool,const VkAllocationCallbacks * pAllocator)1710*b7893ccfSSadaf Ebrahimi void DispatchDestroyQueryPool(
1711*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1712*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
1713*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
1714*b7893ccfSSadaf Ebrahimi {
1715*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1716*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyQueryPool(device, queryPool, pAllocator);
1717*b7893ccfSSadaf Ebrahimi     uint64_t queryPool_id = reinterpret_cast<uint64_t &>(queryPool);
1718*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(queryPool_id);
1719*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
1720*b7893ccfSSadaf Ebrahimi         queryPool = (VkQueryPool)iter->second;
1721*b7893ccfSSadaf Ebrahimi     } else {
1722*b7893ccfSSadaf Ebrahimi         queryPool = (VkQueryPool)0;
1723*b7893ccfSSadaf Ebrahimi     }
1724*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyQueryPool(device, queryPool, pAllocator);
1725*b7893ccfSSadaf Ebrahimi 
1726*b7893ccfSSadaf Ebrahimi }
1727*b7893ccfSSadaf Ebrahimi 
DispatchGetQueryPoolResults(VkDevice device,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,size_t dataSize,void * pData,VkDeviceSize stride,VkQueryResultFlags flags)1728*b7893ccfSSadaf Ebrahimi VkResult DispatchGetQueryPoolResults(
1729*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1730*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
1731*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstQuery,
1732*b7893ccfSSadaf Ebrahimi     uint32_t                                    queryCount,
1733*b7893ccfSSadaf Ebrahimi     size_t                                      dataSize,
1734*b7893ccfSSadaf Ebrahimi     void*                                       pData,
1735*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                stride,
1736*b7893ccfSSadaf Ebrahimi     VkQueryResultFlags                          flags)
1737*b7893ccfSSadaf Ebrahimi {
1738*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1739*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
1740*b7893ccfSSadaf Ebrahimi     {
1741*b7893ccfSSadaf Ebrahimi         queryPool = layer_data->Unwrap(queryPool);
1742*b7893ccfSSadaf Ebrahimi     }
1743*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
1744*b7893ccfSSadaf Ebrahimi 
1745*b7893ccfSSadaf Ebrahimi     return result;
1746*b7893ccfSSadaf Ebrahimi }
1747*b7893ccfSSadaf Ebrahimi 
DispatchCreateBuffer(VkDevice device,const VkBufferCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkBuffer * pBuffer)1748*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateBuffer(
1749*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1750*b7893ccfSSadaf Ebrahimi     const VkBufferCreateInfo*                   pCreateInfo,
1751*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1752*b7893ccfSSadaf Ebrahimi     VkBuffer*                                   pBuffer)
1753*b7893ccfSSadaf Ebrahimi {
1754*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1755*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
1756*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
1757*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
1758*b7893ccfSSadaf Ebrahimi         *pBuffer = layer_data->WrapNew(*pBuffer);
1759*b7893ccfSSadaf Ebrahimi     }
1760*b7893ccfSSadaf Ebrahimi     return result;
1761*b7893ccfSSadaf Ebrahimi }
1762*b7893ccfSSadaf Ebrahimi 
DispatchDestroyBuffer(VkDevice device,VkBuffer buffer,const VkAllocationCallbacks * pAllocator)1763*b7893ccfSSadaf Ebrahimi void DispatchDestroyBuffer(
1764*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1765*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
1766*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
1767*b7893ccfSSadaf Ebrahimi {
1768*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1769*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyBuffer(device, buffer, pAllocator);
1770*b7893ccfSSadaf Ebrahimi     uint64_t buffer_id = reinterpret_cast<uint64_t &>(buffer);
1771*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(buffer_id);
1772*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
1773*b7893ccfSSadaf Ebrahimi         buffer = (VkBuffer)iter->second;
1774*b7893ccfSSadaf Ebrahimi     } else {
1775*b7893ccfSSadaf Ebrahimi         buffer = (VkBuffer)0;
1776*b7893ccfSSadaf Ebrahimi     }
1777*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyBuffer(device, buffer, pAllocator);
1778*b7893ccfSSadaf Ebrahimi 
1779*b7893ccfSSadaf Ebrahimi }
1780*b7893ccfSSadaf Ebrahimi 
DispatchCreateBufferView(VkDevice device,const VkBufferViewCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkBufferView * pView)1781*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateBufferView(
1782*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1783*b7893ccfSSadaf Ebrahimi     const VkBufferViewCreateInfo*               pCreateInfo,
1784*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1785*b7893ccfSSadaf Ebrahimi     VkBufferView*                               pView)
1786*b7893ccfSSadaf Ebrahimi {
1787*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1788*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateBufferView(device, pCreateInfo, pAllocator, pView);
1789*b7893ccfSSadaf Ebrahimi     safe_VkBufferViewCreateInfo *local_pCreateInfo = NULL;
1790*b7893ccfSSadaf Ebrahimi     {
1791*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
1792*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkBufferViewCreateInfo(pCreateInfo);
1793*b7893ccfSSadaf Ebrahimi             if (pCreateInfo->buffer) {
1794*b7893ccfSSadaf Ebrahimi                 local_pCreateInfo->buffer = layer_data->Unwrap(pCreateInfo->buffer);
1795*b7893ccfSSadaf Ebrahimi             }
1796*b7893ccfSSadaf Ebrahimi         }
1797*b7893ccfSSadaf Ebrahimi     }
1798*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateBufferView(device, (const VkBufferViewCreateInfo*)local_pCreateInfo, pAllocator, pView);
1799*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
1800*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
1801*b7893ccfSSadaf Ebrahimi     }
1802*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
1803*b7893ccfSSadaf Ebrahimi         *pView = layer_data->WrapNew(*pView);
1804*b7893ccfSSadaf Ebrahimi     }
1805*b7893ccfSSadaf Ebrahimi     return result;
1806*b7893ccfSSadaf Ebrahimi }
1807*b7893ccfSSadaf Ebrahimi 
DispatchDestroyBufferView(VkDevice device,VkBufferView bufferView,const VkAllocationCallbacks * pAllocator)1808*b7893ccfSSadaf Ebrahimi void DispatchDestroyBufferView(
1809*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1810*b7893ccfSSadaf Ebrahimi     VkBufferView                                bufferView,
1811*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
1812*b7893ccfSSadaf Ebrahimi {
1813*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1814*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyBufferView(device, bufferView, pAllocator);
1815*b7893ccfSSadaf Ebrahimi     uint64_t bufferView_id = reinterpret_cast<uint64_t &>(bufferView);
1816*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(bufferView_id);
1817*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
1818*b7893ccfSSadaf Ebrahimi         bufferView = (VkBufferView)iter->second;
1819*b7893ccfSSadaf Ebrahimi     } else {
1820*b7893ccfSSadaf Ebrahimi         bufferView = (VkBufferView)0;
1821*b7893ccfSSadaf Ebrahimi     }
1822*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyBufferView(device, bufferView, pAllocator);
1823*b7893ccfSSadaf Ebrahimi 
1824*b7893ccfSSadaf Ebrahimi }
1825*b7893ccfSSadaf Ebrahimi 
DispatchCreateImage(VkDevice device,const VkImageCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkImage * pImage)1826*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateImage(
1827*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1828*b7893ccfSSadaf Ebrahimi     const VkImageCreateInfo*                    pCreateInfo,
1829*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1830*b7893ccfSSadaf Ebrahimi     VkImage*                                    pImage)
1831*b7893ccfSSadaf Ebrahimi {
1832*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1833*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateImage(device, pCreateInfo, pAllocator, pImage);
1834*b7893ccfSSadaf Ebrahimi     safe_VkImageCreateInfo *local_pCreateInfo = NULL;
1835*b7893ccfSSadaf Ebrahimi     {
1836*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
1837*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkImageCreateInfo(pCreateInfo);
1838*b7893ccfSSadaf Ebrahimi             WrapPnextChainHandles(layer_data, local_pCreateInfo->pNext);
1839*b7893ccfSSadaf Ebrahimi         }
1840*b7893ccfSSadaf Ebrahimi     }
1841*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateImage(device, (const VkImageCreateInfo*)local_pCreateInfo, pAllocator, pImage);
1842*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
1843*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
1844*b7893ccfSSadaf Ebrahimi     }
1845*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
1846*b7893ccfSSadaf Ebrahimi         *pImage = layer_data->WrapNew(*pImage);
1847*b7893ccfSSadaf Ebrahimi     }
1848*b7893ccfSSadaf Ebrahimi     return result;
1849*b7893ccfSSadaf Ebrahimi }
1850*b7893ccfSSadaf Ebrahimi 
DispatchDestroyImage(VkDevice device,VkImage image,const VkAllocationCallbacks * pAllocator)1851*b7893ccfSSadaf Ebrahimi void DispatchDestroyImage(
1852*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1853*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
1854*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
1855*b7893ccfSSadaf Ebrahimi {
1856*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1857*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyImage(device, image, pAllocator);
1858*b7893ccfSSadaf Ebrahimi     uint64_t image_id = reinterpret_cast<uint64_t &>(image);
1859*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(image_id);
1860*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
1861*b7893ccfSSadaf Ebrahimi         image = (VkImage)iter->second;
1862*b7893ccfSSadaf Ebrahimi     } else {
1863*b7893ccfSSadaf Ebrahimi         image = (VkImage)0;
1864*b7893ccfSSadaf Ebrahimi     }
1865*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyImage(device, image, pAllocator);
1866*b7893ccfSSadaf Ebrahimi 
1867*b7893ccfSSadaf Ebrahimi }
1868*b7893ccfSSadaf Ebrahimi 
DispatchGetImageSubresourceLayout(VkDevice device,VkImage image,const VkImageSubresource * pSubresource,VkSubresourceLayout * pLayout)1869*b7893ccfSSadaf Ebrahimi void DispatchGetImageSubresourceLayout(
1870*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1871*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
1872*b7893ccfSSadaf Ebrahimi     const VkImageSubresource*                   pSubresource,
1873*b7893ccfSSadaf Ebrahimi     VkSubresourceLayout*                        pLayout)
1874*b7893ccfSSadaf Ebrahimi {
1875*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1876*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetImageSubresourceLayout(device, image, pSubresource, pLayout);
1877*b7893ccfSSadaf Ebrahimi     {
1878*b7893ccfSSadaf Ebrahimi         image = layer_data->Unwrap(image);
1879*b7893ccfSSadaf Ebrahimi     }
1880*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetImageSubresourceLayout(device, image, pSubresource, pLayout);
1881*b7893ccfSSadaf Ebrahimi 
1882*b7893ccfSSadaf Ebrahimi }
1883*b7893ccfSSadaf Ebrahimi 
DispatchCreateImageView(VkDevice device,const VkImageViewCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkImageView * pView)1884*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateImageView(
1885*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1886*b7893ccfSSadaf Ebrahimi     const VkImageViewCreateInfo*                pCreateInfo,
1887*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1888*b7893ccfSSadaf Ebrahimi     VkImageView*                                pView)
1889*b7893ccfSSadaf Ebrahimi {
1890*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1891*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateImageView(device, pCreateInfo, pAllocator, pView);
1892*b7893ccfSSadaf Ebrahimi     safe_VkImageViewCreateInfo *local_pCreateInfo = NULL;
1893*b7893ccfSSadaf Ebrahimi     {
1894*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
1895*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkImageViewCreateInfo(pCreateInfo);
1896*b7893ccfSSadaf Ebrahimi             if (pCreateInfo->image) {
1897*b7893ccfSSadaf Ebrahimi                 local_pCreateInfo->image = layer_data->Unwrap(pCreateInfo->image);
1898*b7893ccfSSadaf Ebrahimi             }
1899*b7893ccfSSadaf Ebrahimi             WrapPnextChainHandles(layer_data, local_pCreateInfo->pNext);
1900*b7893ccfSSadaf Ebrahimi         }
1901*b7893ccfSSadaf Ebrahimi     }
1902*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateImageView(device, (const VkImageViewCreateInfo*)local_pCreateInfo, pAllocator, pView);
1903*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
1904*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
1905*b7893ccfSSadaf Ebrahimi     }
1906*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
1907*b7893ccfSSadaf Ebrahimi         *pView = layer_data->WrapNew(*pView);
1908*b7893ccfSSadaf Ebrahimi     }
1909*b7893ccfSSadaf Ebrahimi     return result;
1910*b7893ccfSSadaf Ebrahimi }
1911*b7893ccfSSadaf Ebrahimi 
DispatchDestroyImageView(VkDevice device,VkImageView imageView,const VkAllocationCallbacks * pAllocator)1912*b7893ccfSSadaf Ebrahimi void DispatchDestroyImageView(
1913*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1914*b7893ccfSSadaf Ebrahimi     VkImageView                                 imageView,
1915*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
1916*b7893ccfSSadaf Ebrahimi {
1917*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1918*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyImageView(device, imageView, pAllocator);
1919*b7893ccfSSadaf Ebrahimi     uint64_t imageView_id = reinterpret_cast<uint64_t &>(imageView);
1920*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(imageView_id);
1921*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
1922*b7893ccfSSadaf Ebrahimi         imageView = (VkImageView)iter->second;
1923*b7893ccfSSadaf Ebrahimi     } else {
1924*b7893ccfSSadaf Ebrahimi         imageView = (VkImageView)0;
1925*b7893ccfSSadaf Ebrahimi     }
1926*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyImageView(device, imageView, pAllocator);
1927*b7893ccfSSadaf Ebrahimi 
1928*b7893ccfSSadaf Ebrahimi }
1929*b7893ccfSSadaf Ebrahimi 
DispatchCreateShaderModule(VkDevice device,const VkShaderModuleCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkShaderModule * pShaderModule)1930*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateShaderModule(
1931*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1932*b7893ccfSSadaf Ebrahimi     const VkShaderModuleCreateInfo*             pCreateInfo,
1933*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1934*b7893ccfSSadaf Ebrahimi     VkShaderModule*                             pShaderModule)
1935*b7893ccfSSadaf Ebrahimi {
1936*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1937*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
1938*b7893ccfSSadaf Ebrahimi     safe_VkShaderModuleCreateInfo *local_pCreateInfo = NULL;
1939*b7893ccfSSadaf Ebrahimi     {
1940*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
1941*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkShaderModuleCreateInfo(pCreateInfo);
1942*b7893ccfSSadaf Ebrahimi             WrapPnextChainHandles(layer_data, local_pCreateInfo->pNext);
1943*b7893ccfSSadaf Ebrahimi         }
1944*b7893ccfSSadaf Ebrahimi     }
1945*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateShaderModule(device, (const VkShaderModuleCreateInfo*)local_pCreateInfo, pAllocator, pShaderModule);
1946*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
1947*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
1948*b7893ccfSSadaf Ebrahimi     }
1949*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
1950*b7893ccfSSadaf Ebrahimi         *pShaderModule = layer_data->WrapNew(*pShaderModule);
1951*b7893ccfSSadaf Ebrahimi     }
1952*b7893ccfSSadaf Ebrahimi     return result;
1953*b7893ccfSSadaf Ebrahimi }
1954*b7893ccfSSadaf Ebrahimi 
DispatchDestroyShaderModule(VkDevice device,VkShaderModule shaderModule,const VkAllocationCallbacks * pAllocator)1955*b7893ccfSSadaf Ebrahimi void DispatchDestroyShaderModule(
1956*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1957*b7893ccfSSadaf Ebrahimi     VkShaderModule                              shaderModule,
1958*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
1959*b7893ccfSSadaf Ebrahimi {
1960*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1961*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyShaderModule(device, shaderModule, pAllocator);
1962*b7893ccfSSadaf Ebrahimi     uint64_t shaderModule_id = reinterpret_cast<uint64_t &>(shaderModule);
1963*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(shaderModule_id);
1964*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
1965*b7893ccfSSadaf Ebrahimi         shaderModule = (VkShaderModule)iter->second;
1966*b7893ccfSSadaf Ebrahimi     } else {
1967*b7893ccfSSadaf Ebrahimi         shaderModule = (VkShaderModule)0;
1968*b7893ccfSSadaf Ebrahimi     }
1969*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyShaderModule(device, shaderModule, pAllocator);
1970*b7893ccfSSadaf Ebrahimi 
1971*b7893ccfSSadaf Ebrahimi }
1972*b7893ccfSSadaf Ebrahimi 
DispatchCreatePipelineCache(VkDevice device,const VkPipelineCacheCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineCache * pPipelineCache)1973*b7893ccfSSadaf Ebrahimi VkResult DispatchCreatePipelineCache(
1974*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1975*b7893ccfSSadaf Ebrahimi     const VkPipelineCacheCreateInfo*            pCreateInfo,
1976*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
1977*b7893ccfSSadaf Ebrahimi     VkPipelineCache*                            pPipelineCache)
1978*b7893ccfSSadaf Ebrahimi {
1979*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1980*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
1981*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
1982*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
1983*b7893ccfSSadaf Ebrahimi         *pPipelineCache = layer_data->WrapNew(*pPipelineCache);
1984*b7893ccfSSadaf Ebrahimi     }
1985*b7893ccfSSadaf Ebrahimi     return result;
1986*b7893ccfSSadaf Ebrahimi }
1987*b7893ccfSSadaf Ebrahimi 
DispatchDestroyPipelineCache(VkDevice device,VkPipelineCache pipelineCache,const VkAllocationCallbacks * pAllocator)1988*b7893ccfSSadaf Ebrahimi void DispatchDestroyPipelineCache(
1989*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
1990*b7893ccfSSadaf Ebrahimi     VkPipelineCache                             pipelineCache,
1991*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
1992*b7893ccfSSadaf Ebrahimi {
1993*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
1994*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyPipelineCache(device, pipelineCache, pAllocator);
1995*b7893ccfSSadaf Ebrahimi     uint64_t pipelineCache_id = reinterpret_cast<uint64_t &>(pipelineCache);
1996*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(pipelineCache_id);
1997*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
1998*b7893ccfSSadaf Ebrahimi         pipelineCache = (VkPipelineCache)iter->second;
1999*b7893ccfSSadaf Ebrahimi     } else {
2000*b7893ccfSSadaf Ebrahimi         pipelineCache = (VkPipelineCache)0;
2001*b7893ccfSSadaf Ebrahimi     }
2002*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyPipelineCache(device, pipelineCache, pAllocator);
2003*b7893ccfSSadaf Ebrahimi 
2004*b7893ccfSSadaf Ebrahimi }
2005*b7893ccfSSadaf Ebrahimi 
DispatchGetPipelineCacheData(VkDevice device,VkPipelineCache pipelineCache,size_t * pDataSize,void * pData)2006*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPipelineCacheData(
2007*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2008*b7893ccfSSadaf Ebrahimi     VkPipelineCache                             pipelineCache,
2009*b7893ccfSSadaf Ebrahimi     size_t*                                     pDataSize,
2010*b7893ccfSSadaf Ebrahimi     void*                                       pData)
2011*b7893ccfSSadaf Ebrahimi {
2012*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2013*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
2014*b7893ccfSSadaf Ebrahimi     {
2015*b7893ccfSSadaf Ebrahimi         pipelineCache = layer_data->Unwrap(pipelineCache);
2016*b7893ccfSSadaf Ebrahimi     }
2017*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
2018*b7893ccfSSadaf Ebrahimi 
2019*b7893ccfSSadaf Ebrahimi     return result;
2020*b7893ccfSSadaf Ebrahimi }
2021*b7893ccfSSadaf Ebrahimi 
DispatchMergePipelineCaches(VkDevice device,VkPipelineCache dstCache,uint32_t srcCacheCount,const VkPipelineCache * pSrcCaches)2022*b7893ccfSSadaf Ebrahimi VkResult DispatchMergePipelineCaches(
2023*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2024*b7893ccfSSadaf Ebrahimi     VkPipelineCache                             dstCache,
2025*b7893ccfSSadaf Ebrahimi     uint32_t                                    srcCacheCount,
2026*b7893ccfSSadaf Ebrahimi     const VkPipelineCache*                      pSrcCaches)
2027*b7893ccfSSadaf Ebrahimi {
2028*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2029*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
2030*b7893ccfSSadaf Ebrahimi     VkPipelineCache *local_pSrcCaches = NULL;
2031*b7893ccfSSadaf Ebrahimi     {
2032*b7893ccfSSadaf Ebrahimi         dstCache = layer_data->Unwrap(dstCache);
2033*b7893ccfSSadaf Ebrahimi         if (pSrcCaches) {
2034*b7893ccfSSadaf Ebrahimi             local_pSrcCaches = new VkPipelineCache[srcCacheCount];
2035*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < srcCacheCount; ++index0) {
2036*b7893ccfSSadaf Ebrahimi                 local_pSrcCaches[index0] = layer_data->Unwrap(pSrcCaches[index0]);
2037*b7893ccfSSadaf Ebrahimi             }
2038*b7893ccfSSadaf Ebrahimi         }
2039*b7893ccfSSadaf Ebrahimi     }
2040*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.MergePipelineCaches(device, dstCache, srcCacheCount, (const VkPipelineCache*)local_pSrcCaches);
2041*b7893ccfSSadaf Ebrahimi     if (local_pSrcCaches)
2042*b7893ccfSSadaf Ebrahimi         delete[] local_pSrcCaches;
2043*b7893ccfSSadaf Ebrahimi     return result;
2044*b7893ccfSSadaf Ebrahimi }
2045*b7893ccfSSadaf Ebrahimi 
2046*b7893ccfSSadaf Ebrahimi // Skip vkCreateGraphicsPipelines dispatch, manually generated
2047*b7893ccfSSadaf Ebrahimi 
2048*b7893ccfSSadaf Ebrahimi // Skip vkCreateComputePipelines dispatch, manually generated
2049*b7893ccfSSadaf Ebrahimi 
DispatchDestroyPipeline(VkDevice device,VkPipeline pipeline,const VkAllocationCallbacks * pAllocator)2050*b7893ccfSSadaf Ebrahimi void DispatchDestroyPipeline(
2051*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2052*b7893ccfSSadaf Ebrahimi     VkPipeline                                  pipeline,
2053*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
2054*b7893ccfSSadaf Ebrahimi {
2055*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2056*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyPipeline(device, pipeline, pAllocator);
2057*b7893ccfSSadaf Ebrahimi     uint64_t pipeline_id = reinterpret_cast<uint64_t &>(pipeline);
2058*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(pipeline_id);
2059*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
2060*b7893ccfSSadaf Ebrahimi         pipeline = (VkPipeline)iter->second;
2061*b7893ccfSSadaf Ebrahimi     } else {
2062*b7893ccfSSadaf Ebrahimi         pipeline = (VkPipeline)0;
2063*b7893ccfSSadaf Ebrahimi     }
2064*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyPipeline(device, pipeline, pAllocator);
2065*b7893ccfSSadaf Ebrahimi 
2066*b7893ccfSSadaf Ebrahimi }
2067*b7893ccfSSadaf Ebrahimi 
DispatchCreatePipelineLayout(VkDevice device,const VkPipelineLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineLayout * pPipelineLayout)2068*b7893ccfSSadaf Ebrahimi VkResult DispatchCreatePipelineLayout(
2069*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2070*b7893ccfSSadaf Ebrahimi     const VkPipelineLayoutCreateInfo*           pCreateInfo,
2071*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2072*b7893ccfSSadaf Ebrahimi     VkPipelineLayout*                           pPipelineLayout)
2073*b7893ccfSSadaf Ebrahimi {
2074*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2075*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
2076*b7893ccfSSadaf Ebrahimi     safe_VkPipelineLayoutCreateInfo *local_pCreateInfo = NULL;
2077*b7893ccfSSadaf Ebrahimi     {
2078*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
2079*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkPipelineLayoutCreateInfo(pCreateInfo);
2080*b7893ccfSSadaf Ebrahimi             if (local_pCreateInfo->pSetLayouts) {
2081*b7893ccfSSadaf Ebrahimi                 for (uint32_t index1 = 0; index1 < local_pCreateInfo->setLayoutCount; ++index1) {
2082*b7893ccfSSadaf Ebrahimi                     local_pCreateInfo->pSetLayouts[index1] = layer_data->Unwrap(local_pCreateInfo->pSetLayouts[index1]);
2083*b7893ccfSSadaf Ebrahimi                 }
2084*b7893ccfSSadaf Ebrahimi             }
2085*b7893ccfSSadaf Ebrahimi         }
2086*b7893ccfSSadaf Ebrahimi     }
2087*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreatePipelineLayout(device, (const VkPipelineLayoutCreateInfo*)local_pCreateInfo, pAllocator, pPipelineLayout);
2088*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
2089*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
2090*b7893ccfSSadaf Ebrahimi     }
2091*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
2092*b7893ccfSSadaf Ebrahimi         *pPipelineLayout = layer_data->WrapNew(*pPipelineLayout);
2093*b7893ccfSSadaf Ebrahimi     }
2094*b7893ccfSSadaf Ebrahimi     return result;
2095*b7893ccfSSadaf Ebrahimi }
2096*b7893ccfSSadaf Ebrahimi 
DispatchDestroyPipelineLayout(VkDevice device,VkPipelineLayout pipelineLayout,const VkAllocationCallbacks * pAllocator)2097*b7893ccfSSadaf Ebrahimi void DispatchDestroyPipelineLayout(
2098*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2099*b7893ccfSSadaf Ebrahimi     VkPipelineLayout                            pipelineLayout,
2100*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
2101*b7893ccfSSadaf Ebrahimi {
2102*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2103*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyPipelineLayout(device, pipelineLayout, pAllocator);
2104*b7893ccfSSadaf Ebrahimi     uint64_t pipelineLayout_id = reinterpret_cast<uint64_t &>(pipelineLayout);
2105*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(pipelineLayout_id);
2106*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
2107*b7893ccfSSadaf Ebrahimi         pipelineLayout = (VkPipelineLayout)iter->second;
2108*b7893ccfSSadaf Ebrahimi     } else {
2109*b7893ccfSSadaf Ebrahimi         pipelineLayout = (VkPipelineLayout)0;
2110*b7893ccfSSadaf Ebrahimi     }
2111*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyPipelineLayout(device, pipelineLayout, pAllocator);
2112*b7893ccfSSadaf Ebrahimi 
2113*b7893ccfSSadaf Ebrahimi }
2114*b7893ccfSSadaf Ebrahimi 
DispatchCreateSampler(VkDevice device,const VkSamplerCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSampler * pSampler)2115*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateSampler(
2116*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2117*b7893ccfSSadaf Ebrahimi     const VkSamplerCreateInfo*                  pCreateInfo,
2118*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2119*b7893ccfSSadaf Ebrahimi     VkSampler*                                  pSampler)
2120*b7893ccfSSadaf Ebrahimi {
2121*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2122*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateSampler(device, pCreateInfo, pAllocator, pSampler);
2123*b7893ccfSSadaf Ebrahimi     safe_VkSamplerCreateInfo *local_pCreateInfo = NULL;
2124*b7893ccfSSadaf Ebrahimi     {
2125*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
2126*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkSamplerCreateInfo(pCreateInfo);
2127*b7893ccfSSadaf Ebrahimi             WrapPnextChainHandles(layer_data, local_pCreateInfo->pNext);
2128*b7893ccfSSadaf Ebrahimi         }
2129*b7893ccfSSadaf Ebrahimi     }
2130*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateSampler(device, (const VkSamplerCreateInfo*)local_pCreateInfo, pAllocator, pSampler);
2131*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
2132*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
2133*b7893ccfSSadaf Ebrahimi     }
2134*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
2135*b7893ccfSSadaf Ebrahimi         *pSampler = layer_data->WrapNew(*pSampler);
2136*b7893ccfSSadaf Ebrahimi     }
2137*b7893ccfSSadaf Ebrahimi     return result;
2138*b7893ccfSSadaf Ebrahimi }
2139*b7893ccfSSadaf Ebrahimi 
DispatchDestroySampler(VkDevice device,VkSampler sampler,const VkAllocationCallbacks * pAllocator)2140*b7893ccfSSadaf Ebrahimi void DispatchDestroySampler(
2141*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2142*b7893ccfSSadaf Ebrahimi     VkSampler                                   sampler,
2143*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
2144*b7893ccfSSadaf Ebrahimi {
2145*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2146*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroySampler(device, sampler, pAllocator);
2147*b7893ccfSSadaf Ebrahimi     uint64_t sampler_id = reinterpret_cast<uint64_t &>(sampler);
2148*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(sampler_id);
2149*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
2150*b7893ccfSSadaf Ebrahimi         sampler = (VkSampler)iter->second;
2151*b7893ccfSSadaf Ebrahimi     } else {
2152*b7893ccfSSadaf Ebrahimi         sampler = (VkSampler)0;
2153*b7893ccfSSadaf Ebrahimi     }
2154*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroySampler(device, sampler, pAllocator);
2155*b7893ccfSSadaf Ebrahimi 
2156*b7893ccfSSadaf Ebrahimi }
2157*b7893ccfSSadaf Ebrahimi 
DispatchCreateDescriptorSetLayout(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorSetLayout * pSetLayout)2158*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateDescriptorSetLayout(
2159*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2160*b7893ccfSSadaf Ebrahimi     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
2161*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2162*b7893ccfSSadaf Ebrahimi     VkDescriptorSetLayout*                      pSetLayout)
2163*b7893ccfSSadaf Ebrahimi {
2164*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2165*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
2166*b7893ccfSSadaf Ebrahimi     safe_VkDescriptorSetLayoutCreateInfo *local_pCreateInfo = NULL;
2167*b7893ccfSSadaf Ebrahimi     {
2168*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
2169*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkDescriptorSetLayoutCreateInfo(pCreateInfo);
2170*b7893ccfSSadaf Ebrahimi             if (local_pCreateInfo->pBindings) {
2171*b7893ccfSSadaf Ebrahimi                 for (uint32_t index1 = 0; index1 < local_pCreateInfo->bindingCount; ++index1) {
2172*b7893ccfSSadaf Ebrahimi                     if (local_pCreateInfo->pBindings[index1].pImmutableSamplers) {
2173*b7893ccfSSadaf Ebrahimi                         for (uint32_t index2 = 0; index2 < local_pCreateInfo->pBindings[index1].descriptorCount; ++index2) {
2174*b7893ccfSSadaf Ebrahimi                             local_pCreateInfo->pBindings[index1].pImmutableSamplers[index2] = layer_data->Unwrap(local_pCreateInfo->pBindings[index1].pImmutableSamplers[index2]);
2175*b7893ccfSSadaf Ebrahimi                         }
2176*b7893ccfSSadaf Ebrahimi                     }
2177*b7893ccfSSadaf Ebrahimi                 }
2178*b7893ccfSSadaf Ebrahimi             }
2179*b7893ccfSSadaf Ebrahimi         }
2180*b7893ccfSSadaf Ebrahimi     }
2181*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateDescriptorSetLayout(device, (const VkDescriptorSetLayoutCreateInfo*)local_pCreateInfo, pAllocator, pSetLayout);
2182*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
2183*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
2184*b7893ccfSSadaf Ebrahimi     }
2185*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
2186*b7893ccfSSadaf Ebrahimi         *pSetLayout = layer_data->WrapNew(*pSetLayout);
2187*b7893ccfSSadaf Ebrahimi     }
2188*b7893ccfSSadaf Ebrahimi     return result;
2189*b7893ccfSSadaf Ebrahimi }
2190*b7893ccfSSadaf Ebrahimi 
DispatchDestroyDescriptorSetLayout(VkDevice device,VkDescriptorSetLayout descriptorSetLayout,const VkAllocationCallbacks * pAllocator)2191*b7893ccfSSadaf Ebrahimi void DispatchDestroyDescriptorSetLayout(
2192*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2193*b7893ccfSSadaf Ebrahimi     VkDescriptorSetLayout                       descriptorSetLayout,
2194*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
2195*b7893ccfSSadaf Ebrahimi {
2196*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2197*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
2198*b7893ccfSSadaf Ebrahimi     uint64_t descriptorSetLayout_id = reinterpret_cast<uint64_t &>(descriptorSetLayout);
2199*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(descriptorSetLayout_id);
2200*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
2201*b7893ccfSSadaf Ebrahimi         descriptorSetLayout = (VkDescriptorSetLayout)iter->second;
2202*b7893ccfSSadaf Ebrahimi     } else {
2203*b7893ccfSSadaf Ebrahimi         descriptorSetLayout = (VkDescriptorSetLayout)0;
2204*b7893ccfSSadaf Ebrahimi     }
2205*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator);
2206*b7893ccfSSadaf Ebrahimi 
2207*b7893ccfSSadaf Ebrahimi }
2208*b7893ccfSSadaf Ebrahimi 
DispatchCreateDescriptorPool(VkDevice device,const VkDescriptorPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorPool * pDescriptorPool)2209*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateDescriptorPool(
2210*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2211*b7893ccfSSadaf Ebrahimi     const VkDescriptorPoolCreateInfo*           pCreateInfo,
2212*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2213*b7893ccfSSadaf Ebrahimi     VkDescriptorPool*                           pDescriptorPool)
2214*b7893ccfSSadaf Ebrahimi {
2215*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2216*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
2217*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
2218*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
2219*b7893ccfSSadaf Ebrahimi         *pDescriptorPool = layer_data->WrapNew(*pDescriptorPool);
2220*b7893ccfSSadaf Ebrahimi     }
2221*b7893ccfSSadaf Ebrahimi     return result;
2222*b7893ccfSSadaf Ebrahimi }
2223*b7893ccfSSadaf Ebrahimi 
2224*b7893ccfSSadaf Ebrahimi // Skip vkDestroyDescriptorPool dispatch, manually generated
2225*b7893ccfSSadaf Ebrahimi 
2226*b7893ccfSSadaf Ebrahimi // Skip vkResetDescriptorPool dispatch, manually generated
2227*b7893ccfSSadaf Ebrahimi 
2228*b7893ccfSSadaf Ebrahimi // Skip vkAllocateDescriptorSets dispatch, manually generated
2229*b7893ccfSSadaf Ebrahimi 
2230*b7893ccfSSadaf Ebrahimi // Skip vkFreeDescriptorSets dispatch, manually generated
2231*b7893ccfSSadaf Ebrahimi 
DispatchUpdateDescriptorSets(VkDevice device,uint32_t descriptorWriteCount,const VkWriteDescriptorSet * pDescriptorWrites,uint32_t descriptorCopyCount,const VkCopyDescriptorSet * pDescriptorCopies)2232*b7893ccfSSadaf Ebrahimi void DispatchUpdateDescriptorSets(
2233*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2234*b7893ccfSSadaf Ebrahimi     uint32_t                                    descriptorWriteCount,
2235*b7893ccfSSadaf Ebrahimi     const VkWriteDescriptorSet*                 pDescriptorWrites,
2236*b7893ccfSSadaf Ebrahimi     uint32_t                                    descriptorCopyCount,
2237*b7893ccfSSadaf Ebrahimi     const VkCopyDescriptorSet*                  pDescriptorCopies)
2238*b7893ccfSSadaf Ebrahimi {
2239*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2240*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
2241*b7893ccfSSadaf Ebrahimi     safe_VkWriteDescriptorSet *local_pDescriptorWrites = NULL;
2242*b7893ccfSSadaf Ebrahimi     safe_VkCopyDescriptorSet *local_pDescriptorCopies = NULL;
2243*b7893ccfSSadaf Ebrahimi     {
2244*b7893ccfSSadaf Ebrahimi         if (pDescriptorWrites) {
2245*b7893ccfSSadaf Ebrahimi             local_pDescriptorWrites = new safe_VkWriteDescriptorSet[descriptorWriteCount];
2246*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < descriptorWriteCount; ++index0) {
2247*b7893ccfSSadaf Ebrahimi                 local_pDescriptorWrites[index0].initialize(&pDescriptorWrites[index0]);
2248*b7893ccfSSadaf Ebrahimi                 WrapPnextChainHandles(layer_data, local_pDescriptorWrites[index0].pNext);
2249*b7893ccfSSadaf Ebrahimi                 if (pDescriptorWrites[index0].dstSet) {
2250*b7893ccfSSadaf Ebrahimi                     local_pDescriptorWrites[index0].dstSet = layer_data->Unwrap(pDescriptorWrites[index0].dstSet);
2251*b7893ccfSSadaf Ebrahimi                 }
2252*b7893ccfSSadaf Ebrahimi                 if (local_pDescriptorWrites[index0].pImageInfo) {
2253*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pDescriptorWrites[index0].descriptorCount; ++index1) {
2254*b7893ccfSSadaf Ebrahimi                         if (pDescriptorWrites[index0].pImageInfo[index1].sampler) {
2255*b7893ccfSSadaf Ebrahimi                             local_pDescriptorWrites[index0].pImageInfo[index1].sampler = layer_data->Unwrap(pDescriptorWrites[index0].pImageInfo[index1].sampler);
2256*b7893ccfSSadaf Ebrahimi                         }
2257*b7893ccfSSadaf Ebrahimi                         if (pDescriptorWrites[index0].pImageInfo[index1].imageView) {
2258*b7893ccfSSadaf Ebrahimi                             local_pDescriptorWrites[index0].pImageInfo[index1].imageView = layer_data->Unwrap(pDescriptorWrites[index0].pImageInfo[index1].imageView);
2259*b7893ccfSSadaf Ebrahimi                         }
2260*b7893ccfSSadaf Ebrahimi                     }
2261*b7893ccfSSadaf Ebrahimi                 }
2262*b7893ccfSSadaf Ebrahimi                 if (local_pDescriptorWrites[index0].pBufferInfo) {
2263*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pDescriptorWrites[index0].descriptorCount; ++index1) {
2264*b7893ccfSSadaf Ebrahimi                         if (pDescriptorWrites[index0].pBufferInfo[index1].buffer) {
2265*b7893ccfSSadaf Ebrahimi                             local_pDescriptorWrites[index0].pBufferInfo[index1].buffer = layer_data->Unwrap(pDescriptorWrites[index0].pBufferInfo[index1].buffer);
2266*b7893ccfSSadaf Ebrahimi                         }
2267*b7893ccfSSadaf Ebrahimi                     }
2268*b7893ccfSSadaf Ebrahimi                 }
2269*b7893ccfSSadaf Ebrahimi                 if (local_pDescriptorWrites[index0].pTexelBufferView) {
2270*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pDescriptorWrites[index0].descriptorCount; ++index1) {
2271*b7893ccfSSadaf Ebrahimi                         local_pDescriptorWrites[index0].pTexelBufferView[index1] = layer_data->Unwrap(local_pDescriptorWrites[index0].pTexelBufferView[index1]);
2272*b7893ccfSSadaf Ebrahimi                     }
2273*b7893ccfSSadaf Ebrahimi                 }
2274*b7893ccfSSadaf Ebrahimi             }
2275*b7893ccfSSadaf Ebrahimi         }
2276*b7893ccfSSadaf Ebrahimi         if (pDescriptorCopies) {
2277*b7893ccfSSadaf Ebrahimi             local_pDescriptorCopies = new safe_VkCopyDescriptorSet[descriptorCopyCount];
2278*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < descriptorCopyCount; ++index0) {
2279*b7893ccfSSadaf Ebrahimi                 local_pDescriptorCopies[index0].initialize(&pDescriptorCopies[index0]);
2280*b7893ccfSSadaf Ebrahimi                 if (pDescriptorCopies[index0].srcSet) {
2281*b7893ccfSSadaf Ebrahimi                     local_pDescriptorCopies[index0].srcSet = layer_data->Unwrap(pDescriptorCopies[index0].srcSet);
2282*b7893ccfSSadaf Ebrahimi                 }
2283*b7893ccfSSadaf Ebrahimi                 if (pDescriptorCopies[index0].dstSet) {
2284*b7893ccfSSadaf Ebrahimi                     local_pDescriptorCopies[index0].dstSet = layer_data->Unwrap(pDescriptorCopies[index0].dstSet);
2285*b7893ccfSSadaf Ebrahimi                 }
2286*b7893ccfSSadaf Ebrahimi             }
2287*b7893ccfSSadaf Ebrahimi         }
2288*b7893ccfSSadaf Ebrahimi     }
2289*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.UpdateDescriptorSets(device, descriptorWriteCount, (const VkWriteDescriptorSet*)local_pDescriptorWrites, descriptorCopyCount, (const VkCopyDescriptorSet*)local_pDescriptorCopies);
2290*b7893ccfSSadaf Ebrahimi     if (local_pDescriptorWrites) {
2291*b7893ccfSSadaf Ebrahimi         delete[] local_pDescriptorWrites;
2292*b7893ccfSSadaf Ebrahimi     }
2293*b7893ccfSSadaf Ebrahimi     if (local_pDescriptorCopies) {
2294*b7893ccfSSadaf Ebrahimi         delete[] local_pDescriptorCopies;
2295*b7893ccfSSadaf Ebrahimi     }
2296*b7893ccfSSadaf Ebrahimi }
2297*b7893ccfSSadaf Ebrahimi 
DispatchCreateFramebuffer(VkDevice device,const VkFramebufferCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkFramebuffer * pFramebuffer)2298*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateFramebuffer(
2299*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2300*b7893ccfSSadaf Ebrahimi     const VkFramebufferCreateInfo*              pCreateInfo,
2301*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2302*b7893ccfSSadaf Ebrahimi     VkFramebuffer*                              pFramebuffer)
2303*b7893ccfSSadaf Ebrahimi {
2304*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2305*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
2306*b7893ccfSSadaf Ebrahimi     safe_VkFramebufferCreateInfo *local_pCreateInfo = NULL;
2307*b7893ccfSSadaf Ebrahimi     {
2308*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
2309*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkFramebufferCreateInfo(pCreateInfo);
2310*b7893ccfSSadaf Ebrahimi             if (pCreateInfo->renderPass) {
2311*b7893ccfSSadaf Ebrahimi                 local_pCreateInfo->renderPass = layer_data->Unwrap(pCreateInfo->renderPass);
2312*b7893ccfSSadaf Ebrahimi             }
2313*b7893ccfSSadaf Ebrahimi             if (local_pCreateInfo->pAttachments) {
2314*b7893ccfSSadaf Ebrahimi                 for (uint32_t index1 = 0; index1 < local_pCreateInfo->attachmentCount; ++index1) {
2315*b7893ccfSSadaf Ebrahimi                     local_pCreateInfo->pAttachments[index1] = layer_data->Unwrap(local_pCreateInfo->pAttachments[index1]);
2316*b7893ccfSSadaf Ebrahimi                 }
2317*b7893ccfSSadaf Ebrahimi             }
2318*b7893ccfSSadaf Ebrahimi         }
2319*b7893ccfSSadaf Ebrahimi     }
2320*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateFramebuffer(device, (const VkFramebufferCreateInfo*)local_pCreateInfo, pAllocator, pFramebuffer);
2321*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
2322*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
2323*b7893ccfSSadaf Ebrahimi     }
2324*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
2325*b7893ccfSSadaf Ebrahimi         *pFramebuffer = layer_data->WrapNew(*pFramebuffer);
2326*b7893ccfSSadaf Ebrahimi     }
2327*b7893ccfSSadaf Ebrahimi     return result;
2328*b7893ccfSSadaf Ebrahimi }
2329*b7893ccfSSadaf Ebrahimi 
DispatchDestroyFramebuffer(VkDevice device,VkFramebuffer framebuffer,const VkAllocationCallbacks * pAllocator)2330*b7893ccfSSadaf Ebrahimi void DispatchDestroyFramebuffer(
2331*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2332*b7893ccfSSadaf Ebrahimi     VkFramebuffer                               framebuffer,
2333*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
2334*b7893ccfSSadaf Ebrahimi {
2335*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2336*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyFramebuffer(device, framebuffer, pAllocator);
2337*b7893ccfSSadaf Ebrahimi     uint64_t framebuffer_id = reinterpret_cast<uint64_t &>(framebuffer);
2338*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(framebuffer_id);
2339*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
2340*b7893ccfSSadaf Ebrahimi         framebuffer = (VkFramebuffer)iter->second;
2341*b7893ccfSSadaf Ebrahimi     } else {
2342*b7893ccfSSadaf Ebrahimi         framebuffer = (VkFramebuffer)0;
2343*b7893ccfSSadaf Ebrahimi     }
2344*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyFramebuffer(device, framebuffer, pAllocator);
2345*b7893ccfSSadaf Ebrahimi 
2346*b7893ccfSSadaf Ebrahimi }
2347*b7893ccfSSadaf Ebrahimi 
2348*b7893ccfSSadaf Ebrahimi // Skip vkCreateRenderPass dispatch, manually generated
2349*b7893ccfSSadaf Ebrahimi 
2350*b7893ccfSSadaf Ebrahimi // Skip vkDestroyRenderPass dispatch, manually generated
2351*b7893ccfSSadaf Ebrahimi 
DispatchGetRenderAreaGranularity(VkDevice device,VkRenderPass renderPass,VkExtent2D * pGranularity)2352*b7893ccfSSadaf Ebrahimi void DispatchGetRenderAreaGranularity(
2353*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2354*b7893ccfSSadaf Ebrahimi     VkRenderPass                                renderPass,
2355*b7893ccfSSadaf Ebrahimi     VkExtent2D*                                 pGranularity)
2356*b7893ccfSSadaf Ebrahimi {
2357*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2358*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetRenderAreaGranularity(device, renderPass, pGranularity);
2359*b7893ccfSSadaf Ebrahimi     {
2360*b7893ccfSSadaf Ebrahimi         renderPass = layer_data->Unwrap(renderPass);
2361*b7893ccfSSadaf Ebrahimi     }
2362*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetRenderAreaGranularity(device, renderPass, pGranularity);
2363*b7893ccfSSadaf Ebrahimi 
2364*b7893ccfSSadaf Ebrahimi }
2365*b7893ccfSSadaf Ebrahimi 
DispatchCreateCommandPool(VkDevice device,const VkCommandPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkCommandPool * pCommandPool)2366*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateCommandPool(
2367*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2368*b7893ccfSSadaf Ebrahimi     const VkCommandPoolCreateInfo*              pCreateInfo,
2369*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
2370*b7893ccfSSadaf Ebrahimi     VkCommandPool*                              pCommandPool)
2371*b7893ccfSSadaf Ebrahimi {
2372*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2373*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
2374*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
2375*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
2376*b7893ccfSSadaf Ebrahimi         *pCommandPool = layer_data->WrapNew(*pCommandPool);
2377*b7893ccfSSadaf Ebrahimi     }
2378*b7893ccfSSadaf Ebrahimi     return result;
2379*b7893ccfSSadaf Ebrahimi }
2380*b7893ccfSSadaf Ebrahimi 
DispatchDestroyCommandPool(VkDevice device,VkCommandPool commandPool,const VkAllocationCallbacks * pAllocator)2381*b7893ccfSSadaf Ebrahimi void DispatchDestroyCommandPool(
2382*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2383*b7893ccfSSadaf Ebrahimi     VkCommandPool                               commandPool,
2384*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
2385*b7893ccfSSadaf Ebrahimi {
2386*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2387*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyCommandPool(device, commandPool, pAllocator);
2388*b7893ccfSSadaf Ebrahimi     uint64_t commandPool_id = reinterpret_cast<uint64_t &>(commandPool);
2389*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(commandPool_id);
2390*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
2391*b7893ccfSSadaf Ebrahimi         commandPool = (VkCommandPool)iter->second;
2392*b7893ccfSSadaf Ebrahimi     } else {
2393*b7893ccfSSadaf Ebrahimi         commandPool = (VkCommandPool)0;
2394*b7893ccfSSadaf Ebrahimi     }
2395*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyCommandPool(device, commandPool, pAllocator);
2396*b7893ccfSSadaf Ebrahimi 
2397*b7893ccfSSadaf Ebrahimi }
2398*b7893ccfSSadaf Ebrahimi 
DispatchResetCommandPool(VkDevice device,VkCommandPool commandPool,VkCommandPoolResetFlags flags)2399*b7893ccfSSadaf Ebrahimi VkResult DispatchResetCommandPool(
2400*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2401*b7893ccfSSadaf Ebrahimi     VkCommandPool                               commandPool,
2402*b7893ccfSSadaf Ebrahimi     VkCommandPoolResetFlags                     flags)
2403*b7893ccfSSadaf Ebrahimi {
2404*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2405*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.ResetCommandPool(device, commandPool, flags);
2406*b7893ccfSSadaf Ebrahimi     {
2407*b7893ccfSSadaf Ebrahimi         commandPool = layer_data->Unwrap(commandPool);
2408*b7893ccfSSadaf Ebrahimi     }
2409*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.ResetCommandPool(device, commandPool, flags);
2410*b7893ccfSSadaf Ebrahimi 
2411*b7893ccfSSadaf Ebrahimi     return result;
2412*b7893ccfSSadaf Ebrahimi }
2413*b7893ccfSSadaf Ebrahimi 
DispatchAllocateCommandBuffers(VkDevice device,const VkCommandBufferAllocateInfo * pAllocateInfo,VkCommandBuffer * pCommandBuffers)2414*b7893ccfSSadaf Ebrahimi VkResult DispatchAllocateCommandBuffers(
2415*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2416*b7893ccfSSadaf Ebrahimi     const VkCommandBufferAllocateInfo*          pAllocateInfo,
2417*b7893ccfSSadaf Ebrahimi     VkCommandBuffer*                            pCommandBuffers)
2418*b7893ccfSSadaf Ebrahimi {
2419*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2420*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
2421*b7893ccfSSadaf Ebrahimi     safe_VkCommandBufferAllocateInfo *local_pAllocateInfo = NULL;
2422*b7893ccfSSadaf Ebrahimi     {
2423*b7893ccfSSadaf Ebrahimi         if (pAllocateInfo) {
2424*b7893ccfSSadaf Ebrahimi             local_pAllocateInfo = new safe_VkCommandBufferAllocateInfo(pAllocateInfo);
2425*b7893ccfSSadaf Ebrahimi             if (pAllocateInfo->commandPool) {
2426*b7893ccfSSadaf Ebrahimi                 local_pAllocateInfo->commandPool = layer_data->Unwrap(pAllocateInfo->commandPool);
2427*b7893ccfSSadaf Ebrahimi             }
2428*b7893ccfSSadaf Ebrahimi         }
2429*b7893ccfSSadaf Ebrahimi     }
2430*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.AllocateCommandBuffers(device, (const VkCommandBufferAllocateInfo*)local_pAllocateInfo, pCommandBuffers);
2431*b7893ccfSSadaf Ebrahimi     if (local_pAllocateInfo) {
2432*b7893ccfSSadaf Ebrahimi         delete local_pAllocateInfo;
2433*b7893ccfSSadaf Ebrahimi     }
2434*b7893ccfSSadaf Ebrahimi     return result;
2435*b7893ccfSSadaf Ebrahimi }
2436*b7893ccfSSadaf Ebrahimi 
DispatchFreeCommandBuffers(VkDevice device,VkCommandPool commandPool,uint32_t commandBufferCount,const VkCommandBuffer * pCommandBuffers)2437*b7893ccfSSadaf Ebrahimi void DispatchFreeCommandBuffers(
2438*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
2439*b7893ccfSSadaf Ebrahimi     VkCommandPool                               commandPool,
2440*b7893ccfSSadaf Ebrahimi     uint32_t                                    commandBufferCount,
2441*b7893ccfSSadaf Ebrahimi     const VkCommandBuffer*                      pCommandBuffers)
2442*b7893ccfSSadaf Ebrahimi {
2443*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
2444*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
2445*b7893ccfSSadaf Ebrahimi     {
2446*b7893ccfSSadaf Ebrahimi         commandPool = layer_data->Unwrap(commandPool);
2447*b7893ccfSSadaf Ebrahimi     }
2448*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers);
2449*b7893ccfSSadaf Ebrahimi 
2450*b7893ccfSSadaf Ebrahimi }
2451*b7893ccfSSadaf Ebrahimi 
DispatchBeginCommandBuffer(VkCommandBuffer commandBuffer,const VkCommandBufferBeginInfo * pBeginInfo)2452*b7893ccfSSadaf Ebrahimi VkResult DispatchBeginCommandBuffer(
2453*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2454*b7893ccfSSadaf Ebrahimi     const VkCommandBufferBeginInfo*             pBeginInfo)
2455*b7893ccfSSadaf Ebrahimi {
2456*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2457*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.BeginCommandBuffer(commandBuffer, pBeginInfo);
2458*b7893ccfSSadaf Ebrahimi     safe_VkCommandBufferBeginInfo *local_pBeginInfo = NULL;
2459*b7893ccfSSadaf Ebrahimi     {
2460*b7893ccfSSadaf Ebrahimi         if (pBeginInfo) {
2461*b7893ccfSSadaf Ebrahimi             local_pBeginInfo = new safe_VkCommandBufferBeginInfo(pBeginInfo);
2462*b7893ccfSSadaf Ebrahimi             if (local_pBeginInfo->pInheritanceInfo) {
2463*b7893ccfSSadaf Ebrahimi                 if (pBeginInfo->pInheritanceInfo->renderPass) {
2464*b7893ccfSSadaf Ebrahimi                     local_pBeginInfo->pInheritanceInfo->renderPass = layer_data->Unwrap(pBeginInfo->pInheritanceInfo->renderPass);
2465*b7893ccfSSadaf Ebrahimi                 }
2466*b7893ccfSSadaf Ebrahimi                 if (pBeginInfo->pInheritanceInfo->framebuffer) {
2467*b7893ccfSSadaf Ebrahimi                     local_pBeginInfo->pInheritanceInfo->framebuffer = layer_data->Unwrap(pBeginInfo->pInheritanceInfo->framebuffer);
2468*b7893ccfSSadaf Ebrahimi                 }
2469*b7893ccfSSadaf Ebrahimi             }
2470*b7893ccfSSadaf Ebrahimi         }
2471*b7893ccfSSadaf Ebrahimi     }
2472*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.BeginCommandBuffer(commandBuffer, (const VkCommandBufferBeginInfo*)local_pBeginInfo);
2473*b7893ccfSSadaf Ebrahimi     if (local_pBeginInfo) {
2474*b7893ccfSSadaf Ebrahimi         delete local_pBeginInfo;
2475*b7893ccfSSadaf Ebrahimi     }
2476*b7893ccfSSadaf Ebrahimi     return result;
2477*b7893ccfSSadaf Ebrahimi }
2478*b7893ccfSSadaf Ebrahimi 
DispatchEndCommandBuffer(VkCommandBuffer commandBuffer)2479*b7893ccfSSadaf Ebrahimi VkResult DispatchEndCommandBuffer(
2480*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer)
2481*b7893ccfSSadaf Ebrahimi {
2482*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2483*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.EndCommandBuffer(commandBuffer);
2484*b7893ccfSSadaf Ebrahimi 
2485*b7893ccfSSadaf Ebrahimi     return result;
2486*b7893ccfSSadaf Ebrahimi }
2487*b7893ccfSSadaf Ebrahimi 
DispatchResetCommandBuffer(VkCommandBuffer commandBuffer,VkCommandBufferResetFlags flags)2488*b7893ccfSSadaf Ebrahimi VkResult DispatchResetCommandBuffer(
2489*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2490*b7893ccfSSadaf Ebrahimi     VkCommandBufferResetFlags                   flags)
2491*b7893ccfSSadaf Ebrahimi {
2492*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2493*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.ResetCommandBuffer(commandBuffer, flags);
2494*b7893ccfSSadaf Ebrahimi 
2495*b7893ccfSSadaf Ebrahimi     return result;
2496*b7893ccfSSadaf Ebrahimi }
2497*b7893ccfSSadaf Ebrahimi 
DispatchCmdBindPipeline(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipeline pipeline)2498*b7893ccfSSadaf Ebrahimi void DispatchCmdBindPipeline(
2499*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2500*b7893ccfSSadaf Ebrahimi     VkPipelineBindPoint                         pipelineBindPoint,
2501*b7893ccfSSadaf Ebrahimi     VkPipeline                                  pipeline)
2502*b7893ccfSSadaf Ebrahimi {
2503*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2504*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
2505*b7893ccfSSadaf Ebrahimi     {
2506*b7893ccfSSadaf Ebrahimi         pipeline = layer_data->Unwrap(pipeline);
2507*b7893ccfSSadaf Ebrahimi     }
2508*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
2509*b7893ccfSSadaf Ebrahimi 
2510*b7893ccfSSadaf Ebrahimi }
2511*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetViewport(VkCommandBuffer commandBuffer,uint32_t firstViewport,uint32_t viewportCount,const VkViewport * pViewports)2512*b7893ccfSSadaf Ebrahimi void DispatchCmdSetViewport(
2513*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2514*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstViewport,
2515*b7893ccfSSadaf Ebrahimi     uint32_t                                    viewportCount,
2516*b7893ccfSSadaf Ebrahimi     const VkViewport*                           pViewports)
2517*b7893ccfSSadaf Ebrahimi {
2518*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2519*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
2520*b7893ccfSSadaf Ebrahimi 
2521*b7893ccfSSadaf Ebrahimi }
2522*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetScissor(VkCommandBuffer commandBuffer,uint32_t firstScissor,uint32_t scissorCount,const VkRect2D * pScissors)2523*b7893ccfSSadaf Ebrahimi void DispatchCmdSetScissor(
2524*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2525*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstScissor,
2526*b7893ccfSSadaf Ebrahimi     uint32_t                                    scissorCount,
2527*b7893ccfSSadaf Ebrahimi     const VkRect2D*                             pScissors)
2528*b7893ccfSSadaf Ebrahimi {
2529*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2530*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
2531*b7893ccfSSadaf Ebrahimi 
2532*b7893ccfSSadaf Ebrahimi }
2533*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetLineWidth(VkCommandBuffer commandBuffer,float lineWidth)2534*b7893ccfSSadaf Ebrahimi void DispatchCmdSetLineWidth(
2535*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2536*b7893ccfSSadaf Ebrahimi     float                                       lineWidth)
2537*b7893ccfSSadaf Ebrahimi {
2538*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2539*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetLineWidth(commandBuffer, lineWidth);
2540*b7893ccfSSadaf Ebrahimi 
2541*b7893ccfSSadaf Ebrahimi }
2542*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetDepthBias(VkCommandBuffer commandBuffer,float depthBiasConstantFactor,float depthBiasClamp,float depthBiasSlopeFactor)2543*b7893ccfSSadaf Ebrahimi void DispatchCmdSetDepthBias(
2544*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2545*b7893ccfSSadaf Ebrahimi     float                                       depthBiasConstantFactor,
2546*b7893ccfSSadaf Ebrahimi     float                                       depthBiasClamp,
2547*b7893ccfSSadaf Ebrahimi     float                                       depthBiasSlopeFactor)
2548*b7893ccfSSadaf Ebrahimi {
2549*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2550*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
2551*b7893ccfSSadaf Ebrahimi 
2552*b7893ccfSSadaf Ebrahimi }
2553*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetBlendConstants(VkCommandBuffer commandBuffer,const float blendConstants[4])2554*b7893ccfSSadaf Ebrahimi void DispatchCmdSetBlendConstants(
2555*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2556*b7893ccfSSadaf Ebrahimi     const float                                 blendConstants[4])
2557*b7893ccfSSadaf Ebrahimi {
2558*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2559*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetBlendConstants(commandBuffer, blendConstants);
2560*b7893ccfSSadaf Ebrahimi 
2561*b7893ccfSSadaf Ebrahimi }
2562*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetDepthBounds(VkCommandBuffer commandBuffer,float minDepthBounds,float maxDepthBounds)2563*b7893ccfSSadaf Ebrahimi void DispatchCmdSetDepthBounds(
2564*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2565*b7893ccfSSadaf Ebrahimi     float                                       minDepthBounds,
2566*b7893ccfSSadaf Ebrahimi     float                                       maxDepthBounds)
2567*b7893ccfSSadaf Ebrahimi {
2568*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2569*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
2570*b7893ccfSSadaf Ebrahimi 
2571*b7893ccfSSadaf Ebrahimi }
2572*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetStencilCompareMask(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t compareMask)2573*b7893ccfSSadaf Ebrahimi void DispatchCmdSetStencilCompareMask(
2574*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2575*b7893ccfSSadaf Ebrahimi     VkStencilFaceFlags                          faceMask,
2576*b7893ccfSSadaf Ebrahimi     uint32_t                                    compareMask)
2577*b7893ccfSSadaf Ebrahimi {
2578*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2579*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
2580*b7893ccfSSadaf Ebrahimi 
2581*b7893ccfSSadaf Ebrahimi }
2582*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetStencilWriteMask(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t writeMask)2583*b7893ccfSSadaf Ebrahimi void DispatchCmdSetStencilWriteMask(
2584*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2585*b7893ccfSSadaf Ebrahimi     VkStencilFaceFlags                          faceMask,
2586*b7893ccfSSadaf Ebrahimi     uint32_t                                    writeMask)
2587*b7893ccfSSadaf Ebrahimi {
2588*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2589*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
2590*b7893ccfSSadaf Ebrahimi 
2591*b7893ccfSSadaf Ebrahimi }
2592*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetStencilReference(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t reference)2593*b7893ccfSSadaf Ebrahimi void DispatchCmdSetStencilReference(
2594*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2595*b7893ccfSSadaf Ebrahimi     VkStencilFaceFlags                          faceMask,
2596*b7893ccfSSadaf Ebrahimi     uint32_t                                    reference)
2597*b7893ccfSSadaf Ebrahimi {
2598*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2599*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetStencilReference(commandBuffer, faceMask, reference);
2600*b7893ccfSSadaf Ebrahimi 
2601*b7893ccfSSadaf Ebrahimi }
2602*b7893ccfSSadaf Ebrahimi 
DispatchCmdBindDescriptorSets(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipelineLayout layout,uint32_t firstSet,uint32_t descriptorSetCount,const VkDescriptorSet * pDescriptorSets,uint32_t dynamicOffsetCount,const uint32_t * pDynamicOffsets)2603*b7893ccfSSadaf Ebrahimi void DispatchCmdBindDescriptorSets(
2604*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2605*b7893ccfSSadaf Ebrahimi     VkPipelineBindPoint                         pipelineBindPoint,
2606*b7893ccfSSadaf Ebrahimi     VkPipelineLayout                            layout,
2607*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstSet,
2608*b7893ccfSSadaf Ebrahimi     uint32_t                                    descriptorSetCount,
2609*b7893ccfSSadaf Ebrahimi     const VkDescriptorSet*                      pDescriptorSets,
2610*b7893ccfSSadaf Ebrahimi     uint32_t                                    dynamicOffsetCount,
2611*b7893ccfSSadaf Ebrahimi     const uint32_t*                             pDynamicOffsets)
2612*b7893ccfSSadaf Ebrahimi {
2613*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2614*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
2615*b7893ccfSSadaf Ebrahimi     VkDescriptorSet *local_pDescriptorSets = NULL;
2616*b7893ccfSSadaf Ebrahimi     {
2617*b7893ccfSSadaf Ebrahimi         layout = layer_data->Unwrap(layout);
2618*b7893ccfSSadaf Ebrahimi         if (pDescriptorSets) {
2619*b7893ccfSSadaf Ebrahimi             local_pDescriptorSets = new VkDescriptorSet[descriptorSetCount];
2620*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < descriptorSetCount; ++index0) {
2621*b7893ccfSSadaf Ebrahimi                 local_pDescriptorSets[index0] = layer_data->Unwrap(pDescriptorSets[index0]);
2622*b7893ccfSSadaf Ebrahimi             }
2623*b7893ccfSSadaf Ebrahimi         }
2624*b7893ccfSSadaf Ebrahimi     }
2625*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, (const VkDescriptorSet*)local_pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
2626*b7893ccfSSadaf Ebrahimi     if (local_pDescriptorSets)
2627*b7893ccfSSadaf Ebrahimi         delete[] local_pDescriptorSets;
2628*b7893ccfSSadaf Ebrahimi }
2629*b7893ccfSSadaf Ebrahimi 
DispatchCmdBindIndexBuffer(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkIndexType indexType)2630*b7893ccfSSadaf Ebrahimi void DispatchCmdBindIndexBuffer(
2631*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2632*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
2633*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
2634*b7893ccfSSadaf Ebrahimi     VkIndexType                                 indexType)
2635*b7893ccfSSadaf Ebrahimi {
2636*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2637*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
2638*b7893ccfSSadaf Ebrahimi     {
2639*b7893ccfSSadaf Ebrahimi         buffer = layer_data->Unwrap(buffer);
2640*b7893ccfSSadaf Ebrahimi     }
2641*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
2642*b7893ccfSSadaf Ebrahimi 
2643*b7893ccfSSadaf Ebrahimi }
2644*b7893ccfSSadaf Ebrahimi 
DispatchCmdBindVertexBuffers(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const VkBuffer * pBuffers,const VkDeviceSize * pOffsets)2645*b7893ccfSSadaf Ebrahimi void DispatchCmdBindVertexBuffers(
2646*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2647*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstBinding,
2648*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindingCount,
2649*b7893ccfSSadaf Ebrahimi     const VkBuffer*                             pBuffers,
2650*b7893ccfSSadaf Ebrahimi     const VkDeviceSize*                         pOffsets)
2651*b7893ccfSSadaf Ebrahimi {
2652*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2653*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
2654*b7893ccfSSadaf Ebrahimi     VkBuffer *local_pBuffers = NULL;
2655*b7893ccfSSadaf Ebrahimi     {
2656*b7893ccfSSadaf Ebrahimi         if (pBuffers) {
2657*b7893ccfSSadaf Ebrahimi             local_pBuffers = new VkBuffer[bindingCount];
2658*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < bindingCount; ++index0) {
2659*b7893ccfSSadaf Ebrahimi                 local_pBuffers[index0] = layer_data->Unwrap(pBuffers[index0]);
2660*b7893ccfSSadaf Ebrahimi             }
2661*b7893ccfSSadaf Ebrahimi         }
2662*b7893ccfSSadaf Ebrahimi     }
2663*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, (const VkBuffer*)local_pBuffers, pOffsets);
2664*b7893ccfSSadaf Ebrahimi     if (local_pBuffers)
2665*b7893ccfSSadaf Ebrahimi         delete[] local_pBuffers;
2666*b7893ccfSSadaf Ebrahimi }
2667*b7893ccfSSadaf Ebrahimi 
DispatchCmdDraw(VkCommandBuffer commandBuffer,uint32_t vertexCount,uint32_t instanceCount,uint32_t firstVertex,uint32_t firstInstance)2668*b7893ccfSSadaf Ebrahimi void DispatchCmdDraw(
2669*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2670*b7893ccfSSadaf Ebrahimi     uint32_t                                    vertexCount,
2671*b7893ccfSSadaf Ebrahimi     uint32_t                                    instanceCount,
2672*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstVertex,
2673*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstInstance)
2674*b7893ccfSSadaf Ebrahimi {
2675*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2676*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
2677*b7893ccfSSadaf Ebrahimi 
2678*b7893ccfSSadaf Ebrahimi }
2679*b7893ccfSSadaf Ebrahimi 
DispatchCmdDrawIndexed(VkCommandBuffer commandBuffer,uint32_t indexCount,uint32_t instanceCount,uint32_t firstIndex,int32_t vertexOffset,uint32_t firstInstance)2680*b7893ccfSSadaf Ebrahimi void DispatchCmdDrawIndexed(
2681*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2682*b7893ccfSSadaf Ebrahimi     uint32_t                                    indexCount,
2683*b7893ccfSSadaf Ebrahimi     uint32_t                                    instanceCount,
2684*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstIndex,
2685*b7893ccfSSadaf Ebrahimi     int32_t                                     vertexOffset,
2686*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstInstance)
2687*b7893ccfSSadaf Ebrahimi {
2688*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2689*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
2690*b7893ccfSSadaf Ebrahimi 
2691*b7893ccfSSadaf Ebrahimi }
2692*b7893ccfSSadaf Ebrahimi 
DispatchCmdDrawIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride)2693*b7893ccfSSadaf Ebrahimi void DispatchCmdDrawIndirect(
2694*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2695*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
2696*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
2697*b7893ccfSSadaf Ebrahimi     uint32_t                                    drawCount,
2698*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride)
2699*b7893ccfSSadaf Ebrahimi {
2700*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2701*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
2702*b7893ccfSSadaf Ebrahimi     {
2703*b7893ccfSSadaf Ebrahimi         buffer = layer_data->Unwrap(buffer);
2704*b7893ccfSSadaf Ebrahimi     }
2705*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride);
2706*b7893ccfSSadaf Ebrahimi 
2707*b7893ccfSSadaf Ebrahimi }
2708*b7893ccfSSadaf Ebrahimi 
DispatchCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride)2709*b7893ccfSSadaf Ebrahimi void DispatchCmdDrawIndexedIndirect(
2710*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2711*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
2712*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
2713*b7893ccfSSadaf Ebrahimi     uint32_t                                    drawCount,
2714*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride)
2715*b7893ccfSSadaf Ebrahimi {
2716*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2717*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
2718*b7893ccfSSadaf Ebrahimi     {
2719*b7893ccfSSadaf Ebrahimi         buffer = layer_data->Unwrap(buffer);
2720*b7893ccfSSadaf Ebrahimi     }
2721*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride);
2722*b7893ccfSSadaf Ebrahimi 
2723*b7893ccfSSadaf Ebrahimi }
2724*b7893ccfSSadaf Ebrahimi 
DispatchCmdDispatch(VkCommandBuffer commandBuffer,uint32_t groupCountX,uint32_t groupCountY,uint32_t groupCountZ)2725*b7893ccfSSadaf Ebrahimi void DispatchCmdDispatch(
2726*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2727*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountX,
2728*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountY,
2729*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountZ)
2730*b7893ccfSSadaf Ebrahimi {
2731*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2732*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDispatch(commandBuffer, groupCountX, groupCountY, groupCountZ);
2733*b7893ccfSSadaf Ebrahimi 
2734*b7893ccfSSadaf Ebrahimi }
2735*b7893ccfSSadaf Ebrahimi 
DispatchCmdDispatchIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset)2736*b7893ccfSSadaf Ebrahimi void DispatchCmdDispatchIndirect(
2737*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2738*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
2739*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset)
2740*b7893ccfSSadaf Ebrahimi {
2741*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2742*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdDispatchIndirect(commandBuffer, buffer, offset);
2743*b7893ccfSSadaf Ebrahimi     {
2744*b7893ccfSSadaf Ebrahimi         buffer = layer_data->Unwrap(buffer);
2745*b7893ccfSSadaf Ebrahimi     }
2746*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDispatchIndirect(commandBuffer, buffer, offset);
2747*b7893ccfSSadaf Ebrahimi 
2748*b7893ccfSSadaf Ebrahimi }
2749*b7893ccfSSadaf Ebrahimi 
DispatchCmdCopyBuffer(VkCommandBuffer commandBuffer,VkBuffer srcBuffer,VkBuffer dstBuffer,uint32_t regionCount,const VkBufferCopy * pRegions)2750*b7893ccfSSadaf Ebrahimi void DispatchCmdCopyBuffer(
2751*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2752*b7893ccfSSadaf Ebrahimi     VkBuffer                                    srcBuffer,
2753*b7893ccfSSadaf Ebrahimi     VkBuffer                                    dstBuffer,
2754*b7893ccfSSadaf Ebrahimi     uint32_t                                    regionCount,
2755*b7893ccfSSadaf Ebrahimi     const VkBufferCopy*                         pRegions)
2756*b7893ccfSSadaf Ebrahimi {
2757*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2758*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
2759*b7893ccfSSadaf Ebrahimi     {
2760*b7893ccfSSadaf Ebrahimi         srcBuffer = layer_data->Unwrap(srcBuffer);
2761*b7893ccfSSadaf Ebrahimi         dstBuffer = layer_data->Unwrap(dstBuffer);
2762*b7893ccfSSadaf Ebrahimi     }
2763*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
2764*b7893ccfSSadaf Ebrahimi 
2765*b7893ccfSSadaf Ebrahimi }
2766*b7893ccfSSadaf Ebrahimi 
DispatchCmdCopyImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageCopy * pRegions)2767*b7893ccfSSadaf Ebrahimi void DispatchCmdCopyImage(
2768*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2769*b7893ccfSSadaf Ebrahimi     VkImage                                     srcImage,
2770*b7893ccfSSadaf Ebrahimi     VkImageLayout                               srcImageLayout,
2771*b7893ccfSSadaf Ebrahimi     VkImage                                     dstImage,
2772*b7893ccfSSadaf Ebrahimi     VkImageLayout                               dstImageLayout,
2773*b7893ccfSSadaf Ebrahimi     uint32_t                                    regionCount,
2774*b7893ccfSSadaf Ebrahimi     const VkImageCopy*                          pRegions)
2775*b7893ccfSSadaf Ebrahimi {
2776*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2777*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
2778*b7893ccfSSadaf Ebrahimi     {
2779*b7893ccfSSadaf Ebrahimi         srcImage = layer_data->Unwrap(srcImage);
2780*b7893ccfSSadaf Ebrahimi         dstImage = layer_data->Unwrap(dstImage);
2781*b7893ccfSSadaf Ebrahimi     }
2782*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
2783*b7893ccfSSadaf Ebrahimi 
2784*b7893ccfSSadaf Ebrahimi }
2785*b7893ccfSSadaf Ebrahimi 
DispatchCmdBlitImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageBlit * pRegions,VkFilter filter)2786*b7893ccfSSadaf Ebrahimi void DispatchCmdBlitImage(
2787*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2788*b7893ccfSSadaf Ebrahimi     VkImage                                     srcImage,
2789*b7893ccfSSadaf Ebrahimi     VkImageLayout                               srcImageLayout,
2790*b7893ccfSSadaf Ebrahimi     VkImage                                     dstImage,
2791*b7893ccfSSadaf Ebrahimi     VkImageLayout                               dstImageLayout,
2792*b7893ccfSSadaf Ebrahimi     uint32_t                                    regionCount,
2793*b7893ccfSSadaf Ebrahimi     const VkImageBlit*                          pRegions,
2794*b7893ccfSSadaf Ebrahimi     VkFilter                                    filter)
2795*b7893ccfSSadaf Ebrahimi {
2796*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2797*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
2798*b7893ccfSSadaf Ebrahimi     {
2799*b7893ccfSSadaf Ebrahimi         srcImage = layer_data->Unwrap(srcImage);
2800*b7893ccfSSadaf Ebrahimi         dstImage = layer_data->Unwrap(dstImage);
2801*b7893ccfSSadaf Ebrahimi     }
2802*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
2803*b7893ccfSSadaf Ebrahimi 
2804*b7893ccfSSadaf Ebrahimi }
2805*b7893ccfSSadaf Ebrahimi 
DispatchCmdCopyBufferToImage(VkCommandBuffer commandBuffer,VkBuffer srcBuffer,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkBufferImageCopy * pRegions)2806*b7893ccfSSadaf Ebrahimi void DispatchCmdCopyBufferToImage(
2807*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2808*b7893ccfSSadaf Ebrahimi     VkBuffer                                    srcBuffer,
2809*b7893ccfSSadaf Ebrahimi     VkImage                                     dstImage,
2810*b7893ccfSSadaf Ebrahimi     VkImageLayout                               dstImageLayout,
2811*b7893ccfSSadaf Ebrahimi     uint32_t                                    regionCount,
2812*b7893ccfSSadaf Ebrahimi     const VkBufferImageCopy*                    pRegions)
2813*b7893ccfSSadaf Ebrahimi {
2814*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2815*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
2816*b7893ccfSSadaf Ebrahimi     {
2817*b7893ccfSSadaf Ebrahimi         srcBuffer = layer_data->Unwrap(srcBuffer);
2818*b7893ccfSSadaf Ebrahimi         dstImage = layer_data->Unwrap(dstImage);
2819*b7893ccfSSadaf Ebrahimi     }
2820*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
2821*b7893ccfSSadaf Ebrahimi 
2822*b7893ccfSSadaf Ebrahimi }
2823*b7893ccfSSadaf Ebrahimi 
DispatchCmdCopyImageToBuffer(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkBuffer dstBuffer,uint32_t regionCount,const VkBufferImageCopy * pRegions)2824*b7893ccfSSadaf Ebrahimi void DispatchCmdCopyImageToBuffer(
2825*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2826*b7893ccfSSadaf Ebrahimi     VkImage                                     srcImage,
2827*b7893ccfSSadaf Ebrahimi     VkImageLayout                               srcImageLayout,
2828*b7893ccfSSadaf Ebrahimi     VkBuffer                                    dstBuffer,
2829*b7893ccfSSadaf Ebrahimi     uint32_t                                    regionCount,
2830*b7893ccfSSadaf Ebrahimi     const VkBufferImageCopy*                    pRegions)
2831*b7893ccfSSadaf Ebrahimi {
2832*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2833*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
2834*b7893ccfSSadaf Ebrahimi     {
2835*b7893ccfSSadaf Ebrahimi         srcImage = layer_data->Unwrap(srcImage);
2836*b7893ccfSSadaf Ebrahimi         dstBuffer = layer_data->Unwrap(dstBuffer);
2837*b7893ccfSSadaf Ebrahimi     }
2838*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
2839*b7893ccfSSadaf Ebrahimi 
2840*b7893ccfSSadaf Ebrahimi }
2841*b7893ccfSSadaf Ebrahimi 
DispatchCmdUpdateBuffer(VkCommandBuffer commandBuffer,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize dataSize,const void * pData)2842*b7893ccfSSadaf Ebrahimi void DispatchCmdUpdateBuffer(
2843*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2844*b7893ccfSSadaf Ebrahimi     VkBuffer                                    dstBuffer,
2845*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                dstOffset,
2846*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                dataSize,
2847*b7893ccfSSadaf Ebrahimi     const void*                                 pData)
2848*b7893ccfSSadaf Ebrahimi {
2849*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2850*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
2851*b7893ccfSSadaf Ebrahimi     {
2852*b7893ccfSSadaf Ebrahimi         dstBuffer = layer_data->Unwrap(dstBuffer);
2853*b7893ccfSSadaf Ebrahimi     }
2854*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
2855*b7893ccfSSadaf Ebrahimi 
2856*b7893ccfSSadaf Ebrahimi }
2857*b7893ccfSSadaf Ebrahimi 
DispatchCmdFillBuffer(VkCommandBuffer commandBuffer,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize size,uint32_t data)2858*b7893ccfSSadaf Ebrahimi void DispatchCmdFillBuffer(
2859*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2860*b7893ccfSSadaf Ebrahimi     VkBuffer                                    dstBuffer,
2861*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                dstOffset,
2862*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                size,
2863*b7893ccfSSadaf Ebrahimi     uint32_t                                    data)
2864*b7893ccfSSadaf Ebrahimi {
2865*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2866*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
2867*b7893ccfSSadaf Ebrahimi     {
2868*b7893ccfSSadaf Ebrahimi         dstBuffer = layer_data->Unwrap(dstBuffer);
2869*b7893ccfSSadaf Ebrahimi     }
2870*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
2871*b7893ccfSSadaf Ebrahimi 
2872*b7893ccfSSadaf Ebrahimi }
2873*b7893ccfSSadaf Ebrahimi 
DispatchCmdClearColorImage(VkCommandBuffer commandBuffer,VkImage image,VkImageLayout imageLayout,const VkClearColorValue * pColor,uint32_t rangeCount,const VkImageSubresourceRange * pRanges)2874*b7893ccfSSadaf Ebrahimi void DispatchCmdClearColorImage(
2875*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2876*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
2877*b7893ccfSSadaf Ebrahimi     VkImageLayout                               imageLayout,
2878*b7893ccfSSadaf Ebrahimi     const VkClearColorValue*                    pColor,
2879*b7893ccfSSadaf Ebrahimi     uint32_t                                    rangeCount,
2880*b7893ccfSSadaf Ebrahimi     const VkImageSubresourceRange*              pRanges)
2881*b7893ccfSSadaf Ebrahimi {
2882*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2883*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
2884*b7893ccfSSadaf Ebrahimi     {
2885*b7893ccfSSadaf Ebrahimi         image = layer_data->Unwrap(image);
2886*b7893ccfSSadaf Ebrahimi     }
2887*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
2888*b7893ccfSSadaf Ebrahimi 
2889*b7893ccfSSadaf Ebrahimi }
2890*b7893ccfSSadaf Ebrahimi 
DispatchCmdClearDepthStencilImage(VkCommandBuffer commandBuffer,VkImage image,VkImageLayout imageLayout,const VkClearDepthStencilValue * pDepthStencil,uint32_t rangeCount,const VkImageSubresourceRange * pRanges)2891*b7893ccfSSadaf Ebrahimi void DispatchCmdClearDepthStencilImage(
2892*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2893*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
2894*b7893ccfSSadaf Ebrahimi     VkImageLayout                               imageLayout,
2895*b7893ccfSSadaf Ebrahimi     const VkClearDepthStencilValue*             pDepthStencil,
2896*b7893ccfSSadaf Ebrahimi     uint32_t                                    rangeCount,
2897*b7893ccfSSadaf Ebrahimi     const VkImageSubresourceRange*              pRanges)
2898*b7893ccfSSadaf Ebrahimi {
2899*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2900*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
2901*b7893ccfSSadaf Ebrahimi     {
2902*b7893ccfSSadaf Ebrahimi         image = layer_data->Unwrap(image);
2903*b7893ccfSSadaf Ebrahimi     }
2904*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
2905*b7893ccfSSadaf Ebrahimi 
2906*b7893ccfSSadaf Ebrahimi }
2907*b7893ccfSSadaf Ebrahimi 
DispatchCmdClearAttachments(VkCommandBuffer commandBuffer,uint32_t attachmentCount,const VkClearAttachment * pAttachments,uint32_t rectCount,const VkClearRect * pRects)2908*b7893ccfSSadaf Ebrahimi void DispatchCmdClearAttachments(
2909*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2910*b7893ccfSSadaf Ebrahimi     uint32_t                                    attachmentCount,
2911*b7893ccfSSadaf Ebrahimi     const VkClearAttachment*                    pAttachments,
2912*b7893ccfSSadaf Ebrahimi     uint32_t                                    rectCount,
2913*b7893ccfSSadaf Ebrahimi     const VkClearRect*                          pRects)
2914*b7893ccfSSadaf Ebrahimi {
2915*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2916*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
2917*b7893ccfSSadaf Ebrahimi 
2918*b7893ccfSSadaf Ebrahimi }
2919*b7893ccfSSadaf Ebrahimi 
DispatchCmdResolveImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageResolve * pRegions)2920*b7893ccfSSadaf Ebrahimi void DispatchCmdResolveImage(
2921*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2922*b7893ccfSSadaf Ebrahimi     VkImage                                     srcImage,
2923*b7893ccfSSadaf Ebrahimi     VkImageLayout                               srcImageLayout,
2924*b7893ccfSSadaf Ebrahimi     VkImage                                     dstImage,
2925*b7893ccfSSadaf Ebrahimi     VkImageLayout                               dstImageLayout,
2926*b7893ccfSSadaf Ebrahimi     uint32_t                                    regionCount,
2927*b7893ccfSSadaf Ebrahimi     const VkImageResolve*                       pRegions)
2928*b7893ccfSSadaf Ebrahimi {
2929*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2930*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
2931*b7893ccfSSadaf Ebrahimi     {
2932*b7893ccfSSadaf Ebrahimi         srcImage = layer_data->Unwrap(srcImage);
2933*b7893ccfSSadaf Ebrahimi         dstImage = layer_data->Unwrap(dstImage);
2934*b7893ccfSSadaf Ebrahimi     }
2935*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
2936*b7893ccfSSadaf Ebrahimi 
2937*b7893ccfSSadaf Ebrahimi }
2938*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetEvent(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags stageMask)2939*b7893ccfSSadaf Ebrahimi void DispatchCmdSetEvent(
2940*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2941*b7893ccfSSadaf Ebrahimi     VkEvent                                     event,
2942*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlags                        stageMask)
2943*b7893ccfSSadaf Ebrahimi {
2944*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2945*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdSetEvent(commandBuffer, event, stageMask);
2946*b7893ccfSSadaf Ebrahimi     {
2947*b7893ccfSSadaf Ebrahimi         event = layer_data->Unwrap(event);
2948*b7893ccfSSadaf Ebrahimi     }
2949*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetEvent(commandBuffer, event, stageMask);
2950*b7893ccfSSadaf Ebrahimi 
2951*b7893ccfSSadaf Ebrahimi }
2952*b7893ccfSSadaf Ebrahimi 
DispatchCmdResetEvent(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags stageMask)2953*b7893ccfSSadaf Ebrahimi void DispatchCmdResetEvent(
2954*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2955*b7893ccfSSadaf Ebrahimi     VkEvent                                     event,
2956*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlags                        stageMask)
2957*b7893ccfSSadaf Ebrahimi {
2958*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2959*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdResetEvent(commandBuffer, event, stageMask);
2960*b7893ccfSSadaf Ebrahimi     {
2961*b7893ccfSSadaf Ebrahimi         event = layer_data->Unwrap(event);
2962*b7893ccfSSadaf Ebrahimi     }
2963*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdResetEvent(commandBuffer, event, stageMask);
2964*b7893ccfSSadaf Ebrahimi 
2965*b7893ccfSSadaf Ebrahimi }
2966*b7893ccfSSadaf Ebrahimi 
DispatchCmdWaitEvents(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)2967*b7893ccfSSadaf Ebrahimi void DispatchCmdWaitEvents(
2968*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
2969*b7893ccfSSadaf Ebrahimi     uint32_t                                    eventCount,
2970*b7893ccfSSadaf Ebrahimi     const VkEvent*                              pEvents,
2971*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlags                        srcStageMask,
2972*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlags                        dstStageMask,
2973*b7893ccfSSadaf Ebrahimi     uint32_t                                    memoryBarrierCount,
2974*b7893ccfSSadaf Ebrahimi     const VkMemoryBarrier*                      pMemoryBarriers,
2975*b7893ccfSSadaf Ebrahimi     uint32_t                                    bufferMemoryBarrierCount,
2976*b7893ccfSSadaf Ebrahimi     const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
2977*b7893ccfSSadaf Ebrahimi     uint32_t                                    imageMemoryBarrierCount,
2978*b7893ccfSSadaf Ebrahimi     const VkImageMemoryBarrier*                 pImageMemoryBarriers)
2979*b7893ccfSSadaf Ebrahimi {
2980*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
2981*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
2982*b7893ccfSSadaf Ebrahimi     VkEvent *local_pEvents = NULL;
2983*b7893ccfSSadaf Ebrahimi     safe_VkBufferMemoryBarrier *local_pBufferMemoryBarriers = NULL;
2984*b7893ccfSSadaf Ebrahimi     safe_VkImageMemoryBarrier *local_pImageMemoryBarriers = NULL;
2985*b7893ccfSSadaf Ebrahimi     {
2986*b7893ccfSSadaf Ebrahimi         if (pEvents) {
2987*b7893ccfSSadaf Ebrahimi             local_pEvents = new VkEvent[eventCount];
2988*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < eventCount; ++index0) {
2989*b7893ccfSSadaf Ebrahimi                 local_pEvents[index0] = layer_data->Unwrap(pEvents[index0]);
2990*b7893ccfSSadaf Ebrahimi             }
2991*b7893ccfSSadaf Ebrahimi         }
2992*b7893ccfSSadaf Ebrahimi         if (pBufferMemoryBarriers) {
2993*b7893ccfSSadaf Ebrahimi             local_pBufferMemoryBarriers = new safe_VkBufferMemoryBarrier[bufferMemoryBarrierCount];
2994*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < bufferMemoryBarrierCount; ++index0) {
2995*b7893ccfSSadaf Ebrahimi                 local_pBufferMemoryBarriers[index0].initialize(&pBufferMemoryBarriers[index0]);
2996*b7893ccfSSadaf Ebrahimi                 if (pBufferMemoryBarriers[index0].buffer) {
2997*b7893ccfSSadaf Ebrahimi                     local_pBufferMemoryBarriers[index0].buffer = layer_data->Unwrap(pBufferMemoryBarriers[index0].buffer);
2998*b7893ccfSSadaf Ebrahimi                 }
2999*b7893ccfSSadaf Ebrahimi             }
3000*b7893ccfSSadaf Ebrahimi         }
3001*b7893ccfSSadaf Ebrahimi         if (pImageMemoryBarriers) {
3002*b7893ccfSSadaf Ebrahimi             local_pImageMemoryBarriers = new safe_VkImageMemoryBarrier[imageMemoryBarrierCount];
3003*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < imageMemoryBarrierCount; ++index0) {
3004*b7893ccfSSadaf Ebrahimi                 local_pImageMemoryBarriers[index0].initialize(&pImageMemoryBarriers[index0]);
3005*b7893ccfSSadaf Ebrahimi                 if (pImageMemoryBarriers[index0].image) {
3006*b7893ccfSSadaf Ebrahimi                     local_pImageMemoryBarriers[index0].image = layer_data->Unwrap(pImageMemoryBarriers[index0].image);
3007*b7893ccfSSadaf Ebrahimi                 }
3008*b7893ccfSSadaf Ebrahimi             }
3009*b7893ccfSSadaf Ebrahimi         }
3010*b7893ccfSSadaf Ebrahimi     }
3011*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdWaitEvents(commandBuffer, eventCount, (const VkEvent*)local_pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, (const VkBufferMemoryBarrier*)local_pBufferMemoryBarriers, imageMemoryBarrierCount, (const VkImageMemoryBarrier*)local_pImageMemoryBarriers);
3012*b7893ccfSSadaf Ebrahimi     if (local_pEvents)
3013*b7893ccfSSadaf Ebrahimi         delete[] local_pEvents;
3014*b7893ccfSSadaf Ebrahimi     if (local_pBufferMemoryBarriers) {
3015*b7893ccfSSadaf Ebrahimi         delete[] local_pBufferMemoryBarriers;
3016*b7893ccfSSadaf Ebrahimi     }
3017*b7893ccfSSadaf Ebrahimi     if (local_pImageMemoryBarriers) {
3018*b7893ccfSSadaf Ebrahimi         delete[] local_pImageMemoryBarriers;
3019*b7893ccfSSadaf Ebrahimi     }
3020*b7893ccfSSadaf Ebrahimi }
3021*b7893ccfSSadaf Ebrahimi 
DispatchCmdPipelineBarrier(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)3022*b7893ccfSSadaf Ebrahimi void DispatchCmdPipelineBarrier(
3023*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3024*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlags                        srcStageMask,
3025*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlags                        dstStageMask,
3026*b7893ccfSSadaf Ebrahimi     VkDependencyFlags                           dependencyFlags,
3027*b7893ccfSSadaf Ebrahimi     uint32_t                                    memoryBarrierCount,
3028*b7893ccfSSadaf Ebrahimi     const VkMemoryBarrier*                      pMemoryBarriers,
3029*b7893ccfSSadaf Ebrahimi     uint32_t                                    bufferMemoryBarrierCount,
3030*b7893ccfSSadaf Ebrahimi     const VkBufferMemoryBarrier*                pBufferMemoryBarriers,
3031*b7893ccfSSadaf Ebrahimi     uint32_t                                    imageMemoryBarrierCount,
3032*b7893ccfSSadaf Ebrahimi     const VkImageMemoryBarrier*                 pImageMemoryBarriers)
3033*b7893ccfSSadaf Ebrahimi {
3034*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3035*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
3036*b7893ccfSSadaf Ebrahimi     safe_VkBufferMemoryBarrier *local_pBufferMemoryBarriers = NULL;
3037*b7893ccfSSadaf Ebrahimi     safe_VkImageMemoryBarrier *local_pImageMemoryBarriers = NULL;
3038*b7893ccfSSadaf Ebrahimi     {
3039*b7893ccfSSadaf Ebrahimi         if (pBufferMemoryBarriers) {
3040*b7893ccfSSadaf Ebrahimi             local_pBufferMemoryBarriers = new safe_VkBufferMemoryBarrier[bufferMemoryBarrierCount];
3041*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < bufferMemoryBarrierCount; ++index0) {
3042*b7893ccfSSadaf Ebrahimi                 local_pBufferMemoryBarriers[index0].initialize(&pBufferMemoryBarriers[index0]);
3043*b7893ccfSSadaf Ebrahimi                 if (pBufferMemoryBarriers[index0].buffer) {
3044*b7893ccfSSadaf Ebrahimi                     local_pBufferMemoryBarriers[index0].buffer = layer_data->Unwrap(pBufferMemoryBarriers[index0].buffer);
3045*b7893ccfSSadaf Ebrahimi                 }
3046*b7893ccfSSadaf Ebrahimi             }
3047*b7893ccfSSadaf Ebrahimi         }
3048*b7893ccfSSadaf Ebrahimi         if (pImageMemoryBarriers) {
3049*b7893ccfSSadaf Ebrahimi             local_pImageMemoryBarriers = new safe_VkImageMemoryBarrier[imageMemoryBarrierCount];
3050*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < imageMemoryBarrierCount; ++index0) {
3051*b7893ccfSSadaf Ebrahimi                 local_pImageMemoryBarriers[index0].initialize(&pImageMemoryBarriers[index0]);
3052*b7893ccfSSadaf Ebrahimi                 if (pImageMemoryBarriers[index0].image) {
3053*b7893ccfSSadaf Ebrahimi                     local_pImageMemoryBarriers[index0].image = layer_data->Unwrap(pImageMemoryBarriers[index0].image);
3054*b7893ccfSSadaf Ebrahimi                 }
3055*b7893ccfSSadaf Ebrahimi             }
3056*b7893ccfSSadaf Ebrahimi         }
3057*b7893ccfSSadaf Ebrahimi     }
3058*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, (const VkBufferMemoryBarrier*)local_pBufferMemoryBarriers, imageMemoryBarrierCount, (const VkImageMemoryBarrier*)local_pImageMemoryBarriers);
3059*b7893ccfSSadaf Ebrahimi     if (local_pBufferMemoryBarriers) {
3060*b7893ccfSSadaf Ebrahimi         delete[] local_pBufferMemoryBarriers;
3061*b7893ccfSSadaf Ebrahimi     }
3062*b7893ccfSSadaf Ebrahimi     if (local_pImageMemoryBarriers) {
3063*b7893ccfSSadaf Ebrahimi         delete[] local_pImageMemoryBarriers;
3064*b7893ccfSSadaf Ebrahimi     }
3065*b7893ccfSSadaf Ebrahimi }
3066*b7893ccfSSadaf Ebrahimi 
DispatchCmdBeginQuery(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,VkQueryControlFlags flags)3067*b7893ccfSSadaf Ebrahimi void DispatchCmdBeginQuery(
3068*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3069*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
3070*b7893ccfSSadaf Ebrahimi     uint32_t                                    query,
3071*b7893ccfSSadaf Ebrahimi     VkQueryControlFlags                         flags)
3072*b7893ccfSSadaf Ebrahimi {
3073*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3074*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBeginQuery(commandBuffer, queryPool, query, flags);
3075*b7893ccfSSadaf Ebrahimi     {
3076*b7893ccfSSadaf Ebrahimi         queryPool = layer_data->Unwrap(queryPool);
3077*b7893ccfSSadaf Ebrahimi     }
3078*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBeginQuery(commandBuffer, queryPool, query, flags);
3079*b7893ccfSSadaf Ebrahimi 
3080*b7893ccfSSadaf Ebrahimi }
3081*b7893ccfSSadaf Ebrahimi 
DispatchCmdEndQuery(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query)3082*b7893ccfSSadaf Ebrahimi void DispatchCmdEndQuery(
3083*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3084*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
3085*b7893ccfSSadaf Ebrahimi     uint32_t                                    query)
3086*b7893ccfSSadaf Ebrahimi {
3087*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3088*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdEndQuery(commandBuffer, queryPool, query);
3089*b7893ccfSSadaf Ebrahimi     {
3090*b7893ccfSSadaf Ebrahimi         queryPool = layer_data->Unwrap(queryPool);
3091*b7893ccfSSadaf Ebrahimi     }
3092*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdEndQuery(commandBuffer, queryPool, query);
3093*b7893ccfSSadaf Ebrahimi 
3094*b7893ccfSSadaf Ebrahimi }
3095*b7893ccfSSadaf Ebrahimi 
DispatchCmdResetQueryPool(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount)3096*b7893ccfSSadaf Ebrahimi void DispatchCmdResetQueryPool(
3097*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3098*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
3099*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstQuery,
3100*b7893ccfSSadaf Ebrahimi     uint32_t                                    queryCount)
3101*b7893ccfSSadaf Ebrahimi {
3102*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3103*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
3104*b7893ccfSSadaf Ebrahimi     {
3105*b7893ccfSSadaf Ebrahimi         queryPool = layer_data->Unwrap(queryPool);
3106*b7893ccfSSadaf Ebrahimi     }
3107*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
3108*b7893ccfSSadaf Ebrahimi 
3109*b7893ccfSSadaf Ebrahimi }
3110*b7893ccfSSadaf Ebrahimi 
DispatchCmdWriteTimestamp(VkCommandBuffer commandBuffer,VkPipelineStageFlagBits pipelineStage,VkQueryPool queryPool,uint32_t query)3111*b7893ccfSSadaf Ebrahimi void DispatchCmdWriteTimestamp(
3112*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3113*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlagBits                     pipelineStage,
3114*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
3115*b7893ccfSSadaf Ebrahimi     uint32_t                                    query)
3116*b7893ccfSSadaf Ebrahimi {
3117*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3118*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
3119*b7893ccfSSadaf Ebrahimi     {
3120*b7893ccfSSadaf Ebrahimi         queryPool = layer_data->Unwrap(queryPool);
3121*b7893ccfSSadaf Ebrahimi     }
3122*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query);
3123*b7893ccfSSadaf Ebrahimi 
3124*b7893ccfSSadaf Ebrahimi }
3125*b7893ccfSSadaf Ebrahimi 
DispatchCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize stride,VkQueryResultFlags flags)3126*b7893ccfSSadaf Ebrahimi void DispatchCmdCopyQueryPoolResults(
3127*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3128*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
3129*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstQuery,
3130*b7893ccfSSadaf Ebrahimi     uint32_t                                    queryCount,
3131*b7893ccfSSadaf Ebrahimi     VkBuffer                                    dstBuffer,
3132*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                dstOffset,
3133*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                stride,
3134*b7893ccfSSadaf Ebrahimi     VkQueryResultFlags                          flags)
3135*b7893ccfSSadaf Ebrahimi {
3136*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3137*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
3138*b7893ccfSSadaf Ebrahimi     {
3139*b7893ccfSSadaf Ebrahimi         queryPool = layer_data->Unwrap(queryPool);
3140*b7893ccfSSadaf Ebrahimi         dstBuffer = layer_data->Unwrap(dstBuffer);
3141*b7893ccfSSadaf Ebrahimi     }
3142*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
3143*b7893ccfSSadaf Ebrahimi 
3144*b7893ccfSSadaf Ebrahimi }
3145*b7893ccfSSadaf Ebrahimi 
DispatchCmdPushConstants(VkCommandBuffer commandBuffer,VkPipelineLayout layout,VkShaderStageFlags stageFlags,uint32_t offset,uint32_t size,const void * pValues)3146*b7893ccfSSadaf Ebrahimi void DispatchCmdPushConstants(
3147*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3148*b7893ccfSSadaf Ebrahimi     VkPipelineLayout                            layout,
3149*b7893ccfSSadaf Ebrahimi     VkShaderStageFlags                          stageFlags,
3150*b7893ccfSSadaf Ebrahimi     uint32_t                                    offset,
3151*b7893ccfSSadaf Ebrahimi     uint32_t                                    size,
3152*b7893ccfSSadaf Ebrahimi     const void*                                 pValues)
3153*b7893ccfSSadaf Ebrahimi {
3154*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3155*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
3156*b7893ccfSSadaf Ebrahimi     {
3157*b7893ccfSSadaf Ebrahimi         layout = layer_data->Unwrap(layout);
3158*b7893ccfSSadaf Ebrahimi     }
3159*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
3160*b7893ccfSSadaf Ebrahimi 
3161*b7893ccfSSadaf Ebrahimi }
3162*b7893ccfSSadaf Ebrahimi 
DispatchCmdBeginRenderPass(VkCommandBuffer commandBuffer,const VkRenderPassBeginInfo * pRenderPassBegin,VkSubpassContents contents)3163*b7893ccfSSadaf Ebrahimi void DispatchCmdBeginRenderPass(
3164*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3165*b7893ccfSSadaf Ebrahimi     const VkRenderPassBeginInfo*                pRenderPassBegin,
3166*b7893ccfSSadaf Ebrahimi     VkSubpassContents                           contents)
3167*b7893ccfSSadaf Ebrahimi {
3168*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3169*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
3170*b7893ccfSSadaf Ebrahimi     safe_VkRenderPassBeginInfo *local_pRenderPassBegin = NULL;
3171*b7893ccfSSadaf Ebrahimi     {
3172*b7893ccfSSadaf Ebrahimi         if (pRenderPassBegin) {
3173*b7893ccfSSadaf Ebrahimi             local_pRenderPassBegin = new safe_VkRenderPassBeginInfo(pRenderPassBegin);
3174*b7893ccfSSadaf Ebrahimi             if (pRenderPassBegin->renderPass) {
3175*b7893ccfSSadaf Ebrahimi                 local_pRenderPassBegin->renderPass = layer_data->Unwrap(pRenderPassBegin->renderPass);
3176*b7893ccfSSadaf Ebrahimi             }
3177*b7893ccfSSadaf Ebrahimi             if (pRenderPassBegin->framebuffer) {
3178*b7893ccfSSadaf Ebrahimi                 local_pRenderPassBegin->framebuffer = layer_data->Unwrap(pRenderPassBegin->framebuffer);
3179*b7893ccfSSadaf Ebrahimi             }
3180*b7893ccfSSadaf Ebrahimi             WrapPnextChainHandles(layer_data, local_pRenderPassBegin->pNext);
3181*b7893ccfSSadaf Ebrahimi         }
3182*b7893ccfSSadaf Ebrahimi     }
3183*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBeginRenderPass(commandBuffer, (const VkRenderPassBeginInfo*)local_pRenderPassBegin, contents);
3184*b7893ccfSSadaf Ebrahimi     if (local_pRenderPassBegin) {
3185*b7893ccfSSadaf Ebrahimi         delete local_pRenderPassBegin;
3186*b7893ccfSSadaf Ebrahimi     }
3187*b7893ccfSSadaf Ebrahimi }
3188*b7893ccfSSadaf Ebrahimi 
DispatchCmdNextSubpass(VkCommandBuffer commandBuffer,VkSubpassContents contents)3189*b7893ccfSSadaf Ebrahimi void DispatchCmdNextSubpass(
3190*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3191*b7893ccfSSadaf Ebrahimi     VkSubpassContents                           contents)
3192*b7893ccfSSadaf Ebrahimi {
3193*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3194*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdNextSubpass(commandBuffer, contents);
3195*b7893ccfSSadaf Ebrahimi 
3196*b7893ccfSSadaf Ebrahimi }
3197*b7893ccfSSadaf Ebrahimi 
DispatchCmdEndRenderPass(VkCommandBuffer commandBuffer)3198*b7893ccfSSadaf Ebrahimi void DispatchCmdEndRenderPass(
3199*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer)
3200*b7893ccfSSadaf Ebrahimi {
3201*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3202*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdEndRenderPass(commandBuffer);
3203*b7893ccfSSadaf Ebrahimi 
3204*b7893ccfSSadaf Ebrahimi }
3205*b7893ccfSSadaf Ebrahimi 
DispatchCmdExecuteCommands(VkCommandBuffer commandBuffer,uint32_t commandBufferCount,const VkCommandBuffer * pCommandBuffers)3206*b7893ccfSSadaf Ebrahimi void DispatchCmdExecuteCommands(
3207*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3208*b7893ccfSSadaf Ebrahimi     uint32_t                                    commandBufferCount,
3209*b7893ccfSSadaf Ebrahimi     const VkCommandBuffer*                      pCommandBuffers)
3210*b7893ccfSSadaf Ebrahimi {
3211*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3212*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers);
3213*b7893ccfSSadaf Ebrahimi 
3214*b7893ccfSSadaf Ebrahimi }
3215*b7893ccfSSadaf Ebrahimi 
3216*b7893ccfSSadaf Ebrahimi // Skip vkEnumerateInstanceVersion dispatch, manually generated
3217*b7893ccfSSadaf Ebrahimi 
DispatchBindBufferMemory2(VkDevice device,uint32_t bindInfoCount,const VkBindBufferMemoryInfo * pBindInfos)3218*b7893ccfSSadaf Ebrahimi VkResult DispatchBindBufferMemory2(
3219*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3220*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindInfoCount,
3221*b7893ccfSSadaf Ebrahimi     const VkBindBufferMemoryInfo*               pBindInfos)
3222*b7893ccfSSadaf Ebrahimi {
3223*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3224*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.BindBufferMemory2(device, bindInfoCount, pBindInfos);
3225*b7893ccfSSadaf Ebrahimi     safe_VkBindBufferMemoryInfo *local_pBindInfos = NULL;
3226*b7893ccfSSadaf Ebrahimi     {
3227*b7893ccfSSadaf Ebrahimi         if (pBindInfos) {
3228*b7893ccfSSadaf Ebrahimi             local_pBindInfos = new safe_VkBindBufferMemoryInfo[bindInfoCount];
3229*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < bindInfoCount; ++index0) {
3230*b7893ccfSSadaf Ebrahimi                 local_pBindInfos[index0].initialize(&pBindInfos[index0]);
3231*b7893ccfSSadaf Ebrahimi                 if (pBindInfos[index0].buffer) {
3232*b7893ccfSSadaf Ebrahimi                     local_pBindInfos[index0].buffer = layer_data->Unwrap(pBindInfos[index0].buffer);
3233*b7893ccfSSadaf Ebrahimi                 }
3234*b7893ccfSSadaf Ebrahimi                 if (pBindInfos[index0].memory) {
3235*b7893ccfSSadaf Ebrahimi                     local_pBindInfos[index0].memory = layer_data->Unwrap(pBindInfos[index0].memory);
3236*b7893ccfSSadaf Ebrahimi                 }
3237*b7893ccfSSadaf Ebrahimi             }
3238*b7893ccfSSadaf Ebrahimi         }
3239*b7893ccfSSadaf Ebrahimi     }
3240*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.BindBufferMemory2(device, bindInfoCount, (const VkBindBufferMemoryInfo*)local_pBindInfos);
3241*b7893ccfSSadaf Ebrahimi     if (local_pBindInfos) {
3242*b7893ccfSSadaf Ebrahimi         delete[] local_pBindInfos;
3243*b7893ccfSSadaf Ebrahimi     }
3244*b7893ccfSSadaf Ebrahimi     return result;
3245*b7893ccfSSadaf Ebrahimi }
3246*b7893ccfSSadaf Ebrahimi 
DispatchBindImageMemory2(VkDevice device,uint32_t bindInfoCount,const VkBindImageMemoryInfo * pBindInfos)3247*b7893ccfSSadaf Ebrahimi VkResult DispatchBindImageMemory2(
3248*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3249*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindInfoCount,
3250*b7893ccfSSadaf Ebrahimi     const VkBindImageMemoryInfo*                pBindInfos)
3251*b7893ccfSSadaf Ebrahimi {
3252*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3253*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.BindImageMemory2(device, bindInfoCount, pBindInfos);
3254*b7893ccfSSadaf Ebrahimi     safe_VkBindImageMemoryInfo *local_pBindInfos = NULL;
3255*b7893ccfSSadaf Ebrahimi     {
3256*b7893ccfSSadaf Ebrahimi         if (pBindInfos) {
3257*b7893ccfSSadaf Ebrahimi             local_pBindInfos = new safe_VkBindImageMemoryInfo[bindInfoCount];
3258*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < bindInfoCount; ++index0) {
3259*b7893ccfSSadaf Ebrahimi                 local_pBindInfos[index0].initialize(&pBindInfos[index0]);
3260*b7893ccfSSadaf Ebrahimi                 WrapPnextChainHandles(layer_data, local_pBindInfos[index0].pNext);
3261*b7893ccfSSadaf Ebrahimi                 if (pBindInfos[index0].image) {
3262*b7893ccfSSadaf Ebrahimi                     local_pBindInfos[index0].image = layer_data->Unwrap(pBindInfos[index0].image);
3263*b7893ccfSSadaf Ebrahimi                 }
3264*b7893ccfSSadaf Ebrahimi                 if (pBindInfos[index0].memory) {
3265*b7893ccfSSadaf Ebrahimi                     local_pBindInfos[index0].memory = layer_data->Unwrap(pBindInfos[index0].memory);
3266*b7893ccfSSadaf Ebrahimi                 }
3267*b7893ccfSSadaf Ebrahimi             }
3268*b7893ccfSSadaf Ebrahimi         }
3269*b7893ccfSSadaf Ebrahimi     }
3270*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.BindImageMemory2(device, bindInfoCount, (const VkBindImageMemoryInfo*)local_pBindInfos);
3271*b7893ccfSSadaf Ebrahimi     if (local_pBindInfos) {
3272*b7893ccfSSadaf Ebrahimi         delete[] local_pBindInfos;
3273*b7893ccfSSadaf Ebrahimi     }
3274*b7893ccfSSadaf Ebrahimi     return result;
3275*b7893ccfSSadaf Ebrahimi }
3276*b7893ccfSSadaf Ebrahimi 
DispatchGetDeviceGroupPeerMemoryFeatures(VkDevice device,uint32_t heapIndex,uint32_t localDeviceIndex,uint32_t remoteDeviceIndex,VkPeerMemoryFeatureFlags * pPeerMemoryFeatures)3277*b7893ccfSSadaf Ebrahimi void DispatchGetDeviceGroupPeerMemoryFeatures(
3278*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3279*b7893ccfSSadaf Ebrahimi     uint32_t                                    heapIndex,
3280*b7893ccfSSadaf Ebrahimi     uint32_t                                    localDeviceIndex,
3281*b7893ccfSSadaf Ebrahimi     uint32_t                                    remoteDeviceIndex,
3282*b7893ccfSSadaf Ebrahimi     VkPeerMemoryFeatureFlags*                   pPeerMemoryFeatures)
3283*b7893ccfSSadaf Ebrahimi {
3284*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3285*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetDeviceGroupPeerMemoryFeatures(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
3286*b7893ccfSSadaf Ebrahimi 
3287*b7893ccfSSadaf Ebrahimi }
3288*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetDeviceMask(VkCommandBuffer commandBuffer,uint32_t deviceMask)3289*b7893ccfSSadaf Ebrahimi void DispatchCmdSetDeviceMask(
3290*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3291*b7893ccfSSadaf Ebrahimi     uint32_t                                    deviceMask)
3292*b7893ccfSSadaf Ebrahimi {
3293*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3294*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetDeviceMask(commandBuffer, deviceMask);
3295*b7893ccfSSadaf Ebrahimi 
3296*b7893ccfSSadaf Ebrahimi }
3297*b7893ccfSSadaf Ebrahimi 
DispatchCmdDispatchBase(VkCommandBuffer commandBuffer,uint32_t baseGroupX,uint32_t baseGroupY,uint32_t baseGroupZ,uint32_t groupCountX,uint32_t groupCountY,uint32_t groupCountZ)3298*b7893ccfSSadaf Ebrahimi void DispatchCmdDispatchBase(
3299*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
3300*b7893ccfSSadaf Ebrahimi     uint32_t                                    baseGroupX,
3301*b7893ccfSSadaf Ebrahimi     uint32_t                                    baseGroupY,
3302*b7893ccfSSadaf Ebrahimi     uint32_t                                    baseGroupZ,
3303*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountX,
3304*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountY,
3305*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountZ)
3306*b7893ccfSSadaf Ebrahimi {
3307*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
3308*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDispatchBase(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
3309*b7893ccfSSadaf Ebrahimi 
3310*b7893ccfSSadaf Ebrahimi }
3311*b7893ccfSSadaf Ebrahimi 
DispatchEnumeratePhysicalDeviceGroups(VkInstance instance,uint32_t * pPhysicalDeviceGroupCount,VkPhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties)3312*b7893ccfSSadaf Ebrahimi VkResult DispatchEnumeratePhysicalDeviceGroups(
3313*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
3314*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPhysicalDeviceGroupCount,
3315*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceGroupProperties*            pPhysicalDeviceGroupProperties)
3316*b7893ccfSSadaf Ebrahimi {
3317*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
3318*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.EnumeratePhysicalDeviceGroups(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
3319*b7893ccfSSadaf Ebrahimi 
3320*b7893ccfSSadaf Ebrahimi     return result;
3321*b7893ccfSSadaf Ebrahimi }
3322*b7893ccfSSadaf Ebrahimi 
DispatchGetImageMemoryRequirements2(VkDevice device,const VkImageMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements)3323*b7893ccfSSadaf Ebrahimi void DispatchGetImageMemoryRequirements2(
3324*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3325*b7893ccfSSadaf Ebrahimi     const VkImageMemoryRequirementsInfo2*       pInfo,
3326*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements2*                      pMemoryRequirements)
3327*b7893ccfSSadaf Ebrahimi {
3328*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3329*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetImageMemoryRequirements2(device, pInfo, pMemoryRequirements);
3330*b7893ccfSSadaf Ebrahimi     safe_VkImageMemoryRequirementsInfo2 *local_pInfo = NULL;
3331*b7893ccfSSadaf Ebrahimi     {
3332*b7893ccfSSadaf Ebrahimi         if (pInfo) {
3333*b7893ccfSSadaf Ebrahimi             local_pInfo = new safe_VkImageMemoryRequirementsInfo2(pInfo);
3334*b7893ccfSSadaf Ebrahimi             if (pInfo->image) {
3335*b7893ccfSSadaf Ebrahimi                 local_pInfo->image = layer_data->Unwrap(pInfo->image);
3336*b7893ccfSSadaf Ebrahimi             }
3337*b7893ccfSSadaf Ebrahimi         }
3338*b7893ccfSSadaf Ebrahimi     }
3339*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetImageMemoryRequirements2(device, (const VkImageMemoryRequirementsInfo2*)local_pInfo, pMemoryRequirements);
3340*b7893ccfSSadaf Ebrahimi     if (local_pInfo) {
3341*b7893ccfSSadaf Ebrahimi         delete local_pInfo;
3342*b7893ccfSSadaf Ebrahimi     }
3343*b7893ccfSSadaf Ebrahimi }
3344*b7893ccfSSadaf Ebrahimi 
DispatchGetBufferMemoryRequirements2(VkDevice device,const VkBufferMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements)3345*b7893ccfSSadaf Ebrahimi void DispatchGetBufferMemoryRequirements2(
3346*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3347*b7893ccfSSadaf Ebrahimi     const VkBufferMemoryRequirementsInfo2*      pInfo,
3348*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements2*                      pMemoryRequirements)
3349*b7893ccfSSadaf Ebrahimi {
3350*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3351*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetBufferMemoryRequirements2(device, pInfo, pMemoryRequirements);
3352*b7893ccfSSadaf Ebrahimi     safe_VkBufferMemoryRequirementsInfo2 *local_pInfo = NULL;
3353*b7893ccfSSadaf Ebrahimi     {
3354*b7893ccfSSadaf Ebrahimi         if (pInfo) {
3355*b7893ccfSSadaf Ebrahimi             local_pInfo = new safe_VkBufferMemoryRequirementsInfo2(pInfo);
3356*b7893ccfSSadaf Ebrahimi             if (pInfo->buffer) {
3357*b7893ccfSSadaf Ebrahimi                 local_pInfo->buffer = layer_data->Unwrap(pInfo->buffer);
3358*b7893ccfSSadaf Ebrahimi             }
3359*b7893ccfSSadaf Ebrahimi         }
3360*b7893ccfSSadaf Ebrahimi     }
3361*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetBufferMemoryRequirements2(device, (const VkBufferMemoryRequirementsInfo2*)local_pInfo, pMemoryRequirements);
3362*b7893ccfSSadaf Ebrahimi     if (local_pInfo) {
3363*b7893ccfSSadaf Ebrahimi         delete local_pInfo;
3364*b7893ccfSSadaf Ebrahimi     }
3365*b7893ccfSSadaf Ebrahimi }
3366*b7893ccfSSadaf Ebrahimi 
DispatchGetImageSparseMemoryRequirements2(VkDevice device,const VkImageSparseMemoryRequirementsInfo2 * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements)3367*b7893ccfSSadaf Ebrahimi void DispatchGetImageSparseMemoryRequirements2(
3368*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3369*b7893ccfSSadaf Ebrahimi     const VkImageSparseMemoryRequirementsInfo2* pInfo,
3370*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pSparseMemoryRequirementCount,
3371*b7893ccfSSadaf Ebrahimi     VkSparseImageMemoryRequirements2*           pSparseMemoryRequirements)
3372*b7893ccfSSadaf Ebrahimi {
3373*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3374*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetImageSparseMemoryRequirements2(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
3375*b7893ccfSSadaf Ebrahimi     safe_VkImageSparseMemoryRequirementsInfo2 *local_pInfo = NULL;
3376*b7893ccfSSadaf Ebrahimi     {
3377*b7893ccfSSadaf Ebrahimi         if (pInfo) {
3378*b7893ccfSSadaf Ebrahimi             local_pInfo = new safe_VkImageSparseMemoryRequirementsInfo2(pInfo);
3379*b7893ccfSSadaf Ebrahimi             if (pInfo->image) {
3380*b7893ccfSSadaf Ebrahimi                 local_pInfo->image = layer_data->Unwrap(pInfo->image);
3381*b7893ccfSSadaf Ebrahimi             }
3382*b7893ccfSSadaf Ebrahimi         }
3383*b7893ccfSSadaf Ebrahimi     }
3384*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetImageSparseMemoryRequirements2(device, (const VkImageSparseMemoryRequirementsInfo2*)local_pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
3385*b7893ccfSSadaf Ebrahimi     if (local_pInfo) {
3386*b7893ccfSSadaf Ebrahimi         delete local_pInfo;
3387*b7893ccfSSadaf Ebrahimi     }
3388*b7893ccfSSadaf Ebrahimi }
3389*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures2 * pFeatures)3390*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceFeatures2(
3391*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3392*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceFeatures2*                  pFeatures)
3393*b7893ccfSSadaf Ebrahimi {
3394*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3395*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceFeatures2(physicalDevice, pFeatures);
3396*b7893ccfSSadaf Ebrahimi 
3397*b7893ccfSSadaf Ebrahimi }
3398*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties2 * pProperties)3399*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceProperties2(
3400*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3401*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceProperties2*                pProperties)
3402*b7893ccfSSadaf Ebrahimi {
3403*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3404*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceProperties2(physicalDevice, pProperties);
3405*b7893ccfSSadaf Ebrahimi 
3406*b7893ccfSSadaf Ebrahimi }
3407*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties2 * pFormatProperties)3408*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceFormatProperties2(
3409*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3410*b7893ccfSSadaf Ebrahimi     VkFormat                                    format,
3411*b7893ccfSSadaf Ebrahimi     VkFormatProperties2*                        pFormatProperties)
3412*b7893ccfSSadaf Ebrahimi {
3413*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3414*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceFormatProperties2(physicalDevice, format, pFormatProperties);
3415*b7893ccfSSadaf Ebrahimi 
3416*b7893ccfSSadaf Ebrahimi }
3417*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo,VkImageFormatProperties2 * pImageFormatProperties)3418*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceImageFormatProperties2(
3419*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3420*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
3421*b7893ccfSSadaf Ebrahimi     VkImageFormatProperties2*                   pImageFormatProperties)
3422*b7893ccfSSadaf Ebrahimi {
3423*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3424*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetPhysicalDeviceImageFormatProperties2(physicalDevice, pImageFormatInfo, pImageFormatProperties);
3425*b7893ccfSSadaf Ebrahimi     safe_VkPhysicalDeviceImageFormatInfo2 *local_pImageFormatInfo = NULL;
3426*b7893ccfSSadaf Ebrahimi     {
3427*b7893ccfSSadaf Ebrahimi         if (pImageFormatInfo) {
3428*b7893ccfSSadaf Ebrahimi             local_pImageFormatInfo = new safe_VkPhysicalDeviceImageFormatInfo2(pImageFormatInfo);
3429*b7893ccfSSadaf Ebrahimi             WrapPnextChainHandles(layer_data, local_pImageFormatInfo->pNext);
3430*b7893ccfSSadaf Ebrahimi         }
3431*b7893ccfSSadaf Ebrahimi     }
3432*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceImageFormatProperties2(physicalDevice, (const VkPhysicalDeviceImageFormatInfo2*)local_pImageFormatInfo, pImageFormatProperties);
3433*b7893ccfSSadaf Ebrahimi     if (local_pImageFormatInfo) {
3434*b7893ccfSSadaf Ebrahimi         delete local_pImageFormatInfo;
3435*b7893ccfSSadaf Ebrahimi     }
3436*b7893ccfSSadaf Ebrahimi     return result;
3437*b7893ccfSSadaf Ebrahimi }
3438*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties2 * pQueueFamilyProperties)3439*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceQueueFamilyProperties2(
3440*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3441*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pQueueFamilyPropertyCount,
3442*b7893ccfSSadaf Ebrahimi     VkQueueFamilyProperties2*                   pQueueFamilyProperties)
3443*b7893ccfSSadaf Ebrahimi {
3444*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3445*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceQueueFamilyProperties2(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
3446*b7893ccfSSadaf Ebrahimi 
3447*b7893ccfSSadaf Ebrahimi }
3448*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties2 * pMemoryProperties)3449*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceMemoryProperties2(
3450*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3451*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceMemoryProperties2*          pMemoryProperties)
3452*b7893ccfSSadaf Ebrahimi {
3453*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3454*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceMemoryProperties2(physicalDevice, pMemoryProperties);
3455*b7893ccfSSadaf Ebrahimi 
3456*b7893ccfSSadaf Ebrahimi }
3457*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceSparseImageFormatProperties2(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo,uint32_t * pPropertyCount,VkSparseImageFormatProperties2 * pProperties)3458*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceSparseImageFormatProperties2(
3459*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3460*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
3461*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
3462*b7893ccfSSadaf Ebrahimi     VkSparseImageFormatProperties2*             pProperties)
3463*b7893ccfSSadaf Ebrahimi {
3464*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3465*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceSparseImageFormatProperties2(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
3466*b7893ccfSSadaf Ebrahimi 
3467*b7893ccfSSadaf Ebrahimi }
3468*b7893ccfSSadaf Ebrahimi 
DispatchTrimCommandPool(VkDevice device,VkCommandPool commandPool,VkCommandPoolTrimFlags flags)3469*b7893ccfSSadaf Ebrahimi void DispatchTrimCommandPool(
3470*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3471*b7893ccfSSadaf Ebrahimi     VkCommandPool                               commandPool,
3472*b7893ccfSSadaf Ebrahimi     VkCommandPoolTrimFlags                      flags)
3473*b7893ccfSSadaf Ebrahimi {
3474*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3475*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.TrimCommandPool(device, commandPool, flags);
3476*b7893ccfSSadaf Ebrahimi     {
3477*b7893ccfSSadaf Ebrahimi         commandPool = layer_data->Unwrap(commandPool);
3478*b7893ccfSSadaf Ebrahimi     }
3479*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.TrimCommandPool(device, commandPool, flags);
3480*b7893ccfSSadaf Ebrahimi 
3481*b7893ccfSSadaf Ebrahimi }
3482*b7893ccfSSadaf Ebrahimi 
DispatchGetDeviceQueue2(VkDevice device,const VkDeviceQueueInfo2 * pQueueInfo,VkQueue * pQueue)3483*b7893ccfSSadaf Ebrahimi void DispatchGetDeviceQueue2(
3484*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3485*b7893ccfSSadaf Ebrahimi     const VkDeviceQueueInfo2*                   pQueueInfo,
3486*b7893ccfSSadaf Ebrahimi     VkQueue*                                    pQueue)
3487*b7893ccfSSadaf Ebrahimi {
3488*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3489*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetDeviceQueue2(device, pQueueInfo, pQueue);
3490*b7893ccfSSadaf Ebrahimi 
3491*b7893ccfSSadaf Ebrahimi }
3492*b7893ccfSSadaf Ebrahimi 
DispatchCreateSamplerYcbcrConversion(VkDevice device,const VkSamplerYcbcrConversionCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSamplerYcbcrConversion * pYcbcrConversion)3493*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateSamplerYcbcrConversion(
3494*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3495*b7893ccfSSadaf Ebrahimi     const VkSamplerYcbcrConversionCreateInfo*   pCreateInfo,
3496*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
3497*b7893ccfSSadaf Ebrahimi     VkSamplerYcbcrConversion*                   pYcbcrConversion)
3498*b7893ccfSSadaf Ebrahimi {
3499*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3500*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateSamplerYcbcrConversion(device, pCreateInfo, pAllocator, pYcbcrConversion);
3501*b7893ccfSSadaf Ebrahimi     safe_VkSamplerYcbcrConversionCreateInfo *local_pCreateInfo = NULL;
3502*b7893ccfSSadaf Ebrahimi     {
3503*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
3504*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkSamplerYcbcrConversionCreateInfo(pCreateInfo);
3505*b7893ccfSSadaf Ebrahimi             WrapPnextChainHandles(layer_data, local_pCreateInfo->pNext);
3506*b7893ccfSSadaf Ebrahimi         }
3507*b7893ccfSSadaf Ebrahimi     }
3508*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateSamplerYcbcrConversion(device, (const VkSamplerYcbcrConversionCreateInfo*)local_pCreateInfo, pAllocator, pYcbcrConversion);
3509*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
3510*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
3511*b7893ccfSSadaf Ebrahimi     }
3512*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
3513*b7893ccfSSadaf Ebrahimi         *pYcbcrConversion = layer_data->WrapNew(*pYcbcrConversion);
3514*b7893ccfSSadaf Ebrahimi     }
3515*b7893ccfSSadaf Ebrahimi     return result;
3516*b7893ccfSSadaf Ebrahimi }
3517*b7893ccfSSadaf Ebrahimi 
DispatchDestroySamplerYcbcrConversion(VkDevice device,VkSamplerYcbcrConversion ycbcrConversion,const VkAllocationCallbacks * pAllocator)3518*b7893ccfSSadaf Ebrahimi void DispatchDestroySamplerYcbcrConversion(
3519*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3520*b7893ccfSSadaf Ebrahimi     VkSamplerYcbcrConversion                    ycbcrConversion,
3521*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
3522*b7893ccfSSadaf Ebrahimi {
3523*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3524*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
3525*b7893ccfSSadaf Ebrahimi     uint64_t ycbcrConversion_id = reinterpret_cast<uint64_t &>(ycbcrConversion);
3526*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(ycbcrConversion_id);
3527*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
3528*b7893ccfSSadaf Ebrahimi         ycbcrConversion = (VkSamplerYcbcrConversion)iter->second;
3529*b7893ccfSSadaf Ebrahimi     } else {
3530*b7893ccfSSadaf Ebrahimi         ycbcrConversion = (VkSamplerYcbcrConversion)0;
3531*b7893ccfSSadaf Ebrahimi     }
3532*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroySamplerYcbcrConversion(device, ycbcrConversion, pAllocator);
3533*b7893ccfSSadaf Ebrahimi 
3534*b7893ccfSSadaf Ebrahimi }
3535*b7893ccfSSadaf Ebrahimi 
3536*b7893ccfSSadaf Ebrahimi // Skip vkCreateDescriptorUpdateTemplate dispatch, manually generated
3537*b7893ccfSSadaf Ebrahimi 
3538*b7893ccfSSadaf Ebrahimi // Skip vkDestroyDescriptorUpdateTemplate dispatch, manually generated
3539*b7893ccfSSadaf Ebrahimi 
3540*b7893ccfSSadaf Ebrahimi // Skip vkUpdateDescriptorSetWithTemplate dispatch, manually generated
3541*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo,VkExternalBufferProperties * pExternalBufferProperties)3542*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceExternalBufferProperties(
3543*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3544*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceExternalBufferInfo*   pExternalBufferInfo,
3545*b7893ccfSSadaf Ebrahimi     VkExternalBufferProperties*                 pExternalBufferProperties)
3546*b7893ccfSSadaf Ebrahimi {
3547*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3548*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceExternalBufferProperties(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
3549*b7893ccfSSadaf Ebrahimi 
3550*b7893ccfSSadaf Ebrahimi }
3551*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceExternalFenceProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo,VkExternalFenceProperties * pExternalFenceProperties)3552*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceExternalFenceProperties(
3553*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3554*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
3555*b7893ccfSSadaf Ebrahimi     VkExternalFenceProperties*                  pExternalFenceProperties)
3556*b7893ccfSSadaf Ebrahimi {
3557*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3558*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceExternalFenceProperties(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
3559*b7893ccfSSadaf Ebrahimi 
3560*b7893ccfSSadaf Ebrahimi }
3561*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceExternalSemaphoreProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo,VkExternalSemaphoreProperties * pExternalSemaphoreProperties)3562*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceExternalSemaphoreProperties(
3563*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3564*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
3565*b7893ccfSSadaf Ebrahimi     VkExternalSemaphoreProperties*              pExternalSemaphoreProperties)
3566*b7893ccfSSadaf Ebrahimi {
3567*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3568*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceExternalSemaphoreProperties(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
3569*b7893ccfSSadaf Ebrahimi 
3570*b7893ccfSSadaf Ebrahimi }
3571*b7893ccfSSadaf Ebrahimi 
DispatchGetDescriptorSetLayoutSupport(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,VkDescriptorSetLayoutSupport * pSupport)3572*b7893ccfSSadaf Ebrahimi void DispatchGetDescriptorSetLayoutSupport(
3573*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3574*b7893ccfSSadaf Ebrahimi     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
3575*b7893ccfSSadaf Ebrahimi     VkDescriptorSetLayoutSupport*               pSupport)
3576*b7893ccfSSadaf Ebrahimi {
3577*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3578*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetDescriptorSetLayoutSupport(device, pCreateInfo, pSupport);
3579*b7893ccfSSadaf Ebrahimi     safe_VkDescriptorSetLayoutCreateInfo *local_pCreateInfo = NULL;
3580*b7893ccfSSadaf Ebrahimi     {
3581*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
3582*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkDescriptorSetLayoutCreateInfo(pCreateInfo);
3583*b7893ccfSSadaf Ebrahimi             if (local_pCreateInfo->pBindings) {
3584*b7893ccfSSadaf Ebrahimi                 for (uint32_t index1 = 0; index1 < local_pCreateInfo->bindingCount; ++index1) {
3585*b7893ccfSSadaf Ebrahimi                     if (local_pCreateInfo->pBindings[index1].pImmutableSamplers) {
3586*b7893ccfSSadaf Ebrahimi                         for (uint32_t index2 = 0; index2 < local_pCreateInfo->pBindings[index1].descriptorCount; ++index2) {
3587*b7893ccfSSadaf Ebrahimi                             local_pCreateInfo->pBindings[index1].pImmutableSamplers[index2] = layer_data->Unwrap(local_pCreateInfo->pBindings[index1].pImmutableSamplers[index2]);
3588*b7893ccfSSadaf Ebrahimi                         }
3589*b7893ccfSSadaf Ebrahimi                     }
3590*b7893ccfSSadaf Ebrahimi                 }
3591*b7893ccfSSadaf Ebrahimi             }
3592*b7893ccfSSadaf Ebrahimi         }
3593*b7893ccfSSadaf Ebrahimi     }
3594*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetDescriptorSetLayoutSupport(device, (const VkDescriptorSetLayoutCreateInfo*)local_pCreateInfo, pSupport);
3595*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
3596*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
3597*b7893ccfSSadaf Ebrahimi     }
3598*b7893ccfSSadaf Ebrahimi }
3599*b7893ccfSSadaf Ebrahimi 
DispatchDestroySurfaceKHR(VkInstance instance,VkSurfaceKHR surface,const VkAllocationCallbacks * pAllocator)3600*b7893ccfSSadaf Ebrahimi void DispatchDestroySurfaceKHR(
3601*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
3602*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
3603*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
3604*b7893ccfSSadaf Ebrahimi {
3605*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
3606*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.DestroySurfaceKHR(instance, surface, pAllocator);
3607*b7893ccfSSadaf Ebrahimi     uint64_t surface_id = reinterpret_cast<uint64_t &>(surface);
3608*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(surface_id);
3609*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
3610*b7893ccfSSadaf Ebrahimi         surface = (VkSurfaceKHR)iter->second;
3611*b7893ccfSSadaf Ebrahimi     } else {
3612*b7893ccfSSadaf Ebrahimi         surface = (VkSurfaceKHR)0;
3613*b7893ccfSSadaf Ebrahimi     }
3614*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.DestroySurfaceKHR(instance, surface, pAllocator);
3615*b7893ccfSSadaf Ebrahimi 
3616*b7893ccfSSadaf Ebrahimi }
3617*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex,VkSurfaceKHR surface,VkBool32 * pSupported)3618*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceSurfaceSupportKHR(
3619*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3620*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueFamilyIndex,
3621*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
3622*b7893ccfSSadaf Ebrahimi     VkBool32*                                   pSupported)
3623*b7893ccfSSadaf Ebrahimi {
3624*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3625*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
3626*b7893ccfSSadaf Ebrahimi     {
3627*b7893ccfSSadaf Ebrahimi         surface = layer_data->Unwrap(surface);
3628*b7893ccfSSadaf Ebrahimi     }
3629*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported);
3630*b7893ccfSSadaf Ebrahimi 
3631*b7893ccfSSadaf Ebrahimi     return result;
3632*b7893ccfSSadaf Ebrahimi }
3633*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,VkSurfaceCapabilitiesKHR * pSurfaceCapabilities)3634*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceSurfaceCapabilitiesKHR(
3635*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3636*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
3637*b7893ccfSSadaf Ebrahimi     VkSurfaceCapabilitiesKHR*                   pSurfaceCapabilities)
3638*b7893ccfSSadaf Ebrahimi {
3639*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3640*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
3641*b7893ccfSSadaf Ebrahimi     {
3642*b7893ccfSSadaf Ebrahimi         surface = layer_data->Unwrap(surface);
3643*b7893ccfSSadaf Ebrahimi     }
3644*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities);
3645*b7893ccfSSadaf Ebrahimi 
3646*b7893ccfSSadaf Ebrahimi     return result;
3647*b7893ccfSSadaf Ebrahimi }
3648*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,uint32_t * pSurfaceFormatCount,VkSurfaceFormatKHR * pSurfaceFormats)3649*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceSurfaceFormatsKHR(
3650*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3651*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
3652*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pSurfaceFormatCount,
3653*b7893ccfSSadaf Ebrahimi     VkSurfaceFormatKHR*                         pSurfaceFormats)
3654*b7893ccfSSadaf Ebrahimi {
3655*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3656*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
3657*b7893ccfSSadaf Ebrahimi     {
3658*b7893ccfSSadaf Ebrahimi         surface = layer_data->Unwrap(surface);
3659*b7893ccfSSadaf Ebrahimi     }
3660*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats);
3661*b7893ccfSSadaf Ebrahimi 
3662*b7893ccfSSadaf Ebrahimi     return result;
3663*b7893ccfSSadaf Ebrahimi }
3664*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,uint32_t * pPresentModeCount,VkPresentModeKHR * pPresentModes)3665*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceSurfacePresentModesKHR(
3666*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3667*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
3668*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPresentModeCount,
3669*b7893ccfSSadaf Ebrahimi     VkPresentModeKHR*                           pPresentModes)
3670*b7893ccfSSadaf Ebrahimi {
3671*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3672*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
3673*b7893ccfSSadaf Ebrahimi     {
3674*b7893ccfSSadaf Ebrahimi         surface = layer_data->Unwrap(surface);
3675*b7893ccfSSadaf Ebrahimi     }
3676*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes);
3677*b7893ccfSSadaf Ebrahimi 
3678*b7893ccfSSadaf Ebrahimi     return result;
3679*b7893ccfSSadaf Ebrahimi }
3680*b7893ccfSSadaf Ebrahimi 
3681*b7893ccfSSadaf Ebrahimi // Skip vkCreateSwapchainKHR dispatch, manually generated
3682*b7893ccfSSadaf Ebrahimi 
3683*b7893ccfSSadaf Ebrahimi // Skip vkDestroySwapchainKHR dispatch, manually generated
3684*b7893ccfSSadaf Ebrahimi 
3685*b7893ccfSSadaf Ebrahimi // Skip vkGetSwapchainImagesKHR dispatch, manually generated
3686*b7893ccfSSadaf Ebrahimi 
DispatchAcquireNextImageKHR(VkDevice device,VkSwapchainKHR swapchain,uint64_t timeout,VkSemaphore semaphore,VkFence fence,uint32_t * pImageIndex)3687*b7893ccfSSadaf Ebrahimi VkResult DispatchAcquireNextImageKHR(
3688*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3689*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain,
3690*b7893ccfSSadaf Ebrahimi     uint64_t                                    timeout,
3691*b7893ccfSSadaf Ebrahimi     VkSemaphore                                 semaphore,
3692*b7893ccfSSadaf Ebrahimi     VkFence                                     fence,
3693*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pImageIndex)
3694*b7893ccfSSadaf Ebrahimi {
3695*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3696*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
3697*b7893ccfSSadaf Ebrahimi     {
3698*b7893ccfSSadaf Ebrahimi         swapchain = layer_data->Unwrap(swapchain);
3699*b7893ccfSSadaf Ebrahimi         semaphore = layer_data->Unwrap(semaphore);
3700*b7893ccfSSadaf Ebrahimi         fence = layer_data->Unwrap(fence);
3701*b7893ccfSSadaf Ebrahimi     }
3702*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex);
3703*b7893ccfSSadaf Ebrahimi 
3704*b7893ccfSSadaf Ebrahimi     return result;
3705*b7893ccfSSadaf Ebrahimi }
3706*b7893ccfSSadaf Ebrahimi 
3707*b7893ccfSSadaf Ebrahimi // Skip vkQueuePresentKHR dispatch, manually generated
3708*b7893ccfSSadaf Ebrahimi 
DispatchGetDeviceGroupPresentCapabilitiesKHR(VkDevice device,VkDeviceGroupPresentCapabilitiesKHR * pDeviceGroupPresentCapabilities)3709*b7893ccfSSadaf Ebrahimi VkResult DispatchGetDeviceGroupPresentCapabilitiesKHR(
3710*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3711*b7893ccfSSadaf Ebrahimi     VkDeviceGroupPresentCapabilitiesKHR*        pDeviceGroupPresentCapabilities)
3712*b7893ccfSSadaf Ebrahimi {
3713*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3714*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetDeviceGroupPresentCapabilitiesKHR(device, pDeviceGroupPresentCapabilities);
3715*b7893ccfSSadaf Ebrahimi 
3716*b7893ccfSSadaf Ebrahimi     return result;
3717*b7893ccfSSadaf Ebrahimi }
3718*b7893ccfSSadaf Ebrahimi 
DispatchGetDeviceGroupSurfacePresentModesKHR(VkDevice device,VkSurfaceKHR surface,VkDeviceGroupPresentModeFlagsKHR * pModes)3719*b7893ccfSSadaf Ebrahimi VkResult DispatchGetDeviceGroupSurfacePresentModesKHR(
3720*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3721*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
3722*b7893ccfSSadaf Ebrahimi     VkDeviceGroupPresentModeFlagsKHR*           pModes)
3723*b7893ccfSSadaf Ebrahimi {
3724*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3725*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
3726*b7893ccfSSadaf Ebrahimi     {
3727*b7893ccfSSadaf Ebrahimi         surface = layer_data->Unwrap(surface);
3728*b7893ccfSSadaf Ebrahimi     }
3729*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetDeviceGroupSurfacePresentModesKHR(device, surface, pModes);
3730*b7893ccfSSadaf Ebrahimi 
3731*b7893ccfSSadaf Ebrahimi     return result;
3732*b7893ccfSSadaf Ebrahimi }
3733*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,uint32_t * pRectCount,VkRect2D * pRects)3734*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDevicePresentRectanglesKHR(
3735*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3736*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
3737*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pRectCount,
3738*b7893ccfSSadaf Ebrahimi     VkRect2D*                                   pRects)
3739*b7893ccfSSadaf Ebrahimi {
3740*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3741*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects);
3742*b7893ccfSSadaf Ebrahimi     {
3743*b7893ccfSSadaf Ebrahimi         surface = layer_data->Unwrap(surface);
3744*b7893ccfSSadaf Ebrahimi     }
3745*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDevicePresentRectanglesKHR(physicalDevice, surface, pRectCount, pRects);
3746*b7893ccfSSadaf Ebrahimi 
3747*b7893ccfSSadaf Ebrahimi     return result;
3748*b7893ccfSSadaf Ebrahimi }
3749*b7893ccfSSadaf Ebrahimi 
DispatchAcquireNextImage2KHR(VkDevice device,const VkAcquireNextImageInfoKHR * pAcquireInfo,uint32_t * pImageIndex)3750*b7893ccfSSadaf Ebrahimi VkResult DispatchAcquireNextImage2KHR(
3751*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
3752*b7893ccfSSadaf Ebrahimi     const VkAcquireNextImageInfoKHR*            pAcquireInfo,
3753*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pImageIndex)
3754*b7893ccfSSadaf Ebrahimi {
3755*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
3756*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.AcquireNextImage2KHR(device, pAcquireInfo, pImageIndex);
3757*b7893ccfSSadaf Ebrahimi     safe_VkAcquireNextImageInfoKHR *local_pAcquireInfo = NULL;
3758*b7893ccfSSadaf Ebrahimi     {
3759*b7893ccfSSadaf Ebrahimi         if (pAcquireInfo) {
3760*b7893ccfSSadaf Ebrahimi             local_pAcquireInfo = new safe_VkAcquireNextImageInfoKHR(pAcquireInfo);
3761*b7893ccfSSadaf Ebrahimi             if (pAcquireInfo->swapchain) {
3762*b7893ccfSSadaf Ebrahimi                 local_pAcquireInfo->swapchain = layer_data->Unwrap(pAcquireInfo->swapchain);
3763*b7893ccfSSadaf Ebrahimi             }
3764*b7893ccfSSadaf Ebrahimi             if (pAcquireInfo->semaphore) {
3765*b7893ccfSSadaf Ebrahimi                 local_pAcquireInfo->semaphore = layer_data->Unwrap(pAcquireInfo->semaphore);
3766*b7893ccfSSadaf Ebrahimi             }
3767*b7893ccfSSadaf Ebrahimi             if (pAcquireInfo->fence) {
3768*b7893ccfSSadaf Ebrahimi                 local_pAcquireInfo->fence = layer_data->Unwrap(pAcquireInfo->fence);
3769*b7893ccfSSadaf Ebrahimi             }
3770*b7893ccfSSadaf Ebrahimi         }
3771*b7893ccfSSadaf Ebrahimi     }
3772*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.AcquireNextImage2KHR(device, (const VkAcquireNextImageInfoKHR*)local_pAcquireInfo, pImageIndex);
3773*b7893ccfSSadaf Ebrahimi     if (local_pAcquireInfo) {
3774*b7893ccfSSadaf Ebrahimi         delete local_pAcquireInfo;
3775*b7893ccfSSadaf Ebrahimi     }
3776*b7893ccfSSadaf Ebrahimi     return result;
3777*b7893ccfSSadaf Ebrahimi }
3778*b7893ccfSSadaf Ebrahimi 
3779*b7893ccfSSadaf Ebrahimi // Skip vkGetPhysicalDeviceDisplayPropertiesKHR dispatch, manually generated
3780*b7893ccfSSadaf Ebrahimi 
3781*b7893ccfSSadaf Ebrahimi // Skip vkGetPhysicalDeviceDisplayPlanePropertiesKHR dispatch, manually generated
3782*b7893ccfSSadaf Ebrahimi 
3783*b7893ccfSSadaf Ebrahimi // Skip vkGetDisplayPlaneSupportedDisplaysKHR dispatch, manually generated
3784*b7893ccfSSadaf Ebrahimi 
3785*b7893ccfSSadaf Ebrahimi // Skip vkGetDisplayModePropertiesKHR dispatch, manually generated
3786*b7893ccfSSadaf Ebrahimi 
DispatchCreateDisplayModeKHR(VkPhysicalDevice physicalDevice,VkDisplayKHR display,const VkDisplayModeCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDisplayModeKHR * pMode)3787*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateDisplayModeKHR(
3788*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3789*b7893ccfSSadaf Ebrahimi     VkDisplayKHR                                display,
3790*b7893ccfSSadaf Ebrahimi     const VkDisplayModeCreateInfoKHR*           pCreateInfo,
3791*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
3792*b7893ccfSSadaf Ebrahimi     VkDisplayModeKHR*                           pMode)
3793*b7893ccfSSadaf Ebrahimi {
3794*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3795*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode);
3796*b7893ccfSSadaf Ebrahimi     {
3797*b7893ccfSSadaf Ebrahimi         display = layer_data->Unwrap(display);
3798*b7893ccfSSadaf Ebrahimi     }
3799*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateDisplayModeKHR(physicalDevice, display, pCreateInfo, pAllocator, pMode);
3800*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
3801*b7893ccfSSadaf Ebrahimi         *pMode = layer_data->WrapNew(*pMode);
3802*b7893ccfSSadaf Ebrahimi     }
3803*b7893ccfSSadaf Ebrahimi     return result;
3804*b7893ccfSSadaf Ebrahimi }
3805*b7893ccfSSadaf Ebrahimi 
DispatchGetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice,VkDisplayModeKHR mode,uint32_t planeIndex,VkDisplayPlaneCapabilitiesKHR * pCapabilities)3806*b7893ccfSSadaf Ebrahimi VkResult DispatchGetDisplayPlaneCapabilitiesKHR(
3807*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3808*b7893ccfSSadaf Ebrahimi     VkDisplayModeKHR                            mode,
3809*b7893ccfSSadaf Ebrahimi     uint32_t                                    planeIndex,
3810*b7893ccfSSadaf Ebrahimi     VkDisplayPlaneCapabilitiesKHR*              pCapabilities)
3811*b7893ccfSSadaf Ebrahimi {
3812*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3813*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities);
3814*b7893ccfSSadaf Ebrahimi     {
3815*b7893ccfSSadaf Ebrahimi         mode = layer_data->Unwrap(mode);
3816*b7893ccfSSadaf Ebrahimi     }
3817*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetDisplayPlaneCapabilitiesKHR(physicalDevice, mode, planeIndex, pCapabilities);
3818*b7893ccfSSadaf Ebrahimi 
3819*b7893ccfSSadaf Ebrahimi     return result;
3820*b7893ccfSSadaf Ebrahimi }
3821*b7893ccfSSadaf Ebrahimi 
DispatchCreateDisplayPlaneSurfaceKHR(VkInstance instance,const VkDisplaySurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)3822*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateDisplayPlaneSurfaceKHR(
3823*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
3824*b7893ccfSSadaf Ebrahimi     const VkDisplaySurfaceCreateInfoKHR*        pCreateInfo,
3825*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
3826*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface)
3827*b7893ccfSSadaf Ebrahimi {
3828*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
3829*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
3830*b7893ccfSSadaf Ebrahimi     safe_VkDisplaySurfaceCreateInfoKHR *local_pCreateInfo = NULL;
3831*b7893ccfSSadaf Ebrahimi     {
3832*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
3833*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkDisplaySurfaceCreateInfoKHR(pCreateInfo);
3834*b7893ccfSSadaf Ebrahimi             if (pCreateInfo->displayMode) {
3835*b7893ccfSSadaf Ebrahimi                 local_pCreateInfo->displayMode = layer_data->Unwrap(pCreateInfo->displayMode);
3836*b7893ccfSSadaf Ebrahimi             }
3837*b7893ccfSSadaf Ebrahimi         }
3838*b7893ccfSSadaf Ebrahimi     }
3839*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateDisplayPlaneSurfaceKHR(instance, (const VkDisplaySurfaceCreateInfoKHR*)local_pCreateInfo, pAllocator, pSurface);
3840*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
3841*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
3842*b7893ccfSSadaf Ebrahimi     }
3843*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
3844*b7893ccfSSadaf Ebrahimi         *pSurface = layer_data->WrapNew(*pSurface);
3845*b7893ccfSSadaf Ebrahimi     }
3846*b7893ccfSSadaf Ebrahimi     return result;
3847*b7893ccfSSadaf Ebrahimi }
3848*b7893ccfSSadaf Ebrahimi 
3849*b7893ccfSSadaf Ebrahimi // Skip vkCreateSharedSwapchainsKHR dispatch, manually generated
3850*b7893ccfSSadaf Ebrahimi 
3851*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_KHR
3852*b7893ccfSSadaf Ebrahimi 
DispatchCreateXlibSurfaceKHR(VkInstance instance,const VkXlibSurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)3853*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateXlibSurfaceKHR(
3854*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
3855*b7893ccfSSadaf Ebrahimi     const VkXlibSurfaceCreateInfoKHR*           pCreateInfo,
3856*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
3857*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface)
3858*b7893ccfSSadaf Ebrahimi {
3859*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
3860*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
3861*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
3862*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
3863*b7893ccfSSadaf Ebrahimi         *pSurface = layer_data->WrapNew(*pSurface);
3864*b7893ccfSSadaf Ebrahimi     }
3865*b7893ccfSSadaf Ebrahimi     return result;
3866*b7893ccfSSadaf Ebrahimi }
3867*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_XLIB_KHR
3868*b7893ccfSSadaf Ebrahimi 
3869*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_KHR
3870*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex,Display * dpy,VisualID visualID)3871*b7893ccfSSadaf Ebrahimi VkBool32 DispatchGetPhysicalDeviceXlibPresentationSupportKHR(
3872*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3873*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueFamilyIndex,
3874*b7893ccfSSadaf Ebrahimi     Display*                                    dpy,
3875*b7893ccfSSadaf Ebrahimi     VisualID                                    visualID)
3876*b7893ccfSSadaf Ebrahimi {
3877*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3878*b7893ccfSSadaf Ebrahimi     VkBool32 result = layer_data->instance_dispatch_table.GetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID);
3879*b7893ccfSSadaf Ebrahimi 
3880*b7893ccfSSadaf Ebrahimi     return result;
3881*b7893ccfSSadaf Ebrahimi }
3882*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_XLIB_KHR
3883*b7893ccfSSadaf Ebrahimi 
3884*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XCB_KHR
3885*b7893ccfSSadaf Ebrahimi 
DispatchCreateXcbSurfaceKHR(VkInstance instance,const VkXcbSurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)3886*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateXcbSurfaceKHR(
3887*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
3888*b7893ccfSSadaf Ebrahimi     const VkXcbSurfaceCreateInfoKHR*            pCreateInfo,
3889*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
3890*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface)
3891*b7893ccfSSadaf Ebrahimi {
3892*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
3893*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
3894*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
3895*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
3896*b7893ccfSSadaf Ebrahimi         *pSurface = layer_data->WrapNew(*pSurface);
3897*b7893ccfSSadaf Ebrahimi     }
3898*b7893ccfSSadaf Ebrahimi     return result;
3899*b7893ccfSSadaf Ebrahimi }
3900*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_XCB_KHR
3901*b7893ccfSSadaf Ebrahimi 
3902*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XCB_KHR
3903*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex,xcb_connection_t * connection,xcb_visualid_t visual_id)3904*b7893ccfSSadaf Ebrahimi VkBool32 DispatchGetPhysicalDeviceXcbPresentationSupportKHR(
3905*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3906*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueFamilyIndex,
3907*b7893ccfSSadaf Ebrahimi     xcb_connection_t*                           connection,
3908*b7893ccfSSadaf Ebrahimi     xcb_visualid_t                              visual_id)
3909*b7893ccfSSadaf Ebrahimi {
3910*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3911*b7893ccfSSadaf Ebrahimi     VkBool32 result = layer_data->instance_dispatch_table.GetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id);
3912*b7893ccfSSadaf Ebrahimi 
3913*b7893ccfSSadaf Ebrahimi     return result;
3914*b7893ccfSSadaf Ebrahimi }
3915*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_XCB_KHR
3916*b7893ccfSSadaf Ebrahimi 
3917*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WAYLAND_KHR
3918*b7893ccfSSadaf Ebrahimi 
DispatchCreateWaylandSurfaceKHR(VkInstance instance,const VkWaylandSurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)3919*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateWaylandSurfaceKHR(
3920*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
3921*b7893ccfSSadaf Ebrahimi     const VkWaylandSurfaceCreateInfoKHR*        pCreateInfo,
3922*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
3923*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface)
3924*b7893ccfSSadaf Ebrahimi {
3925*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
3926*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
3927*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
3928*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
3929*b7893ccfSSadaf Ebrahimi         *pSurface = layer_data->WrapNew(*pSurface);
3930*b7893ccfSSadaf Ebrahimi     }
3931*b7893ccfSSadaf Ebrahimi     return result;
3932*b7893ccfSSadaf Ebrahimi }
3933*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WAYLAND_KHR
3934*b7893ccfSSadaf Ebrahimi 
3935*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WAYLAND_KHR
3936*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex,struct wl_display * display)3937*b7893ccfSSadaf Ebrahimi VkBool32 DispatchGetPhysicalDeviceWaylandPresentationSupportKHR(
3938*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3939*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueFamilyIndex,
3940*b7893ccfSSadaf Ebrahimi     struct wl_display*                          display)
3941*b7893ccfSSadaf Ebrahimi {
3942*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3943*b7893ccfSSadaf Ebrahimi     VkBool32 result = layer_data->instance_dispatch_table.GetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display);
3944*b7893ccfSSadaf Ebrahimi 
3945*b7893ccfSSadaf Ebrahimi     return result;
3946*b7893ccfSSadaf Ebrahimi }
3947*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WAYLAND_KHR
3948*b7893ccfSSadaf Ebrahimi 
3949*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_ANDROID_KHR
3950*b7893ccfSSadaf Ebrahimi 
DispatchCreateAndroidSurfaceKHR(VkInstance instance,const VkAndroidSurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)3951*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateAndroidSurfaceKHR(
3952*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
3953*b7893ccfSSadaf Ebrahimi     const VkAndroidSurfaceCreateInfoKHR*        pCreateInfo,
3954*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
3955*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface)
3956*b7893ccfSSadaf Ebrahimi {
3957*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
3958*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
3959*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
3960*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
3961*b7893ccfSSadaf Ebrahimi         *pSurface = layer_data->WrapNew(*pSurface);
3962*b7893ccfSSadaf Ebrahimi     }
3963*b7893ccfSSadaf Ebrahimi     return result;
3964*b7893ccfSSadaf Ebrahimi }
3965*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_ANDROID_KHR
3966*b7893ccfSSadaf Ebrahimi 
3967*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
3968*b7893ccfSSadaf Ebrahimi 
DispatchCreateWin32SurfaceKHR(VkInstance instance,const VkWin32SurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)3969*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateWin32SurfaceKHR(
3970*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
3971*b7893ccfSSadaf Ebrahimi     const VkWin32SurfaceCreateInfoKHR*          pCreateInfo,
3972*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
3973*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface)
3974*b7893ccfSSadaf Ebrahimi {
3975*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
3976*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
3977*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface);
3978*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
3979*b7893ccfSSadaf Ebrahimi         *pSurface = layer_data->WrapNew(*pSurface);
3980*b7893ccfSSadaf Ebrahimi     }
3981*b7893ccfSSadaf Ebrahimi     return result;
3982*b7893ccfSSadaf Ebrahimi }
3983*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
3984*b7893ccfSSadaf Ebrahimi 
3985*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
3986*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex)3987*b7893ccfSSadaf Ebrahimi VkBool32 DispatchGetPhysicalDeviceWin32PresentationSupportKHR(
3988*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
3989*b7893ccfSSadaf Ebrahimi     uint32_t                                    queueFamilyIndex)
3990*b7893ccfSSadaf Ebrahimi {
3991*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
3992*b7893ccfSSadaf Ebrahimi     VkBool32 result = layer_data->instance_dispatch_table.GetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex);
3993*b7893ccfSSadaf Ebrahimi 
3994*b7893ccfSSadaf Ebrahimi     return result;
3995*b7893ccfSSadaf Ebrahimi }
3996*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
3997*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceFeatures2KHR(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures2 * pFeatures)3998*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceFeatures2KHR(
3999*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4000*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceFeatures2*                  pFeatures)
4001*b7893ccfSSadaf Ebrahimi {
4002*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4003*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures);
4004*b7893ccfSSadaf Ebrahimi 
4005*b7893ccfSSadaf Ebrahimi }
4006*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceProperties2KHR(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties2 * pProperties)4007*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceProperties2KHR(
4008*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4009*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceProperties2*                pProperties)
4010*b7893ccfSSadaf Ebrahimi {
4011*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4012*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceProperties2KHR(physicalDevice, pProperties);
4013*b7893ccfSSadaf Ebrahimi 
4014*b7893ccfSSadaf Ebrahimi }
4015*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceFormatProperties2KHR(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties2 * pFormatProperties)4016*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceFormatProperties2KHR(
4017*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4018*b7893ccfSSadaf Ebrahimi     VkFormat                                    format,
4019*b7893ccfSSadaf Ebrahimi     VkFormatProperties2*                        pFormatProperties)
4020*b7893ccfSSadaf Ebrahimi {
4021*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4022*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, pFormatProperties);
4023*b7893ccfSSadaf Ebrahimi 
4024*b7893ccfSSadaf Ebrahimi }
4025*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceImageFormatProperties2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo,VkImageFormatProperties2 * pImageFormatProperties)4026*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceImageFormatProperties2KHR(
4027*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4028*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceImageFormatInfo2*     pImageFormatInfo,
4029*b7893ccfSSadaf Ebrahimi     VkImageFormatProperties2*                   pImageFormatProperties)
4030*b7893ccfSSadaf Ebrahimi {
4031*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4032*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, pImageFormatInfo, pImageFormatProperties);
4033*b7893ccfSSadaf Ebrahimi     safe_VkPhysicalDeviceImageFormatInfo2 *local_pImageFormatInfo = NULL;
4034*b7893ccfSSadaf Ebrahimi     {
4035*b7893ccfSSadaf Ebrahimi         if (pImageFormatInfo) {
4036*b7893ccfSSadaf Ebrahimi             local_pImageFormatInfo = new safe_VkPhysicalDeviceImageFormatInfo2(pImageFormatInfo);
4037*b7893ccfSSadaf Ebrahimi             WrapPnextChainHandles(layer_data, local_pImageFormatInfo->pNext);
4038*b7893ccfSSadaf Ebrahimi         }
4039*b7893ccfSSadaf Ebrahimi     }
4040*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceImageFormatProperties2KHR(physicalDevice, (const VkPhysicalDeviceImageFormatInfo2*)local_pImageFormatInfo, pImageFormatProperties);
4041*b7893ccfSSadaf Ebrahimi     if (local_pImageFormatInfo) {
4042*b7893ccfSSadaf Ebrahimi         delete local_pImageFormatInfo;
4043*b7893ccfSSadaf Ebrahimi     }
4044*b7893ccfSSadaf Ebrahimi     return result;
4045*b7893ccfSSadaf Ebrahimi }
4046*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceQueueFamilyProperties2KHR(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties2 * pQueueFamilyProperties)4047*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceQueueFamilyProperties2KHR(
4048*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4049*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pQueueFamilyPropertyCount,
4050*b7893ccfSSadaf Ebrahimi     VkQueueFamilyProperties2*                   pQueueFamilyProperties)
4051*b7893ccfSSadaf Ebrahimi {
4052*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4053*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceQueueFamilyProperties2KHR(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
4054*b7893ccfSSadaf Ebrahimi 
4055*b7893ccfSSadaf Ebrahimi }
4056*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceMemoryProperties2KHR(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties2 * pMemoryProperties)4057*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceMemoryProperties2KHR(
4058*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4059*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceMemoryProperties2*          pMemoryProperties)
4060*b7893ccfSSadaf Ebrahimi {
4061*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4062*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceMemoryProperties2KHR(physicalDevice, pMemoryProperties);
4063*b7893ccfSSadaf Ebrahimi 
4064*b7893ccfSSadaf Ebrahimi }
4065*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceSparseImageFormatProperties2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo,uint32_t * pPropertyCount,VkSparseImageFormatProperties2 * pProperties)4066*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceSparseImageFormatProperties2KHR(
4067*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4068*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
4069*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
4070*b7893ccfSSadaf Ebrahimi     VkSparseImageFormatProperties2*             pProperties)
4071*b7893ccfSSadaf Ebrahimi {
4072*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4073*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceSparseImageFormatProperties2KHR(physicalDevice, pFormatInfo, pPropertyCount, pProperties);
4074*b7893ccfSSadaf Ebrahimi 
4075*b7893ccfSSadaf Ebrahimi }
4076*b7893ccfSSadaf Ebrahimi 
DispatchGetDeviceGroupPeerMemoryFeaturesKHR(VkDevice device,uint32_t heapIndex,uint32_t localDeviceIndex,uint32_t remoteDeviceIndex,VkPeerMemoryFeatureFlags * pPeerMemoryFeatures)4077*b7893ccfSSadaf Ebrahimi void DispatchGetDeviceGroupPeerMemoryFeaturesKHR(
4078*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4079*b7893ccfSSadaf Ebrahimi     uint32_t                                    heapIndex,
4080*b7893ccfSSadaf Ebrahimi     uint32_t                                    localDeviceIndex,
4081*b7893ccfSSadaf Ebrahimi     uint32_t                                    remoteDeviceIndex,
4082*b7893ccfSSadaf Ebrahimi     VkPeerMemoryFeatureFlags*                   pPeerMemoryFeatures)
4083*b7893ccfSSadaf Ebrahimi {
4084*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4085*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetDeviceGroupPeerMemoryFeaturesKHR(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
4086*b7893ccfSSadaf Ebrahimi 
4087*b7893ccfSSadaf Ebrahimi }
4088*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetDeviceMaskKHR(VkCommandBuffer commandBuffer,uint32_t deviceMask)4089*b7893ccfSSadaf Ebrahimi void DispatchCmdSetDeviceMaskKHR(
4090*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
4091*b7893ccfSSadaf Ebrahimi     uint32_t                                    deviceMask)
4092*b7893ccfSSadaf Ebrahimi {
4093*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
4094*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetDeviceMaskKHR(commandBuffer, deviceMask);
4095*b7893ccfSSadaf Ebrahimi 
4096*b7893ccfSSadaf Ebrahimi }
4097*b7893ccfSSadaf Ebrahimi 
DispatchCmdDispatchBaseKHR(VkCommandBuffer commandBuffer,uint32_t baseGroupX,uint32_t baseGroupY,uint32_t baseGroupZ,uint32_t groupCountX,uint32_t groupCountY,uint32_t groupCountZ)4098*b7893ccfSSadaf Ebrahimi void DispatchCmdDispatchBaseKHR(
4099*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
4100*b7893ccfSSadaf Ebrahimi     uint32_t                                    baseGroupX,
4101*b7893ccfSSadaf Ebrahimi     uint32_t                                    baseGroupY,
4102*b7893ccfSSadaf Ebrahimi     uint32_t                                    baseGroupZ,
4103*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountX,
4104*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountY,
4105*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCountZ)
4106*b7893ccfSSadaf Ebrahimi {
4107*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
4108*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDispatchBaseKHR(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
4109*b7893ccfSSadaf Ebrahimi 
4110*b7893ccfSSadaf Ebrahimi }
4111*b7893ccfSSadaf Ebrahimi 
DispatchTrimCommandPoolKHR(VkDevice device,VkCommandPool commandPool,VkCommandPoolTrimFlags flags)4112*b7893ccfSSadaf Ebrahimi void DispatchTrimCommandPoolKHR(
4113*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4114*b7893ccfSSadaf Ebrahimi     VkCommandPool                               commandPool,
4115*b7893ccfSSadaf Ebrahimi     VkCommandPoolTrimFlags                      flags)
4116*b7893ccfSSadaf Ebrahimi {
4117*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4118*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.TrimCommandPoolKHR(device, commandPool, flags);
4119*b7893ccfSSadaf Ebrahimi     {
4120*b7893ccfSSadaf Ebrahimi         commandPool = layer_data->Unwrap(commandPool);
4121*b7893ccfSSadaf Ebrahimi     }
4122*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.TrimCommandPoolKHR(device, commandPool, flags);
4123*b7893ccfSSadaf Ebrahimi 
4124*b7893ccfSSadaf Ebrahimi }
4125*b7893ccfSSadaf Ebrahimi 
DispatchEnumeratePhysicalDeviceGroupsKHR(VkInstance instance,uint32_t * pPhysicalDeviceGroupCount,VkPhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties)4126*b7893ccfSSadaf Ebrahimi VkResult DispatchEnumeratePhysicalDeviceGroupsKHR(
4127*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
4128*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPhysicalDeviceGroupCount,
4129*b7893ccfSSadaf Ebrahimi     VkPhysicalDeviceGroupProperties*            pPhysicalDeviceGroupProperties)
4130*b7893ccfSSadaf Ebrahimi {
4131*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
4132*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.EnumeratePhysicalDeviceGroupsKHR(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
4133*b7893ccfSSadaf Ebrahimi 
4134*b7893ccfSSadaf Ebrahimi     return result;
4135*b7893ccfSSadaf Ebrahimi }
4136*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceExternalBufferPropertiesKHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo,VkExternalBufferProperties * pExternalBufferProperties)4137*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceExternalBufferPropertiesKHR(
4138*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4139*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceExternalBufferInfo*   pExternalBufferInfo,
4140*b7893ccfSSadaf Ebrahimi     VkExternalBufferProperties*                 pExternalBufferProperties)
4141*b7893ccfSSadaf Ebrahimi {
4142*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4143*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceExternalBufferPropertiesKHR(physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
4144*b7893ccfSSadaf Ebrahimi 
4145*b7893ccfSSadaf Ebrahimi }
4146*b7893ccfSSadaf Ebrahimi 
4147*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
4148*b7893ccfSSadaf Ebrahimi 
DispatchGetMemoryWin32HandleKHR(VkDevice device,const VkMemoryGetWin32HandleInfoKHR * pGetWin32HandleInfo,HANDLE * pHandle)4149*b7893ccfSSadaf Ebrahimi VkResult DispatchGetMemoryWin32HandleKHR(
4150*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4151*b7893ccfSSadaf Ebrahimi     const VkMemoryGetWin32HandleInfoKHR*        pGetWin32HandleInfo,
4152*b7893ccfSSadaf Ebrahimi     HANDLE*                                     pHandle)
4153*b7893ccfSSadaf Ebrahimi {
4154*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4155*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetMemoryWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
4156*b7893ccfSSadaf Ebrahimi     safe_VkMemoryGetWin32HandleInfoKHR *local_pGetWin32HandleInfo = NULL;
4157*b7893ccfSSadaf Ebrahimi     {
4158*b7893ccfSSadaf Ebrahimi         if (pGetWin32HandleInfo) {
4159*b7893ccfSSadaf Ebrahimi             local_pGetWin32HandleInfo = new safe_VkMemoryGetWin32HandleInfoKHR(pGetWin32HandleInfo);
4160*b7893ccfSSadaf Ebrahimi             if (pGetWin32HandleInfo->memory) {
4161*b7893ccfSSadaf Ebrahimi                 local_pGetWin32HandleInfo->memory = layer_data->Unwrap(pGetWin32HandleInfo->memory);
4162*b7893ccfSSadaf Ebrahimi             }
4163*b7893ccfSSadaf Ebrahimi         }
4164*b7893ccfSSadaf Ebrahimi     }
4165*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetMemoryWin32HandleKHR(device, (const VkMemoryGetWin32HandleInfoKHR*)local_pGetWin32HandleInfo, pHandle);
4166*b7893ccfSSadaf Ebrahimi     if (local_pGetWin32HandleInfo) {
4167*b7893ccfSSadaf Ebrahimi         delete local_pGetWin32HandleInfo;
4168*b7893ccfSSadaf Ebrahimi     }
4169*b7893ccfSSadaf Ebrahimi     return result;
4170*b7893ccfSSadaf Ebrahimi }
4171*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
4172*b7893ccfSSadaf Ebrahimi 
4173*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
4174*b7893ccfSSadaf Ebrahimi 
DispatchGetMemoryWin32HandlePropertiesKHR(VkDevice device,VkExternalMemoryHandleTypeFlagBits handleType,HANDLE handle,VkMemoryWin32HandlePropertiesKHR * pMemoryWin32HandleProperties)4175*b7893ccfSSadaf Ebrahimi VkResult DispatchGetMemoryWin32HandlePropertiesKHR(
4176*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4177*b7893ccfSSadaf Ebrahimi     VkExternalMemoryHandleTypeFlagBits          handleType,
4178*b7893ccfSSadaf Ebrahimi     HANDLE                                      handle,
4179*b7893ccfSSadaf Ebrahimi     VkMemoryWin32HandlePropertiesKHR*           pMemoryWin32HandleProperties)
4180*b7893ccfSSadaf Ebrahimi {
4181*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4182*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetMemoryWin32HandlePropertiesKHR(device, handleType, handle, pMemoryWin32HandleProperties);
4183*b7893ccfSSadaf Ebrahimi 
4184*b7893ccfSSadaf Ebrahimi     return result;
4185*b7893ccfSSadaf Ebrahimi }
4186*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
4187*b7893ccfSSadaf Ebrahimi 
DispatchGetMemoryFdKHR(VkDevice device,const VkMemoryGetFdInfoKHR * pGetFdInfo,int * pFd)4188*b7893ccfSSadaf Ebrahimi VkResult DispatchGetMemoryFdKHR(
4189*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4190*b7893ccfSSadaf Ebrahimi     const VkMemoryGetFdInfoKHR*                 pGetFdInfo,
4191*b7893ccfSSadaf Ebrahimi     int*                                        pFd)
4192*b7893ccfSSadaf Ebrahimi {
4193*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4194*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetMemoryFdKHR(device, pGetFdInfo, pFd);
4195*b7893ccfSSadaf Ebrahimi     safe_VkMemoryGetFdInfoKHR *local_pGetFdInfo = NULL;
4196*b7893ccfSSadaf Ebrahimi     {
4197*b7893ccfSSadaf Ebrahimi         if (pGetFdInfo) {
4198*b7893ccfSSadaf Ebrahimi             local_pGetFdInfo = new safe_VkMemoryGetFdInfoKHR(pGetFdInfo);
4199*b7893ccfSSadaf Ebrahimi             if (pGetFdInfo->memory) {
4200*b7893ccfSSadaf Ebrahimi                 local_pGetFdInfo->memory = layer_data->Unwrap(pGetFdInfo->memory);
4201*b7893ccfSSadaf Ebrahimi             }
4202*b7893ccfSSadaf Ebrahimi         }
4203*b7893ccfSSadaf Ebrahimi     }
4204*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetMemoryFdKHR(device, (const VkMemoryGetFdInfoKHR*)local_pGetFdInfo, pFd);
4205*b7893ccfSSadaf Ebrahimi     if (local_pGetFdInfo) {
4206*b7893ccfSSadaf Ebrahimi         delete local_pGetFdInfo;
4207*b7893ccfSSadaf Ebrahimi     }
4208*b7893ccfSSadaf Ebrahimi     return result;
4209*b7893ccfSSadaf Ebrahimi }
4210*b7893ccfSSadaf Ebrahimi 
DispatchGetMemoryFdPropertiesKHR(VkDevice device,VkExternalMemoryHandleTypeFlagBits handleType,int fd,VkMemoryFdPropertiesKHR * pMemoryFdProperties)4211*b7893ccfSSadaf Ebrahimi VkResult DispatchGetMemoryFdPropertiesKHR(
4212*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4213*b7893ccfSSadaf Ebrahimi     VkExternalMemoryHandleTypeFlagBits          handleType,
4214*b7893ccfSSadaf Ebrahimi     int                                         fd,
4215*b7893ccfSSadaf Ebrahimi     VkMemoryFdPropertiesKHR*                    pMemoryFdProperties)
4216*b7893ccfSSadaf Ebrahimi {
4217*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4218*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetMemoryFdPropertiesKHR(device, handleType, fd, pMemoryFdProperties);
4219*b7893ccfSSadaf Ebrahimi 
4220*b7893ccfSSadaf Ebrahimi     return result;
4221*b7893ccfSSadaf Ebrahimi }
4222*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceExternalSemaphorePropertiesKHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo,VkExternalSemaphoreProperties * pExternalSemaphoreProperties)4223*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceExternalSemaphorePropertiesKHR(
4224*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4225*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
4226*b7893ccfSSadaf Ebrahimi     VkExternalSemaphoreProperties*              pExternalSemaphoreProperties)
4227*b7893ccfSSadaf Ebrahimi {
4228*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4229*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceExternalSemaphorePropertiesKHR(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
4230*b7893ccfSSadaf Ebrahimi 
4231*b7893ccfSSadaf Ebrahimi }
4232*b7893ccfSSadaf Ebrahimi 
4233*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
4234*b7893ccfSSadaf Ebrahimi 
DispatchImportSemaphoreWin32HandleKHR(VkDevice device,const VkImportSemaphoreWin32HandleInfoKHR * pImportSemaphoreWin32HandleInfo)4235*b7893ccfSSadaf Ebrahimi VkResult DispatchImportSemaphoreWin32HandleKHR(
4236*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4237*b7893ccfSSadaf Ebrahimi     const VkImportSemaphoreWin32HandleInfoKHR*  pImportSemaphoreWin32HandleInfo)
4238*b7893ccfSSadaf Ebrahimi {
4239*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4240*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.ImportSemaphoreWin32HandleKHR(device, pImportSemaphoreWin32HandleInfo);
4241*b7893ccfSSadaf Ebrahimi     safe_VkImportSemaphoreWin32HandleInfoKHR *local_pImportSemaphoreWin32HandleInfo = NULL;
4242*b7893ccfSSadaf Ebrahimi     {
4243*b7893ccfSSadaf Ebrahimi         if (pImportSemaphoreWin32HandleInfo) {
4244*b7893ccfSSadaf Ebrahimi             local_pImportSemaphoreWin32HandleInfo = new safe_VkImportSemaphoreWin32HandleInfoKHR(pImportSemaphoreWin32HandleInfo);
4245*b7893ccfSSadaf Ebrahimi             if (pImportSemaphoreWin32HandleInfo->semaphore) {
4246*b7893ccfSSadaf Ebrahimi                 local_pImportSemaphoreWin32HandleInfo->semaphore = layer_data->Unwrap(pImportSemaphoreWin32HandleInfo->semaphore);
4247*b7893ccfSSadaf Ebrahimi             }
4248*b7893ccfSSadaf Ebrahimi         }
4249*b7893ccfSSadaf Ebrahimi     }
4250*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.ImportSemaphoreWin32HandleKHR(device, (const VkImportSemaphoreWin32HandleInfoKHR*)local_pImportSemaphoreWin32HandleInfo);
4251*b7893ccfSSadaf Ebrahimi     if (local_pImportSemaphoreWin32HandleInfo) {
4252*b7893ccfSSadaf Ebrahimi         delete local_pImportSemaphoreWin32HandleInfo;
4253*b7893ccfSSadaf Ebrahimi     }
4254*b7893ccfSSadaf Ebrahimi     return result;
4255*b7893ccfSSadaf Ebrahimi }
4256*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
4257*b7893ccfSSadaf Ebrahimi 
4258*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
4259*b7893ccfSSadaf Ebrahimi 
DispatchGetSemaphoreWin32HandleKHR(VkDevice device,const VkSemaphoreGetWin32HandleInfoKHR * pGetWin32HandleInfo,HANDLE * pHandle)4260*b7893ccfSSadaf Ebrahimi VkResult DispatchGetSemaphoreWin32HandleKHR(
4261*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4262*b7893ccfSSadaf Ebrahimi     const VkSemaphoreGetWin32HandleInfoKHR*     pGetWin32HandleInfo,
4263*b7893ccfSSadaf Ebrahimi     HANDLE*                                     pHandle)
4264*b7893ccfSSadaf Ebrahimi {
4265*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4266*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetSemaphoreWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
4267*b7893ccfSSadaf Ebrahimi     safe_VkSemaphoreGetWin32HandleInfoKHR *local_pGetWin32HandleInfo = NULL;
4268*b7893ccfSSadaf Ebrahimi     {
4269*b7893ccfSSadaf Ebrahimi         if (pGetWin32HandleInfo) {
4270*b7893ccfSSadaf Ebrahimi             local_pGetWin32HandleInfo = new safe_VkSemaphoreGetWin32HandleInfoKHR(pGetWin32HandleInfo);
4271*b7893ccfSSadaf Ebrahimi             if (pGetWin32HandleInfo->semaphore) {
4272*b7893ccfSSadaf Ebrahimi                 local_pGetWin32HandleInfo->semaphore = layer_data->Unwrap(pGetWin32HandleInfo->semaphore);
4273*b7893ccfSSadaf Ebrahimi             }
4274*b7893ccfSSadaf Ebrahimi         }
4275*b7893ccfSSadaf Ebrahimi     }
4276*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetSemaphoreWin32HandleKHR(device, (const VkSemaphoreGetWin32HandleInfoKHR*)local_pGetWin32HandleInfo, pHandle);
4277*b7893ccfSSadaf Ebrahimi     if (local_pGetWin32HandleInfo) {
4278*b7893ccfSSadaf Ebrahimi         delete local_pGetWin32HandleInfo;
4279*b7893ccfSSadaf Ebrahimi     }
4280*b7893ccfSSadaf Ebrahimi     return result;
4281*b7893ccfSSadaf Ebrahimi }
4282*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
4283*b7893ccfSSadaf Ebrahimi 
DispatchImportSemaphoreFdKHR(VkDevice device,const VkImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo)4284*b7893ccfSSadaf Ebrahimi VkResult DispatchImportSemaphoreFdKHR(
4285*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4286*b7893ccfSSadaf Ebrahimi     const VkImportSemaphoreFdInfoKHR*           pImportSemaphoreFdInfo)
4287*b7893ccfSSadaf Ebrahimi {
4288*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4289*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.ImportSemaphoreFdKHR(device, pImportSemaphoreFdInfo);
4290*b7893ccfSSadaf Ebrahimi     safe_VkImportSemaphoreFdInfoKHR *local_pImportSemaphoreFdInfo = NULL;
4291*b7893ccfSSadaf Ebrahimi     {
4292*b7893ccfSSadaf Ebrahimi         if (pImportSemaphoreFdInfo) {
4293*b7893ccfSSadaf Ebrahimi             local_pImportSemaphoreFdInfo = new safe_VkImportSemaphoreFdInfoKHR(pImportSemaphoreFdInfo);
4294*b7893ccfSSadaf Ebrahimi             if (pImportSemaphoreFdInfo->semaphore) {
4295*b7893ccfSSadaf Ebrahimi                 local_pImportSemaphoreFdInfo->semaphore = layer_data->Unwrap(pImportSemaphoreFdInfo->semaphore);
4296*b7893ccfSSadaf Ebrahimi             }
4297*b7893ccfSSadaf Ebrahimi         }
4298*b7893ccfSSadaf Ebrahimi     }
4299*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.ImportSemaphoreFdKHR(device, (const VkImportSemaphoreFdInfoKHR*)local_pImportSemaphoreFdInfo);
4300*b7893ccfSSadaf Ebrahimi     if (local_pImportSemaphoreFdInfo) {
4301*b7893ccfSSadaf Ebrahimi         delete local_pImportSemaphoreFdInfo;
4302*b7893ccfSSadaf Ebrahimi     }
4303*b7893ccfSSadaf Ebrahimi     return result;
4304*b7893ccfSSadaf Ebrahimi }
4305*b7893ccfSSadaf Ebrahimi 
DispatchGetSemaphoreFdKHR(VkDevice device,const VkSemaphoreGetFdInfoKHR * pGetFdInfo,int * pFd)4306*b7893ccfSSadaf Ebrahimi VkResult DispatchGetSemaphoreFdKHR(
4307*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4308*b7893ccfSSadaf Ebrahimi     const VkSemaphoreGetFdInfoKHR*              pGetFdInfo,
4309*b7893ccfSSadaf Ebrahimi     int*                                        pFd)
4310*b7893ccfSSadaf Ebrahimi {
4311*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4312*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetSemaphoreFdKHR(device, pGetFdInfo, pFd);
4313*b7893ccfSSadaf Ebrahimi     safe_VkSemaphoreGetFdInfoKHR *local_pGetFdInfo = NULL;
4314*b7893ccfSSadaf Ebrahimi     {
4315*b7893ccfSSadaf Ebrahimi         if (pGetFdInfo) {
4316*b7893ccfSSadaf Ebrahimi             local_pGetFdInfo = new safe_VkSemaphoreGetFdInfoKHR(pGetFdInfo);
4317*b7893ccfSSadaf Ebrahimi             if (pGetFdInfo->semaphore) {
4318*b7893ccfSSadaf Ebrahimi                 local_pGetFdInfo->semaphore = layer_data->Unwrap(pGetFdInfo->semaphore);
4319*b7893ccfSSadaf Ebrahimi             }
4320*b7893ccfSSadaf Ebrahimi         }
4321*b7893ccfSSadaf Ebrahimi     }
4322*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetSemaphoreFdKHR(device, (const VkSemaphoreGetFdInfoKHR*)local_pGetFdInfo, pFd);
4323*b7893ccfSSadaf Ebrahimi     if (local_pGetFdInfo) {
4324*b7893ccfSSadaf Ebrahimi         delete local_pGetFdInfo;
4325*b7893ccfSSadaf Ebrahimi     }
4326*b7893ccfSSadaf Ebrahimi     return result;
4327*b7893ccfSSadaf Ebrahimi }
4328*b7893ccfSSadaf Ebrahimi 
DispatchCmdPushDescriptorSetKHR(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipelineLayout layout,uint32_t set,uint32_t descriptorWriteCount,const VkWriteDescriptorSet * pDescriptorWrites)4329*b7893ccfSSadaf Ebrahimi void DispatchCmdPushDescriptorSetKHR(
4330*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
4331*b7893ccfSSadaf Ebrahimi     VkPipelineBindPoint                         pipelineBindPoint,
4332*b7893ccfSSadaf Ebrahimi     VkPipelineLayout                            layout,
4333*b7893ccfSSadaf Ebrahimi     uint32_t                                    set,
4334*b7893ccfSSadaf Ebrahimi     uint32_t                                    descriptorWriteCount,
4335*b7893ccfSSadaf Ebrahimi     const VkWriteDescriptorSet*                 pDescriptorWrites)
4336*b7893ccfSSadaf Ebrahimi {
4337*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
4338*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites);
4339*b7893ccfSSadaf Ebrahimi     safe_VkWriteDescriptorSet *local_pDescriptorWrites = NULL;
4340*b7893ccfSSadaf Ebrahimi     {
4341*b7893ccfSSadaf Ebrahimi         layout = layer_data->Unwrap(layout);
4342*b7893ccfSSadaf Ebrahimi         if (pDescriptorWrites) {
4343*b7893ccfSSadaf Ebrahimi             local_pDescriptorWrites = new safe_VkWriteDescriptorSet[descriptorWriteCount];
4344*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < descriptorWriteCount; ++index0) {
4345*b7893ccfSSadaf Ebrahimi                 local_pDescriptorWrites[index0].initialize(&pDescriptorWrites[index0]);
4346*b7893ccfSSadaf Ebrahimi                 WrapPnextChainHandles(layer_data, local_pDescriptorWrites[index0].pNext);
4347*b7893ccfSSadaf Ebrahimi                 if (pDescriptorWrites[index0].dstSet) {
4348*b7893ccfSSadaf Ebrahimi                     local_pDescriptorWrites[index0].dstSet = layer_data->Unwrap(pDescriptorWrites[index0].dstSet);
4349*b7893ccfSSadaf Ebrahimi                 }
4350*b7893ccfSSadaf Ebrahimi                 if (local_pDescriptorWrites[index0].pImageInfo) {
4351*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pDescriptorWrites[index0].descriptorCount; ++index1) {
4352*b7893ccfSSadaf Ebrahimi                         if (pDescriptorWrites[index0].pImageInfo[index1].sampler) {
4353*b7893ccfSSadaf Ebrahimi                             local_pDescriptorWrites[index0].pImageInfo[index1].sampler = layer_data->Unwrap(pDescriptorWrites[index0].pImageInfo[index1].sampler);
4354*b7893ccfSSadaf Ebrahimi                         }
4355*b7893ccfSSadaf Ebrahimi                         if (pDescriptorWrites[index0].pImageInfo[index1].imageView) {
4356*b7893ccfSSadaf Ebrahimi                             local_pDescriptorWrites[index0].pImageInfo[index1].imageView = layer_data->Unwrap(pDescriptorWrites[index0].pImageInfo[index1].imageView);
4357*b7893ccfSSadaf Ebrahimi                         }
4358*b7893ccfSSadaf Ebrahimi                     }
4359*b7893ccfSSadaf Ebrahimi                 }
4360*b7893ccfSSadaf Ebrahimi                 if (local_pDescriptorWrites[index0].pBufferInfo) {
4361*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pDescriptorWrites[index0].descriptorCount; ++index1) {
4362*b7893ccfSSadaf Ebrahimi                         if (pDescriptorWrites[index0].pBufferInfo[index1].buffer) {
4363*b7893ccfSSadaf Ebrahimi                             local_pDescriptorWrites[index0].pBufferInfo[index1].buffer = layer_data->Unwrap(pDescriptorWrites[index0].pBufferInfo[index1].buffer);
4364*b7893ccfSSadaf Ebrahimi                         }
4365*b7893ccfSSadaf Ebrahimi                     }
4366*b7893ccfSSadaf Ebrahimi                 }
4367*b7893ccfSSadaf Ebrahimi                 if (local_pDescriptorWrites[index0].pTexelBufferView) {
4368*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pDescriptorWrites[index0].descriptorCount; ++index1) {
4369*b7893ccfSSadaf Ebrahimi                         local_pDescriptorWrites[index0].pTexelBufferView[index1] = layer_data->Unwrap(local_pDescriptorWrites[index0].pTexelBufferView[index1]);
4370*b7893ccfSSadaf Ebrahimi                     }
4371*b7893ccfSSadaf Ebrahimi                 }
4372*b7893ccfSSadaf Ebrahimi             }
4373*b7893ccfSSadaf Ebrahimi         }
4374*b7893ccfSSadaf Ebrahimi     }
4375*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdPushDescriptorSetKHR(commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, (const VkWriteDescriptorSet*)local_pDescriptorWrites);
4376*b7893ccfSSadaf Ebrahimi     if (local_pDescriptorWrites) {
4377*b7893ccfSSadaf Ebrahimi         delete[] local_pDescriptorWrites;
4378*b7893ccfSSadaf Ebrahimi     }
4379*b7893ccfSSadaf Ebrahimi }
4380*b7893ccfSSadaf Ebrahimi 
4381*b7893ccfSSadaf Ebrahimi // Skip vkCmdPushDescriptorSetWithTemplateKHR dispatch, manually generated
4382*b7893ccfSSadaf Ebrahimi 
4383*b7893ccfSSadaf Ebrahimi // Skip vkCreateDescriptorUpdateTemplateKHR dispatch, manually generated
4384*b7893ccfSSadaf Ebrahimi 
4385*b7893ccfSSadaf Ebrahimi // Skip vkDestroyDescriptorUpdateTemplateKHR dispatch, manually generated
4386*b7893ccfSSadaf Ebrahimi 
4387*b7893ccfSSadaf Ebrahimi // Skip vkUpdateDescriptorSetWithTemplateKHR dispatch, manually generated
4388*b7893ccfSSadaf Ebrahimi 
4389*b7893ccfSSadaf Ebrahimi // Skip vkCreateRenderPass2KHR dispatch, manually generated
4390*b7893ccfSSadaf Ebrahimi 
DispatchCmdBeginRenderPass2KHR(VkCommandBuffer commandBuffer,const VkRenderPassBeginInfo * pRenderPassBegin,const VkSubpassBeginInfoKHR * pSubpassBeginInfo)4391*b7893ccfSSadaf Ebrahimi void DispatchCmdBeginRenderPass2KHR(
4392*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
4393*b7893ccfSSadaf Ebrahimi     const VkRenderPassBeginInfo*                pRenderPassBegin,
4394*b7893ccfSSadaf Ebrahimi     const VkSubpassBeginInfoKHR*                pSubpassBeginInfo)
4395*b7893ccfSSadaf Ebrahimi {
4396*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
4397*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
4398*b7893ccfSSadaf Ebrahimi     safe_VkRenderPassBeginInfo *local_pRenderPassBegin = NULL;
4399*b7893ccfSSadaf Ebrahimi     {
4400*b7893ccfSSadaf Ebrahimi         if (pRenderPassBegin) {
4401*b7893ccfSSadaf Ebrahimi             local_pRenderPassBegin = new safe_VkRenderPassBeginInfo(pRenderPassBegin);
4402*b7893ccfSSadaf Ebrahimi             if (pRenderPassBegin->renderPass) {
4403*b7893ccfSSadaf Ebrahimi                 local_pRenderPassBegin->renderPass = layer_data->Unwrap(pRenderPassBegin->renderPass);
4404*b7893ccfSSadaf Ebrahimi             }
4405*b7893ccfSSadaf Ebrahimi             if (pRenderPassBegin->framebuffer) {
4406*b7893ccfSSadaf Ebrahimi                 local_pRenderPassBegin->framebuffer = layer_data->Unwrap(pRenderPassBegin->framebuffer);
4407*b7893ccfSSadaf Ebrahimi             }
4408*b7893ccfSSadaf Ebrahimi             WrapPnextChainHandles(layer_data, local_pRenderPassBegin->pNext);
4409*b7893ccfSSadaf Ebrahimi         }
4410*b7893ccfSSadaf Ebrahimi     }
4411*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBeginRenderPass2KHR(commandBuffer, (const VkRenderPassBeginInfo*)local_pRenderPassBegin, pSubpassBeginInfo);
4412*b7893ccfSSadaf Ebrahimi     if (local_pRenderPassBegin) {
4413*b7893ccfSSadaf Ebrahimi         delete local_pRenderPassBegin;
4414*b7893ccfSSadaf Ebrahimi     }
4415*b7893ccfSSadaf Ebrahimi }
4416*b7893ccfSSadaf Ebrahimi 
DispatchCmdNextSubpass2KHR(VkCommandBuffer commandBuffer,const VkSubpassBeginInfoKHR * pSubpassBeginInfo,const VkSubpassEndInfoKHR * pSubpassEndInfo)4417*b7893ccfSSadaf Ebrahimi void DispatchCmdNextSubpass2KHR(
4418*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
4419*b7893ccfSSadaf Ebrahimi     const VkSubpassBeginInfoKHR*                pSubpassBeginInfo,
4420*b7893ccfSSadaf Ebrahimi     const VkSubpassEndInfoKHR*                  pSubpassEndInfo)
4421*b7893ccfSSadaf Ebrahimi {
4422*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
4423*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdNextSubpass2KHR(commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
4424*b7893ccfSSadaf Ebrahimi 
4425*b7893ccfSSadaf Ebrahimi }
4426*b7893ccfSSadaf Ebrahimi 
DispatchCmdEndRenderPass2KHR(VkCommandBuffer commandBuffer,const VkSubpassEndInfoKHR * pSubpassEndInfo)4427*b7893ccfSSadaf Ebrahimi void DispatchCmdEndRenderPass2KHR(
4428*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
4429*b7893ccfSSadaf Ebrahimi     const VkSubpassEndInfoKHR*                  pSubpassEndInfo)
4430*b7893ccfSSadaf Ebrahimi {
4431*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
4432*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdEndRenderPass2KHR(commandBuffer, pSubpassEndInfo);
4433*b7893ccfSSadaf Ebrahimi 
4434*b7893ccfSSadaf Ebrahimi }
4435*b7893ccfSSadaf Ebrahimi 
DispatchGetSwapchainStatusKHR(VkDevice device,VkSwapchainKHR swapchain)4436*b7893ccfSSadaf Ebrahimi VkResult DispatchGetSwapchainStatusKHR(
4437*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4438*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain)
4439*b7893ccfSSadaf Ebrahimi {
4440*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4441*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetSwapchainStatusKHR(device, swapchain);
4442*b7893ccfSSadaf Ebrahimi     {
4443*b7893ccfSSadaf Ebrahimi         swapchain = layer_data->Unwrap(swapchain);
4444*b7893ccfSSadaf Ebrahimi     }
4445*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetSwapchainStatusKHR(device, swapchain);
4446*b7893ccfSSadaf Ebrahimi 
4447*b7893ccfSSadaf Ebrahimi     return result;
4448*b7893ccfSSadaf Ebrahimi }
4449*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceExternalFencePropertiesKHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo,VkExternalFenceProperties * pExternalFenceProperties)4450*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceExternalFencePropertiesKHR(
4451*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4452*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceExternalFenceInfo*    pExternalFenceInfo,
4453*b7893ccfSSadaf Ebrahimi     VkExternalFenceProperties*                  pExternalFenceProperties)
4454*b7893ccfSSadaf Ebrahimi {
4455*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4456*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceExternalFencePropertiesKHR(physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
4457*b7893ccfSSadaf Ebrahimi 
4458*b7893ccfSSadaf Ebrahimi }
4459*b7893ccfSSadaf Ebrahimi 
4460*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
4461*b7893ccfSSadaf Ebrahimi 
DispatchImportFenceWin32HandleKHR(VkDevice device,const VkImportFenceWin32HandleInfoKHR * pImportFenceWin32HandleInfo)4462*b7893ccfSSadaf Ebrahimi VkResult DispatchImportFenceWin32HandleKHR(
4463*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4464*b7893ccfSSadaf Ebrahimi     const VkImportFenceWin32HandleInfoKHR*      pImportFenceWin32HandleInfo)
4465*b7893ccfSSadaf Ebrahimi {
4466*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4467*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.ImportFenceWin32HandleKHR(device, pImportFenceWin32HandleInfo);
4468*b7893ccfSSadaf Ebrahimi     safe_VkImportFenceWin32HandleInfoKHR *local_pImportFenceWin32HandleInfo = NULL;
4469*b7893ccfSSadaf Ebrahimi     {
4470*b7893ccfSSadaf Ebrahimi         if (pImportFenceWin32HandleInfo) {
4471*b7893ccfSSadaf Ebrahimi             local_pImportFenceWin32HandleInfo = new safe_VkImportFenceWin32HandleInfoKHR(pImportFenceWin32HandleInfo);
4472*b7893ccfSSadaf Ebrahimi             if (pImportFenceWin32HandleInfo->fence) {
4473*b7893ccfSSadaf Ebrahimi                 local_pImportFenceWin32HandleInfo->fence = layer_data->Unwrap(pImportFenceWin32HandleInfo->fence);
4474*b7893ccfSSadaf Ebrahimi             }
4475*b7893ccfSSadaf Ebrahimi         }
4476*b7893ccfSSadaf Ebrahimi     }
4477*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.ImportFenceWin32HandleKHR(device, (const VkImportFenceWin32HandleInfoKHR*)local_pImportFenceWin32HandleInfo);
4478*b7893ccfSSadaf Ebrahimi     if (local_pImportFenceWin32HandleInfo) {
4479*b7893ccfSSadaf Ebrahimi         delete local_pImportFenceWin32HandleInfo;
4480*b7893ccfSSadaf Ebrahimi     }
4481*b7893ccfSSadaf Ebrahimi     return result;
4482*b7893ccfSSadaf Ebrahimi }
4483*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
4484*b7893ccfSSadaf Ebrahimi 
4485*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
4486*b7893ccfSSadaf Ebrahimi 
DispatchGetFenceWin32HandleKHR(VkDevice device,const VkFenceGetWin32HandleInfoKHR * pGetWin32HandleInfo,HANDLE * pHandle)4487*b7893ccfSSadaf Ebrahimi VkResult DispatchGetFenceWin32HandleKHR(
4488*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4489*b7893ccfSSadaf Ebrahimi     const VkFenceGetWin32HandleInfoKHR*         pGetWin32HandleInfo,
4490*b7893ccfSSadaf Ebrahimi     HANDLE*                                     pHandle)
4491*b7893ccfSSadaf Ebrahimi {
4492*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4493*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetFenceWin32HandleKHR(device, pGetWin32HandleInfo, pHandle);
4494*b7893ccfSSadaf Ebrahimi     safe_VkFenceGetWin32HandleInfoKHR *local_pGetWin32HandleInfo = NULL;
4495*b7893ccfSSadaf Ebrahimi     {
4496*b7893ccfSSadaf Ebrahimi         if (pGetWin32HandleInfo) {
4497*b7893ccfSSadaf Ebrahimi             local_pGetWin32HandleInfo = new safe_VkFenceGetWin32HandleInfoKHR(pGetWin32HandleInfo);
4498*b7893ccfSSadaf Ebrahimi             if (pGetWin32HandleInfo->fence) {
4499*b7893ccfSSadaf Ebrahimi                 local_pGetWin32HandleInfo->fence = layer_data->Unwrap(pGetWin32HandleInfo->fence);
4500*b7893ccfSSadaf Ebrahimi             }
4501*b7893ccfSSadaf Ebrahimi         }
4502*b7893ccfSSadaf Ebrahimi     }
4503*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetFenceWin32HandleKHR(device, (const VkFenceGetWin32HandleInfoKHR*)local_pGetWin32HandleInfo, pHandle);
4504*b7893ccfSSadaf Ebrahimi     if (local_pGetWin32HandleInfo) {
4505*b7893ccfSSadaf Ebrahimi         delete local_pGetWin32HandleInfo;
4506*b7893ccfSSadaf Ebrahimi     }
4507*b7893ccfSSadaf Ebrahimi     return result;
4508*b7893ccfSSadaf Ebrahimi }
4509*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
4510*b7893ccfSSadaf Ebrahimi 
DispatchImportFenceFdKHR(VkDevice device,const VkImportFenceFdInfoKHR * pImportFenceFdInfo)4511*b7893ccfSSadaf Ebrahimi VkResult DispatchImportFenceFdKHR(
4512*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4513*b7893ccfSSadaf Ebrahimi     const VkImportFenceFdInfoKHR*               pImportFenceFdInfo)
4514*b7893ccfSSadaf Ebrahimi {
4515*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4516*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.ImportFenceFdKHR(device, pImportFenceFdInfo);
4517*b7893ccfSSadaf Ebrahimi     safe_VkImportFenceFdInfoKHR *local_pImportFenceFdInfo = NULL;
4518*b7893ccfSSadaf Ebrahimi     {
4519*b7893ccfSSadaf Ebrahimi         if (pImportFenceFdInfo) {
4520*b7893ccfSSadaf Ebrahimi             local_pImportFenceFdInfo = new safe_VkImportFenceFdInfoKHR(pImportFenceFdInfo);
4521*b7893ccfSSadaf Ebrahimi             if (pImportFenceFdInfo->fence) {
4522*b7893ccfSSadaf Ebrahimi                 local_pImportFenceFdInfo->fence = layer_data->Unwrap(pImportFenceFdInfo->fence);
4523*b7893ccfSSadaf Ebrahimi             }
4524*b7893ccfSSadaf Ebrahimi         }
4525*b7893ccfSSadaf Ebrahimi     }
4526*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.ImportFenceFdKHR(device, (const VkImportFenceFdInfoKHR*)local_pImportFenceFdInfo);
4527*b7893ccfSSadaf Ebrahimi     if (local_pImportFenceFdInfo) {
4528*b7893ccfSSadaf Ebrahimi         delete local_pImportFenceFdInfo;
4529*b7893ccfSSadaf Ebrahimi     }
4530*b7893ccfSSadaf Ebrahimi     return result;
4531*b7893ccfSSadaf Ebrahimi }
4532*b7893ccfSSadaf Ebrahimi 
DispatchGetFenceFdKHR(VkDevice device,const VkFenceGetFdInfoKHR * pGetFdInfo,int * pFd)4533*b7893ccfSSadaf Ebrahimi VkResult DispatchGetFenceFdKHR(
4534*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4535*b7893ccfSSadaf Ebrahimi     const VkFenceGetFdInfoKHR*                  pGetFdInfo,
4536*b7893ccfSSadaf Ebrahimi     int*                                        pFd)
4537*b7893ccfSSadaf Ebrahimi {
4538*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4539*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetFenceFdKHR(device, pGetFdInfo, pFd);
4540*b7893ccfSSadaf Ebrahimi     safe_VkFenceGetFdInfoKHR *local_pGetFdInfo = NULL;
4541*b7893ccfSSadaf Ebrahimi     {
4542*b7893ccfSSadaf Ebrahimi         if (pGetFdInfo) {
4543*b7893ccfSSadaf Ebrahimi             local_pGetFdInfo = new safe_VkFenceGetFdInfoKHR(pGetFdInfo);
4544*b7893ccfSSadaf Ebrahimi             if (pGetFdInfo->fence) {
4545*b7893ccfSSadaf Ebrahimi                 local_pGetFdInfo->fence = layer_data->Unwrap(pGetFdInfo->fence);
4546*b7893ccfSSadaf Ebrahimi             }
4547*b7893ccfSSadaf Ebrahimi         }
4548*b7893ccfSSadaf Ebrahimi     }
4549*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetFenceFdKHR(device, (const VkFenceGetFdInfoKHR*)local_pGetFdInfo, pFd);
4550*b7893ccfSSadaf Ebrahimi     if (local_pGetFdInfo) {
4551*b7893ccfSSadaf Ebrahimi         delete local_pGetFdInfo;
4552*b7893ccfSSadaf Ebrahimi     }
4553*b7893ccfSSadaf Ebrahimi     return result;
4554*b7893ccfSSadaf Ebrahimi }
4555*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,VkSurfaceCapabilities2KHR * pSurfaceCapabilities)4556*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceSurfaceCapabilities2KHR(
4557*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4558*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
4559*b7893ccfSSadaf Ebrahimi     VkSurfaceCapabilities2KHR*                  pSurfaceCapabilities)
4560*b7893ccfSSadaf Ebrahimi {
4561*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4562*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, pSurfaceInfo, pSurfaceCapabilities);
4563*b7893ccfSSadaf Ebrahimi     safe_VkPhysicalDeviceSurfaceInfo2KHR *local_pSurfaceInfo = NULL;
4564*b7893ccfSSadaf Ebrahimi     {
4565*b7893ccfSSadaf Ebrahimi         if (pSurfaceInfo) {
4566*b7893ccfSSadaf Ebrahimi             local_pSurfaceInfo = new safe_VkPhysicalDeviceSurfaceInfo2KHR(pSurfaceInfo);
4567*b7893ccfSSadaf Ebrahimi             if (pSurfaceInfo->surface) {
4568*b7893ccfSSadaf Ebrahimi                 local_pSurfaceInfo->surface = layer_data->Unwrap(pSurfaceInfo->surface);
4569*b7893ccfSSadaf Ebrahimi             }
4570*b7893ccfSSadaf Ebrahimi         }
4571*b7893ccfSSadaf Ebrahimi     }
4572*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, (const VkPhysicalDeviceSurfaceInfo2KHR*)local_pSurfaceInfo, pSurfaceCapabilities);
4573*b7893ccfSSadaf Ebrahimi     if (local_pSurfaceInfo) {
4574*b7893ccfSSadaf Ebrahimi         delete local_pSurfaceInfo;
4575*b7893ccfSSadaf Ebrahimi     }
4576*b7893ccfSSadaf Ebrahimi     return result;
4577*b7893ccfSSadaf Ebrahimi }
4578*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,uint32_t * pSurfaceFormatCount,VkSurfaceFormat2KHR * pSurfaceFormats)4579*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceSurfaceFormats2KHR(
4580*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4581*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
4582*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pSurfaceFormatCount,
4583*b7893ccfSSadaf Ebrahimi     VkSurfaceFormat2KHR*                        pSurfaceFormats)
4584*b7893ccfSSadaf Ebrahimi {
4585*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4586*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetPhysicalDeviceSurfaceFormats2KHR(physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats);
4587*b7893ccfSSadaf Ebrahimi     safe_VkPhysicalDeviceSurfaceInfo2KHR *local_pSurfaceInfo = NULL;
4588*b7893ccfSSadaf Ebrahimi     {
4589*b7893ccfSSadaf Ebrahimi         if (pSurfaceInfo) {
4590*b7893ccfSSadaf Ebrahimi             local_pSurfaceInfo = new safe_VkPhysicalDeviceSurfaceInfo2KHR(pSurfaceInfo);
4591*b7893ccfSSadaf Ebrahimi             if (pSurfaceInfo->surface) {
4592*b7893ccfSSadaf Ebrahimi                 local_pSurfaceInfo->surface = layer_data->Unwrap(pSurfaceInfo->surface);
4593*b7893ccfSSadaf Ebrahimi             }
4594*b7893ccfSSadaf Ebrahimi         }
4595*b7893ccfSSadaf Ebrahimi     }
4596*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceSurfaceFormats2KHR(physicalDevice, (const VkPhysicalDeviceSurfaceInfo2KHR*)local_pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats);
4597*b7893ccfSSadaf Ebrahimi     if (local_pSurfaceInfo) {
4598*b7893ccfSSadaf Ebrahimi         delete local_pSurfaceInfo;
4599*b7893ccfSSadaf Ebrahimi     }
4600*b7893ccfSSadaf Ebrahimi     return result;
4601*b7893ccfSSadaf Ebrahimi }
4602*b7893ccfSSadaf Ebrahimi 
4603*b7893ccfSSadaf Ebrahimi // Skip vkGetPhysicalDeviceDisplayProperties2KHR dispatch, manually generated
4604*b7893ccfSSadaf Ebrahimi 
4605*b7893ccfSSadaf Ebrahimi // Skip vkGetPhysicalDeviceDisplayPlaneProperties2KHR dispatch, manually generated
4606*b7893ccfSSadaf Ebrahimi 
4607*b7893ccfSSadaf Ebrahimi // Skip vkGetDisplayModeProperties2KHR dispatch, manually generated
4608*b7893ccfSSadaf Ebrahimi 
DispatchGetDisplayPlaneCapabilities2KHR(VkPhysicalDevice physicalDevice,const VkDisplayPlaneInfo2KHR * pDisplayPlaneInfo,VkDisplayPlaneCapabilities2KHR * pCapabilities)4609*b7893ccfSSadaf Ebrahimi VkResult DispatchGetDisplayPlaneCapabilities2KHR(
4610*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
4611*b7893ccfSSadaf Ebrahimi     const VkDisplayPlaneInfo2KHR*               pDisplayPlaneInfo,
4612*b7893ccfSSadaf Ebrahimi     VkDisplayPlaneCapabilities2KHR*             pCapabilities)
4613*b7893ccfSSadaf Ebrahimi {
4614*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
4615*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetDisplayPlaneCapabilities2KHR(physicalDevice, pDisplayPlaneInfo, pCapabilities);
4616*b7893ccfSSadaf Ebrahimi     safe_VkDisplayPlaneInfo2KHR *local_pDisplayPlaneInfo = NULL;
4617*b7893ccfSSadaf Ebrahimi     {
4618*b7893ccfSSadaf Ebrahimi         if (pDisplayPlaneInfo) {
4619*b7893ccfSSadaf Ebrahimi             local_pDisplayPlaneInfo = new safe_VkDisplayPlaneInfo2KHR(pDisplayPlaneInfo);
4620*b7893ccfSSadaf Ebrahimi             if (pDisplayPlaneInfo->mode) {
4621*b7893ccfSSadaf Ebrahimi                 local_pDisplayPlaneInfo->mode = layer_data->Unwrap(pDisplayPlaneInfo->mode);
4622*b7893ccfSSadaf Ebrahimi             }
4623*b7893ccfSSadaf Ebrahimi         }
4624*b7893ccfSSadaf Ebrahimi     }
4625*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetDisplayPlaneCapabilities2KHR(physicalDevice, (const VkDisplayPlaneInfo2KHR*)local_pDisplayPlaneInfo, pCapabilities);
4626*b7893ccfSSadaf Ebrahimi     if (local_pDisplayPlaneInfo) {
4627*b7893ccfSSadaf Ebrahimi         delete local_pDisplayPlaneInfo;
4628*b7893ccfSSadaf Ebrahimi     }
4629*b7893ccfSSadaf Ebrahimi     return result;
4630*b7893ccfSSadaf Ebrahimi }
4631*b7893ccfSSadaf Ebrahimi 
DispatchGetImageMemoryRequirements2KHR(VkDevice device,const VkImageMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements)4632*b7893ccfSSadaf Ebrahimi void DispatchGetImageMemoryRequirements2KHR(
4633*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4634*b7893ccfSSadaf Ebrahimi     const VkImageMemoryRequirementsInfo2*       pInfo,
4635*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements2*                      pMemoryRequirements)
4636*b7893ccfSSadaf Ebrahimi {
4637*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4638*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetImageMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
4639*b7893ccfSSadaf Ebrahimi     safe_VkImageMemoryRequirementsInfo2 *local_pInfo = NULL;
4640*b7893ccfSSadaf Ebrahimi     {
4641*b7893ccfSSadaf Ebrahimi         if (pInfo) {
4642*b7893ccfSSadaf Ebrahimi             local_pInfo = new safe_VkImageMemoryRequirementsInfo2(pInfo);
4643*b7893ccfSSadaf Ebrahimi             if (pInfo->image) {
4644*b7893ccfSSadaf Ebrahimi                 local_pInfo->image = layer_data->Unwrap(pInfo->image);
4645*b7893ccfSSadaf Ebrahimi             }
4646*b7893ccfSSadaf Ebrahimi         }
4647*b7893ccfSSadaf Ebrahimi     }
4648*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetImageMemoryRequirements2KHR(device, (const VkImageMemoryRequirementsInfo2*)local_pInfo, pMemoryRequirements);
4649*b7893ccfSSadaf Ebrahimi     if (local_pInfo) {
4650*b7893ccfSSadaf Ebrahimi         delete local_pInfo;
4651*b7893ccfSSadaf Ebrahimi     }
4652*b7893ccfSSadaf Ebrahimi }
4653*b7893ccfSSadaf Ebrahimi 
DispatchGetBufferMemoryRequirements2KHR(VkDevice device,const VkBufferMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements)4654*b7893ccfSSadaf Ebrahimi void DispatchGetBufferMemoryRequirements2KHR(
4655*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4656*b7893ccfSSadaf Ebrahimi     const VkBufferMemoryRequirementsInfo2*      pInfo,
4657*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements2*                      pMemoryRequirements)
4658*b7893ccfSSadaf Ebrahimi {
4659*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4660*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetBufferMemoryRequirements2KHR(device, pInfo, pMemoryRequirements);
4661*b7893ccfSSadaf Ebrahimi     safe_VkBufferMemoryRequirementsInfo2 *local_pInfo = NULL;
4662*b7893ccfSSadaf Ebrahimi     {
4663*b7893ccfSSadaf Ebrahimi         if (pInfo) {
4664*b7893ccfSSadaf Ebrahimi             local_pInfo = new safe_VkBufferMemoryRequirementsInfo2(pInfo);
4665*b7893ccfSSadaf Ebrahimi             if (pInfo->buffer) {
4666*b7893ccfSSadaf Ebrahimi                 local_pInfo->buffer = layer_data->Unwrap(pInfo->buffer);
4667*b7893ccfSSadaf Ebrahimi             }
4668*b7893ccfSSadaf Ebrahimi         }
4669*b7893ccfSSadaf Ebrahimi     }
4670*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetBufferMemoryRequirements2KHR(device, (const VkBufferMemoryRequirementsInfo2*)local_pInfo, pMemoryRequirements);
4671*b7893ccfSSadaf Ebrahimi     if (local_pInfo) {
4672*b7893ccfSSadaf Ebrahimi         delete local_pInfo;
4673*b7893ccfSSadaf Ebrahimi     }
4674*b7893ccfSSadaf Ebrahimi }
4675*b7893ccfSSadaf Ebrahimi 
DispatchGetImageSparseMemoryRequirements2KHR(VkDevice device,const VkImageSparseMemoryRequirementsInfo2 * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements)4676*b7893ccfSSadaf Ebrahimi void DispatchGetImageSparseMemoryRequirements2KHR(
4677*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4678*b7893ccfSSadaf Ebrahimi     const VkImageSparseMemoryRequirementsInfo2* pInfo,
4679*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pSparseMemoryRequirementCount,
4680*b7893ccfSSadaf Ebrahimi     VkSparseImageMemoryRequirements2*           pSparseMemoryRequirements)
4681*b7893ccfSSadaf Ebrahimi {
4682*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4683*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetImageSparseMemoryRequirements2KHR(device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
4684*b7893ccfSSadaf Ebrahimi     safe_VkImageSparseMemoryRequirementsInfo2 *local_pInfo = NULL;
4685*b7893ccfSSadaf Ebrahimi     {
4686*b7893ccfSSadaf Ebrahimi         if (pInfo) {
4687*b7893ccfSSadaf Ebrahimi             local_pInfo = new safe_VkImageSparseMemoryRequirementsInfo2(pInfo);
4688*b7893ccfSSadaf Ebrahimi             if (pInfo->image) {
4689*b7893ccfSSadaf Ebrahimi                 local_pInfo->image = layer_data->Unwrap(pInfo->image);
4690*b7893ccfSSadaf Ebrahimi             }
4691*b7893ccfSSadaf Ebrahimi         }
4692*b7893ccfSSadaf Ebrahimi     }
4693*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetImageSparseMemoryRequirements2KHR(device, (const VkImageSparseMemoryRequirementsInfo2*)local_pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
4694*b7893ccfSSadaf Ebrahimi     if (local_pInfo) {
4695*b7893ccfSSadaf Ebrahimi         delete local_pInfo;
4696*b7893ccfSSadaf Ebrahimi     }
4697*b7893ccfSSadaf Ebrahimi }
4698*b7893ccfSSadaf Ebrahimi 
DispatchCreateSamplerYcbcrConversionKHR(VkDevice device,const VkSamplerYcbcrConversionCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSamplerYcbcrConversion * pYcbcrConversion)4699*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateSamplerYcbcrConversionKHR(
4700*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4701*b7893ccfSSadaf Ebrahimi     const VkSamplerYcbcrConversionCreateInfo*   pCreateInfo,
4702*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
4703*b7893ccfSSadaf Ebrahimi     VkSamplerYcbcrConversion*                   pYcbcrConversion)
4704*b7893ccfSSadaf Ebrahimi {
4705*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4706*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateSamplerYcbcrConversionKHR(device, pCreateInfo, pAllocator, pYcbcrConversion);
4707*b7893ccfSSadaf Ebrahimi     safe_VkSamplerYcbcrConversionCreateInfo *local_pCreateInfo = NULL;
4708*b7893ccfSSadaf Ebrahimi     {
4709*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
4710*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkSamplerYcbcrConversionCreateInfo(pCreateInfo);
4711*b7893ccfSSadaf Ebrahimi             WrapPnextChainHandles(layer_data, local_pCreateInfo->pNext);
4712*b7893ccfSSadaf Ebrahimi         }
4713*b7893ccfSSadaf Ebrahimi     }
4714*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateSamplerYcbcrConversionKHR(device, (const VkSamplerYcbcrConversionCreateInfo*)local_pCreateInfo, pAllocator, pYcbcrConversion);
4715*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
4716*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
4717*b7893ccfSSadaf Ebrahimi     }
4718*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
4719*b7893ccfSSadaf Ebrahimi         *pYcbcrConversion = layer_data->WrapNew(*pYcbcrConversion);
4720*b7893ccfSSadaf Ebrahimi     }
4721*b7893ccfSSadaf Ebrahimi     return result;
4722*b7893ccfSSadaf Ebrahimi }
4723*b7893ccfSSadaf Ebrahimi 
DispatchDestroySamplerYcbcrConversionKHR(VkDevice device,VkSamplerYcbcrConversion ycbcrConversion,const VkAllocationCallbacks * pAllocator)4724*b7893ccfSSadaf Ebrahimi void DispatchDestroySamplerYcbcrConversionKHR(
4725*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4726*b7893ccfSSadaf Ebrahimi     VkSamplerYcbcrConversion                    ycbcrConversion,
4727*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
4728*b7893ccfSSadaf Ebrahimi {
4729*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4730*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator);
4731*b7893ccfSSadaf Ebrahimi     uint64_t ycbcrConversion_id = reinterpret_cast<uint64_t &>(ycbcrConversion);
4732*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(ycbcrConversion_id);
4733*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
4734*b7893ccfSSadaf Ebrahimi         ycbcrConversion = (VkSamplerYcbcrConversion)iter->second;
4735*b7893ccfSSadaf Ebrahimi     } else {
4736*b7893ccfSSadaf Ebrahimi         ycbcrConversion = (VkSamplerYcbcrConversion)0;
4737*b7893ccfSSadaf Ebrahimi     }
4738*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroySamplerYcbcrConversionKHR(device, ycbcrConversion, pAllocator);
4739*b7893ccfSSadaf Ebrahimi 
4740*b7893ccfSSadaf Ebrahimi }
4741*b7893ccfSSadaf Ebrahimi 
DispatchBindBufferMemory2KHR(VkDevice device,uint32_t bindInfoCount,const VkBindBufferMemoryInfo * pBindInfos)4742*b7893ccfSSadaf Ebrahimi VkResult DispatchBindBufferMemory2KHR(
4743*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4744*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindInfoCount,
4745*b7893ccfSSadaf Ebrahimi     const VkBindBufferMemoryInfo*               pBindInfos)
4746*b7893ccfSSadaf Ebrahimi {
4747*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4748*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.BindBufferMemory2KHR(device, bindInfoCount, pBindInfos);
4749*b7893ccfSSadaf Ebrahimi     safe_VkBindBufferMemoryInfo *local_pBindInfos = NULL;
4750*b7893ccfSSadaf Ebrahimi     {
4751*b7893ccfSSadaf Ebrahimi         if (pBindInfos) {
4752*b7893ccfSSadaf Ebrahimi             local_pBindInfos = new safe_VkBindBufferMemoryInfo[bindInfoCount];
4753*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < bindInfoCount; ++index0) {
4754*b7893ccfSSadaf Ebrahimi                 local_pBindInfos[index0].initialize(&pBindInfos[index0]);
4755*b7893ccfSSadaf Ebrahimi                 if (pBindInfos[index0].buffer) {
4756*b7893ccfSSadaf Ebrahimi                     local_pBindInfos[index0].buffer = layer_data->Unwrap(pBindInfos[index0].buffer);
4757*b7893ccfSSadaf Ebrahimi                 }
4758*b7893ccfSSadaf Ebrahimi                 if (pBindInfos[index0].memory) {
4759*b7893ccfSSadaf Ebrahimi                     local_pBindInfos[index0].memory = layer_data->Unwrap(pBindInfos[index0].memory);
4760*b7893ccfSSadaf Ebrahimi                 }
4761*b7893ccfSSadaf Ebrahimi             }
4762*b7893ccfSSadaf Ebrahimi         }
4763*b7893ccfSSadaf Ebrahimi     }
4764*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.BindBufferMemory2KHR(device, bindInfoCount, (const VkBindBufferMemoryInfo*)local_pBindInfos);
4765*b7893ccfSSadaf Ebrahimi     if (local_pBindInfos) {
4766*b7893ccfSSadaf Ebrahimi         delete[] local_pBindInfos;
4767*b7893ccfSSadaf Ebrahimi     }
4768*b7893ccfSSadaf Ebrahimi     return result;
4769*b7893ccfSSadaf Ebrahimi }
4770*b7893ccfSSadaf Ebrahimi 
DispatchBindImageMemory2KHR(VkDevice device,uint32_t bindInfoCount,const VkBindImageMemoryInfo * pBindInfos)4771*b7893ccfSSadaf Ebrahimi VkResult DispatchBindImageMemory2KHR(
4772*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4773*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindInfoCount,
4774*b7893ccfSSadaf Ebrahimi     const VkBindImageMemoryInfo*                pBindInfos)
4775*b7893ccfSSadaf Ebrahimi {
4776*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4777*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.BindImageMemory2KHR(device, bindInfoCount, pBindInfos);
4778*b7893ccfSSadaf Ebrahimi     safe_VkBindImageMemoryInfo *local_pBindInfos = NULL;
4779*b7893ccfSSadaf Ebrahimi     {
4780*b7893ccfSSadaf Ebrahimi         if (pBindInfos) {
4781*b7893ccfSSadaf Ebrahimi             local_pBindInfos = new safe_VkBindImageMemoryInfo[bindInfoCount];
4782*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < bindInfoCount; ++index0) {
4783*b7893ccfSSadaf Ebrahimi                 local_pBindInfos[index0].initialize(&pBindInfos[index0]);
4784*b7893ccfSSadaf Ebrahimi                 WrapPnextChainHandles(layer_data, local_pBindInfos[index0].pNext);
4785*b7893ccfSSadaf Ebrahimi                 if (pBindInfos[index0].image) {
4786*b7893ccfSSadaf Ebrahimi                     local_pBindInfos[index0].image = layer_data->Unwrap(pBindInfos[index0].image);
4787*b7893ccfSSadaf Ebrahimi                 }
4788*b7893ccfSSadaf Ebrahimi                 if (pBindInfos[index0].memory) {
4789*b7893ccfSSadaf Ebrahimi                     local_pBindInfos[index0].memory = layer_data->Unwrap(pBindInfos[index0].memory);
4790*b7893ccfSSadaf Ebrahimi                 }
4791*b7893ccfSSadaf Ebrahimi             }
4792*b7893ccfSSadaf Ebrahimi         }
4793*b7893ccfSSadaf Ebrahimi     }
4794*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.BindImageMemory2KHR(device, bindInfoCount, (const VkBindImageMemoryInfo*)local_pBindInfos);
4795*b7893ccfSSadaf Ebrahimi     if (local_pBindInfos) {
4796*b7893ccfSSadaf Ebrahimi         delete[] local_pBindInfos;
4797*b7893ccfSSadaf Ebrahimi     }
4798*b7893ccfSSadaf Ebrahimi     return result;
4799*b7893ccfSSadaf Ebrahimi }
4800*b7893ccfSSadaf Ebrahimi 
DispatchGetDescriptorSetLayoutSupportKHR(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,VkDescriptorSetLayoutSupport * pSupport)4801*b7893ccfSSadaf Ebrahimi void DispatchGetDescriptorSetLayoutSupportKHR(
4802*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4803*b7893ccfSSadaf Ebrahimi     const VkDescriptorSetLayoutCreateInfo*      pCreateInfo,
4804*b7893ccfSSadaf Ebrahimi     VkDescriptorSetLayoutSupport*               pSupport)
4805*b7893ccfSSadaf Ebrahimi {
4806*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4807*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetDescriptorSetLayoutSupportKHR(device, pCreateInfo, pSupport);
4808*b7893ccfSSadaf Ebrahimi     safe_VkDescriptorSetLayoutCreateInfo *local_pCreateInfo = NULL;
4809*b7893ccfSSadaf Ebrahimi     {
4810*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
4811*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkDescriptorSetLayoutCreateInfo(pCreateInfo);
4812*b7893ccfSSadaf Ebrahimi             if (local_pCreateInfo->pBindings) {
4813*b7893ccfSSadaf Ebrahimi                 for (uint32_t index1 = 0; index1 < local_pCreateInfo->bindingCount; ++index1) {
4814*b7893ccfSSadaf Ebrahimi                     if (local_pCreateInfo->pBindings[index1].pImmutableSamplers) {
4815*b7893ccfSSadaf Ebrahimi                         for (uint32_t index2 = 0; index2 < local_pCreateInfo->pBindings[index1].descriptorCount; ++index2) {
4816*b7893ccfSSadaf Ebrahimi                             local_pCreateInfo->pBindings[index1].pImmutableSamplers[index2] = layer_data->Unwrap(local_pCreateInfo->pBindings[index1].pImmutableSamplers[index2]);
4817*b7893ccfSSadaf Ebrahimi                         }
4818*b7893ccfSSadaf Ebrahimi                     }
4819*b7893ccfSSadaf Ebrahimi                 }
4820*b7893ccfSSadaf Ebrahimi             }
4821*b7893ccfSSadaf Ebrahimi         }
4822*b7893ccfSSadaf Ebrahimi     }
4823*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetDescriptorSetLayoutSupportKHR(device, (const VkDescriptorSetLayoutCreateInfo*)local_pCreateInfo, pSupport);
4824*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
4825*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
4826*b7893ccfSSadaf Ebrahimi     }
4827*b7893ccfSSadaf Ebrahimi }
4828*b7893ccfSSadaf Ebrahimi 
DispatchCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)4829*b7893ccfSSadaf Ebrahimi void DispatchCmdDrawIndirectCountKHR(
4830*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
4831*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
4832*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
4833*b7893ccfSSadaf Ebrahimi     VkBuffer                                    countBuffer,
4834*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                countBufferOffset,
4835*b7893ccfSSadaf Ebrahimi     uint32_t                                    maxDrawCount,
4836*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride)
4837*b7893ccfSSadaf Ebrahimi {
4838*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
4839*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
4840*b7893ccfSSadaf Ebrahimi     {
4841*b7893ccfSSadaf Ebrahimi         buffer = layer_data->Unwrap(buffer);
4842*b7893ccfSSadaf Ebrahimi         countBuffer = layer_data->Unwrap(countBuffer);
4843*b7893ccfSSadaf Ebrahimi     }
4844*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDrawIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
4845*b7893ccfSSadaf Ebrahimi 
4846*b7893ccfSSadaf Ebrahimi }
4847*b7893ccfSSadaf Ebrahimi 
DispatchCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)4848*b7893ccfSSadaf Ebrahimi void DispatchCmdDrawIndexedIndirectCountKHR(
4849*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
4850*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
4851*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
4852*b7893ccfSSadaf Ebrahimi     VkBuffer                                    countBuffer,
4853*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                countBufferOffset,
4854*b7893ccfSSadaf Ebrahimi     uint32_t                                    maxDrawCount,
4855*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride)
4856*b7893ccfSSadaf Ebrahimi {
4857*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
4858*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
4859*b7893ccfSSadaf Ebrahimi     {
4860*b7893ccfSSadaf Ebrahimi         buffer = layer_data->Unwrap(buffer);
4861*b7893ccfSSadaf Ebrahimi         countBuffer = layer_data->Unwrap(countBuffer);
4862*b7893ccfSSadaf Ebrahimi     }
4863*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDrawIndexedIndirectCountKHR(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
4864*b7893ccfSSadaf Ebrahimi 
4865*b7893ccfSSadaf Ebrahimi }
4866*b7893ccfSSadaf Ebrahimi 
DispatchGetPipelineExecutablePropertiesKHR(VkDevice device,const VkPipelineInfoKHR * pPipelineInfo,uint32_t * pExecutableCount,VkPipelineExecutablePropertiesKHR * pProperties)4867*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPipelineExecutablePropertiesKHR(
4868*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4869*b7893ccfSSadaf Ebrahimi     const VkPipelineInfoKHR*                    pPipelineInfo,
4870*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pExecutableCount,
4871*b7893ccfSSadaf Ebrahimi     VkPipelineExecutablePropertiesKHR*          pProperties)
4872*b7893ccfSSadaf Ebrahimi {
4873*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4874*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetPipelineExecutablePropertiesKHR(device, pPipelineInfo, pExecutableCount, pProperties);
4875*b7893ccfSSadaf Ebrahimi     safe_VkPipelineInfoKHR *local_pPipelineInfo = NULL;
4876*b7893ccfSSadaf Ebrahimi     {
4877*b7893ccfSSadaf Ebrahimi         if (pPipelineInfo) {
4878*b7893ccfSSadaf Ebrahimi             local_pPipelineInfo = new safe_VkPipelineInfoKHR(pPipelineInfo);
4879*b7893ccfSSadaf Ebrahimi             if (pPipelineInfo->pipeline) {
4880*b7893ccfSSadaf Ebrahimi                 local_pPipelineInfo->pipeline = layer_data->Unwrap(pPipelineInfo->pipeline);
4881*b7893ccfSSadaf Ebrahimi             }
4882*b7893ccfSSadaf Ebrahimi         }
4883*b7893ccfSSadaf Ebrahimi     }
4884*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetPipelineExecutablePropertiesKHR(device, (const VkPipelineInfoKHR*)local_pPipelineInfo, pExecutableCount, pProperties);
4885*b7893ccfSSadaf Ebrahimi     if (local_pPipelineInfo) {
4886*b7893ccfSSadaf Ebrahimi         delete local_pPipelineInfo;
4887*b7893ccfSSadaf Ebrahimi     }
4888*b7893ccfSSadaf Ebrahimi     return result;
4889*b7893ccfSSadaf Ebrahimi }
4890*b7893ccfSSadaf Ebrahimi 
DispatchGetPipelineExecutableStatisticsKHR(VkDevice device,const VkPipelineExecutableInfoKHR * pExecutableInfo,uint32_t * pStatisticCount,VkPipelineExecutableStatisticKHR * pStatistics)4891*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPipelineExecutableStatisticsKHR(
4892*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4893*b7893ccfSSadaf Ebrahimi     const VkPipelineExecutableInfoKHR*          pExecutableInfo,
4894*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pStatisticCount,
4895*b7893ccfSSadaf Ebrahimi     VkPipelineExecutableStatisticKHR*           pStatistics)
4896*b7893ccfSSadaf Ebrahimi {
4897*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4898*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetPipelineExecutableStatisticsKHR(device, pExecutableInfo, pStatisticCount, pStatistics);
4899*b7893ccfSSadaf Ebrahimi     safe_VkPipelineExecutableInfoKHR *local_pExecutableInfo = NULL;
4900*b7893ccfSSadaf Ebrahimi     {
4901*b7893ccfSSadaf Ebrahimi         if (pExecutableInfo) {
4902*b7893ccfSSadaf Ebrahimi             local_pExecutableInfo = new safe_VkPipelineExecutableInfoKHR(pExecutableInfo);
4903*b7893ccfSSadaf Ebrahimi             if (pExecutableInfo->pipeline) {
4904*b7893ccfSSadaf Ebrahimi                 local_pExecutableInfo->pipeline = layer_data->Unwrap(pExecutableInfo->pipeline);
4905*b7893ccfSSadaf Ebrahimi             }
4906*b7893ccfSSadaf Ebrahimi         }
4907*b7893ccfSSadaf Ebrahimi     }
4908*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetPipelineExecutableStatisticsKHR(device, (const VkPipelineExecutableInfoKHR*)local_pExecutableInfo, pStatisticCount, pStatistics);
4909*b7893ccfSSadaf Ebrahimi     if (local_pExecutableInfo) {
4910*b7893ccfSSadaf Ebrahimi         delete local_pExecutableInfo;
4911*b7893ccfSSadaf Ebrahimi     }
4912*b7893ccfSSadaf Ebrahimi     return result;
4913*b7893ccfSSadaf Ebrahimi }
4914*b7893ccfSSadaf Ebrahimi 
DispatchGetPipelineExecutableInternalRepresentationsKHR(VkDevice device,const VkPipelineExecutableInfoKHR * pExecutableInfo,uint32_t * pInternalRepresentationCount,VkPipelineExecutableInternalRepresentationKHR * pInternalRepresentations)4915*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPipelineExecutableInternalRepresentationsKHR(
4916*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
4917*b7893ccfSSadaf Ebrahimi     const VkPipelineExecutableInfoKHR*          pExecutableInfo,
4918*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pInternalRepresentationCount,
4919*b7893ccfSSadaf Ebrahimi     VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations)
4920*b7893ccfSSadaf Ebrahimi {
4921*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
4922*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetPipelineExecutableInternalRepresentationsKHR(device, pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations);
4923*b7893ccfSSadaf Ebrahimi     safe_VkPipelineExecutableInfoKHR *local_pExecutableInfo = NULL;
4924*b7893ccfSSadaf Ebrahimi     {
4925*b7893ccfSSadaf Ebrahimi         if (pExecutableInfo) {
4926*b7893ccfSSadaf Ebrahimi             local_pExecutableInfo = new safe_VkPipelineExecutableInfoKHR(pExecutableInfo);
4927*b7893ccfSSadaf Ebrahimi             if (pExecutableInfo->pipeline) {
4928*b7893ccfSSadaf Ebrahimi                 local_pExecutableInfo->pipeline = layer_data->Unwrap(pExecutableInfo->pipeline);
4929*b7893ccfSSadaf Ebrahimi             }
4930*b7893ccfSSadaf Ebrahimi         }
4931*b7893ccfSSadaf Ebrahimi     }
4932*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetPipelineExecutableInternalRepresentationsKHR(device, (const VkPipelineExecutableInfoKHR*)local_pExecutableInfo, pInternalRepresentationCount, pInternalRepresentations);
4933*b7893ccfSSadaf Ebrahimi     if (local_pExecutableInfo) {
4934*b7893ccfSSadaf Ebrahimi         delete local_pExecutableInfo;
4935*b7893ccfSSadaf Ebrahimi     }
4936*b7893ccfSSadaf Ebrahimi     return result;
4937*b7893ccfSSadaf Ebrahimi }
4938*b7893ccfSSadaf Ebrahimi 
DispatchCreateDebugReportCallbackEXT(VkInstance instance,const VkDebugReportCallbackCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDebugReportCallbackEXT * pCallback)4939*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateDebugReportCallbackEXT(
4940*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
4941*b7893ccfSSadaf Ebrahimi     const VkDebugReportCallbackCreateInfoEXT*   pCreateInfo,
4942*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
4943*b7893ccfSSadaf Ebrahimi     VkDebugReportCallbackEXT*                   pCallback)
4944*b7893ccfSSadaf Ebrahimi {
4945*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
4946*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback);
4947*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback);
4948*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
4949*b7893ccfSSadaf Ebrahimi         *pCallback = layer_data->WrapNew(*pCallback);
4950*b7893ccfSSadaf Ebrahimi     }
4951*b7893ccfSSadaf Ebrahimi     return result;
4952*b7893ccfSSadaf Ebrahimi }
4953*b7893ccfSSadaf Ebrahimi 
DispatchDestroyDebugReportCallbackEXT(VkInstance instance,VkDebugReportCallbackEXT callback,const VkAllocationCallbacks * pAllocator)4954*b7893ccfSSadaf Ebrahimi void DispatchDestroyDebugReportCallbackEXT(
4955*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
4956*b7893ccfSSadaf Ebrahimi     VkDebugReportCallbackEXT                    callback,
4957*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
4958*b7893ccfSSadaf Ebrahimi {
4959*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
4960*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.DestroyDebugReportCallbackEXT(instance, callback, pAllocator);
4961*b7893ccfSSadaf Ebrahimi     uint64_t callback_id = reinterpret_cast<uint64_t &>(callback);
4962*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(callback_id);
4963*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
4964*b7893ccfSSadaf Ebrahimi         callback = (VkDebugReportCallbackEXT)iter->second;
4965*b7893ccfSSadaf Ebrahimi     } else {
4966*b7893ccfSSadaf Ebrahimi         callback = (VkDebugReportCallbackEXT)0;
4967*b7893ccfSSadaf Ebrahimi     }
4968*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.DestroyDebugReportCallbackEXT(instance, callback, pAllocator);
4969*b7893ccfSSadaf Ebrahimi 
4970*b7893ccfSSadaf Ebrahimi }
4971*b7893ccfSSadaf Ebrahimi 
DispatchDebugReportMessageEXT(VkInstance instance,VkDebugReportFlagsEXT flags,VkDebugReportObjectTypeEXT objectType,uint64_t object,size_t location,int32_t messageCode,const char * pLayerPrefix,const char * pMessage)4972*b7893ccfSSadaf Ebrahimi void DispatchDebugReportMessageEXT(
4973*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
4974*b7893ccfSSadaf Ebrahimi     VkDebugReportFlagsEXT                       flags,
4975*b7893ccfSSadaf Ebrahimi     VkDebugReportObjectTypeEXT                  objectType,
4976*b7893ccfSSadaf Ebrahimi     uint64_t                                    object,
4977*b7893ccfSSadaf Ebrahimi     size_t                                      location,
4978*b7893ccfSSadaf Ebrahimi     int32_t                                     messageCode,
4979*b7893ccfSSadaf Ebrahimi     const char*                                 pLayerPrefix,
4980*b7893ccfSSadaf Ebrahimi     const char*                                 pMessage)
4981*b7893ccfSSadaf Ebrahimi {
4982*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
4983*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.DebugReportMessageEXT(instance, flags, objectType, object, location, messageCode, pLayerPrefix, pMessage);
4984*b7893ccfSSadaf Ebrahimi 
4985*b7893ccfSSadaf Ebrahimi }
4986*b7893ccfSSadaf Ebrahimi 
4987*b7893ccfSSadaf Ebrahimi // Skip vkDebugMarkerSetObjectTagEXT dispatch, manually generated
4988*b7893ccfSSadaf Ebrahimi 
4989*b7893ccfSSadaf Ebrahimi // Skip vkDebugMarkerSetObjectNameEXT dispatch, manually generated
4990*b7893ccfSSadaf Ebrahimi 
DispatchCmdDebugMarkerBeginEXT(VkCommandBuffer commandBuffer,const VkDebugMarkerMarkerInfoEXT * pMarkerInfo)4991*b7893ccfSSadaf Ebrahimi void DispatchCmdDebugMarkerBeginEXT(
4992*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
4993*b7893ccfSSadaf Ebrahimi     const VkDebugMarkerMarkerInfoEXT*           pMarkerInfo)
4994*b7893ccfSSadaf Ebrahimi {
4995*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
4996*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo);
4997*b7893ccfSSadaf Ebrahimi 
4998*b7893ccfSSadaf Ebrahimi }
4999*b7893ccfSSadaf Ebrahimi 
DispatchCmdDebugMarkerEndEXT(VkCommandBuffer commandBuffer)5000*b7893ccfSSadaf Ebrahimi void DispatchCmdDebugMarkerEndEXT(
5001*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer)
5002*b7893ccfSSadaf Ebrahimi {
5003*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5004*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDebugMarkerEndEXT(commandBuffer);
5005*b7893ccfSSadaf Ebrahimi 
5006*b7893ccfSSadaf Ebrahimi }
5007*b7893ccfSSadaf Ebrahimi 
DispatchCmdDebugMarkerInsertEXT(VkCommandBuffer commandBuffer,const VkDebugMarkerMarkerInfoEXT * pMarkerInfo)5008*b7893ccfSSadaf Ebrahimi void DispatchCmdDebugMarkerInsertEXT(
5009*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5010*b7893ccfSSadaf Ebrahimi     const VkDebugMarkerMarkerInfoEXT*           pMarkerInfo)
5011*b7893ccfSSadaf Ebrahimi {
5012*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5013*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo);
5014*b7893ccfSSadaf Ebrahimi 
5015*b7893ccfSSadaf Ebrahimi }
5016*b7893ccfSSadaf Ebrahimi 
DispatchCmdBindTransformFeedbackBuffersEXT(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const VkBuffer * pBuffers,const VkDeviceSize * pOffsets,const VkDeviceSize * pSizes)5017*b7893ccfSSadaf Ebrahimi void DispatchCmdBindTransformFeedbackBuffersEXT(
5018*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5019*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstBinding,
5020*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindingCount,
5021*b7893ccfSSadaf Ebrahimi     const VkBuffer*                             pBuffers,
5022*b7893ccfSSadaf Ebrahimi     const VkDeviceSize*                         pOffsets,
5023*b7893ccfSSadaf Ebrahimi     const VkDeviceSize*                         pSizes)
5024*b7893ccfSSadaf Ebrahimi {
5025*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5026*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes);
5027*b7893ccfSSadaf Ebrahimi     VkBuffer *local_pBuffers = NULL;
5028*b7893ccfSSadaf Ebrahimi     {
5029*b7893ccfSSadaf Ebrahimi         if (pBuffers) {
5030*b7893ccfSSadaf Ebrahimi             local_pBuffers = new VkBuffer[bindingCount];
5031*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < bindingCount; ++index0) {
5032*b7893ccfSSadaf Ebrahimi                 local_pBuffers[index0] = layer_data->Unwrap(pBuffers[index0]);
5033*b7893ccfSSadaf Ebrahimi             }
5034*b7893ccfSSadaf Ebrahimi         }
5035*b7893ccfSSadaf Ebrahimi     }
5036*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBindTransformFeedbackBuffersEXT(commandBuffer, firstBinding, bindingCount, (const VkBuffer*)local_pBuffers, pOffsets, pSizes);
5037*b7893ccfSSadaf Ebrahimi     if (local_pBuffers)
5038*b7893ccfSSadaf Ebrahimi         delete[] local_pBuffers;
5039*b7893ccfSSadaf Ebrahimi }
5040*b7893ccfSSadaf Ebrahimi 
DispatchCmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer,uint32_t firstCounterBuffer,uint32_t counterBufferCount,const VkBuffer * pCounterBuffers,const VkDeviceSize * pCounterBufferOffsets)5041*b7893ccfSSadaf Ebrahimi void DispatchCmdBeginTransformFeedbackEXT(
5042*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5043*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstCounterBuffer,
5044*b7893ccfSSadaf Ebrahimi     uint32_t                                    counterBufferCount,
5045*b7893ccfSSadaf Ebrahimi     const VkBuffer*                             pCounterBuffers,
5046*b7893ccfSSadaf Ebrahimi     const VkDeviceSize*                         pCounterBufferOffsets)
5047*b7893ccfSSadaf Ebrahimi {
5048*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5049*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
5050*b7893ccfSSadaf Ebrahimi     VkBuffer *local_pCounterBuffers = NULL;
5051*b7893ccfSSadaf Ebrahimi     {
5052*b7893ccfSSadaf Ebrahimi         if (pCounterBuffers) {
5053*b7893ccfSSadaf Ebrahimi             local_pCounterBuffers = new VkBuffer[counterBufferCount];
5054*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < counterBufferCount; ++index0) {
5055*b7893ccfSSadaf Ebrahimi                 local_pCounterBuffers[index0] = layer_data->Unwrap(pCounterBuffers[index0]);
5056*b7893ccfSSadaf Ebrahimi             }
5057*b7893ccfSSadaf Ebrahimi         }
5058*b7893ccfSSadaf Ebrahimi     }
5059*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBeginTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, (const VkBuffer*)local_pCounterBuffers, pCounterBufferOffsets);
5060*b7893ccfSSadaf Ebrahimi     if (local_pCounterBuffers)
5061*b7893ccfSSadaf Ebrahimi         delete[] local_pCounterBuffers;
5062*b7893ccfSSadaf Ebrahimi }
5063*b7893ccfSSadaf Ebrahimi 
DispatchCmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer,uint32_t firstCounterBuffer,uint32_t counterBufferCount,const VkBuffer * pCounterBuffers,const VkDeviceSize * pCounterBufferOffsets)5064*b7893ccfSSadaf Ebrahimi void DispatchCmdEndTransformFeedbackEXT(
5065*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5066*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstCounterBuffer,
5067*b7893ccfSSadaf Ebrahimi     uint32_t                                    counterBufferCount,
5068*b7893ccfSSadaf Ebrahimi     const VkBuffer*                             pCounterBuffers,
5069*b7893ccfSSadaf Ebrahimi     const VkDeviceSize*                         pCounterBufferOffsets)
5070*b7893ccfSSadaf Ebrahimi {
5071*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5072*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets);
5073*b7893ccfSSadaf Ebrahimi     VkBuffer *local_pCounterBuffers = NULL;
5074*b7893ccfSSadaf Ebrahimi     {
5075*b7893ccfSSadaf Ebrahimi         if (pCounterBuffers) {
5076*b7893ccfSSadaf Ebrahimi             local_pCounterBuffers = new VkBuffer[counterBufferCount];
5077*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < counterBufferCount; ++index0) {
5078*b7893ccfSSadaf Ebrahimi                 local_pCounterBuffers[index0] = layer_data->Unwrap(pCounterBuffers[index0]);
5079*b7893ccfSSadaf Ebrahimi             }
5080*b7893ccfSSadaf Ebrahimi         }
5081*b7893ccfSSadaf Ebrahimi     }
5082*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdEndTransformFeedbackEXT(commandBuffer, firstCounterBuffer, counterBufferCount, (const VkBuffer*)local_pCounterBuffers, pCounterBufferOffsets);
5083*b7893ccfSSadaf Ebrahimi     if (local_pCounterBuffers)
5084*b7893ccfSSadaf Ebrahimi         delete[] local_pCounterBuffers;
5085*b7893ccfSSadaf Ebrahimi }
5086*b7893ccfSSadaf Ebrahimi 
DispatchCmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,VkQueryControlFlags flags,uint32_t index)5087*b7893ccfSSadaf Ebrahimi void DispatchCmdBeginQueryIndexedEXT(
5088*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5089*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
5090*b7893ccfSSadaf Ebrahimi     uint32_t                                    query,
5091*b7893ccfSSadaf Ebrahimi     VkQueryControlFlags                         flags,
5092*b7893ccfSSadaf Ebrahimi     uint32_t                                    index)
5093*b7893ccfSSadaf Ebrahimi {
5094*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5095*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index);
5096*b7893ccfSSadaf Ebrahimi     {
5097*b7893ccfSSadaf Ebrahimi         queryPool = layer_data->Unwrap(queryPool);
5098*b7893ccfSSadaf Ebrahimi     }
5099*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBeginQueryIndexedEXT(commandBuffer, queryPool, query, flags, index);
5100*b7893ccfSSadaf Ebrahimi 
5101*b7893ccfSSadaf Ebrahimi }
5102*b7893ccfSSadaf Ebrahimi 
DispatchCmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,uint32_t index)5103*b7893ccfSSadaf Ebrahimi void DispatchCmdEndQueryIndexedEXT(
5104*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5105*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
5106*b7893ccfSSadaf Ebrahimi     uint32_t                                    query,
5107*b7893ccfSSadaf Ebrahimi     uint32_t                                    index)
5108*b7893ccfSSadaf Ebrahimi {
5109*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5110*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index);
5111*b7893ccfSSadaf Ebrahimi     {
5112*b7893ccfSSadaf Ebrahimi         queryPool = layer_data->Unwrap(queryPool);
5113*b7893ccfSSadaf Ebrahimi     }
5114*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdEndQueryIndexedEXT(commandBuffer, queryPool, query, index);
5115*b7893ccfSSadaf Ebrahimi 
5116*b7893ccfSSadaf Ebrahimi }
5117*b7893ccfSSadaf Ebrahimi 
DispatchCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer,uint32_t instanceCount,uint32_t firstInstance,VkBuffer counterBuffer,VkDeviceSize counterBufferOffset,uint32_t counterOffset,uint32_t vertexStride)5118*b7893ccfSSadaf Ebrahimi void DispatchCmdDrawIndirectByteCountEXT(
5119*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5120*b7893ccfSSadaf Ebrahimi     uint32_t                                    instanceCount,
5121*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstInstance,
5122*b7893ccfSSadaf Ebrahimi     VkBuffer                                    counterBuffer,
5123*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                counterBufferOffset,
5124*b7893ccfSSadaf Ebrahimi     uint32_t                                    counterOffset,
5125*b7893ccfSSadaf Ebrahimi     uint32_t                                    vertexStride)
5126*b7893ccfSSadaf Ebrahimi {
5127*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5128*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride);
5129*b7893ccfSSadaf Ebrahimi     {
5130*b7893ccfSSadaf Ebrahimi         counterBuffer = layer_data->Unwrap(counterBuffer);
5131*b7893ccfSSadaf Ebrahimi     }
5132*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDrawIndirectByteCountEXT(commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride);
5133*b7893ccfSSadaf Ebrahimi 
5134*b7893ccfSSadaf Ebrahimi }
5135*b7893ccfSSadaf Ebrahimi 
DispatchGetImageViewHandleNVX(VkDevice device,const VkImageViewHandleInfoNVX * pInfo)5136*b7893ccfSSadaf Ebrahimi uint32_t DispatchGetImageViewHandleNVX(
5137*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5138*b7893ccfSSadaf Ebrahimi     const VkImageViewHandleInfoNVX*             pInfo)
5139*b7893ccfSSadaf Ebrahimi {
5140*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5141*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetImageViewHandleNVX(device, pInfo);
5142*b7893ccfSSadaf Ebrahimi     safe_VkImageViewHandleInfoNVX *local_pInfo = NULL;
5143*b7893ccfSSadaf Ebrahimi     {
5144*b7893ccfSSadaf Ebrahimi         if (pInfo) {
5145*b7893ccfSSadaf Ebrahimi             local_pInfo = new safe_VkImageViewHandleInfoNVX(pInfo);
5146*b7893ccfSSadaf Ebrahimi             if (pInfo->imageView) {
5147*b7893ccfSSadaf Ebrahimi                 local_pInfo->imageView = layer_data->Unwrap(pInfo->imageView);
5148*b7893ccfSSadaf Ebrahimi             }
5149*b7893ccfSSadaf Ebrahimi             if (pInfo->sampler) {
5150*b7893ccfSSadaf Ebrahimi                 local_pInfo->sampler = layer_data->Unwrap(pInfo->sampler);
5151*b7893ccfSSadaf Ebrahimi             }
5152*b7893ccfSSadaf Ebrahimi         }
5153*b7893ccfSSadaf Ebrahimi     }
5154*b7893ccfSSadaf Ebrahimi     uint32_t result = layer_data->device_dispatch_table.GetImageViewHandleNVX(device, (const VkImageViewHandleInfoNVX*)local_pInfo);
5155*b7893ccfSSadaf Ebrahimi     if (local_pInfo) {
5156*b7893ccfSSadaf Ebrahimi         delete local_pInfo;
5157*b7893ccfSSadaf Ebrahimi     }
5158*b7893ccfSSadaf Ebrahimi     return result;
5159*b7893ccfSSadaf Ebrahimi }
5160*b7893ccfSSadaf Ebrahimi 
DispatchCmdDrawIndirectCountAMD(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)5161*b7893ccfSSadaf Ebrahimi void DispatchCmdDrawIndirectCountAMD(
5162*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5163*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
5164*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
5165*b7893ccfSSadaf Ebrahimi     VkBuffer                                    countBuffer,
5166*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                countBufferOffset,
5167*b7893ccfSSadaf Ebrahimi     uint32_t                                    maxDrawCount,
5168*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride)
5169*b7893ccfSSadaf Ebrahimi {
5170*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5171*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
5172*b7893ccfSSadaf Ebrahimi     {
5173*b7893ccfSSadaf Ebrahimi         buffer = layer_data->Unwrap(buffer);
5174*b7893ccfSSadaf Ebrahimi         countBuffer = layer_data->Unwrap(countBuffer);
5175*b7893ccfSSadaf Ebrahimi     }
5176*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
5177*b7893ccfSSadaf Ebrahimi 
5178*b7893ccfSSadaf Ebrahimi }
5179*b7893ccfSSadaf Ebrahimi 
DispatchCmdDrawIndexedIndirectCountAMD(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)5180*b7893ccfSSadaf Ebrahimi void DispatchCmdDrawIndexedIndirectCountAMD(
5181*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5182*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
5183*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
5184*b7893ccfSSadaf Ebrahimi     VkBuffer                                    countBuffer,
5185*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                countBufferOffset,
5186*b7893ccfSSadaf Ebrahimi     uint32_t                                    maxDrawCount,
5187*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride)
5188*b7893ccfSSadaf Ebrahimi {
5189*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5190*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
5191*b7893ccfSSadaf Ebrahimi     {
5192*b7893ccfSSadaf Ebrahimi         buffer = layer_data->Unwrap(buffer);
5193*b7893ccfSSadaf Ebrahimi         countBuffer = layer_data->Unwrap(countBuffer);
5194*b7893ccfSSadaf Ebrahimi     }
5195*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
5196*b7893ccfSSadaf Ebrahimi 
5197*b7893ccfSSadaf Ebrahimi }
5198*b7893ccfSSadaf Ebrahimi 
DispatchGetShaderInfoAMD(VkDevice device,VkPipeline pipeline,VkShaderStageFlagBits shaderStage,VkShaderInfoTypeAMD infoType,size_t * pInfoSize,void * pInfo)5199*b7893ccfSSadaf Ebrahimi VkResult DispatchGetShaderInfoAMD(
5200*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5201*b7893ccfSSadaf Ebrahimi     VkPipeline                                  pipeline,
5202*b7893ccfSSadaf Ebrahimi     VkShaderStageFlagBits                       shaderStage,
5203*b7893ccfSSadaf Ebrahimi     VkShaderInfoTypeAMD                         infoType,
5204*b7893ccfSSadaf Ebrahimi     size_t*                                     pInfoSize,
5205*b7893ccfSSadaf Ebrahimi     void*                                       pInfo)
5206*b7893ccfSSadaf Ebrahimi {
5207*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5208*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo);
5209*b7893ccfSSadaf Ebrahimi     {
5210*b7893ccfSSadaf Ebrahimi         pipeline = layer_data->Unwrap(pipeline);
5211*b7893ccfSSadaf Ebrahimi     }
5212*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetShaderInfoAMD(device, pipeline, shaderStage, infoType, pInfoSize, pInfo);
5213*b7893ccfSSadaf Ebrahimi 
5214*b7893ccfSSadaf Ebrahimi     return result;
5215*b7893ccfSSadaf Ebrahimi }
5216*b7893ccfSSadaf Ebrahimi 
5217*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_GGP
5218*b7893ccfSSadaf Ebrahimi 
DispatchCreateStreamDescriptorSurfaceGGP(VkInstance instance,const VkStreamDescriptorSurfaceCreateInfoGGP * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)5219*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateStreamDescriptorSurfaceGGP(
5220*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
5221*b7893ccfSSadaf Ebrahimi     const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
5222*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5223*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface)
5224*b7893ccfSSadaf Ebrahimi {
5225*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5226*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateStreamDescriptorSurfaceGGP(instance, pCreateInfo, pAllocator, pSurface);
5227*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateStreamDescriptorSurfaceGGP(instance, pCreateInfo, pAllocator, pSurface);
5228*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
5229*b7893ccfSSadaf Ebrahimi         *pSurface = layer_data->WrapNew(*pSurface);
5230*b7893ccfSSadaf Ebrahimi     }
5231*b7893ccfSSadaf Ebrahimi     return result;
5232*b7893ccfSSadaf Ebrahimi }
5233*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_GGP
5234*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceExternalImageFormatPropertiesNV(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkImageTiling tiling,VkImageUsageFlags usage,VkImageCreateFlags flags,VkExternalMemoryHandleTypeFlagsNV externalHandleType,VkExternalImageFormatPropertiesNV * pExternalImageFormatProperties)5235*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceExternalImageFormatPropertiesNV(
5236*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5237*b7893ccfSSadaf Ebrahimi     VkFormat                                    format,
5238*b7893ccfSSadaf Ebrahimi     VkImageType                                 type,
5239*b7893ccfSSadaf Ebrahimi     VkImageTiling                               tiling,
5240*b7893ccfSSadaf Ebrahimi     VkImageUsageFlags                           usage,
5241*b7893ccfSSadaf Ebrahimi     VkImageCreateFlags                          flags,
5242*b7893ccfSSadaf Ebrahimi     VkExternalMemoryHandleTypeFlagsNV           externalHandleType,
5243*b7893ccfSSadaf Ebrahimi     VkExternalImageFormatPropertiesNV*          pExternalImageFormatProperties)
5244*b7893ccfSSadaf Ebrahimi {
5245*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5246*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties);
5247*b7893ccfSSadaf Ebrahimi 
5248*b7893ccfSSadaf Ebrahimi     return result;
5249*b7893ccfSSadaf Ebrahimi }
5250*b7893ccfSSadaf Ebrahimi 
5251*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
5252*b7893ccfSSadaf Ebrahimi 
DispatchGetMemoryWin32HandleNV(VkDevice device,VkDeviceMemory memory,VkExternalMemoryHandleTypeFlagsNV handleType,HANDLE * pHandle)5253*b7893ccfSSadaf Ebrahimi VkResult DispatchGetMemoryWin32HandleNV(
5254*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5255*b7893ccfSSadaf Ebrahimi     VkDeviceMemory                              memory,
5256*b7893ccfSSadaf Ebrahimi     VkExternalMemoryHandleTypeFlagsNV           handleType,
5257*b7893ccfSSadaf Ebrahimi     HANDLE*                                     pHandle)
5258*b7893ccfSSadaf Ebrahimi {
5259*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5260*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetMemoryWin32HandleNV(device, memory, handleType, pHandle);
5261*b7893ccfSSadaf Ebrahimi     {
5262*b7893ccfSSadaf Ebrahimi         memory = layer_data->Unwrap(memory);
5263*b7893ccfSSadaf Ebrahimi     }
5264*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetMemoryWin32HandleNV(device, memory, handleType, pHandle);
5265*b7893ccfSSadaf Ebrahimi 
5266*b7893ccfSSadaf Ebrahimi     return result;
5267*b7893ccfSSadaf Ebrahimi }
5268*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
5269*b7893ccfSSadaf Ebrahimi 
5270*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_VI_NN
5271*b7893ccfSSadaf Ebrahimi 
DispatchCreateViSurfaceNN(VkInstance instance,const VkViSurfaceCreateInfoNN * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)5272*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateViSurfaceNN(
5273*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
5274*b7893ccfSSadaf Ebrahimi     const VkViSurfaceCreateInfoNN*              pCreateInfo,
5275*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5276*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface)
5277*b7893ccfSSadaf Ebrahimi {
5278*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5279*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface);
5280*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateViSurfaceNN(instance, pCreateInfo, pAllocator, pSurface);
5281*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
5282*b7893ccfSSadaf Ebrahimi         *pSurface = layer_data->WrapNew(*pSurface);
5283*b7893ccfSSadaf Ebrahimi     }
5284*b7893ccfSSadaf Ebrahimi     return result;
5285*b7893ccfSSadaf Ebrahimi }
5286*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_VI_NN
5287*b7893ccfSSadaf Ebrahimi 
DispatchCmdBeginConditionalRenderingEXT(VkCommandBuffer commandBuffer,const VkConditionalRenderingBeginInfoEXT * pConditionalRenderingBegin)5288*b7893ccfSSadaf Ebrahimi void DispatchCmdBeginConditionalRenderingEXT(
5289*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5290*b7893ccfSSadaf Ebrahimi     const VkConditionalRenderingBeginInfoEXT*   pConditionalRenderingBegin)
5291*b7893ccfSSadaf Ebrahimi {
5292*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5293*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBeginConditionalRenderingEXT(commandBuffer, pConditionalRenderingBegin);
5294*b7893ccfSSadaf Ebrahimi     safe_VkConditionalRenderingBeginInfoEXT *local_pConditionalRenderingBegin = NULL;
5295*b7893ccfSSadaf Ebrahimi     {
5296*b7893ccfSSadaf Ebrahimi         if (pConditionalRenderingBegin) {
5297*b7893ccfSSadaf Ebrahimi             local_pConditionalRenderingBegin = new safe_VkConditionalRenderingBeginInfoEXT(pConditionalRenderingBegin);
5298*b7893ccfSSadaf Ebrahimi             if (pConditionalRenderingBegin->buffer) {
5299*b7893ccfSSadaf Ebrahimi                 local_pConditionalRenderingBegin->buffer = layer_data->Unwrap(pConditionalRenderingBegin->buffer);
5300*b7893ccfSSadaf Ebrahimi             }
5301*b7893ccfSSadaf Ebrahimi         }
5302*b7893ccfSSadaf Ebrahimi     }
5303*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBeginConditionalRenderingEXT(commandBuffer, (const VkConditionalRenderingBeginInfoEXT*)local_pConditionalRenderingBegin);
5304*b7893ccfSSadaf Ebrahimi     if (local_pConditionalRenderingBegin) {
5305*b7893ccfSSadaf Ebrahimi         delete local_pConditionalRenderingBegin;
5306*b7893ccfSSadaf Ebrahimi     }
5307*b7893ccfSSadaf Ebrahimi }
5308*b7893ccfSSadaf Ebrahimi 
DispatchCmdEndConditionalRenderingEXT(VkCommandBuffer commandBuffer)5309*b7893ccfSSadaf Ebrahimi void DispatchCmdEndConditionalRenderingEXT(
5310*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer)
5311*b7893ccfSSadaf Ebrahimi {
5312*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5313*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdEndConditionalRenderingEXT(commandBuffer);
5314*b7893ccfSSadaf Ebrahimi 
5315*b7893ccfSSadaf Ebrahimi }
5316*b7893ccfSSadaf Ebrahimi 
DispatchCmdProcessCommandsNVX(VkCommandBuffer commandBuffer,const VkCmdProcessCommandsInfoNVX * pProcessCommandsInfo)5317*b7893ccfSSadaf Ebrahimi void DispatchCmdProcessCommandsNVX(
5318*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5319*b7893ccfSSadaf Ebrahimi     const VkCmdProcessCommandsInfoNVX*          pProcessCommandsInfo)
5320*b7893ccfSSadaf Ebrahimi {
5321*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5322*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdProcessCommandsNVX(commandBuffer, pProcessCommandsInfo);
5323*b7893ccfSSadaf Ebrahimi     safe_VkCmdProcessCommandsInfoNVX *local_pProcessCommandsInfo = NULL;
5324*b7893ccfSSadaf Ebrahimi     {
5325*b7893ccfSSadaf Ebrahimi         if (pProcessCommandsInfo) {
5326*b7893ccfSSadaf Ebrahimi             local_pProcessCommandsInfo = new safe_VkCmdProcessCommandsInfoNVX(pProcessCommandsInfo);
5327*b7893ccfSSadaf Ebrahimi             if (pProcessCommandsInfo->objectTable) {
5328*b7893ccfSSadaf Ebrahimi                 local_pProcessCommandsInfo->objectTable = layer_data->Unwrap(pProcessCommandsInfo->objectTable);
5329*b7893ccfSSadaf Ebrahimi             }
5330*b7893ccfSSadaf Ebrahimi             if (pProcessCommandsInfo->indirectCommandsLayout) {
5331*b7893ccfSSadaf Ebrahimi                 local_pProcessCommandsInfo->indirectCommandsLayout = layer_data->Unwrap(pProcessCommandsInfo->indirectCommandsLayout);
5332*b7893ccfSSadaf Ebrahimi             }
5333*b7893ccfSSadaf Ebrahimi             if (local_pProcessCommandsInfo->pIndirectCommandsTokens) {
5334*b7893ccfSSadaf Ebrahimi                 for (uint32_t index1 = 0; index1 < local_pProcessCommandsInfo->indirectCommandsTokenCount; ++index1) {
5335*b7893ccfSSadaf Ebrahimi                     if (pProcessCommandsInfo->pIndirectCommandsTokens[index1].buffer) {
5336*b7893ccfSSadaf Ebrahimi                         local_pProcessCommandsInfo->pIndirectCommandsTokens[index1].buffer = layer_data->Unwrap(pProcessCommandsInfo->pIndirectCommandsTokens[index1].buffer);
5337*b7893ccfSSadaf Ebrahimi                     }
5338*b7893ccfSSadaf Ebrahimi                 }
5339*b7893ccfSSadaf Ebrahimi             }
5340*b7893ccfSSadaf Ebrahimi             if (pProcessCommandsInfo->sequencesCountBuffer) {
5341*b7893ccfSSadaf Ebrahimi                 local_pProcessCommandsInfo->sequencesCountBuffer = layer_data->Unwrap(pProcessCommandsInfo->sequencesCountBuffer);
5342*b7893ccfSSadaf Ebrahimi             }
5343*b7893ccfSSadaf Ebrahimi             if (pProcessCommandsInfo->sequencesIndexBuffer) {
5344*b7893ccfSSadaf Ebrahimi                 local_pProcessCommandsInfo->sequencesIndexBuffer = layer_data->Unwrap(pProcessCommandsInfo->sequencesIndexBuffer);
5345*b7893ccfSSadaf Ebrahimi             }
5346*b7893ccfSSadaf Ebrahimi         }
5347*b7893ccfSSadaf Ebrahimi     }
5348*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdProcessCommandsNVX(commandBuffer, (const VkCmdProcessCommandsInfoNVX*)local_pProcessCommandsInfo);
5349*b7893ccfSSadaf Ebrahimi     if (local_pProcessCommandsInfo) {
5350*b7893ccfSSadaf Ebrahimi         delete local_pProcessCommandsInfo;
5351*b7893ccfSSadaf Ebrahimi     }
5352*b7893ccfSSadaf Ebrahimi }
5353*b7893ccfSSadaf Ebrahimi 
DispatchCmdReserveSpaceForCommandsNVX(VkCommandBuffer commandBuffer,const VkCmdReserveSpaceForCommandsInfoNVX * pReserveSpaceInfo)5354*b7893ccfSSadaf Ebrahimi void DispatchCmdReserveSpaceForCommandsNVX(
5355*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5356*b7893ccfSSadaf Ebrahimi     const VkCmdReserveSpaceForCommandsInfoNVX*  pReserveSpaceInfo)
5357*b7893ccfSSadaf Ebrahimi {
5358*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5359*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdReserveSpaceForCommandsNVX(commandBuffer, pReserveSpaceInfo);
5360*b7893ccfSSadaf Ebrahimi     safe_VkCmdReserveSpaceForCommandsInfoNVX *local_pReserveSpaceInfo = NULL;
5361*b7893ccfSSadaf Ebrahimi     {
5362*b7893ccfSSadaf Ebrahimi         if (pReserveSpaceInfo) {
5363*b7893ccfSSadaf Ebrahimi             local_pReserveSpaceInfo = new safe_VkCmdReserveSpaceForCommandsInfoNVX(pReserveSpaceInfo);
5364*b7893ccfSSadaf Ebrahimi             if (pReserveSpaceInfo->objectTable) {
5365*b7893ccfSSadaf Ebrahimi                 local_pReserveSpaceInfo->objectTable = layer_data->Unwrap(pReserveSpaceInfo->objectTable);
5366*b7893ccfSSadaf Ebrahimi             }
5367*b7893ccfSSadaf Ebrahimi             if (pReserveSpaceInfo->indirectCommandsLayout) {
5368*b7893ccfSSadaf Ebrahimi                 local_pReserveSpaceInfo->indirectCommandsLayout = layer_data->Unwrap(pReserveSpaceInfo->indirectCommandsLayout);
5369*b7893ccfSSadaf Ebrahimi             }
5370*b7893ccfSSadaf Ebrahimi         }
5371*b7893ccfSSadaf Ebrahimi     }
5372*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdReserveSpaceForCommandsNVX(commandBuffer, (const VkCmdReserveSpaceForCommandsInfoNVX*)local_pReserveSpaceInfo);
5373*b7893ccfSSadaf Ebrahimi     if (local_pReserveSpaceInfo) {
5374*b7893ccfSSadaf Ebrahimi         delete local_pReserveSpaceInfo;
5375*b7893ccfSSadaf Ebrahimi     }
5376*b7893ccfSSadaf Ebrahimi }
5377*b7893ccfSSadaf Ebrahimi 
DispatchCreateIndirectCommandsLayoutNVX(VkDevice device,const VkIndirectCommandsLayoutCreateInfoNVX * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkIndirectCommandsLayoutNVX * pIndirectCommandsLayout)5378*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateIndirectCommandsLayoutNVX(
5379*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5380*b7893ccfSSadaf Ebrahimi     const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo,
5381*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5382*b7893ccfSSadaf Ebrahimi     VkIndirectCommandsLayoutNVX*                pIndirectCommandsLayout)
5383*b7893ccfSSadaf Ebrahimi {
5384*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5385*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateIndirectCommandsLayoutNVX(device, pCreateInfo, pAllocator, pIndirectCommandsLayout);
5386*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateIndirectCommandsLayoutNVX(device, pCreateInfo, pAllocator, pIndirectCommandsLayout);
5387*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
5388*b7893ccfSSadaf Ebrahimi         *pIndirectCommandsLayout = layer_data->WrapNew(*pIndirectCommandsLayout);
5389*b7893ccfSSadaf Ebrahimi     }
5390*b7893ccfSSadaf Ebrahimi     return result;
5391*b7893ccfSSadaf Ebrahimi }
5392*b7893ccfSSadaf Ebrahimi 
DispatchDestroyIndirectCommandsLayoutNVX(VkDevice device,VkIndirectCommandsLayoutNVX indirectCommandsLayout,const VkAllocationCallbacks * pAllocator)5393*b7893ccfSSadaf Ebrahimi void DispatchDestroyIndirectCommandsLayoutNVX(
5394*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5395*b7893ccfSSadaf Ebrahimi     VkIndirectCommandsLayoutNVX                 indirectCommandsLayout,
5396*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
5397*b7893ccfSSadaf Ebrahimi {
5398*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5399*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyIndirectCommandsLayoutNVX(device, indirectCommandsLayout, pAllocator);
5400*b7893ccfSSadaf Ebrahimi     uint64_t indirectCommandsLayout_id = reinterpret_cast<uint64_t &>(indirectCommandsLayout);
5401*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(indirectCommandsLayout_id);
5402*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
5403*b7893ccfSSadaf Ebrahimi         indirectCommandsLayout = (VkIndirectCommandsLayoutNVX)iter->second;
5404*b7893ccfSSadaf Ebrahimi     } else {
5405*b7893ccfSSadaf Ebrahimi         indirectCommandsLayout = (VkIndirectCommandsLayoutNVX)0;
5406*b7893ccfSSadaf Ebrahimi     }
5407*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyIndirectCommandsLayoutNVX(device, indirectCommandsLayout, pAllocator);
5408*b7893ccfSSadaf Ebrahimi 
5409*b7893ccfSSadaf Ebrahimi }
5410*b7893ccfSSadaf Ebrahimi 
DispatchCreateObjectTableNVX(VkDevice device,const VkObjectTableCreateInfoNVX * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkObjectTableNVX * pObjectTable)5411*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateObjectTableNVX(
5412*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5413*b7893ccfSSadaf Ebrahimi     const VkObjectTableCreateInfoNVX*           pCreateInfo,
5414*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5415*b7893ccfSSadaf Ebrahimi     VkObjectTableNVX*                           pObjectTable)
5416*b7893ccfSSadaf Ebrahimi {
5417*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5418*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateObjectTableNVX(device, pCreateInfo, pAllocator, pObjectTable);
5419*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateObjectTableNVX(device, pCreateInfo, pAllocator, pObjectTable);
5420*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
5421*b7893ccfSSadaf Ebrahimi         *pObjectTable = layer_data->WrapNew(*pObjectTable);
5422*b7893ccfSSadaf Ebrahimi     }
5423*b7893ccfSSadaf Ebrahimi     return result;
5424*b7893ccfSSadaf Ebrahimi }
5425*b7893ccfSSadaf Ebrahimi 
DispatchDestroyObjectTableNVX(VkDevice device,VkObjectTableNVX objectTable,const VkAllocationCallbacks * pAllocator)5426*b7893ccfSSadaf Ebrahimi void DispatchDestroyObjectTableNVX(
5427*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5428*b7893ccfSSadaf Ebrahimi     VkObjectTableNVX                            objectTable,
5429*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
5430*b7893ccfSSadaf Ebrahimi {
5431*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5432*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyObjectTableNVX(device, objectTable, pAllocator);
5433*b7893ccfSSadaf Ebrahimi     uint64_t objectTable_id = reinterpret_cast<uint64_t &>(objectTable);
5434*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(objectTable_id);
5435*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
5436*b7893ccfSSadaf Ebrahimi         objectTable = (VkObjectTableNVX)iter->second;
5437*b7893ccfSSadaf Ebrahimi     } else {
5438*b7893ccfSSadaf Ebrahimi         objectTable = (VkObjectTableNVX)0;
5439*b7893ccfSSadaf Ebrahimi     }
5440*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyObjectTableNVX(device, objectTable, pAllocator);
5441*b7893ccfSSadaf Ebrahimi 
5442*b7893ccfSSadaf Ebrahimi }
5443*b7893ccfSSadaf Ebrahimi 
DispatchRegisterObjectsNVX(VkDevice device,VkObjectTableNVX objectTable,uint32_t objectCount,const VkObjectTableEntryNVX * const * ppObjectTableEntries,const uint32_t * pObjectIndices)5444*b7893ccfSSadaf Ebrahimi VkResult DispatchRegisterObjectsNVX(
5445*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5446*b7893ccfSSadaf Ebrahimi     VkObjectTableNVX                            objectTable,
5447*b7893ccfSSadaf Ebrahimi     uint32_t                                    objectCount,
5448*b7893ccfSSadaf Ebrahimi     const VkObjectTableEntryNVX* const*         ppObjectTableEntries,
5449*b7893ccfSSadaf Ebrahimi     const uint32_t*                             pObjectIndices)
5450*b7893ccfSSadaf Ebrahimi {
5451*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5452*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.RegisterObjectsNVX(device, objectTable, objectCount, ppObjectTableEntries, pObjectIndices);
5453*b7893ccfSSadaf Ebrahimi     {
5454*b7893ccfSSadaf Ebrahimi         objectTable = layer_data->Unwrap(objectTable);
5455*b7893ccfSSadaf Ebrahimi     }
5456*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.RegisterObjectsNVX(device, objectTable, objectCount, ppObjectTableEntries, pObjectIndices);
5457*b7893ccfSSadaf Ebrahimi 
5458*b7893ccfSSadaf Ebrahimi     return result;
5459*b7893ccfSSadaf Ebrahimi }
5460*b7893ccfSSadaf Ebrahimi 
DispatchUnregisterObjectsNVX(VkDevice device,VkObjectTableNVX objectTable,uint32_t objectCount,const VkObjectEntryTypeNVX * pObjectEntryTypes,const uint32_t * pObjectIndices)5461*b7893ccfSSadaf Ebrahimi VkResult DispatchUnregisterObjectsNVX(
5462*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5463*b7893ccfSSadaf Ebrahimi     VkObjectTableNVX                            objectTable,
5464*b7893ccfSSadaf Ebrahimi     uint32_t                                    objectCount,
5465*b7893ccfSSadaf Ebrahimi     const VkObjectEntryTypeNVX*                 pObjectEntryTypes,
5466*b7893ccfSSadaf Ebrahimi     const uint32_t*                             pObjectIndices)
5467*b7893ccfSSadaf Ebrahimi {
5468*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5469*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.UnregisterObjectsNVX(device, objectTable, objectCount, pObjectEntryTypes, pObjectIndices);
5470*b7893ccfSSadaf Ebrahimi     {
5471*b7893ccfSSadaf Ebrahimi         objectTable = layer_data->Unwrap(objectTable);
5472*b7893ccfSSadaf Ebrahimi     }
5473*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.UnregisterObjectsNVX(device, objectTable, objectCount, pObjectEntryTypes, pObjectIndices);
5474*b7893ccfSSadaf Ebrahimi 
5475*b7893ccfSSadaf Ebrahimi     return result;
5476*b7893ccfSSadaf Ebrahimi }
5477*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceGeneratedCommandsPropertiesNVX(VkPhysicalDevice physicalDevice,VkDeviceGeneratedCommandsFeaturesNVX * pFeatures,VkDeviceGeneratedCommandsLimitsNVX * pLimits)5478*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
5479*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5480*b7893ccfSSadaf Ebrahimi     VkDeviceGeneratedCommandsFeaturesNVX*       pFeatures,
5481*b7893ccfSSadaf Ebrahimi     VkDeviceGeneratedCommandsLimitsNVX*         pLimits)
5482*b7893ccfSSadaf Ebrahimi {
5483*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5484*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceGeneratedCommandsPropertiesNVX(physicalDevice, pFeatures, pLimits);
5485*b7893ccfSSadaf Ebrahimi 
5486*b7893ccfSSadaf Ebrahimi }
5487*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetViewportWScalingNV(VkCommandBuffer commandBuffer,uint32_t firstViewport,uint32_t viewportCount,const VkViewportWScalingNV * pViewportWScalings)5488*b7893ccfSSadaf Ebrahimi void DispatchCmdSetViewportWScalingNV(
5489*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5490*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstViewport,
5491*b7893ccfSSadaf Ebrahimi     uint32_t                                    viewportCount,
5492*b7893ccfSSadaf Ebrahimi     const VkViewportWScalingNV*                 pViewportWScalings)
5493*b7893ccfSSadaf Ebrahimi {
5494*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5495*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetViewportWScalingNV(commandBuffer, firstViewport, viewportCount, pViewportWScalings);
5496*b7893ccfSSadaf Ebrahimi 
5497*b7893ccfSSadaf Ebrahimi }
5498*b7893ccfSSadaf Ebrahimi 
DispatchReleaseDisplayEXT(VkPhysicalDevice physicalDevice,VkDisplayKHR display)5499*b7893ccfSSadaf Ebrahimi VkResult DispatchReleaseDisplayEXT(
5500*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5501*b7893ccfSSadaf Ebrahimi     VkDisplayKHR                                display)
5502*b7893ccfSSadaf Ebrahimi {
5503*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5504*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.ReleaseDisplayEXT(physicalDevice, display);
5505*b7893ccfSSadaf Ebrahimi     {
5506*b7893ccfSSadaf Ebrahimi         display = layer_data->Unwrap(display);
5507*b7893ccfSSadaf Ebrahimi     }
5508*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.ReleaseDisplayEXT(physicalDevice, display);
5509*b7893ccfSSadaf Ebrahimi 
5510*b7893ccfSSadaf Ebrahimi     return result;
5511*b7893ccfSSadaf Ebrahimi }
5512*b7893ccfSSadaf Ebrahimi 
5513*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
5514*b7893ccfSSadaf Ebrahimi 
DispatchAcquireXlibDisplayEXT(VkPhysicalDevice physicalDevice,Display * dpy,VkDisplayKHR display)5515*b7893ccfSSadaf Ebrahimi VkResult DispatchAcquireXlibDisplayEXT(
5516*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5517*b7893ccfSSadaf Ebrahimi     Display*                                    dpy,
5518*b7893ccfSSadaf Ebrahimi     VkDisplayKHR                                display)
5519*b7893ccfSSadaf Ebrahimi {
5520*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5521*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.AcquireXlibDisplayEXT(physicalDevice, dpy, display);
5522*b7893ccfSSadaf Ebrahimi     {
5523*b7893ccfSSadaf Ebrahimi         display = layer_data->Unwrap(display);
5524*b7893ccfSSadaf Ebrahimi     }
5525*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.AcquireXlibDisplayEXT(physicalDevice, dpy, display);
5526*b7893ccfSSadaf Ebrahimi 
5527*b7893ccfSSadaf Ebrahimi     return result;
5528*b7893ccfSSadaf Ebrahimi }
5529*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
5530*b7893ccfSSadaf Ebrahimi 
5531*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
5532*b7893ccfSSadaf Ebrahimi 
DispatchGetRandROutputDisplayEXT(VkPhysicalDevice physicalDevice,Display * dpy,RROutput rrOutput,VkDisplayKHR * pDisplay)5533*b7893ccfSSadaf Ebrahimi VkResult DispatchGetRandROutputDisplayEXT(
5534*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5535*b7893ccfSSadaf Ebrahimi     Display*                                    dpy,
5536*b7893ccfSSadaf Ebrahimi     RROutput                                    rrOutput,
5537*b7893ccfSSadaf Ebrahimi     VkDisplayKHR*                               pDisplay)
5538*b7893ccfSSadaf Ebrahimi {
5539*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5540*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetRandROutputDisplayEXT(physicalDevice, dpy, rrOutput, pDisplay);
5541*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetRandROutputDisplayEXT(physicalDevice, dpy, rrOutput, pDisplay);
5542*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
5543*b7893ccfSSadaf Ebrahimi         *pDisplay = layer_data->WrapNew(*pDisplay);
5544*b7893ccfSSadaf Ebrahimi     }
5545*b7893ccfSSadaf Ebrahimi     return result;
5546*b7893ccfSSadaf Ebrahimi }
5547*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
5548*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceSurfaceCapabilities2EXT(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,VkSurfaceCapabilities2EXT * pSurfaceCapabilities)5549*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceSurfaceCapabilities2EXT(
5550*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5551*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR                                surface,
5552*b7893ccfSSadaf Ebrahimi     VkSurfaceCapabilities2EXT*                  pSurfaceCapabilities)
5553*b7893ccfSSadaf Ebrahimi {
5554*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5555*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities);
5556*b7893ccfSSadaf Ebrahimi     {
5557*b7893ccfSSadaf Ebrahimi         surface = layer_data->Unwrap(surface);
5558*b7893ccfSSadaf Ebrahimi     }
5559*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceSurfaceCapabilities2EXT(physicalDevice, surface, pSurfaceCapabilities);
5560*b7893ccfSSadaf Ebrahimi 
5561*b7893ccfSSadaf Ebrahimi     return result;
5562*b7893ccfSSadaf Ebrahimi }
5563*b7893ccfSSadaf Ebrahimi 
DispatchDisplayPowerControlEXT(VkDevice device,VkDisplayKHR display,const VkDisplayPowerInfoEXT * pDisplayPowerInfo)5564*b7893ccfSSadaf Ebrahimi VkResult DispatchDisplayPowerControlEXT(
5565*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5566*b7893ccfSSadaf Ebrahimi     VkDisplayKHR                                display,
5567*b7893ccfSSadaf Ebrahimi     const VkDisplayPowerInfoEXT*                pDisplayPowerInfo)
5568*b7893ccfSSadaf Ebrahimi {
5569*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5570*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DisplayPowerControlEXT(device, display, pDisplayPowerInfo);
5571*b7893ccfSSadaf Ebrahimi     {
5572*b7893ccfSSadaf Ebrahimi         display = layer_data->Unwrap(display);
5573*b7893ccfSSadaf Ebrahimi     }
5574*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.DisplayPowerControlEXT(device, display, pDisplayPowerInfo);
5575*b7893ccfSSadaf Ebrahimi 
5576*b7893ccfSSadaf Ebrahimi     return result;
5577*b7893ccfSSadaf Ebrahimi }
5578*b7893ccfSSadaf Ebrahimi 
DispatchRegisterDeviceEventEXT(VkDevice device,const VkDeviceEventInfoEXT * pDeviceEventInfo,const VkAllocationCallbacks * pAllocator,VkFence * pFence)5579*b7893ccfSSadaf Ebrahimi VkResult DispatchRegisterDeviceEventEXT(
5580*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5581*b7893ccfSSadaf Ebrahimi     const VkDeviceEventInfoEXT*                 pDeviceEventInfo,
5582*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5583*b7893ccfSSadaf Ebrahimi     VkFence*                                    pFence)
5584*b7893ccfSSadaf Ebrahimi {
5585*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5586*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.RegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence);
5587*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.RegisterDeviceEventEXT(device, pDeviceEventInfo, pAllocator, pFence);
5588*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
5589*b7893ccfSSadaf Ebrahimi         *pFence = layer_data->WrapNew(*pFence);
5590*b7893ccfSSadaf Ebrahimi     }
5591*b7893ccfSSadaf Ebrahimi     return result;
5592*b7893ccfSSadaf Ebrahimi }
5593*b7893ccfSSadaf Ebrahimi 
DispatchRegisterDisplayEventEXT(VkDevice device,VkDisplayKHR display,const VkDisplayEventInfoEXT * pDisplayEventInfo,const VkAllocationCallbacks * pAllocator,VkFence * pFence)5594*b7893ccfSSadaf Ebrahimi VkResult DispatchRegisterDisplayEventEXT(
5595*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5596*b7893ccfSSadaf Ebrahimi     VkDisplayKHR                                display,
5597*b7893ccfSSadaf Ebrahimi     const VkDisplayEventInfoEXT*                pDisplayEventInfo,
5598*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5599*b7893ccfSSadaf Ebrahimi     VkFence*                                    pFence)
5600*b7893ccfSSadaf Ebrahimi {
5601*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5602*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.RegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence);
5603*b7893ccfSSadaf Ebrahimi     {
5604*b7893ccfSSadaf Ebrahimi         display = layer_data->Unwrap(display);
5605*b7893ccfSSadaf Ebrahimi     }
5606*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.RegisterDisplayEventEXT(device, display, pDisplayEventInfo, pAllocator, pFence);
5607*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
5608*b7893ccfSSadaf Ebrahimi         *pFence = layer_data->WrapNew(*pFence);
5609*b7893ccfSSadaf Ebrahimi     }
5610*b7893ccfSSadaf Ebrahimi     return result;
5611*b7893ccfSSadaf Ebrahimi }
5612*b7893ccfSSadaf Ebrahimi 
DispatchGetSwapchainCounterEXT(VkDevice device,VkSwapchainKHR swapchain,VkSurfaceCounterFlagBitsEXT counter,uint64_t * pCounterValue)5613*b7893ccfSSadaf Ebrahimi VkResult DispatchGetSwapchainCounterEXT(
5614*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5615*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain,
5616*b7893ccfSSadaf Ebrahimi     VkSurfaceCounterFlagBitsEXT                 counter,
5617*b7893ccfSSadaf Ebrahimi     uint64_t*                                   pCounterValue)
5618*b7893ccfSSadaf Ebrahimi {
5619*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5620*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetSwapchainCounterEXT(device, swapchain, counter, pCounterValue);
5621*b7893ccfSSadaf Ebrahimi     {
5622*b7893ccfSSadaf Ebrahimi         swapchain = layer_data->Unwrap(swapchain);
5623*b7893ccfSSadaf Ebrahimi     }
5624*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetSwapchainCounterEXT(device, swapchain, counter, pCounterValue);
5625*b7893ccfSSadaf Ebrahimi 
5626*b7893ccfSSadaf Ebrahimi     return result;
5627*b7893ccfSSadaf Ebrahimi }
5628*b7893ccfSSadaf Ebrahimi 
DispatchGetRefreshCycleDurationGOOGLE(VkDevice device,VkSwapchainKHR swapchain,VkRefreshCycleDurationGOOGLE * pDisplayTimingProperties)5629*b7893ccfSSadaf Ebrahimi VkResult DispatchGetRefreshCycleDurationGOOGLE(
5630*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5631*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain,
5632*b7893ccfSSadaf Ebrahimi     VkRefreshCycleDurationGOOGLE*               pDisplayTimingProperties)
5633*b7893ccfSSadaf Ebrahimi {
5634*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5635*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties);
5636*b7893ccfSSadaf Ebrahimi     {
5637*b7893ccfSSadaf Ebrahimi         swapchain = layer_data->Unwrap(swapchain);
5638*b7893ccfSSadaf Ebrahimi     }
5639*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetRefreshCycleDurationGOOGLE(device, swapchain, pDisplayTimingProperties);
5640*b7893ccfSSadaf Ebrahimi 
5641*b7893ccfSSadaf Ebrahimi     return result;
5642*b7893ccfSSadaf Ebrahimi }
5643*b7893ccfSSadaf Ebrahimi 
DispatchGetPastPresentationTimingGOOGLE(VkDevice device,VkSwapchainKHR swapchain,uint32_t * pPresentationTimingCount,VkPastPresentationTimingGOOGLE * pPresentationTimings)5644*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPastPresentationTimingGOOGLE(
5645*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5646*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain,
5647*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPresentationTimingCount,
5648*b7893ccfSSadaf Ebrahimi     VkPastPresentationTimingGOOGLE*             pPresentationTimings)
5649*b7893ccfSSadaf Ebrahimi {
5650*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5651*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings);
5652*b7893ccfSSadaf Ebrahimi     {
5653*b7893ccfSSadaf Ebrahimi         swapchain = layer_data->Unwrap(swapchain);
5654*b7893ccfSSadaf Ebrahimi     }
5655*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings);
5656*b7893ccfSSadaf Ebrahimi 
5657*b7893ccfSSadaf Ebrahimi     return result;
5658*b7893ccfSSadaf Ebrahimi }
5659*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetDiscardRectangleEXT(VkCommandBuffer commandBuffer,uint32_t firstDiscardRectangle,uint32_t discardRectangleCount,const VkRect2D * pDiscardRectangles)5660*b7893ccfSSadaf Ebrahimi void DispatchCmdSetDiscardRectangleEXT(
5661*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5662*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstDiscardRectangle,
5663*b7893ccfSSadaf Ebrahimi     uint32_t                                    discardRectangleCount,
5664*b7893ccfSSadaf Ebrahimi     const VkRect2D*                             pDiscardRectangles)
5665*b7893ccfSSadaf Ebrahimi {
5666*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5667*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetDiscardRectangleEXT(commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles);
5668*b7893ccfSSadaf Ebrahimi 
5669*b7893ccfSSadaf Ebrahimi }
5670*b7893ccfSSadaf Ebrahimi 
DispatchSetHdrMetadataEXT(VkDevice device,uint32_t swapchainCount,const VkSwapchainKHR * pSwapchains,const VkHdrMetadataEXT * pMetadata)5671*b7893ccfSSadaf Ebrahimi void DispatchSetHdrMetadataEXT(
5672*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5673*b7893ccfSSadaf Ebrahimi     uint32_t                                    swapchainCount,
5674*b7893ccfSSadaf Ebrahimi     const VkSwapchainKHR*                       pSwapchains,
5675*b7893ccfSSadaf Ebrahimi     const VkHdrMetadataEXT*                     pMetadata)
5676*b7893ccfSSadaf Ebrahimi {
5677*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5678*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.SetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
5679*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR *local_pSwapchains = NULL;
5680*b7893ccfSSadaf Ebrahimi     {
5681*b7893ccfSSadaf Ebrahimi         if (pSwapchains) {
5682*b7893ccfSSadaf Ebrahimi             local_pSwapchains = new VkSwapchainKHR[swapchainCount];
5683*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < swapchainCount; ++index0) {
5684*b7893ccfSSadaf Ebrahimi                 local_pSwapchains[index0] = layer_data->Unwrap(pSwapchains[index0]);
5685*b7893ccfSSadaf Ebrahimi             }
5686*b7893ccfSSadaf Ebrahimi         }
5687*b7893ccfSSadaf Ebrahimi     }
5688*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.SetHdrMetadataEXT(device, swapchainCount, (const VkSwapchainKHR*)local_pSwapchains, pMetadata);
5689*b7893ccfSSadaf Ebrahimi     if (local_pSwapchains)
5690*b7893ccfSSadaf Ebrahimi         delete[] local_pSwapchains;
5691*b7893ccfSSadaf Ebrahimi }
5692*b7893ccfSSadaf Ebrahimi 
5693*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_IOS_MVK
5694*b7893ccfSSadaf Ebrahimi 
DispatchCreateIOSSurfaceMVK(VkInstance instance,const VkIOSSurfaceCreateInfoMVK * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)5695*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateIOSSurfaceMVK(
5696*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
5697*b7893ccfSSadaf Ebrahimi     const VkIOSSurfaceCreateInfoMVK*            pCreateInfo,
5698*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5699*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface)
5700*b7893ccfSSadaf Ebrahimi {
5701*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5702*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
5703*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateIOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
5704*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
5705*b7893ccfSSadaf Ebrahimi         *pSurface = layer_data->WrapNew(*pSurface);
5706*b7893ccfSSadaf Ebrahimi     }
5707*b7893ccfSSadaf Ebrahimi     return result;
5708*b7893ccfSSadaf Ebrahimi }
5709*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_IOS_MVK
5710*b7893ccfSSadaf Ebrahimi 
5711*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_MACOS_MVK
5712*b7893ccfSSadaf Ebrahimi 
DispatchCreateMacOSSurfaceMVK(VkInstance instance,const VkMacOSSurfaceCreateInfoMVK * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)5713*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateMacOSSurfaceMVK(
5714*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
5715*b7893ccfSSadaf Ebrahimi     const VkMacOSSurfaceCreateInfoMVK*          pCreateInfo,
5716*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5717*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface)
5718*b7893ccfSSadaf Ebrahimi {
5719*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5720*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
5721*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateMacOSSurfaceMVK(instance, pCreateInfo, pAllocator, pSurface);
5722*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
5723*b7893ccfSSadaf Ebrahimi         *pSurface = layer_data->WrapNew(*pSurface);
5724*b7893ccfSSadaf Ebrahimi     }
5725*b7893ccfSSadaf Ebrahimi     return result;
5726*b7893ccfSSadaf Ebrahimi }
5727*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_MACOS_MVK
5728*b7893ccfSSadaf Ebrahimi 
5729*b7893ccfSSadaf Ebrahimi // Skip vkSetDebugUtilsObjectNameEXT dispatch, manually generated
5730*b7893ccfSSadaf Ebrahimi 
5731*b7893ccfSSadaf Ebrahimi // Skip vkSetDebugUtilsObjectTagEXT dispatch, manually generated
5732*b7893ccfSSadaf Ebrahimi 
DispatchQueueBeginDebugUtilsLabelEXT(VkQueue queue,const VkDebugUtilsLabelEXT * pLabelInfo)5733*b7893ccfSSadaf Ebrahimi void DispatchQueueBeginDebugUtilsLabelEXT(
5734*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue,
5735*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsLabelEXT*                 pLabelInfo)
5736*b7893ccfSSadaf Ebrahimi {
5737*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
5738*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.QueueBeginDebugUtilsLabelEXT(queue, pLabelInfo);
5739*b7893ccfSSadaf Ebrahimi 
5740*b7893ccfSSadaf Ebrahimi }
5741*b7893ccfSSadaf Ebrahimi 
DispatchQueueEndDebugUtilsLabelEXT(VkQueue queue)5742*b7893ccfSSadaf Ebrahimi void DispatchQueueEndDebugUtilsLabelEXT(
5743*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue)
5744*b7893ccfSSadaf Ebrahimi {
5745*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
5746*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.QueueEndDebugUtilsLabelEXT(queue);
5747*b7893ccfSSadaf Ebrahimi 
5748*b7893ccfSSadaf Ebrahimi }
5749*b7893ccfSSadaf Ebrahimi 
DispatchQueueInsertDebugUtilsLabelEXT(VkQueue queue,const VkDebugUtilsLabelEXT * pLabelInfo)5750*b7893ccfSSadaf Ebrahimi void DispatchQueueInsertDebugUtilsLabelEXT(
5751*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue,
5752*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsLabelEXT*                 pLabelInfo)
5753*b7893ccfSSadaf Ebrahimi {
5754*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
5755*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.QueueInsertDebugUtilsLabelEXT(queue, pLabelInfo);
5756*b7893ccfSSadaf Ebrahimi 
5757*b7893ccfSSadaf Ebrahimi }
5758*b7893ccfSSadaf Ebrahimi 
DispatchCmdBeginDebugUtilsLabelEXT(VkCommandBuffer commandBuffer,const VkDebugUtilsLabelEXT * pLabelInfo)5759*b7893ccfSSadaf Ebrahimi void DispatchCmdBeginDebugUtilsLabelEXT(
5760*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5761*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsLabelEXT*                 pLabelInfo)
5762*b7893ccfSSadaf Ebrahimi {
5763*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5764*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBeginDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
5765*b7893ccfSSadaf Ebrahimi 
5766*b7893ccfSSadaf Ebrahimi }
5767*b7893ccfSSadaf Ebrahimi 
DispatchCmdEndDebugUtilsLabelEXT(VkCommandBuffer commandBuffer)5768*b7893ccfSSadaf Ebrahimi void DispatchCmdEndDebugUtilsLabelEXT(
5769*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer)
5770*b7893ccfSSadaf Ebrahimi {
5771*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5772*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdEndDebugUtilsLabelEXT(commandBuffer);
5773*b7893ccfSSadaf Ebrahimi 
5774*b7893ccfSSadaf Ebrahimi }
5775*b7893ccfSSadaf Ebrahimi 
DispatchCmdInsertDebugUtilsLabelEXT(VkCommandBuffer commandBuffer,const VkDebugUtilsLabelEXT * pLabelInfo)5776*b7893ccfSSadaf Ebrahimi void DispatchCmdInsertDebugUtilsLabelEXT(
5777*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5778*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsLabelEXT*                 pLabelInfo)
5779*b7893ccfSSadaf Ebrahimi {
5780*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5781*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdInsertDebugUtilsLabelEXT(commandBuffer, pLabelInfo);
5782*b7893ccfSSadaf Ebrahimi 
5783*b7893ccfSSadaf Ebrahimi }
5784*b7893ccfSSadaf Ebrahimi 
DispatchCreateDebugUtilsMessengerEXT(VkInstance instance,const VkDebugUtilsMessengerCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDebugUtilsMessengerEXT * pMessenger)5785*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateDebugUtilsMessengerEXT(
5786*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
5787*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsMessengerCreateInfoEXT*   pCreateInfo,
5788*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5789*b7893ccfSSadaf Ebrahimi     VkDebugUtilsMessengerEXT*                   pMessenger)
5790*b7893ccfSSadaf Ebrahimi {
5791*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5792*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger);
5793*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger);
5794*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
5795*b7893ccfSSadaf Ebrahimi         *pMessenger = layer_data->WrapNew(*pMessenger);
5796*b7893ccfSSadaf Ebrahimi     }
5797*b7893ccfSSadaf Ebrahimi     return result;
5798*b7893ccfSSadaf Ebrahimi }
5799*b7893ccfSSadaf Ebrahimi 
DispatchDestroyDebugUtilsMessengerEXT(VkInstance instance,VkDebugUtilsMessengerEXT messenger,const VkAllocationCallbacks * pAllocator)5800*b7893ccfSSadaf Ebrahimi void DispatchDestroyDebugUtilsMessengerEXT(
5801*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
5802*b7893ccfSSadaf Ebrahimi     VkDebugUtilsMessengerEXT                    messenger,
5803*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
5804*b7893ccfSSadaf Ebrahimi {
5805*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5806*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.DestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator);
5807*b7893ccfSSadaf Ebrahimi     uint64_t messenger_id = reinterpret_cast<uint64_t &>(messenger);
5808*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(messenger_id);
5809*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
5810*b7893ccfSSadaf Ebrahimi         messenger = (VkDebugUtilsMessengerEXT)iter->second;
5811*b7893ccfSSadaf Ebrahimi     } else {
5812*b7893ccfSSadaf Ebrahimi         messenger = (VkDebugUtilsMessengerEXT)0;
5813*b7893ccfSSadaf Ebrahimi     }
5814*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.DestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator);
5815*b7893ccfSSadaf Ebrahimi 
5816*b7893ccfSSadaf Ebrahimi }
5817*b7893ccfSSadaf Ebrahimi 
DispatchSubmitDebugUtilsMessageEXT(VkInstance instance,VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,VkDebugUtilsMessageTypeFlagsEXT messageTypes,const VkDebugUtilsMessengerCallbackDataEXT * pCallbackData)5818*b7893ccfSSadaf Ebrahimi void DispatchSubmitDebugUtilsMessageEXT(
5819*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
5820*b7893ccfSSadaf Ebrahimi     VkDebugUtilsMessageSeverityFlagBitsEXT      messageSeverity,
5821*b7893ccfSSadaf Ebrahimi     VkDebugUtilsMessageTypeFlagsEXT             messageTypes,
5822*b7893ccfSSadaf Ebrahimi     const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData)
5823*b7893ccfSSadaf Ebrahimi {
5824*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
5825*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.SubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, pCallbackData);
5826*b7893ccfSSadaf Ebrahimi 
5827*b7893ccfSSadaf Ebrahimi }
5828*b7893ccfSSadaf Ebrahimi 
5829*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_ANDROID_KHR
5830*b7893ccfSSadaf Ebrahimi 
DispatchGetAndroidHardwareBufferPropertiesANDROID(VkDevice device,const struct AHardwareBuffer * buffer,VkAndroidHardwareBufferPropertiesANDROID * pProperties)5831*b7893ccfSSadaf Ebrahimi VkResult DispatchGetAndroidHardwareBufferPropertiesANDROID(
5832*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5833*b7893ccfSSadaf Ebrahimi     const struct AHardwareBuffer*               buffer,
5834*b7893ccfSSadaf Ebrahimi     VkAndroidHardwareBufferPropertiesANDROID*   pProperties)
5835*b7893ccfSSadaf Ebrahimi {
5836*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5837*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetAndroidHardwareBufferPropertiesANDROID(device, buffer, pProperties);
5838*b7893ccfSSadaf Ebrahimi 
5839*b7893ccfSSadaf Ebrahimi     return result;
5840*b7893ccfSSadaf Ebrahimi }
5841*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_ANDROID_KHR
5842*b7893ccfSSadaf Ebrahimi 
5843*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_ANDROID_KHR
5844*b7893ccfSSadaf Ebrahimi 
DispatchGetMemoryAndroidHardwareBufferANDROID(VkDevice device,const VkMemoryGetAndroidHardwareBufferInfoANDROID * pInfo,struct AHardwareBuffer ** pBuffer)5845*b7893ccfSSadaf Ebrahimi VkResult DispatchGetMemoryAndroidHardwareBufferANDROID(
5846*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5847*b7893ccfSSadaf Ebrahimi     const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
5848*b7893ccfSSadaf Ebrahimi     struct AHardwareBuffer**                    pBuffer)
5849*b7893ccfSSadaf Ebrahimi {
5850*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5851*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetMemoryAndroidHardwareBufferANDROID(device, pInfo, pBuffer);
5852*b7893ccfSSadaf Ebrahimi     safe_VkMemoryGetAndroidHardwareBufferInfoANDROID *local_pInfo = NULL;
5853*b7893ccfSSadaf Ebrahimi     {
5854*b7893ccfSSadaf Ebrahimi         if (pInfo) {
5855*b7893ccfSSadaf Ebrahimi             local_pInfo = new safe_VkMemoryGetAndroidHardwareBufferInfoANDROID(pInfo);
5856*b7893ccfSSadaf Ebrahimi             if (pInfo->memory) {
5857*b7893ccfSSadaf Ebrahimi                 local_pInfo->memory = layer_data->Unwrap(pInfo->memory);
5858*b7893ccfSSadaf Ebrahimi             }
5859*b7893ccfSSadaf Ebrahimi         }
5860*b7893ccfSSadaf Ebrahimi     }
5861*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetMemoryAndroidHardwareBufferANDROID(device, (const VkMemoryGetAndroidHardwareBufferInfoANDROID*)local_pInfo, pBuffer);
5862*b7893ccfSSadaf Ebrahimi     if (local_pInfo) {
5863*b7893ccfSSadaf Ebrahimi         delete local_pInfo;
5864*b7893ccfSSadaf Ebrahimi     }
5865*b7893ccfSSadaf Ebrahimi     return result;
5866*b7893ccfSSadaf Ebrahimi }
5867*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_ANDROID_KHR
5868*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetSampleLocationsEXT(VkCommandBuffer commandBuffer,const VkSampleLocationsInfoEXT * pSampleLocationsInfo)5869*b7893ccfSSadaf Ebrahimi void DispatchCmdSetSampleLocationsEXT(
5870*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5871*b7893ccfSSadaf Ebrahimi     const VkSampleLocationsInfoEXT*             pSampleLocationsInfo)
5872*b7893ccfSSadaf Ebrahimi {
5873*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5874*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetSampleLocationsEXT(commandBuffer, pSampleLocationsInfo);
5875*b7893ccfSSadaf Ebrahimi 
5876*b7893ccfSSadaf Ebrahimi }
5877*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceMultisamplePropertiesEXT(VkPhysicalDevice physicalDevice,VkSampleCountFlagBits samples,VkMultisamplePropertiesEXT * pMultisampleProperties)5878*b7893ccfSSadaf Ebrahimi void DispatchGetPhysicalDeviceMultisamplePropertiesEXT(
5879*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
5880*b7893ccfSSadaf Ebrahimi     VkSampleCountFlagBits                       samples,
5881*b7893ccfSSadaf Ebrahimi     VkMultisamplePropertiesEXT*                 pMultisampleProperties)
5882*b7893ccfSSadaf Ebrahimi {
5883*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
5884*b7893ccfSSadaf Ebrahimi     layer_data->instance_dispatch_table.GetPhysicalDeviceMultisamplePropertiesEXT(physicalDevice, samples, pMultisampleProperties);
5885*b7893ccfSSadaf Ebrahimi 
5886*b7893ccfSSadaf Ebrahimi }
5887*b7893ccfSSadaf Ebrahimi 
DispatchGetImageDrmFormatModifierPropertiesEXT(VkDevice device,VkImage image,VkImageDrmFormatModifierPropertiesEXT * pProperties)5888*b7893ccfSSadaf Ebrahimi VkResult DispatchGetImageDrmFormatModifierPropertiesEXT(
5889*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5890*b7893ccfSSadaf Ebrahimi     VkImage                                     image,
5891*b7893ccfSSadaf Ebrahimi     VkImageDrmFormatModifierPropertiesEXT*      pProperties)
5892*b7893ccfSSadaf Ebrahimi {
5893*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5894*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetImageDrmFormatModifierPropertiesEXT(device, image, pProperties);
5895*b7893ccfSSadaf Ebrahimi     {
5896*b7893ccfSSadaf Ebrahimi         image = layer_data->Unwrap(image);
5897*b7893ccfSSadaf Ebrahimi     }
5898*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetImageDrmFormatModifierPropertiesEXT(device, image, pProperties);
5899*b7893ccfSSadaf Ebrahimi 
5900*b7893ccfSSadaf Ebrahimi     return result;
5901*b7893ccfSSadaf Ebrahimi }
5902*b7893ccfSSadaf Ebrahimi 
DispatchCreateValidationCacheEXT(VkDevice device,const VkValidationCacheCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkValidationCacheEXT * pValidationCache)5903*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateValidationCacheEXT(
5904*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5905*b7893ccfSSadaf Ebrahimi     const VkValidationCacheCreateInfoEXT*       pCreateInfo,
5906*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
5907*b7893ccfSSadaf Ebrahimi     VkValidationCacheEXT*                       pValidationCache)
5908*b7893ccfSSadaf Ebrahimi {
5909*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5910*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateValidationCacheEXT(device, pCreateInfo, pAllocator, pValidationCache);
5911*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateValidationCacheEXT(device, pCreateInfo, pAllocator, pValidationCache);
5912*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
5913*b7893ccfSSadaf Ebrahimi         *pValidationCache = layer_data->WrapNew(*pValidationCache);
5914*b7893ccfSSadaf Ebrahimi     }
5915*b7893ccfSSadaf Ebrahimi     return result;
5916*b7893ccfSSadaf Ebrahimi }
5917*b7893ccfSSadaf Ebrahimi 
DispatchDestroyValidationCacheEXT(VkDevice device,VkValidationCacheEXT validationCache,const VkAllocationCallbacks * pAllocator)5918*b7893ccfSSadaf Ebrahimi void DispatchDestroyValidationCacheEXT(
5919*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5920*b7893ccfSSadaf Ebrahimi     VkValidationCacheEXT                        validationCache,
5921*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
5922*b7893ccfSSadaf Ebrahimi {
5923*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5924*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyValidationCacheEXT(device, validationCache, pAllocator);
5925*b7893ccfSSadaf Ebrahimi     uint64_t validationCache_id = reinterpret_cast<uint64_t &>(validationCache);
5926*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(validationCache_id);
5927*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
5928*b7893ccfSSadaf Ebrahimi         validationCache = (VkValidationCacheEXT)iter->second;
5929*b7893ccfSSadaf Ebrahimi     } else {
5930*b7893ccfSSadaf Ebrahimi         validationCache = (VkValidationCacheEXT)0;
5931*b7893ccfSSadaf Ebrahimi     }
5932*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyValidationCacheEXT(device, validationCache, pAllocator);
5933*b7893ccfSSadaf Ebrahimi 
5934*b7893ccfSSadaf Ebrahimi }
5935*b7893ccfSSadaf Ebrahimi 
DispatchMergeValidationCachesEXT(VkDevice device,VkValidationCacheEXT dstCache,uint32_t srcCacheCount,const VkValidationCacheEXT * pSrcCaches)5936*b7893ccfSSadaf Ebrahimi VkResult DispatchMergeValidationCachesEXT(
5937*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5938*b7893ccfSSadaf Ebrahimi     VkValidationCacheEXT                        dstCache,
5939*b7893ccfSSadaf Ebrahimi     uint32_t                                    srcCacheCount,
5940*b7893ccfSSadaf Ebrahimi     const VkValidationCacheEXT*                 pSrcCaches)
5941*b7893ccfSSadaf Ebrahimi {
5942*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5943*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.MergeValidationCachesEXT(device, dstCache, srcCacheCount, pSrcCaches);
5944*b7893ccfSSadaf Ebrahimi     VkValidationCacheEXT *local_pSrcCaches = NULL;
5945*b7893ccfSSadaf Ebrahimi     {
5946*b7893ccfSSadaf Ebrahimi         dstCache = layer_data->Unwrap(dstCache);
5947*b7893ccfSSadaf Ebrahimi         if (pSrcCaches) {
5948*b7893ccfSSadaf Ebrahimi             local_pSrcCaches = new VkValidationCacheEXT[srcCacheCount];
5949*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < srcCacheCount; ++index0) {
5950*b7893ccfSSadaf Ebrahimi                 local_pSrcCaches[index0] = layer_data->Unwrap(pSrcCaches[index0]);
5951*b7893ccfSSadaf Ebrahimi             }
5952*b7893ccfSSadaf Ebrahimi         }
5953*b7893ccfSSadaf Ebrahimi     }
5954*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.MergeValidationCachesEXT(device, dstCache, srcCacheCount, (const VkValidationCacheEXT*)local_pSrcCaches);
5955*b7893ccfSSadaf Ebrahimi     if (local_pSrcCaches)
5956*b7893ccfSSadaf Ebrahimi         delete[] local_pSrcCaches;
5957*b7893ccfSSadaf Ebrahimi     return result;
5958*b7893ccfSSadaf Ebrahimi }
5959*b7893ccfSSadaf Ebrahimi 
DispatchGetValidationCacheDataEXT(VkDevice device,VkValidationCacheEXT validationCache,size_t * pDataSize,void * pData)5960*b7893ccfSSadaf Ebrahimi VkResult DispatchGetValidationCacheDataEXT(
5961*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
5962*b7893ccfSSadaf Ebrahimi     VkValidationCacheEXT                        validationCache,
5963*b7893ccfSSadaf Ebrahimi     size_t*                                     pDataSize,
5964*b7893ccfSSadaf Ebrahimi     void*                                       pData)
5965*b7893ccfSSadaf Ebrahimi {
5966*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
5967*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetValidationCacheDataEXT(device, validationCache, pDataSize, pData);
5968*b7893ccfSSadaf Ebrahimi     {
5969*b7893ccfSSadaf Ebrahimi         validationCache = layer_data->Unwrap(validationCache);
5970*b7893ccfSSadaf Ebrahimi     }
5971*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetValidationCacheDataEXT(device, validationCache, pDataSize, pData);
5972*b7893ccfSSadaf Ebrahimi 
5973*b7893ccfSSadaf Ebrahimi     return result;
5974*b7893ccfSSadaf Ebrahimi }
5975*b7893ccfSSadaf Ebrahimi 
DispatchCmdBindShadingRateImageNV(VkCommandBuffer commandBuffer,VkImageView imageView,VkImageLayout imageLayout)5976*b7893ccfSSadaf Ebrahimi void DispatchCmdBindShadingRateImageNV(
5977*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5978*b7893ccfSSadaf Ebrahimi     VkImageView                                 imageView,
5979*b7893ccfSSadaf Ebrahimi     VkImageLayout                               imageLayout)
5980*b7893ccfSSadaf Ebrahimi {
5981*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5982*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout);
5983*b7893ccfSSadaf Ebrahimi     {
5984*b7893ccfSSadaf Ebrahimi         imageView = layer_data->Unwrap(imageView);
5985*b7893ccfSSadaf Ebrahimi     }
5986*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBindShadingRateImageNV(commandBuffer, imageView, imageLayout);
5987*b7893ccfSSadaf Ebrahimi 
5988*b7893ccfSSadaf Ebrahimi }
5989*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetViewportShadingRatePaletteNV(VkCommandBuffer commandBuffer,uint32_t firstViewport,uint32_t viewportCount,const VkShadingRatePaletteNV * pShadingRatePalettes)5990*b7893ccfSSadaf Ebrahimi void DispatchCmdSetViewportShadingRatePaletteNV(
5991*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
5992*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstViewport,
5993*b7893ccfSSadaf Ebrahimi     uint32_t                                    viewportCount,
5994*b7893ccfSSadaf Ebrahimi     const VkShadingRatePaletteNV*               pShadingRatePalettes)
5995*b7893ccfSSadaf Ebrahimi {
5996*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
5997*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetViewportShadingRatePaletteNV(commandBuffer, firstViewport, viewportCount, pShadingRatePalettes);
5998*b7893ccfSSadaf Ebrahimi 
5999*b7893ccfSSadaf Ebrahimi }
6000*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetCoarseSampleOrderNV(VkCommandBuffer commandBuffer,VkCoarseSampleOrderTypeNV sampleOrderType,uint32_t customSampleOrderCount,const VkCoarseSampleOrderCustomNV * pCustomSampleOrders)6001*b7893ccfSSadaf Ebrahimi void DispatchCmdSetCoarseSampleOrderNV(
6002*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6003*b7893ccfSSadaf Ebrahimi     VkCoarseSampleOrderTypeNV                   sampleOrderType,
6004*b7893ccfSSadaf Ebrahimi     uint32_t                                    customSampleOrderCount,
6005*b7893ccfSSadaf Ebrahimi     const VkCoarseSampleOrderCustomNV*          pCustomSampleOrders)
6006*b7893ccfSSadaf Ebrahimi {
6007*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6008*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetCoarseSampleOrderNV(commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders);
6009*b7893ccfSSadaf Ebrahimi 
6010*b7893ccfSSadaf Ebrahimi }
6011*b7893ccfSSadaf Ebrahimi 
DispatchCreateAccelerationStructureNV(VkDevice device,const VkAccelerationStructureCreateInfoNV * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkAccelerationStructureNV * pAccelerationStructure)6012*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateAccelerationStructureNV(
6013*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6014*b7893ccfSSadaf Ebrahimi     const VkAccelerationStructureCreateInfoNV*  pCreateInfo,
6015*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
6016*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV*                  pAccelerationStructure)
6017*b7893ccfSSadaf Ebrahimi {
6018*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6019*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateAccelerationStructureNV(device, pCreateInfo, pAllocator, pAccelerationStructure);
6020*b7893ccfSSadaf Ebrahimi     safe_VkAccelerationStructureCreateInfoNV *local_pCreateInfo = NULL;
6021*b7893ccfSSadaf Ebrahimi     {
6022*b7893ccfSSadaf Ebrahimi         if (pCreateInfo) {
6023*b7893ccfSSadaf Ebrahimi             local_pCreateInfo = new safe_VkAccelerationStructureCreateInfoNV(pCreateInfo);
6024*b7893ccfSSadaf Ebrahimi             if (local_pCreateInfo->info.pGeometries) {
6025*b7893ccfSSadaf Ebrahimi                 for (uint32_t index2 = 0; index2 < local_pCreateInfo->info.geometryCount; ++index2) {
6026*b7893ccfSSadaf Ebrahimi                     if (pCreateInfo->info.pGeometries[index2].geometry.triangles.vertexData) {
6027*b7893ccfSSadaf Ebrahimi                         local_pCreateInfo->info.pGeometries[index2].geometry.triangles.vertexData = layer_data->Unwrap(pCreateInfo->info.pGeometries[index2].geometry.triangles.vertexData);
6028*b7893ccfSSadaf Ebrahimi                     }
6029*b7893ccfSSadaf Ebrahimi                     if (pCreateInfo->info.pGeometries[index2].geometry.triangles.indexData) {
6030*b7893ccfSSadaf Ebrahimi                         local_pCreateInfo->info.pGeometries[index2].geometry.triangles.indexData = layer_data->Unwrap(pCreateInfo->info.pGeometries[index2].geometry.triangles.indexData);
6031*b7893ccfSSadaf Ebrahimi                     }
6032*b7893ccfSSadaf Ebrahimi                     if (pCreateInfo->info.pGeometries[index2].geometry.triangles.transformData) {
6033*b7893ccfSSadaf Ebrahimi                         local_pCreateInfo->info.pGeometries[index2].geometry.triangles.transformData = layer_data->Unwrap(pCreateInfo->info.pGeometries[index2].geometry.triangles.transformData);
6034*b7893ccfSSadaf Ebrahimi                     }
6035*b7893ccfSSadaf Ebrahimi                     if (pCreateInfo->info.pGeometries[index2].geometry.aabbs.aabbData) {
6036*b7893ccfSSadaf Ebrahimi                         local_pCreateInfo->info.pGeometries[index2].geometry.aabbs.aabbData = layer_data->Unwrap(pCreateInfo->info.pGeometries[index2].geometry.aabbs.aabbData);
6037*b7893ccfSSadaf Ebrahimi                     }
6038*b7893ccfSSadaf Ebrahimi                 }
6039*b7893ccfSSadaf Ebrahimi             }
6040*b7893ccfSSadaf Ebrahimi         }
6041*b7893ccfSSadaf Ebrahimi     }
6042*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateAccelerationStructureNV(device, (const VkAccelerationStructureCreateInfoNV*)local_pCreateInfo, pAllocator, pAccelerationStructure);
6043*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfo) {
6044*b7893ccfSSadaf Ebrahimi         delete local_pCreateInfo;
6045*b7893ccfSSadaf Ebrahimi     }
6046*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
6047*b7893ccfSSadaf Ebrahimi         *pAccelerationStructure = layer_data->WrapNew(*pAccelerationStructure);
6048*b7893ccfSSadaf Ebrahimi     }
6049*b7893ccfSSadaf Ebrahimi     return result;
6050*b7893ccfSSadaf Ebrahimi }
6051*b7893ccfSSadaf Ebrahimi 
DispatchDestroyAccelerationStructureNV(VkDevice device,VkAccelerationStructureNV accelerationStructure,const VkAllocationCallbacks * pAllocator)6052*b7893ccfSSadaf Ebrahimi void DispatchDestroyAccelerationStructureNV(
6053*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6054*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV                   accelerationStructure,
6055*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator)
6056*b7893ccfSSadaf Ebrahimi {
6057*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6058*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.DestroyAccelerationStructureNV(device, accelerationStructure, pAllocator);
6059*b7893ccfSSadaf Ebrahimi     uint64_t accelerationStructure_id = reinterpret_cast<uint64_t &>(accelerationStructure);
6060*b7893ccfSSadaf Ebrahimi     auto iter = unique_id_mapping.pop(accelerationStructure_id);
6061*b7893ccfSSadaf Ebrahimi     if (iter != unique_id_mapping.end()) {
6062*b7893ccfSSadaf Ebrahimi         accelerationStructure = (VkAccelerationStructureNV)iter->second;
6063*b7893ccfSSadaf Ebrahimi     } else {
6064*b7893ccfSSadaf Ebrahimi         accelerationStructure = (VkAccelerationStructureNV)0;
6065*b7893ccfSSadaf Ebrahimi     }
6066*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.DestroyAccelerationStructureNV(device, accelerationStructure, pAllocator);
6067*b7893ccfSSadaf Ebrahimi 
6068*b7893ccfSSadaf Ebrahimi }
6069*b7893ccfSSadaf Ebrahimi 
DispatchGetAccelerationStructureMemoryRequirementsNV(VkDevice device,const VkAccelerationStructureMemoryRequirementsInfoNV * pInfo,VkMemoryRequirements2KHR * pMemoryRequirements)6070*b7893ccfSSadaf Ebrahimi void DispatchGetAccelerationStructureMemoryRequirementsNV(
6071*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6072*b7893ccfSSadaf Ebrahimi     const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo,
6073*b7893ccfSSadaf Ebrahimi     VkMemoryRequirements2KHR*                   pMemoryRequirements)
6074*b7893ccfSSadaf Ebrahimi {
6075*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6076*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetAccelerationStructureMemoryRequirementsNV(device, pInfo, pMemoryRequirements);
6077*b7893ccfSSadaf Ebrahimi     safe_VkAccelerationStructureMemoryRequirementsInfoNV *local_pInfo = NULL;
6078*b7893ccfSSadaf Ebrahimi     {
6079*b7893ccfSSadaf Ebrahimi         if (pInfo) {
6080*b7893ccfSSadaf Ebrahimi             local_pInfo = new safe_VkAccelerationStructureMemoryRequirementsInfoNV(pInfo);
6081*b7893ccfSSadaf Ebrahimi             if (pInfo->accelerationStructure) {
6082*b7893ccfSSadaf Ebrahimi                 local_pInfo->accelerationStructure = layer_data->Unwrap(pInfo->accelerationStructure);
6083*b7893ccfSSadaf Ebrahimi             }
6084*b7893ccfSSadaf Ebrahimi         }
6085*b7893ccfSSadaf Ebrahimi     }
6086*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetAccelerationStructureMemoryRequirementsNV(device, (const VkAccelerationStructureMemoryRequirementsInfoNV*)local_pInfo, pMemoryRequirements);
6087*b7893ccfSSadaf Ebrahimi     if (local_pInfo) {
6088*b7893ccfSSadaf Ebrahimi         delete local_pInfo;
6089*b7893ccfSSadaf Ebrahimi     }
6090*b7893ccfSSadaf Ebrahimi }
6091*b7893ccfSSadaf Ebrahimi 
DispatchBindAccelerationStructureMemoryNV(VkDevice device,uint32_t bindInfoCount,const VkBindAccelerationStructureMemoryInfoNV * pBindInfos)6092*b7893ccfSSadaf Ebrahimi VkResult DispatchBindAccelerationStructureMemoryNV(
6093*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6094*b7893ccfSSadaf Ebrahimi     uint32_t                                    bindInfoCount,
6095*b7893ccfSSadaf Ebrahimi     const VkBindAccelerationStructureMemoryInfoNV* pBindInfos)
6096*b7893ccfSSadaf Ebrahimi {
6097*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6098*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.BindAccelerationStructureMemoryNV(device, bindInfoCount, pBindInfos);
6099*b7893ccfSSadaf Ebrahimi     safe_VkBindAccelerationStructureMemoryInfoNV *local_pBindInfos = NULL;
6100*b7893ccfSSadaf Ebrahimi     {
6101*b7893ccfSSadaf Ebrahimi         if (pBindInfos) {
6102*b7893ccfSSadaf Ebrahimi             local_pBindInfos = new safe_VkBindAccelerationStructureMemoryInfoNV[bindInfoCount];
6103*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < bindInfoCount; ++index0) {
6104*b7893ccfSSadaf Ebrahimi                 local_pBindInfos[index0].initialize(&pBindInfos[index0]);
6105*b7893ccfSSadaf Ebrahimi                 if (pBindInfos[index0].accelerationStructure) {
6106*b7893ccfSSadaf Ebrahimi                     local_pBindInfos[index0].accelerationStructure = layer_data->Unwrap(pBindInfos[index0].accelerationStructure);
6107*b7893ccfSSadaf Ebrahimi                 }
6108*b7893ccfSSadaf Ebrahimi                 if (pBindInfos[index0].memory) {
6109*b7893ccfSSadaf Ebrahimi                     local_pBindInfos[index0].memory = layer_data->Unwrap(pBindInfos[index0].memory);
6110*b7893ccfSSadaf Ebrahimi                 }
6111*b7893ccfSSadaf Ebrahimi             }
6112*b7893ccfSSadaf Ebrahimi         }
6113*b7893ccfSSadaf Ebrahimi     }
6114*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.BindAccelerationStructureMemoryNV(device, bindInfoCount, (const VkBindAccelerationStructureMemoryInfoNV*)local_pBindInfos);
6115*b7893ccfSSadaf Ebrahimi     if (local_pBindInfos) {
6116*b7893ccfSSadaf Ebrahimi         delete[] local_pBindInfos;
6117*b7893ccfSSadaf Ebrahimi     }
6118*b7893ccfSSadaf Ebrahimi     return result;
6119*b7893ccfSSadaf Ebrahimi }
6120*b7893ccfSSadaf Ebrahimi 
DispatchCmdBuildAccelerationStructureNV(VkCommandBuffer commandBuffer,const VkAccelerationStructureInfoNV * pInfo,VkBuffer instanceData,VkDeviceSize instanceOffset,VkBool32 update,VkAccelerationStructureNV dst,VkAccelerationStructureNV src,VkBuffer scratch,VkDeviceSize scratchOffset)6121*b7893ccfSSadaf Ebrahimi void DispatchCmdBuildAccelerationStructureNV(
6122*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6123*b7893ccfSSadaf Ebrahimi     const VkAccelerationStructureInfoNV*        pInfo,
6124*b7893ccfSSadaf Ebrahimi     VkBuffer                                    instanceData,
6125*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                instanceOffset,
6126*b7893ccfSSadaf Ebrahimi     VkBool32                                    update,
6127*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV                   dst,
6128*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV                   src,
6129*b7893ccfSSadaf Ebrahimi     VkBuffer                                    scratch,
6130*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                scratchOffset)
6131*b7893ccfSSadaf Ebrahimi {
6132*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6133*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdBuildAccelerationStructureNV(commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
6134*b7893ccfSSadaf Ebrahimi     safe_VkAccelerationStructureInfoNV *local_pInfo = NULL;
6135*b7893ccfSSadaf Ebrahimi     {
6136*b7893ccfSSadaf Ebrahimi         if (pInfo) {
6137*b7893ccfSSadaf Ebrahimi             local_pInfo = new safe_VkAccelerationStructureInfoNV(pInfo);
6138*b7893ccfSSadaf Ebrahimi             if (local_pInfo->pGeometries) {
6139*b7893ccfSSadaf Ebrahimi                 for (uint32_t index1 = 0; index1 < local_pInfo->geometryCount; ++index1) {
6140*b7893ccfSSadaf Ebrahimi                     if (pInfo->pGeometries[index1].geometry.triangles.vertexData) {
6141*b7893ccfSSadaf Ebrahimi                         local_pInfo->pGeometries[index1].geometry.triangles.vertexData = layer_data->Unwrap(pInfo->pGeometries[index1].geometry.triangles.vertexData);
6142*b7893ccfSSadaf Ebrahimi                     }
6143*b7893ccfSSadaf Ebrahimi                     if (pInfo->pGeometries[index1].geometry.triangles.indexData) {
6144*b7893ccfSSadaf Ebrahimi                         local_pInfo->pGeometries[index1].geometry.triangles.indexData = layer_data->Unwrap(pInfo->pGeometries[index1].geometry.triangles.indexData);
6145*b7893ccfSSadaf Ebrahimi                     }
6146*b7893ccfSSadaf Ebrahimi                     if (pInfo->pGeometries[index1].geometry.triangles.transformData) {
6147*b7893ccfSSadaf Ebrahimi                         local_pInfo->pGeometries[index1].geometry.triangles.transformData = layer_data->Unwrap(pInfo->pGeometries[index1].geometry.triangles.transformData);
6148*b7893ccfSSadaf Ebrahimi                     }
6149*b7893ccfSSadaf Ebrahimi                     if (pInfo->pGeometries[index1].geometry.aabbs.aabbData) {
6150*b7893ccfSSadaf Ebrahimi                         local_pInfo->pGeometries[index1].geometry.aabbs.aabbData = layer_data->Unwrap(pInfo->pGeometries[index1].geometry.aabbs.aabbData);
6151*b7893ccfSSadaf Ebrahimi                     }
6152*b7893ccfSSadaf Ebrahimi                 }
6153*b7893ccfSSadaf Ebrahimi             }
6154*b7893ccfSSadaf Ebrahimi         }
6155*b7893ccfSSadaf Ebrahimi         instanceData = layer_data->Unwrap(instanceData);
6156*b7893ccfSSadaf Ebrahimi         dst = layer_data->Unwrap(dst);
6157*b7893ccfSSadaf Ebrahimi         src = layer_data->Unwrap(src);
6158*b7893ccfSSadaf Ebrahimi         scratch = layer_data->Unwrap(scratch);
6159*b7893ccfSSadaf Ebrahimi     }
6160*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdBuildAccelerationStructureNV(commandBuffer, (const VkAccelerationStructureInfoNV*)local_pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset);
6161*b7893ccfSSadaf Ebrahimi     if (local_pInfo) {
6162*b7893ccfSSadaf Ebrahimi         delete local_pInfo;
6163*b7893ccfSSadaf Ebrahimi     }
6164*b7893ccfSSadaf Ebrahimi }
6165*b7893ccfSSadaf Ebrahimi 
DispatchCmdCopyAccelerationStructureNV(VkCommandBuffer commandBuffer,VkAccelerationStructureNV dst,VkAccelerationStructureNV src,VkCopyAccelerationStructureModeNV mode)6166*b7893ccfSSadaf Ebrahimi void DispatchCmdCopyAccelerationStructureNV(
6167*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6168*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV                   dst,
6169*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV                   src,
6170*b7893ccfSSadaf Ebrahimi     VkCopyAccelerationStructureModeNV           mode)
6171*b7893ccfSSadaf Ebrahimi {
6172*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6173*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode);
6174*b7893ccfSSadaf Ebrahimi     {
6175*b7893ccfSSadaf Ebrahimi         dst = layer_data->Unwrap(dst);
6176*b7893ccfSSadaf Ebrahimi         src = layer_data->Unwrap(src);
6177*b7893ccfSSadaf Ebrahimi     }
6178*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdCopyAccelerationStructureNV(commandBuffer, dst, src, mode);
6179*b7893ccfSSadaf Ebrahimi 
6180*b7893ccfSSadaf Ebrahimi }
6181*b7893ccfSSadaf Ebrahimi 
DispatchCmdTraceRaysNV(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)6182*b7893ccfSSadaf Ebrahimi void DispatchCmdTraceRaysNV(
6183*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6184*b7893ccfSSadaf Ebrahimi     VkBuffer                                    raygenShaderBindingTableBuffer,
6185*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                raygenShaderBindingOffset,
6186*b7893ccfSSadaf Ebrahimi     VkBuffer                                    missShaderBindingTableBuffer,
6187*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                missShaderBindingOffset,
6188*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                missShaderBindingStride,
6189*b7893ccfSSadaf Ebrahimi     VkBuffer                                    hitShaderBindingTableBuffer,
6190*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                hitShaderBindingOffset,
6191*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                hitShaderBindingStride,
6192*b7893ccfSSadaf Ebrahimi     VkBuffer                                    callableShaderBindingTableBuffer,
6193*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                callableShaderBindingOffset,
6194*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                callableShaderBindingStride,
6195*b7893ccfSSadaf Ebrahimi     uint32_t                                    width,
6196*b7893ccfSSadaf Ebrahimi     uint32_t                                    height,
6197*b7893ccfSSadaf Ebrahimi     uint32_t                                    depth)
6198*b7893ccfSSadaf Ebrahimi {
6199*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6200*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth);
6201*b7893ccfSSadaf Ebrahimi     {
6202*b7893ccfSSadaf Ebrahimi         raygenShaderBindingTableBuffer = layer_data->Unwrap(raygenShaderBindingTableBuffer);
6203*b7893ccfSSadaf Ebrahimi         missShaderBindingTableBuffer = layer_data->Unwrap(missShaderBindingTableBuffer);
6204*b7893ccfSSadaf Ebrahimi         hitShaderBindingTableBuffer = layer_data->Unwrap(hitShaderBindingTableBuffer);
6205*b7893ccfSSadaf Ebrahimi         callableShaderBindingTableBuffer = layer_data->Unwrap(callableShaderBindingTableBuffer);
6206*b7893ccfSSadaf Ebrahimi     }
6207*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdTraceRaysNV(commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth);
6208*b7893ccfSSadaf Ebrahimi 
6209*b7893ccfSSadaf Ebrahimi }
6210*b7893ccfSSadaf Ebrahimi 
DispatchCreateRayTracingPipelinesNV(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const VkRayTracingPipelineCreateInfoNV * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkPipeline * pPipelines)6211*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateRayTracingPipelinesNV(
6212*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6213*b7893ccfSSadaf Ebrahimi     VkPipelineCache                             pipelineCache,
6214*b7893ccfSSadaf Ebrahimi     uint32_t                                    createInfoCount,
6215*b7893ccfSSadaf Ebrahimi     const VkRayTracingPipelineCreateInfoNV*     pCreateInfos,
6216*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
6217*b7893ccfSSadaf Ebrahimi     VkPipeline*                                 pPipelines)
6218*b7893ccfSSadaf Ebrahimi {
6219*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6220*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CreateRayTracingPipelinesNV(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
6221*b7893ccfSSadaf Ebrahimi     safe_VkRayTracingPipelineCreateInfoNV *local_pCreateInfos = NULL;
6222*b7893ccfSSadaf Ebrahimi     {
6223*b7893ccfSSadaf Ebrahimi         pipelineCache = layer_data->Unwrap(pipelineCache);
6224*b7893ccfSSadaf Ebrahimi         if (pCreateInfos) {
6225*b7893ccfSSadaf Ebrahimi             local_pCreateInfos = new safe_VkRayTracingPipelineCreateInfoNV[createInfoCount];
6226*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < createInfoCount; ++index0) {
6227*b7893ccfSSadaf Ebrahimi                 local_pCreateInfos[index0].initialize(&pCreateInfos[index0]);
6228*b7893ccfSSadaf Ebrahimi                 if (local_pCreateInfos[index0].pStages) {
6229*b7893ccfSSadaf Ebrahimi                     for (uint32_t index1 = 0; index1 < local_pCreateInfos[index0].stageCount; ++index1) {
6230*b7893ccfSSadaf Ebrahimi                         if (pCreateInfos[index0].pStages[index1].module) {
6231*b7893ccfSSadaf Ebrahimi                             local_pCreateInfos[index0].pStages[index1].module = layer_data->Unwrap(pCreateInfos[index0].pStages[index1].module);
6232*b7893ccfSSadaf Ebrahimi                         }
6233*b7893ccfSSadaf Ebrahimi                     }
6234*b7893ccfSSadaf Ebrahimi                 }
6235*b7893ccfSSadaf Ebrahimi                 if (pCreateInfos[index0].layout) {
6236*b7893ccfSSadaf Ebrahimi                     local_pCreateInfos[index0].layout = layer_data->Unwrap(pCreateInfos[index0].layout);
6237*b7893ccfSSadaf Ebrahimi                 }
6238*b7893ccfSSadaf Ebrahimi                 if (pCreateInfos[index0].basePipelineHandle) {
6239*b7893ccfSSadaf Ebrahimi                     local_pCreateInfos[index0].basePipelineHandle = layer_data->Unwrap(pCreateInfos[index0].basePipelineHandle);
6240*b7893ccfSSadaf Ebrahimi                 }
6241*b7893ccfSSadaf Ebrahimi             }
6242*b7893ccfSSadaf Ebrahimi         }
6243*b7893ccfSSadaf Ebrahimi     }
6244*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CreateRayTracingPipelinesNV(device, pipelineCache, createInfoCount, (const VkRayTracingPipelineCreateInfoNV*)local_pCreateInfos, pAllocator, pPipelines);
6245*b7893ccfSSadaf Ebrahimi     if (local_pCreateInfos) {
6246*b7893ccfSSadaf Ebrahimi         delete[] local_pCreateInfos;
6247*b7893ccfSSadaf Ebrahimi     }
6248*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
6249*b7893ccfSSadaf Ebrahimi         for (uint32_t index0 = 0; index0 < createInfoCount; index0++) {
6250*b7893ccfSSadaf Ebrahimi             pPipelines[index0] = layer_data->WrapNew(pPipelines[index0]);
6251*b7893ccfSSadaf Ebrahimi         }
6252*b7893ccfSSadaf Ebrahimi     }
6253*b7893ccfSSadaf Ebrahimi     return result;
6254*b7893ccfSSadaf Ebrahimi }
6255*b7893ccfSSadaf Ebrahimi 
DispatchGetRayTracingShaderGroupHandlesNV(VkDevice device,VkPipeline pipeline,uint32_t firstGroup,uint32_t groupCount,size_t dataSize,void * pData)6256*b7893ccfSSadaf Ebrahimi VkResult DispatchGetRayTracingShaderGroupHandlesNV(
6257*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6258*b7893ccfSSadaf Ebrahimi     VkPipeline                                  pipeline,
6259*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstGroup,
6260*b7893ccfSSadaf Ebrahimi     uint32_t                                    groupCount,
6261*b7893ccfSSadaf Ebrahimi     size_t                                      dataSize,
6262*b7893ccfSSadaf Ebrahimi     void*                                       pData)
6263*b7893ccfSSadaf Ebrahimi {
6264*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6265*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetRayTracingShaderGroupHandlesNV(device, pipeline, firstGroup, groupCount, dataSize, pData);
6266*b7893ccfSSadaf Ebrahimi     {
6267*b7893ccfSSadaf Ebrahimi         pipeline = layer_data->Unwrap(pipeline);
6268*b7893ccfSSadaf Ebrahimi     }
6269*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetRayTracingShaderGroupHandlesNV(device, pipeline, firstGroup, groupCount, dataSize, pData);
6270*b7893ccfSSadaf Ebrahimi 
6271*b7893ccfSSadaf Ebrahimi     return result;
6272*b7893ccfSSadaf Ebrahimi }
6273*b7893ccfSSadaf Ebrahimi 
DispatchGetAccelerationStructureHandleNV(VkDevice device,VkAccelerationStructureNV accelerationStructure,size_t dataSize,void * pData)6274*b7893ccfSSadaf Ebrahimi VkResult DispatchGetAccelerationStructureHandleNV(
6275*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6276*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV                   accelerationStructure,
6277*b7893ccfSSadaf Ebrahimi     size_t                                      dataSize,
6278*b7893ccfSSadaf Ebrahimi     void*                                       pData)
6279*b7893ccfSSadaf Ebrahimi {
6280*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6281*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetAccelerationStructureHandleNV(device, accelerationStructure, dataSize, pData);
6282*b7893ccfSSadaf Ebrahimi     {
6283*b7893ccfSSadaf Ebrahimi         accelerationStructure = layer_data->Unwrap(accelerationStructure);
6284*b7893ccfSSadaf Ebrahimi     }
6285*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetAccelerationStructureHandleNV(device, accelerationStructure, dataSize, pData);
6286*b7893ccfSSadaf Ebrahimi 
6287*b7893ccfSSadaf Ebrahimi     return result;
6288*b7893ccfSSadaf Ebrahimi }
6289*b7893ccfSSadaf Ebrahimi 
DispatchCmdWriteAccelerationStructuresPropertiesNV(VkCommandBuffer commandBuffer,uint32_t accelerationStructureCount,const VkAccelerationStructureNV * pAccelerationStructures,VkQueryType queryType,VkQueryPool queryPool,uint32_t firstQuery)6290*b7893ccfSSadaf Ebrahimi void DispatchCmdWriteAccelerationStructuresPropertiesNV(
6291*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6292*b7893ccfSSadaf Ebrahimi     uint32_t                                    accelerationStructureCount,
6293*b7893ccfSSadaf Ebrahimi     const VkAccelerationStructureNV*            pAccelerationStructures,
6294*b7893ccfSSadaf Ebrahimi     VkQueryType                                 queryType,
6295*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
6296*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstQuery)
6297*b7893ccfSSadaf Ebrahimi {
6298*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6299*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery);
6300*b7893ccfSSadaf Ebrahimi     VkAccelerationStructureNV *local_pAccelerationStructures = NULL;
6301*b7893ccfSSadaf Ebrahimi     {
6302*b7893ccfSSadaf Ebrahimi         if (pAccelerationStructures) {
6303*b7893ccfSSadaf Ebrahimi             local_pAccelerationStructures = new VkAccelerationStructureNV[accelerationStructureCount];
6304*b7893ccfSSadaf Ebrahimi             for (uint32_t index0 = 0; index0 < accelerationStructureCount; ++index0) {
6305*b7893ccfSSadaf Ebrahimi                 local_pAccelerationStructures[index0] = layer_data->Unwrap(pAccelerationStructures[index0]);
6306*b7893ccfSSadaf Ebrahimi             }
6307*b7893ccfSSadaf Ebrahimi         }
6308*b7893ccfSSadaf Ebrahimi         queryPool = layer_data->Unwrap(queryPool);
6309*b7893ccfSSadaf Ebrahimi     }
6310*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdWriteAccelerationStructuresPropertiesNV(commandBuffer, accelerationStructureCount, (const VkAccelerationStructureNV*)local_pAccelerationStructures, queryType, queryPool, firstQuery);
6311*b7893ccfSSadaf Ebrahimi     if (local_pAccelerationStructures)
6312*b7893ccfSSadaf Ebrahimi         delete[] local_pAccelerationStructures;
6313*b7893ccfSSadaf Ebrahimi }
6314*b7893ccfSSadaf Ebrahimi 
DispatchCompileDeferredNV(VkDevice device,VkPipeline pipeline,uint32_t shader)6315*b7893ccfSSadaf Ebrahimi VkResult DispatchCompileDeferredNV(
6316*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6317*b7893ccfSSadaf Ebrahimi     VkPipeline                                  pipeline,
6318*b7893ccfSSadaf Ebrahimi     uint32_t                                    shader)
6319*b7893ccfSSadaf Ebrahimi {
6320*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6321*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CompileDeferredNV(device, pipeline, shader);
6322*b7893ccfSSadaf Ebrahimi     {
6323*b7893ccfSSadaf Ebrahimi         pipeline = layer_data->Unwrap(pipeline);
6324*b7893ccfSSadaf Ebrahimi     }
6325*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CompileDeferredNV(device, pipeline, shader);
6326*b7893ccfSSadaf Ebrahimi 
6327*b7893ccfSSadaf Ebrahimi     return result;
6328*b7893ccfSSadaf Ebrahimi }
6329*b7893ccfSSadaf Ebrahimi 
DispatchGetMemoryHostPointerPropertiesEXT(VkDevice device,VkExternalMemoryHandleTypeFlagBits handleType,const void * pHostPointer,VkMemoryHostPointerPropertiesEXT * pMemoryHostPointerProperties)6330*b7893ccfSSadaf Ebrahimi VkResult DispatchGetMemoryHostPointerPropertiesEXT(
6331*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6332*b7893ccfSSadaf Ebrahimi     VkExternalMemoryHandleTypeFlagBits          handleType,
6333*b7893ccfSSadaf Ebrahimi     const void*                                 pHostPointer,
6334*b7893ccfSSadaf Ebrahimi     VkMemoryHostPointerPropertiesEXT*           pMemoryHostPointerProperties)
6335*b7893ccfSSadaf Ebrahimi {
6336*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6337*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetMemoryHostPointerPropertiesEXT(device, handleType, pHostPointer, pMemoryHostPointerProperties);
6338*b7893ccfSSadaf Ebrahimi 
6339*b7893ccfSSadaf Ebrahimi     return result;
6340*b7893ccfSSadaf Ebrahimi }
6341*b7893ccfSSadaf Ebrahimi 
DispatchCmdWriteBufferMarkerAMD(VkCommandBuffer commandBuffer,VkPipelineStageFlagBits pipelineStage,VkBuffer dstBuffer,VkDeviceSize dstOffset,uint32_t marker)6342*b7893ccfSSadaf Ebrahimi void DispatchCmdWriteBufferMarkerAMD(
6343*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6344*b7893ccfSSadaf Ebrahimi     VkPipelineStageFlagBits                     pipelineStage,
6345*b7893ccfSSadaf Ebrahimi     VkBuffer                                    dstBuffer,
6346*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                dstOffset,
6347*b7893ccfSSadaf Ebrahimi     uint32_t                                    marker)
6348*b7893ccfSSadaf Ebrahimi {
6349*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6350*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker);
6351*b7893ccfSSadaf Ebrahimi     {
6352*b7893ccfSSadaf Ebrahimi         dstBuffer = layer_data->Unwrap(dstBuffer);
6353*b7893ccfSSadaf Ebrahimi     }
6354*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdWriteBufferMarkerAMD(commandBuffer, pipelineStage, dstBuffer, dstOffset, marker);
6355*b7893ccfSSadaf Ebrahimi 
6356*b7893ccfSSadaf Ebrahimi }
6357*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceCalibrateableTimeDomainsEXT(VkPhysicalDevice physicalDevice,uint32_t * pTimeDomainCount,VkTimeDomainEXT * pTimeDomains)6358*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceCalibrateableTimeDomainsEXT(
6359*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
6360*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pTimeDomainCount,
6361*b7893ccfSSadaf Ebrahimi     VkTimeDomainEXT*                            pTimeDomains)
6362*b7893ccfSSadaf Ebrahimi {
6363*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6364*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceCalibrateableTimeDomainsEXT(physicalDevice, pTimeDomainCount, pTimeDomains);
6365*b7893ccfSSadaf Ebrahimi 
6366*b7893ccfSSadaf Ebrahimi     return result;
6367*b7893ccfSSadaf Ebrahimi }
6368*b7893ccfSSadaf Ebrahimi 
DispatchGetCalibratedTimestampsEXT(VkDevice device,uint32_t timestampCount,const VkCalibratedTimestampInfoEXT * pTimestampInfos,uint64_t * pTimestamps,uint64_t * pMaxDeviation)6369*b7893ccfSSadaf Ebrahimi VkResult DispatchGetCalibratedTimestampsEXT(
6370*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6371*b7893ccfSSadaf Ebrahimi     uint32_t                                    timestampCount,
6372*b7893ccfSSadaf Ebrahimi     const VkCalibratedTimestampInfoEXT*         pTimestampInfos,
6373*b7893ccfSSadaf Ebrahimi     uint64_t*                                   pTimestamps,
6374*b7893ccfSSadaf Ebrahimi     uint64_t*                                   pMaxDeviation)
6375*b7893ccfSSadaf Ebrahimi {
6376*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6377*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetCalibratedTimestampsEXT(device, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation);
6378*b7893ccfSSadaf Ebrahimi 
6379*b7893ccfSSadaf Ebrahimi     return result;
6380*b7893ccfSSadaf Ebrahimi }
6381*b7893ccfSSadaf Ebrahimi 
DispatchCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer,uint32_t taskCount,uint32_t firstTask)6382*b7893ccfSSadaf Ebrahimi void DispatchCmdDrawMeshTasksNV(
6383*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6384*b7893ccfSSadaf Ebrahimi     uint32_t                                    taskCount,
6385*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstTask)
6386*b7893ccfSSadaf Ebrahimi {
6387*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6388*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDrawMeshTasksNV(commandBuffer, taskCount, firstTask);
6389*b7893ccfSSadaf Ebrahimi 
6390*b7893ccfSSadaf Ebrahimi }
6391*b7893ccfSSadaf Ebrahimi 
DispatchCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride)6392*b7893ccfSSadaf Ebrahimi void DispatchCmdDrawMeshTasksIndirectNV(
6393*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6394*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
6395*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
6396*b7893ccfSSadaf Ebrahimi     uint32_t                                    drawCount,
6397*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride)
6398*b7893ccfSSadaf Ebrahimi {
6399*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6400*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride);
6401*b7893ccfSSadaf Ebrahimi     {
6402*b7893ccfSSadaf Ebrahimi         buffer = layer_data->Unwrap(buffer);
6403*b7893ccfSSadaf Ebrahimi     }
6404*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDrawMeshTasksIndirectNV(commandBuffer, buffer, offset, drawCount, stride);
6405*b7893ccfSSadaf Ebrahimi 
6406*b7893ccfSSadaf Ebrahimi }
6407*b7893ccfSSadaf Ebrahimi 
DispatchCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)6408*b7893ccfSSadaf Ebrahimi void DispatchCmdDrawMeshTasksIndirectCountNV(
6409*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6410*b7893ccfSSadaf Ebrahimi     VkBuffer                                    buffer,
6411*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                offset,
6412*b7893ccfSSadaf Ebrahimi     VkBuffer                                    countBuffer,
6413*b7893ccfSSadaf Ebrahimi     VkDeviceSize                                countBufferOffset,
6414*b7893ccfSSadaf Ebrahimi     uint32_t                                    maxDrawCount,
6415*b7893ccfSSadaf Ebrahimi     uint32_t                                    stride)
6416*b7893ccfSSadaf Ebrahimi {
6417*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6418*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.CmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6419*b7893ccfSSadaf Ebrahimi     {
6420*b7893ccfSSadaf Ebrahimi         buffer = layer_data->Unwrap(buffer);
6421*b7893ccfSSadaf Ebrahimi         countBuffer = layer_data->Unwrap(countBuffer);
6422*b7893ccfSSadaf Ebrahimi     }
6423*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdDrawMeshTasksIndirectCountNV(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
6424*b7893ccfSSadaf Ebrahimi 
6425*b7893ccfSSadaf Ebrahimi }
6426*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetExclusiveScissorNV(VkCommandBuffer commandBuffer,uint32_t firstExclusiveScissor,uint32_t exclusiveScissorCount,const VkRect2D * pExclusiveScissors)6427*b7893ccfSSadaf Ebrahimi void DispatchCmdSetExclusiveScissorNV(
6428*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6429*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstExclusiveScissor,
6430*b7893ccfSSadaf Ebrahimi     uint32_t                                    exclusiveScissorCount,
6431*b7893ccfSSadaf Ebrahimi     const VkRect2D*                             pExclusiveScissors)
6432*b7893ccfSSadaf Ebrahimi {
6433*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6434*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetExclusiveScissorNV(commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors);
6435*b7893ccfSSadaf Ebrahimi 
6436*b7893ccfSSadaf Ebrahimi }
6437*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetCheckpointNV(VkCommandBuffer commandBuffer,const void * pCheckpointMarker)6438*b7893ccfSSadaf Ebrahimi void DispatchCmdSetCheckpointNV(
6439*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6440*b7893ccfSSadaf Ebrahimi     const void*                                 pCheckpointMarker)
6441*b7893ccfSSadaf Ebrahimi {
6442*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6443*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetCheckpointNV(commandBuffer, pCheckpointMarker);
6444*b7893ccfSSadaf Ebrahimi 
6445*b7893ccfSSadaf Ebrahimi }
6446*b7893ccfSSadaf Ebrahimi 
DispatchGetQueueCheckpointDataNV(VkQueue queue,uint32_t * pCheckpointDataCount,VkCheckpointDataNV * pCheckpointData)6447*b7893ccfSSadaf Ebrahimi void DispatchGetQueueCheckpointDataNV(
6448*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue,
6449*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pCheckpointDataCount,
6450*b7893ccfSSadaf Ebrahimi     VkCheckpointDataNV*                         pCheckpointData)
6451*b7893ccfSSadaf Ebrahimi {
6452*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
6453*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.GetQueueCheckpointDataNV(queue, pCheckpointDataCount, pCheckpointData);
6454*b7893ccfSSadaf Ebrahimi 
6455*b7893ccfSSadaf Ebrahimi }
6456*b7893ccfSSadaf Ebrahimi 
DispatchInitializePerformanceApiINTEL(VkDevice device,const VkInitializePerformanceApiInfoINTEL * pInitializeInfo)6457*b7893ccfSSadaf Ebrahimi VkResult DispatchInitializePerformanceApiINTEL(
6458*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6459*b7893ccfSSadaf Ebrahimi     const VkInitializePerformanceApiInfoINTEL*  pInitializeInfo)
6460*b7893ccfSSadaf Ebrahimi {
6461*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6462*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.InitializePerformanceApiINTEL(device, pInitializeInfo);
6463*b7893ccfSSadaf Ebrahimi 
6464*b7893ccfSSadaf Ebrahimi     return result;
6465*b7893ccfSSadaf Ebrahimi }
6466*b7893ccfSSadaf Ebrahimi 
DispatchUninitializePerformanceApiINTEL(VkDevice device)6467*b7893ccfSSadaf Ebrahimi void DispatchUninitializePerformanceApiINTEL(
6468*b7893ccfSSadaf Ebrahimi     VkDevice                                    device)
6469*b7893ccfSSadaf Ebrahimi {
6470*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6471*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.UninitializePerformanceApiINTEL(device);
6472*b7893ccfSSadaf Ebrahimi 
6473*b7893ccfSSadaf Ebrahimi }
6474*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetPerformanceMarkerINTEL(VkCommandBuffer commandBuffer,const VkPerformanceMarkerInfoINTEL * pMarkerInfo)6475*b7893ccfSSadaf Ebrahimi VkResult DispatchCmdSetPerformanceMarkerINTEL(
6476*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6477*b7893ccfSSadaf Ebrahimi     const VkPerformanceMarkerInfoINTEL*         pMarkerInfo)
6478*b7893ccfSSadaf Ebrahimi {
6479*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6480*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CmdSetPerformanceMarkerINTEL(commandBuffer, pMarkerInfo);
6481*b7893ccfSSadaf Ebrahimi 
6482*b7893ccfSSadaf Ebrahimi     return result;
6483*b7893ccfSSadaf Ebrahimi }
6484*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetPerformanceStreamMarkerINTEL(VkCommandBuffer commandBuffer,const VkPerformanceStreamMarkerInfoINTEL * pMarkerInfo)6485*b7893ccfSSadaf Ebrahimi VkResult DispatchCmdSetPerformanceStreamMarkerINTEL(
6486*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6487*b7893ccfSSadaf Ebrahimi     const VkPerformanceStreamMarkerInfoINTEL*   pMarkerInfo)
6488*b7893ccfSSadaf Ebrahimi {
6489*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6490*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CmdSetPerformanceStreamMarkerINTEL(commandBuffer, pMarkerInfo);
6491*b7893ccfSSadaf Ebrahimi 
6492*b7893ccfSSadaf Ebrahimi     return result;
6493*b7893ccfSSadaf Ebrahimi }
6494*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetPerformanceOverrideINTEL(VkCommandBuffer commandBuffer,const VkPerformanceOverrideInfoINTEL * pOverrideInfo)6495*b7893ccfSSadaf Ebrahimi VkResult DispatchCmdSetPerformanceOverrideINTEL(
6496*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6497*b7893ccfSSadaf Ebrahimi     const VkPerformanceOverrideInfoINTEL*       pOverrideInfo)
6498*b7893ccfSSadaf Ebrahimi {
6499*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6500*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.CmdSetPerformanceOverrideINTEL(commandBuffer, pOverrideInfo);
6501*b7893ccfSSadaf Ebrahimi 
6502*b7893ccfSSadaf Ebrahimi     return result;
6503*b7893ccfSSadaf Ebrahimi }
6504*b7893ccfSSadaf Ebrahimi 
DispatchAcquirePerformanceConfigurationINTEL(VkDevice device,const VkPerformanceConfigurationAcquireInfoINTEL * pAcquireInfo,VkPerformanceConfigurationINTEL * pConfiguration)6505*b7893ccfSSadaf Ebrahimi VkResult DispatchAcquirePerformanceConfigurationINTEL(
6506*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6507*b7893ccfSSadaf Ebrahimi     const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo,
6508*b7893ccfSSadaf Ebrahimi     VkPerformanceConfigurationINTEL*            pConfiguration)
6509*b7893ccfSSadaf Ebrahimi {
6510*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6511*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.AcquirePerformanceConfigurationINTEL(device, pAcquireInfo, pConfiguration);
6512*b7893ccfSSadaf Ebrahimi     {
6513*b7893ccfSSadaf Ebrahimi         pConfiguration = layer_data->Unwrap(pConfiguration);
6514*b7893ccfSSadaf Ebrahimi     }
6515*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.AcquirePerformanceConfigurationINTEL(device, pAcquireInfo, pConfiguration);
6516*b7893ccfSSadaf Ebrahimi 
6517*b7893ccfSSadaf Ebrahimi     return result;
6518*b7893ccfSSadaf Ebrahimi }
6519*b7893ccfSSadaf Ebrahimi 
DispatchReleasePerformanceConfigurationINTEL(VkDevice device,VkPerformanceConfigurationINTEL configuration)6520*b7893ccfSSadaf Ebrahimi VkResult DispatchReleasePerformanceConfigurationINTEL(
6521*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6522*b7893ccfSSadaf Ebrahimi     VkPerformanceConfigurationINTEL             configuration)
6523*b7893ccfSSadaf Ebrahimi {
6524*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6525*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.ReleasePerformanceConfigurationINTEL(device, configuration);
6526*b7893ccfSSadaf Ebrahimi     {
6527*b7893ccfSSadaf Ebrahimi         configuration = layer_data->Unwrap(configuration);
6528*b7893ccfSSadaf Ebrahimi     }
6529*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.ReleasePerformanceConfigurationINTEL(device, configuration);
6530*b7893ccfSSadaf Ebrahimi 
6531*b7893ccfSSadaf Ebrahimi     return result;
6532*b7893ccfSSadaf Ebrahimi }
6533*b7893ccfSSadaf Ebrahimi 
DispatchQueueSetPerformanceConfigurationINTEL(VkQueue queue,VkPerformanceConfigurationINTEL configuration)6534*b7893ccfSSadaf Ebrahimi VkResult DispatchQueueSetPerformanceConfigurationINTEL(
6535*b7893ccfSSadaf Ebrahimi     VkQueue                                     queue,
6536*b7893ccfSSadaf Ebrahimi     VkPerformanceConfigurationINTEL             configuration)
6537*b7893ccfSSadaf Ebrahimi {
6538*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(queue), layer_data_map);
6539*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.QueueSetPerformanceConfigurationINTEL(queue, configuration);
6540*b7893ccfSSadaf Ebrahimi     {
6541*b7893ccfSSadaf Ebrahimi         configuration = layer_data->Unwrap(configuration);
6542*b7893ccfSSadaf Ebrahimi     }
6543*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.QueueSetPerformanceConfigurationINTEL(queue, configuration);
6544*b7893ccfSSadaf Ebrahimi 
6545*b7893ccfSSadaf Ebrahimi     return result;
6546*b7893ccfSSadaf Ebrahimi }
6547*b7893ccfSSadaf Ebrahimi 
DispatchGetPerformanceParameterINTEL(VkDevice device,VkPerformanceParameterTypeINTEL parameter,VkPerformanceValueINTEL * pValue)6548*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPerformanceParameterINTEL(
6549*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6550*b7893ccfSSadaf Ebrahimi     VkPerformanceParameterTypeINTEL             parameter,
6551*b7893ccfSSadaf Ebrahimi     VkPerformanceValueINTEL*                    pValue)
6552*b7893ccfSSadaf Ebrahimi {
6553*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6554*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetPerformanceParameterINTEL(device, parameter, pValue);
6555*b7893ccfSSadaf Ebrahimi 
6556*b7893ccfSSadaf Ebrahimi     return result;
6557*b7893ccfSSadaf Ebrahimi }
6558*b7893ccfSSadaf Ebrahimi 
DispatchSetLocalDimmingAMD(VkDevice device,VkSwapchainKHR swapChain,VkBool32 localDimmingEnable)6559*b7893ccfSSadaf Ebrahimi void DispatchSetLocalDimmingAMD(
6560*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6561*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapChain,
6562*b7893ccfSSadaf Ebrahimi     VkBool32                                    localDimmingEnable)
6563*b7893ccfSSadaf Ebrahimi {
6564*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6565*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.SetLocalDimmingAMD(device, swapChain, localDimmingEnable);
6566*b7893ccfSSadaf Ebrahimi     {
6567*b7893ccfSSadaf Ebrahimi         swapChain = layer_data->Unwrap(swapChain);
6568*b7893ccfSSadaf Ebrahimi     }
6569*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.SetLocalDimmingAMD(device, swapChain, localDimmingEnable);
6570*b7893ccfSSadaf Ebrahimi 
6571*b7893ccfSSadaf Ebrahimi }
6572*b7893ccfSSadaf Ebrahimi 
6573*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_FUCHSIA
6574*b7893ccfSSadaf Ebrahimi 
DispatchCreateImagePipeSurfaceFUCHSIA(VkInstance instance,const VkImagePipeSurfaceCreateInfoFUCHSIA * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)6575*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateImagePipeSurfaceFUCHSIA(
6576*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
6577*b7893ccfSSadaf Ebrahimi     const VkImagePipeSurfaceCreateInfoFUCHSIA*  pCreateInfo,
6578*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
6579*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface)
6580*b7893ccfSSadaf Ebrahimi {
6581*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
6582*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateImagePipeSurfaceFUCHSIA(instance, pCreateInfo, pAllocator, pSurface);
6583*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateImagePipeSurfaceFUCHSIA(instance, pCreateInfo, pAllocator, pSurface);
6584*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
6585*b7893ccfSSadaf Ebrahimi         *pSurface = layer_data->WrapNew(*pSurface);
6586*b7893ccfSSadaf Ebrahimi     }
6587*b7893ccfSSadaf Ebrahimi     return result;
6588*b7893ccfSSadaf Ebrahimi }
6589*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_FUCHSIA
6590*b7893ccfSSadaf Ebrahimi 
6591*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_METAL_EXT
6592*b7893ccfSSadaf Ebrahimi 
DispatchCreateMetalSurfaceEXT(VkInstance instance,const VkMetalSurfaceCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)6593*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateMetalSurfaceEXT(
6594*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
6595*b7893ccfSSadaf Ebrahimi     const VkMetalSurfaceCreateInfoEXT*          pCreateInfo,
6596*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
6597*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface)
6598*b7893ccfSSadaf Ebrahimi {
6599*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
6600*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateMetalSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
6601*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateMetalSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
6602*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
6603*b7893ccfSSadaf Ebrahimi         *pSurface = layer_data->WrapNew(*pSurface);
6604*b7893ccfSSadaf Ebrahimi     }
6605*b7893ccfSSadaf Ebrahimi     return result;
6606*b7893ccfSSadaf Ebrahimi }
6607*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_METAL_EXT
6608*b7893ccfSSadaf Ebrahimi 
DispatchGetBufferDeviceAddressEXT(VkDevice device,const VkBufferDeviceAddressInfoEXT * pInfo)6609*b7893ccfSSadaf Ebrahimi VkDeviceAddress DispatchGetBufferDeviceAddressEXT(
6610*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6611*b7893ccfSSadaf Ebrahimi     const VkBufferDeviceAddressInfoEXT*         pInfo)
6612*b7893ccfSSadaf Ebrahimi {
6613*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6614*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetBufferDeviceAddressEXT(device, pInfo);
6615*b7893ccfSSadaf Ebrahimi     safe_VkBufferDeviceAddressInfoEXT *local_pInfo = NULL;
6616*b7893ccfSSadaf Ebrahimi     {
6617*b7893ccfSSadaf Ebrahimi         if (pInfo) {
6618*b7893ccfSSadaf Ebrahimi             local_pInfo = new safe_VkBufferDeviceAddressInfoEXT(pInfo);
6619*b7893ccfSSadaf Ebrahimi             if (pInfo->buffer) {
6620*b7893ccfSSadaf Ebrahimi                 local_pInfo->buffer = layer_data->Unwrap(pInfo->buffer);
6621*b7893ccfSSadaf Ebrahimi             }
6622*b7893ccfSSadaf Ebrahimi         }
6623*b7893ccfSSadaf Ebrahimi     }
6624*b7893ccfSSadaf Ebrahimi     VkDeviceAddress result = layer_data->device_dispatch_table.GetBufferDeviceAddressEXT(device, (const VkBufferDeviceAddressInfoEXT*)local_pInfo);
6625*b7893ccfSSadaf Ebrahimi     if (local_pInfo) {
6626*b7893ccfSSadaf Ebrahimi         delete local_pInfo;
6627*b7893ccfSSadaf Ebrahimi     }
6628*b7893ccfSSadaf Ebrahimi     return result;
6629*b7893ccfSSadaf Ebrahimi }
6630*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceCooperativeMatrixPropertiesNV(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkCooperativeMatrixPropertiesNV * pProperties)6631*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceCooperativeMatrixPropertiesNV(
6632*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
6633*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPropertyCount,
6634*b7893ccfSSadaf Ebrahimi     VkCooperativeMatrixPropertiesNV*            pProperties)
6635*b7893ccfSSadaf Ebrahimi {
6636*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6637*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceCooperativeMatrixPropertiesNV(physicalDevice, pPropertyCount, pProperties);
6638*b7893ccfSSadaf Ebrahimi 
6639*b7893ccfSSadaf Ebrahimi     return result;
6640*b7893ccfSSadaf Ebrahimi }
6641*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(VkPhysicalDevice physicalDevice,uint32_t * pCombinationCount,VkFramebufferMixedSamplesCombinationNV * pCombinations)6642*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(
6643*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
6644*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pCombinationCount,
6645*b7893ccfSSadaf Ebrahimi     VkFramebufferMixedSamplesCombinationNV*     pCombinations)
6646*b7893ccfSSadaf Ebrahimi {
6647*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6648*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV(physicalDevice, pCombinationCount, pCombinations);
6649*b7893ccfSSadaf Ebrahimi 
6650*b7893ccfSSadaf Ebrahimi     return result;
6651*b7893ccfSSadaf Ebrahimi }
6652*b7893ccfSSadaf Ebrahimi 
6653*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
6654*b7893ccfSSadaf Ebrahimi 
DispatchGetPhysicalDeviceSurfacePresentModes2EXT(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,uint32_t * pPresentModeCount,VkPresentModeKHR * pPresentModes)6655*b7893ccfSSadaf Ebrahimi VkResult DispatchGetPhysicalDeviceSurfacePresentModes2EXT(
6656*b7893ccfSSadaf Ebrahimi     VkPhysicalDevice                            physicalDevice,
6657*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
6658*b7893ccfSSadaf Ebrahimi     uint32_t*                                   pPresentModeCount,
6659*b7893ccfSSadaf Ebrahimi     VkPresentModeKHR*                           pPresentModes)
6660*b7893ccfSSadaf Ebrahimi {
6661*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(physicalDevice), layer_data_map);
6662*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.GetPhysicalDeviceSurfacePresentModes2EXT(physicalDevice, pSurfaceInfo, pPresentModeCount, pPresentModes);
6663*b7893ccfSSadaf Ebrahimi     safe_VkPhysicalDeviceSurfaceInfo2KHR *local_pSurfaceInfo = NULL;
6664*b7893ccfSSadaf Ebrahimi     {
6665*b7893ccfSSadaf Ebrahimi         if (pSurfaceInfo) {
6666*b7893ccfSSadaf Ebrahimi             local_pSurfaceInfo = new safe_VkPhysicalDeviceSurfaceInfo2KHR(pSurfaceInfo);
6667*b7893ccfSSadaf Ebrahimi             if (pSurfaceInfo->surface) {
6668*b7893ccfSSadaf Ebrahimi                 local_pSurfaceInfo->surface = layer_data->Unwrap(pSurfaceInfo->surface);
6669*b7893ccfSSadaf Ebrahimi             }
6670*b7893ccfSSadaf Ebrahimi         }
6671*b7893ccfSSadaf Ebrahimi     }
6672*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.GetPhysicalDeviceSurfacePresentModes2EXT(physicalDevice, (const VkPhysicalDeviceSurfaceInfo2KHR*)local_pSurfaceInfo, pPresentModeCount, pPresentModes);
6673*b7893ccfSSadaf Ebrahimi     if (local_pSurfaceInfo) {
6674*b7893ccfSSadaf Ebrahimi         delete local_pSurfaceInfo;
6675*b7893ccfSSadaf Ebrahimi     }
6676*b7893ccfSSadaf Ebrahimi     return result;
6677*b7893ccfSSadaf Ebrahimi }
6678*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
6679*b7893ccfSSadaf Ebrahimi 
6680*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
6681*b7893ccfSSadaf Ebrahimi 
DispatchAcquireFullScreenExclusiveModeEXT(VkDevice device,VkSwapchainKHR swapchain)6682*b7893ccfSSadaf Ebrahimi VkResult DispatchAcquireFullScreenExclusiveModeEXT(
6683*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6684*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain)
6685*b7893ccfSSadaf Ebrahimi {
6686*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6687*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.AcquireFullScreenExclusiveModeEXT(device, swapchain);
6688*b7893ccfSSadaf Ebrahimi     {
6689*b7893ccfSSadaf Ebrahimi         swapchain = layer_data->Unwrap(swapchain);
6690*b7893ccfSSadaf Ebrahimi     }
6691*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.AcquireFullScreenExclusiveModeEXT(device, swapchain);
6692*b7893ccfSSadaf Ebrahimi 
6693*b7893ccfSSadaf Ebrahimi     return result;
6694*b7893ccfSSadaf Ebrahimi }
6695*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
6696*b7893ccfSSadaf Ebrahimi 
6697*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
6698*b7893ccfSSadaf Ebrahimi 
DispatchReleaseFullScreenExclusiveModeEXT(VkDevice device,VkSwapchainKHR swapchain)6699*b7893ccfSSadaf Ebrahimi VkResult DispatchReleaseFullScreenExclusiveModeEXT(
6700*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6701*b7893ccfSSadaf Ebrahimi     VkSwapchainKHR                              swapchain)
6702*b7893ccfSSadaf Ebrahimi {
6703*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6704*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.ReleaseFullScreenExclusiveModeEXT(device, swapchain);
6705*b7893ccfSSadaf Ebrahimi     {
6706*b7893ccfSSadaf Ebrahimi         swapchain = layer_data->Unwrap(swapchain);
6707*b7893ccfSSadaf Ebrahimi     }
6708*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.ReleaseFullScreenExclusiveModeEXT(device, swapchain);
6709*b7893ccfSSadaf Ebrahimi 
6710*b7893ccfSSadaf Ebrahimi     return result;
6711*b7893ccfSSadaf Ebrahimi }
6712*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
6713*b7893ccfSSadaf Ebrahimi 
6714*b7893ccfSSadaf Ebrahimi #ifdef VK_USE_PLATFORM_WIN32_KHR
6715*b7893ccfSSadaf Ebrahimi 
DispatchGetDeviceGroupSurfacePresentModes2EXT(VkDevice device,const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,VkDeviceGroupPresentModeFlagsKHR * pModes)6716*b7893ccfSSadaf Ebrahimi VkResult DispatchGetDeviceGroupSurfacePresentModes2EXT(
6717*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6718*b7893ccfSSadaf Ebrahimi     const VkPhysicalDeviceSurfaceInfo2KHR*      pSurfaceInfo,
6719*b7893ccfSSadaf Ebrahimi     VkDeviceGroupPresentModeFlagsKHR*           pModes)
6720*b7893ccfSSadaf Ebrahimi {
6721*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6722*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.GetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes);
6723*b7893ccfSSadaf Ebrahimi     safe_VkPhysicalDeviceSurfaceInfo2KHR *local_pSurfaceInfo = NULL;
6724*b7893ccfSSadaf Ebrahimi     {
6725*b7893ccfSSadaf Ebrahimi         if (pSurfaceInfo) {
6726*b7893ccfSSadaf Ebrahimi             local_pSurfaceInfo = new safe_VkPhysicalDeviceSurfaceInfo2KHR(pSurfaceInfo);
6727*b7893ccfSSadaf Ebrahimi             if (pSurfaceInfo->surface) {
6728*b7893ccfSSadaf Ebrahimi                 local_pSurfaceInfo->surface = layer_data->Unwrap(pSurfaceInfo->surface);
6729*b7893ccfSSadaf Ebrahimi             }
6730*b7893ccfSSadaf Ebrahimi         }
6731*b7893ccfSSadaf Ebrahimi     }
6732*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->device_dispatch_table.GetDeviceGroupSurfacePresentModes2EXT(device, (const VkPhysicalDeviceSurfaceInfo2KHR*)local_pSurfaceInfo, pModes);
6733*b7893ccfSSadaf Ebrahimi     if (local_pSurfaceInfo) {
6734*b7893ccfSSadaf Ebrahimi         delete local_pSurfaceInfo;
6735*b7893ccfSSadaf Ebrahimi     }
6736*b7893ccfSSadaf Ebrahimi     return result;
6737*b7893ccfSSadaf Ebrahimi }
6738*b7893ccfSSadaf Ebrahimi #endif // VK_USE_PLATFORM_WIN32_KHR
6739*b7893ccfSSadaf Ebrahimi 
DispatchCreateHeadlessSurfaceEXT(VkInstance instance,const VkHeadlessSurfaceCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)6740*b7893ccfSSadaf Ebrahimi VkResult DispatchCreateHeadlessSurfaceEXT(
6741*b7893ccfSSadaf Ebrahimi     VkInstance                                  instance,
6742*b7893ccfSSadaf Ebrahimi     const VkHeadlessSurfaceCreateInfoEXT*       pCreateInfo,
6743*b7893ccfSSadaf Ebrahimi     const VkAllocationCallbacks*                pAllocator,
6744*b7893ccfSSadaf Ebrahimi     VkSurfaceKHR*                               pSurface)
6745*b7893ccfSSadaf Ebrahimi {
6746*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
6747*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->instance_dispatch_table.CreateHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
6748*b7893ccfSSadaf Ebrahimi     VkResult result = layer_data->instance_dispatch_table.CreateHeadlessSurfaceEXT(instance, pCreateInfo, pAllocator, pSurface);
6749*b7893ccfSSadaf Ebrahimi     if (VK_SUCCESS == result) {
6750*b7893ccfSSadaf Ebrahimi         *pSurface = layer_data->WrapNew(*pSurface);
6751*b7893ccfSSadaf Ebrahimi     }
6752*b7893ccfSSadaf Ebrahimi     return result;
6753*b7893ccfSSadaf Ebrahimi }
6754*b7893ccfSSadaf Ebrahimi 
DispatchCmdSetLineStippleEXT(VkCommandBuffer commandBuffer,uint32_t lineStippleFactor,uint16_t lineStipplePattern)6755*b7893ccfSSadaf Ebrahimi void DispatchCmdSetLineStippleEXT(
6756*b7893ccfSSadaf Ebrahimi     VkCommandBuffer                             commandBuffer,
6757*b7893ccfSSadaf Ebrahimi     uint32_t                                    lineStippleFactor,
6758*b7893ccfSSadaf Ebrahimi     uint16_t                                    lineStipplePattern)
6759*b7893ccfSSadaf Ebrahimi {
6760*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
6761*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.CmdSetLineStippleEXT(commandBuffer, lineStippleFactor, lineStipplePattern);
6762*b7893ccfSSadaf Ebrahimi 
6763*b7893ccfSSadaf Ebrahimi }
6764*b7893ccfSSadaf Ebrahimi 
DispatchResetQueryPoolEXT(VkDevice device,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount)6765*b7893ccfSSadaf Ebrahimi void DispatchResetQueryPoolEXT(
6766*b7893ccfSSadaf Ebrahimi     VkDevice                                    device,
6767*b7893ccfSSadaf Ebrahimi     VkQueryPool                                 queryPool,
6768*b7893ccfSSadaf Ebrahimi     uint32_t                                    firstQuery,
6769*b7893ccfSSadaf Ebrahimi     uint32_t                                    queryCount)
6770*b7893ccfSSadaf Ebrahimi {
6771*b7893ccfSSadaf Ebrahimi     auto layer_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
6772*b7893ccfSSadaf Ebrahimi     if (!wrap_handles) return layer_data->device_dispatch_table.ResetQueryPoolEXT(device, queryPool, firstQuery, queryCount);
6773*b7893ccfSSadaf Ebrahimi     {
6774*b7893ccfSSadaf Ebrahimi         queryPool = layer_data->Unwrap(queryPool);
6775*b7893ccfSSadaf Ebrahimi     }
6776*b7893ccfSSadaf Ebrahimi     layer_data->device_dispatch_table.ResetQueryPoolEXT(device, queryPool, firstQuery, queryCount);
6777*b7893ccfSSadaf Ebrahimi 
6778*b7893ccfSSadaf Ebrahimi }