1 /**
2  * Dlang vulkan device related func loader as struct members
3  *
4  * Copyright: Copyright 2015-2016 The Khronos Group Inc.; Copyright 2016 Alex Parrill, Peter Particle.
5  * License:   $(https://opensource.org/licenses/MIT, MIT License).
6  * Authors: Copyright 2016 Alex Parrill, Peter Particle
7  */
8 module erupted.dispatch_device;
9 
10 public import erupted.types;
11 import erupted.functions;
12 
13 nothrow @nogc:
14 
15 
16 /// struct to group per device device level functions into a custom namespace
17 /// keeps track of the device to which the functions are bound
18 /// additionally to the device related vulkan functions, convenience functions exist
19 /// with same name but omitting the vk prefix as well as the first (VkDevice) parameter
20 /// these functions forward to their vk counterparts using the VkDevice member of the DispatchDevice
21 /// Moreover the same convenience functions exist for vkCmd... functions. In this case the
22 /// first parameter is substituted with the public member VkCommandBuffer commandBuffer,
23 /// which must have been set to a valid command buffer before usage.
24 struct DispatchDevice {
25 
26     private VkDevice                           device          = VK_NULL_HANDLE;
27     private const( VkAllocationCallbacks )*    allocator       = null;
28     VkCommandBuffer                            commandBuffer   = VK_NULL_HANDLE;
29 
30 
31     /// return copy of the internal VkDevice
32     VkDevice vkDevice() {
33         return device;
34     }
35 
36 
37     /// return const allocator address
38     const( VkAllocationCallbacks )* pAllocator() {
39         return allocator;
40     }
41 
42 
43     /// constructor forwards parameter 'device' to 'this.loadDeviceLevelFunctions'
44     this( VkDevice device, const( VkAllocationCallbacks )* allocator = null ) {
45         this.loadDeviceLevelFunctions( device );
46     }
47 
48 
49     /// load the device level member functions
50     /// this also sets the private member 'device' to the passed in VkDevice
51     /// as well as the otional host allocator
52     /// if a custom allocator is required it must be specified here and cannot be changed throughout the liftime of the device
53     /// now the DispatchDevice can be used e.g.:
54     ///      auto dd = DispatchDevice( device );
55     ///      dd.vkDestroyDevice( dd.vkDevice, pAllocator );
56     /// convenience functions to omit the first arg and the allocator do exist, see bellow
57     void loadDeviceLevelFunctions( VkDevice device, const( VkAllocationCallbacks )* allocator = null ) {
58         assert( vkGetInstanceProcAddr !is null, "Function pointer vkGetInstanceProcAddr is null!\nCall loadGlobalLevelFunctions -> loadInstanceLevelFunctions -> DispatchDevice.loadDeviceLevelFunctions" );
59         this.allocator = allocator;
60         this.device = device;
61 
62         // VK_VERSION_1_0
63         vkDestroyDevice                                = cast( PFN_vkDestroyDevice                                ) vkGetDeviceProcAddr( device, "vkDestroyDevice" );
64         vkGetDeviceQueue                               = cast( PFN_vkGetDeviceQueue                               ) vkGetDeviceProcAddr( device, "vkGetDeviceQueue" );
65         vkQueueSubmit                                  = cast( PFN_vkQueueSubmit                                  ) vkGetDeviceProcAddr( device, "vkQueueSubmit" );
66         vkQueueWaitIdle                                = cast( PFN_vkQueueWaitIdle                                ) vkGetDeviceProcAddr( device, "vkQueueWaitIdle" );
67         vkDeviceWaitIdle                               = cast( PFN_vkDeviceWaitIdle                               ) vkGetDeviceProcAddr( device, "vkDeviceWaitIdle" );
68         vkAllocateMemory                               = cast( PFN_vkAllocateMemory                               ) vkGetDeviceProcAddr( device, "vkAllocateMemory" );
69         vkFreeMemory                                   = cast( PFN_vkFreeMemory                                   ) vkGetDeviceProcAddr( device, "vkFreeMemory" );
70         vkMapMemory                                    = cast( PFN_vkMapMemory                                    ) vkGetDeviceProcAddr( device, "vkMapMemory" );
71         vkUnmapMemory                                  = cast( PFN_vkUnmapMemory                                  ) vkGetDeviceProcAddr( device, "vkUnmapMemory" );
72         vkFlushMappedMemoryRanges                      = cast( PFN_vkFlushMappedMemoryRanges                      ) vkGetDeviceProcAddr( device, "vkFlushMappedMemoryRanges" );
73         vkInvalidateMappedMemoryRanges                 = cast( PFN_vkInvalidateMappedMemoryRanges                 ) vkGetDeviceProcAddr( device, "vkInvalidateMappedMemoryRanges" );
74         vkGetDeviceMemoryCommitment                    = cast( PFN_vkGetDeviceMemoryCommitment                    ) vkGetDeviceProcAddr( device, "vkGetDeviceMemoryCommitment" );
75         vkBindBufferMemory                             = cast( PFN_vkBindBufferMemory                             ) vkGetDeviceProcAddr( device, "vkBindBufferMemory" );
76         vkBindImageMemory                              = cast( PFN_vkBindImageMemory                              ) vkGetDeviceProcAddr( device, "vkBindImageMemory" );
77         vkGetBufferMemoryRequirements                  = cast( PFN_vkGetBufferMemoryRequirements                  ) vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements" );
78         vkGetImageMemoryRequirements                   = cast( PFN_vkGetImageMemoryRequirements                   ) vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements" );
79         vkGetImageSparseMemoryRequirements             = cast( PFN_vkGetImageSparseMemoryRequirements             ) vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements" );
80         vkQueueBindSparse                              = cast( PFN_vkQueueBindSparse                              ) vkGetDeviceProcAddr( device, "vkQueueBindSparse" );
81         vkCreateFence                                  = cast( PFN_vkCreateFence                                  ) vkGetDeviceProcAddr( device, "vkCreateFence" );
82         vkDestroyFence                                 = cast( PFN_vkDestroyFence                                 ) vkGetDeviceProcAddr( device, "vkDestroyFence" );
83         vkResetFences                                  = cast( PFN_vkResetFences                                  ) vkGetDeviceProcAddr( device, "vkResetFences" );
84         vkGetFenceStatus                               = cast( PFN_vkGetFenceStatus                               ) vkGetDeviceProcAddr( device, "vkGetFenceStatus" );
85         vkWaitForFences                                = cast( PFN_vkWaitForFences                                ) vkGetDeviceProcAddr( device, "vkWaitForFences" );
86         vkCreateSemaphore                              = cast( PFN_vkCreateSemaphore                              ) vkGetDeviceProcAddr( device, "vkCreateSemaphore" );
87         vkDestroySemaphore                             = cast( PFN_vkDestroySemaphore                             ) vkGetDeviceProcAddr( device, "vkDestroySemaphore" );
88         vkCreateEvent                                  = cast( PFN_vkCreateEvent                                  ) vkGetDeviceProcAddr( device, "vkCreateEvent" );
89         vkDestroyEvent                                 = cast( PFN_vkDestroyEvent                                 ) vkGetDeviceProcAddr( device, "vkDestroyEvent" );
90         vkGetEventStatus                               = cast( PFN_vkGetEventStatus                               ) vkGetDeviceProcAddr( device, "vkGetEventStatus" );
91         vkSetEvent                                     = cast( PFN_vkSetEvent                                     ) vkGetDeviceProcAddr( device, "vkSetEvent" );
92         vkResetEvent                                   = cast( PFN_vkResetEvent                                   ) vkGetDeviceProcAddr( device, "vkResetEvent" );
93         vkCreateQueryPool                              = cast( PFN_vkCreateQueryPool                              ) vkGetDeviceProcAddr( device, "vkCreateQueryPool" );
94         vkDestroyQueryPool                             = cast( PFN_vkDestroyQueryPool                             ) vkGetDeviceProcAddr( device, "vkDestroyQueryPool" );
95         vkGetQueryPoolResults                          = cast( PFN_vkGetQueryPoolResults                          ) vkGetDeviceProcAddr( device, "vkGetQueryPoolResults" );
96         vkCreateBuffer                                 = cast( PFN_vkCreateBuffer                                 ) vkGetDeviceProcAddr( device, "vkCreateBuffer" );
97         vkDestroyBuffer                                = cast( PFN_vkDestroyBuffer                                ) vkGetDeviceProcAddr( device, "vkDestroyBuffer" );
98         vkCreateBufferView                             = cast( PFN_vkCreateBufferView                             ) vkGetDeviceProcAddr( device, "vkCreateBufferView" );
99         vkDestroyBufferView                            = cast( PFN_vkDestroyBufferView                            ) vkGetDeviceProcAddr( device, "vkDestroyBufferView" );
100         vkCreateImage                                  = cast( PFN_vkCreateImage                                  ) vkGetDeviceProcAddr( device, "vkCreateImage" );
101         vkDestroyImage                                 = cast( PFN_vkDestroyImage                                 ) vkGetDeviceProcAddr( device, "vkDestroyImage" );
102         vkGetImageSubresourceLayout                    = cast( PFN_vkGetImageSubresourceLayout                    ) vkGetDeviceProcAddr( device, "vkGetImageSubresourceLayout" );
103         vkCreateImageView                              = cast( PFN_vkCreateImageView                              ) vkGetDeviceProcAddr( device, "vkCreateImageView" );
104         vkDestroyImageView                             = cast( PFN_vkDestroyImageView                             ) vkGetDeviceProcAddr( device, "vkDestroyImageView" );
105         vkCreateShaderModule                           = cast( PFN_vkCreateShaderModule                           ) vkGetDeviceProcAddr( device, "vkCreateShaderModule" );
106         vkDestroyShaderModule                          = cast( PFN_vkDestroyShaderModule                          ) vkGetDeviceProcAddr( device, "vkDestroyShaderModule" );
107         vkCreatePipelineCache                          = cast( PFN_vkCreatePipelineCache                          ) vkGetDeviceProcAddr( device, "vkCreatePipelineCache" );
108         vkDestroyPipelineCache                         = cast( PFN_vkDestroyPipelineCache                         ) vkGetDeviceProcAddr( device, "vkDestroyPipelineCache" );
109         vkGetPipelineCacheData                         = cast( PFN_vkGetPipelineCacheData                         ) vkGetDeviceProcAddr( device, "vkGetPipelineCacheData" );
110         vkMergePipelineCaches                          = cast( PFN_vkMergePipelineCaches                          ) vkGetDeviceProcAddr( device, "vkMergePipelineCaches" );
111         vkCreateGraphicsPipelines                      = cast( PFN_vkCreateGraphicsPipelines                      ) vkGetDeviceProcAddr( device, "vkCreateGraphicsPipelines" );
112         vkCreateComputePipelines                       = cast( PFN_vkCreateComputePipelines                       ) vkGetDeviceProcAddr( device, "vkCreateComputePipelines" );
113         vkDestroyPipeline                              = cast( PFN_vkDestroyPipeline                              ) vkGetDeviceProcAddr( device, "vkDestroyPipeline" );
114         vkCreatePipelineLayout                         = cast( PFN_vkCreatePipelineLayout                         ) vkGetDeviceProcAddr( device, "vkCreatePipelineLayout" );
115         vkDestroyPipelineLayout                        = cast( PFN_vkDestroyPipelineLayout                        ) vkGetDeviceProcAddr( device, "vkDestroyPipelineLayout" );
116         vkCreateSampler                                = cast( PFN_vkCreateSampler                                ) vkGetDeviceProcAddr( device, "vkCreateSampler" );
117         vkDestroySampler                               = cast( PFN_vkDestroySampler                               ) vkGetDeviceProcAddr( device, "vkDestroySampler" );
118         vkCreateDescriptorSetLayout                    = cast( PFN_vkCreateDescriptorSetLayout                    ) vkGetDeviceProcAddr( device, "vkCreateDescriptorSetLayout" );
119         vkDestroyDescriptorSetLayout                   = cast( PFN_vkDestroyDescriptorSetLayout                   ) vkGetDeviceProcAddr( device, "vkDestroyDescriptorSetLayout" );
120         vkCreateDescriptorPool                         = cast( PFN_vkCreateDescriptorPool                         ) vkGetDeviceProcAddr( device, "vkCreateDescriptorPool" );
121         vkDestroyDescriptorPool                        = cast( PFN_vkDestroyDescriptorPool                        ) vkGetDeviceProcAddr( device, "vkDestroyDescriptorPool" );
122         vkResetDescriptorPool                          = cast( PFN_vkResetDescriptorPool                          ) vkGetDeviceProcAddr( device, "vkResetDescriptorPool" );
123         vkAllocateDescriptorSets                       = cast( PFN_vkAllocateDescriptorSets                       ) vkGetDeviceProcAddr( device, "vkAllocateDescriptorSets" );
124         vkFreeDescriptorSets                           = cast( PFN_vkFreeDescriptorSets                           ) vkGetDeviceProcAddr( device, "vkFreeDescriptorSets" );
125         vkUpdateDescriptorSets                         = cast( PFN_vkUpdateDescriptorSets                         ) vkGetDeviceProcAddr( device, "vkUpdateDescriptorSets" );
126         vkCreateFramebuffer                            = cast( PFN_vkCreateFramebuffer                            ) vkGetDeviceProcAddr( device, "vkCreateFramebuffer" );
127         vkDestroyFramebuffer                           = cast( PFN_vkDestroyFramebuffer                           ) vkGetDeviceProcAddr( device, "vkDestroyFramebuffer" );
128         vkCreateRenderPass                             = cast( PFN_vkCreateRenderPass                             ) vkGetDeviceProcAddr( device, "vkCreateRenderPass" );
129         vkDestroyRenderPass                            = cast( PFN_vkDestroyRenderPass                            ) vkGetDeviceProcAddr( device, "vkDestroyRenderPass" );
130         vkGetRenderAreaGranularity                     = cast( PFN_vkGetRenderAreaGranularity                     ) vkGetDeviceProcAddr( device, "vkGetRenderAreaGranularity" );
131         vkCreateCommandPool                            = cast( PFN_vkCreateCommandPool                            ) vkGetDeviceProcAddr( device, "vkCreateCommandPool" );
132         vkDestroyCommandPool                           = cast( PFN_vkDestroyCommandPool                           ) vkGetDeviceProcAddr( device, "vkDestroyCommandPool" );
133         vkResetCommandPool                             = cast( PFN_vkResetCommandPool                             ) vkGetDeviceProcAddr( device, "vkResetCommandPool" );
134         vkAllocateCommandBuffers                       = cast( PFN_vkAllocateCommandBuffers                       ) vkGetDeviceProcAddr( device, "vkAllocateCommandBuffers" );
135         vkFreeCommandBuffers                           = cast( PFN_vkFreeCommandBuffers                           ) vkGetDeviceProcAddr( device, "vkFreeCommandBuffers" );
136         vkBeginCommandBuffer                           = cast( PFN_vkBeginCommandBuffer                           ) vkGetDeviceProcAddr( device, "vkBeginCommandBuffer" );
137         vkEndCommandBuffer                             = cast( PFN_vkEndCommandBuffer                             ) vkGetDeviceProcAddr( device, "vkEndCommandBuffer" );
138         vkResetCommandBuffer                           = cast( PFN_vkResetCommandBuffer                           ) vkGetDeviceProcAddr( device, "vkResetCommandBuffer" );
139         vkCmdBindPipeline                              = cast( PFN_vkCmdBindPipeline                              ) vkGetDeviceProcAddr( device, "vkCmdBindPipeline" );
140         vkCmdSetViewport                               = cast( PFN_vkCmdSetViewport                               ) vkGetDeviceProcAddr( device, "vkCmdSetViewport" );
141         vkCmdSetScissor                                = cast( PFN_vkCmdSetScissor                                ) vkGetDeviceProcAddr( device, "vkCmdSetScissor" );
142         vkCmdSetLineWidth                              = cast( PFN_vkCmdSetLineWidth                              ) vkGetDeviceProcAddr( device, "vkCmdSetLineWidth" );
143         vkCmdSetDepthBias                              = cast( PFN_vkCmdSetDepthBias                              ) vkGetDeviceProcAddr( device, "vkCmdSetDepthBias" );
144         vkCmdSetBlendConstants                         = cast( PFN_vkCmdSetBlendConstants                         ) vkGetDeviceProcAddr( device, "vkCmdSetBlendConstants" );
145         vkCmdSetDepthBounds                            = cast( PFN_vkCmdSetDepthBounds                            ) vkGetDeviceProcAddr( device, "vkCmdSetDepthBounds" );
146         vkCmdSetStencilCompareMask                     = cast( PFN_vkCmdSetStencilCompareMask                     ) vkGetDeviceProcAddr( device, "vkCmdSetStencilCompareMask" );
147         vkCmdSetStencilWriteMask                       = cast( PFN_vkCmdSetStencilWriteMask                       ) vkGetDeviceProcAddr( device, "vkCmdSetStencilWriteMask" );
148         vkCmdSetStencilReference                       = cast( PFN_vkCmdSetStencilReference                       ) vkGetDeviceProcAddr( device, "vkCmdSetStencilReference" );
149         vkCmdBindDescriptorSets                        = cast( PFN_vkCmdBindDescriptorSets                        ) vkGetDeviceProcAddr( device, "vkCmdBindDescriptorSets" );
150         vkCmdBindIndexBuffer                           = cast( PFN_vkCmdBindIndexBuffer                           ) vkGetDeviceProcAddr( device, "vkCmdBindIndexBuffer" );
151         vkCmdBindVertexBuffers                         = cast( PFN_vkCmdBindVertexBuffers                         ) vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers" );
152         vkCmdDraw                                      = cast( PFN_vkCmdDraw                                      ) vkGetDeviceProcAddr( device, "vkCmdDraw" );
153         vkCmdDrawIndexed                               = cast( PFN_vkCmdDrawIndexed                               ) vkGetDeviceProcAddr( device, "vkCmdDrawIndexed" );
154         vkCmdDrawIndirect                              = cast( PFN_vkCmdDrawIndirect                              ) vkGetDeviceProcAddr( device, "vkCmdDrawIndirect" );
155         vkCmdDrawIndexedIndirect                       = cast( PFN_vkCmdDrawIndexedIndirect                       ) vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirect" );
156         vkCmdDispatch                                  = cast( PFN_vkCmdDispatch                                  ) vkGetDeviceProcAddr( device, "vkCmdDispatch" );
157         vkCmdDispatchIndirect                          = cast( PFN_vkCmdDispatchIndirect                          ) vkGetDeviceProcAddr( device, "vkCmdDispatchIndirect" );
158         vkCmdCopyBuffer                                = cast( PFN_vkCmdCopyBuffer                                ) vkGetDeviceProcAddr( device, "vkCmdCopyBuffer" );
159         vkCmdCopyImage                                 = cast( PFN_vkCmdCopyImage                                 ) vkGetDeviceProcAddr( device, "vkCmdCopyImage" );
160         vkCmdBlitImage                                 = cast( PFN_vkCmdBlitImage                                 ) vkGetDeviceProcAddr( device, "vkCmdBlitImage" );
161         vkCmdCopyBufferToImage                         = cast( PFN_vkCmdCopyBufferToImage                         ) vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage" );
162         vkCmdCopyImageToBuffer                         = cast( PFN_vkCmdCopyImageToBuffer                         ) vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer" );
163         vkCmdUpdateBuffer                              = cast( PFN_vkCmdUpdateBuffer                              ) vkGetDeviceProcAddr( device, "vkCmdUpdateBuffer" );
164         vkCmdFillBuffer                                = cast( PFN_vkCmdFillBuffer                                ) vkGetDeviceProcAddr( device, "vkCmdFillBuffer" );
165         vkCmdClearColorImage                           = cast( PFN_vkCmdClearColorImage                           ) vkGetDeviceProcAddr( device, "vkCmdClearColorImage" );
166         vkCmdClearDepthStencilImage                    = cast( PFN_vkCmdClearDepthStencilImage                    ) vkGetDeviceProcAddr( device, "vkCmdClearDepthStencilImage" );
167         vkCmdClearAttachments                          = cast( PFN_vkCmdClearAttachments                          ) vkGetDeviceProcAddr( device, "vkCmdClearAttachments" );
168         vkCmdResolveImage                              = cast( PFN_vkCmdResolveImage                              ) vkGetDeviceProcAddr( device, "vkCmdResolveImage" );
169         vkCmdSetEvent                                  = cast( PFN_vkCmdSetEvent                                  ) vkGetDeviceProcAddr( device, "vkCmdSetEvent" );
170         vkCmdResetEvent                                = cast( PFN_vkCmdResetEvent                                ) vkGetDeviceProcAddr( device, "vkCmdResetEvent" );
171         vkCmdWaitEvents                                = cast( PFN_vkCmdWaitEvents                                ) vkGetDeviceProcAddr( device, "vkCmdWaitEvents" );
172         vkCmdPipelineBarrier                           = cast( PFN_vkCmdPipelineBarrier                           ) vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier" );
173         vkCmdBeginQuery                                = cast( PFN_vkCmdBeginQuery                                ) vkGetDeviceProcAddr( device, "vkCmdBeginQuery" );
174         vkCmdEndQuery                                  = cast( PFN_vkCmdEndQuery                                  ) vkGetDeviceProcAddr( device, "vkCmdEndQuery" );
175         vkCmdResetQueryPool                            = cast( PFN_vkCmdResetQueryPool                            ) vkGetDeviceProcAddr( device, "vkCmdResetQueryPool" );
176         vkCmdWriteTimestamp                            = cast( PFN_vkCmdWriteTimestamp                            ) vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp" );
177         vkCmdCopyQueryPoolResults                      = cast( PFN_vkCmdCopyQueryPoolResults                      ) vkGetDeviceProcAddr( device, "vkCmdCopyQueryPoolResults" );
178         vkCmdPushConstants                             = cast( PFN_vkCmdPushConstants                             ) vkGetDeviceProcAddr( device, "vkCmdPushConstants" );
179         vkCmdBeginRenderPass                           = cast( PFN_vkCmdBeginRenderPass                           ) vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass" );
180         vkCmdNextSubpass                               = cast( PFN_vkCmdNextSubpass                               ) vkGetDeviceProcAddr( device, "vkCmdNextSubpass" );
181         vkCmdEndRenderPass                             = cast( PFN_vkCmdEndRenderPass                             ) vkGetDeviceProcAddr( device, "vkCmdEndRenderPass" );
182         vkCmdExecuteCommands                           = cast( PFN_vkCmdExecuteCommands                           ) vkGetDeviceProcAddr( device, "vkCmdExecuteCommands" );
183 
184         // VK_VERSION_1_1
185         vkBindBufferMemory2                            = cast( PFN_vkBindBufferMemory2                            ) vkGetDeviceProcAddr( device, "vkBindBufferMemory2" );
186         vkBindImageMemory2                             = cast( PFN_vkBindImageMemory2                             ) vkGetDeviceProcAddr( device, "vkBindImageMemory2" );
187         vkGetDeviceGroupPeerMemoryFeatures             = cast( PFN_vkGetDeviceGroupPeerMemoryFeatures             ) vkGetDeviceProcAddr( device, "vkGetDeviceGroupPeerMemoryFeatures" );
188         vkCmdSetDeviceMask                             = cast( PFN_vkCmdSetDeviceMask                             ) vkGetDeviceProcAddr( device, "vkCmdSetDeviceMask" );
189         vkCmdDispatchBase                              = cast( PFN_vkCmdDispatchBase                              ) vkGetDeviceProcAddr( device, "vkCmdDispatchBase" );
190         vkGetImageMemoryRequirements2                  = cast( PFN_vkGetImageMemoryRequirements2                  ) vkGetDeviceProcAddr( device, "vkGetImageMemoryRequirements2" );
191         vkGetBufferMemoryRequirements2                 = cast( PFN_vkGetBufferMemoryRequirements2                 ) vkGetDeviceProcAddr( device, "vkGetBufferMemoryRequirements2" );
192         vkGetImageSparseMemoryRequirements2            = cast( PFN_vkGetImageSparseMemoryRequirements2            ) vkGetDeviceProcAddr( device, "vkGetImageSparseMemoryRequirements2" );
193         vkTrimCommandPool                              = cast( PFN_vkTrimCommandPool                              ) vkGetDeviceProcAddr( device, "vkTrimCommandPool" );
194         vkGetDeviceQueue2                              = cast( PFN_vkGetDeviceQueue2                              ) vkGetDeviceProcAddr( device, "vkGetDeviceQueue2" );
195         vkCreateSamplerYcbcrConversion                 = cast( PFN_vkCreateSamplerYcbcrConversion                 ) vkGetDeviceProcAddr( device, "vkCreateSamplerYcbcrConversion" );
196         vkDestroySamplerYcbcrConversion                = cast( PFN_vkDestroySamplerYcbcrConversion                ) vkGetDeviceProcAddr( device, "vkDestroySamplerYcbcrConversion" );
197         vkCreateDescriptorUpdateTemplate               = cast( PFN_vkCreateDescriptorUpdateTemplate               ) vkGetDeviceProcAddr( device, "vkCreateDescriptorUpdateTemplate" );
198         vkDestroyDescriptorUpdateTemplate              = cast( PFN_vkDestroyDescriptorUpdateTemplate              ) vkGetDeviceProcAddr( device, "vkDestroyDescriptorUpdateTemplate" );
199         vkUpdateDescriptorSetWithTemplate              = cast( PFN_vkUpdateDescriptorSetWithTemplate              ) vkGetDeviceProcAddr( device, "vkUpdateDescriptorSetWithTemplate" );
200         vkGetDescriptorSetLayoutSupport                = cast( PFN_vkGetDescriptorSetLayoutSupport                ) vkGetDeviceProcAddr( device, "vkGetDescriptorSetLayoutSupport" );
201 
202         // VK_KHR_swapchain
203         vkCreateSwapchainKHR                           = cast( PFN_vkCreateSwapchainKHR                           ) vkGetDeviceProcAddr( device, "vkCreateSwapchainKHR" );
204         vkDestroySwapchainKHR                          = cast( PFN_vkDestroySwapchainKHR                          ) vkGetDeviceProcAddr( device, "vkDestroySwapchainKHR" );
205         vkGetSwapchainImagesKHR                        = cast( PFN_vkGetSwapchainImagesKHR                        ) vkGetDeviceProcAddr( device, "vkGetSwapchainImagesKHR" );
206         vkAcquireNextImageKHR                          = cast( PFN_vkAcquireNextImageKHR                          ) vkGetDeviceProcAddr( device, "vkAcquireNextImageKHR" );
207         vkQueuePresentKHR                              = cast( PFN_vkQueuePresentKHR                              ) vkGetDeviceProcAddr( device, "vkQueuePresentKHR" );
208         vkGetDeviceGroupPresentCapabilitiesKHR         = cast( PFN_vkGetDeviceGroupPresentCapabilitiesKHR         ) vkGetDeviceProcAddr( device, "vkGetDeviceGroupPresentCapabilitiesKHR" );
209         vkGetDeviceGroupSurfacePresentModesKHR         = cast( PFN_vkGetDeviceGroupSurfacePresentModesKHR         ) vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModesKHR" );
210         vkAcquireNextImage2KHR                         = cast( PFN_vkAcquireNextImage2KHR                         ) vkGetDeviceProcAddr( device, "vkAcquireNextImage2KHR" );
211 
212         // VK_KHR_display_swapchain
213         vkCreateSharedSwapchainsKHR                    = cast( PFN_vkCreateSharedSwapchainsKHR                    ) vkGetDeviceProcAddr( device, "vkCreateSharedSwapchainsKHR" );
214 
215         // VK_KHR_external_memory_fd
216         vkGetMemoryFdKHR                               = cast( PFN_vkGetMemoryFdKHR                               ) vkGetDeviceProcAddr( device, "vkGetMemoryFdKHR" );
217         vkGetMemoryFdPropertiesKHR                     = cast( PFN_vkGetMemoryFdPropertiesKHR                     ) vkGetDeviceProcAddr( device, "vkGetMemoryFdPropertiesKHR" );
218 
219         // VK_KHR_external_semaphore_fd
220         vkImportSemaphoreFdKHR                         = cast( PFN_vkImportSemaphoreFdKHR                         ) vkGetDeviceProcAddr( device, "vkImportSemaphoreFdKHR" );
221         vkGetSemaphoreFdKHR                            = cast( PFN_vkGetSemaphoreFdKHR                            ) vkGetDeviceProcAddr( device, "vkGetSemaphoreFdKHR" );
222 
223         // VK_KHR_push_descriptor
224         vkCmdPushDescriptorSetKHR                      = cast( PFN_vkCmdPushDescriptorSetKHR                      ) vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetKHR" );
225         vkCmdPushDescriptorSetWithTemplateKHR          = cast( PFN_vkCmdPushDescriptorSetWithTemplateKHR          ) vkGetDeviceProcAddr( device, "vkCmdPushDescriptorSetWithTemplateKHR" );
226 
227         // VK_KHR_create_renderpass2
228         vkCreateRenderPass2KHR                         = cast( PFN_vkCreateRenderPass2KHR                         ) vkGetDeviceProcAddr( device, "vkCreateRenderPass2KHR" );
229         vkCmdBeginRenderPass2KHR                       = cast( PFN_vkCmdBeginRenderPass2KHR                       ) vkGetDeviceProcAddr( device, "vkCmdBeginRenderPass2KHR" );
230         vkCmdNextSubpass2KHR                           = cast( PFN_vkCmdNextSubpass2KHR                           ) vkGetDeviceProcAddr( device, "vkCmdNextSubpass2KHR" );
231         vkCmdEndRenderPass2KHR                         = cast( PFN_vkCmdEndRenderPass2KHR                         ) vkGetDeviceProcAddr( device, "vkCmdEndRenderPass2KHR" );
232 
233         // VK_KHR_shared_presentable_image
234         vkGetSwapchainStatusKHR                        = cast( PFN_vkGetSwapchainStatusKHR                        ) vkGetDeviceProcAddr( device, "vkGetSwapchainStatusKHR" );
235 
236         // VK_KHR_external_fence_fd
237         vkImportFenceFdKHR                             = cast( PFN_vkImportFenceFdKHR                             ) vkGetDeviceProcAddr( device, "vkImportFenceFdKHR" );
238         vkGetFenceFdKHR                                = cast( PFN_vkGetFenceFdKHR                                ) vkGetDeviceProcAddr( device, "vkGetFenceFdKHR" );
239 
240         // VK_KHR_draw_indirect_count
241         vkCmdDrawIndirectCountKHR                      = cast( PFN_vkCmdDrawIndirectCountKHR                      ) vkGetDeviceProcAddr( device, "vkCmdDrawIndirectCountKHR" );
242         vkCmdDrawIndexedIndirectCountKHR               = cast( PFN_vkCmdDrawIndexedIndirectCountKHR               ) vkGetDeviceProcAddr( device, "vkCmdDrawIndexedIndirectCountKHR" );
243 
244         // VK_EXT_debug_marker
245         vkDebugMarkerSetObjectTagEXT                   = cast( PFN_vkDebugMarkerSetObjectTagEXT                   ) vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectTagEXT" );
246         vkDebugMarkerSetObjectNameEXT                  = cast( PFN_vkDebugMarkerSetObjectNameEXT                  ) vkGetDeviceProcAddr( device, "vkDebugMarkerSetObjectNameEXT" );
247         vkCmdDebugMarkerBeginEXT                       = cast( PFN_vkCmdDebugMarkerBeginEXT                       ) vkGetDeviceProcAddr( device, "vkCmdDebugMarkerBeginEXT" );
248         vkCmdDebugMarkerEndEXT                         = cast( PFN_vkCmdDebugMarkerEndEXT                         ) vkGetDeviceProcAddr( device, "vkCmdDebugMarkerEndEXT" );
249         vkCmdDebugMarkerInsertEXT                      = cast( PFN_vkCmdDebugMarkerInsertEXT                      ) vkGetDeviceProcAddr( device, "vkCmdDebugMarkerInsertEXT" );
250 
251         // VK_EXT_transform_feedback
252         vkCmdBindTransformFeedbackBuffersEXT           = cast( PFN_vkCmdBindTransformFeedbackBuffersEXT           ) vkGetDeviceProcAddr( device, "vkCmdBindTransformFeedbackBuffersEXT" );
253         vkCmdBeginTransformFeedbackEXT                 = cast( PFN_vkCmdBeginTransformFeedbackEXT                 ) vkGetDeviceProcAddr( device, "vkCmdBeginTransformFeedbackEXT" );
254         vkCmdEndTransformFeedbackEXT                   = cast( PFN_vkCmdEndTransformFeedbackEXT                   ) vkGetDeviceProcAddr( device, "vkCmdEndTransformFeedbackEXT" );
255         vkCmdBeginQueryIndexedEXT                      = cast( PFN_vkCmdBeginQueryIndexedEXT                      ) vkGetDeviceProcAddr( device, "vkCmdBeginQueryIndexedEXT" );
256         vkCmdEndQueryIndexedEXT                        = cast( PFN_vkCmdEndQueryIndexedEXT                        ) vkGetDeviceProcAddr( device, "vkCmdEndQueryIndexedEXT" );
257         vkCmdDrawIndirectByteCountEXT                  = cast( PFN_vkCmdDrawIndirectByteCountEXT                  ) vkGetDeviceProcAddr( device, "vkCmdDrawIndirectByteCountEXT" );
258 
259         // VK_NVX_image_view_handle
260         vkGetImageViewHandleNVX                        = cast( PFN_vkGetImageViewHandleNVX                        ) vkGetDeviceProcAddr( device, "vkGetImageViewHandleNVX" );
261 
262         // VK_AMD_shader_info
263         vkGetShaderInfoAMD                             = cast( PFN_vkGetShaderInfoAMD                             ) vkGetDeviceProcAddr( device, "vkGetShaderInfoAMD" );
264 
265         // VK_EXT_conditional_rendering
266         vkCmdBeginConditionalRenderingEXT              = cast( PFN_vkCmdBeginConditionalRenderingEXT              ) vkGetDeviceProcAddr( device, "vkCmdBeginConditionalRenderingEXT" );
267         vkCmdEndConditionalRenderingEXT                = cast( PFN_vkCmdEndConditionalRenderingEXT                ) vkGetDeviceProcAddr( device, "vkCmdEndConditionalRenderingEXT" );
268 
269         // VK_NVX_device_generated_commands
270         vkCmdProcessCommandsNVX                        = cast( PFN_vkCmdProcessCommandsNVX                        ) vkGetDeviceProcAddr( device, "vkCmdProcessCommandsNVX" );
271         vkCmdReserveSpaceForCommandsNVX                = cast( PFN_vkCmdReserveSpaceForCommandsNVX                ) vkGetDeviceProcAddr( device, "vkCmdReserveSpaceForCommandsNVX" );
272         vkCreateIndirectCommandsLayoutNVX              = cast( PFN_vkCreateIndirectCommandsLayoutNVX              ) vkGetDeviceProcAddr( device, "vkCreateIndirectCommandsLayoutNVX" );
273         vkDestroyIndirectCommandsLayoutNVX             = cast( PFN_vkDestroyIndirectCommandsLayoutNVX             ) vkGetDeviceProcAddr( device, "vkDestroyIndirectCommandsLayoutNVX" );
274         vkCreateObjectTableNVX                         = cast( PFN_vkCreateObjectTableNVX                         ) vkGetDeviceProcAddr( device, "vkCreateObjectTableNVX" );
275         vkDestroyObjectTableNVX                        = cast( PFN_vkDestroyObjectTableNVX                        ) vkGetDeviceProcAddr( device, "vkDestroyObjectTableNVX" );
276         vkRegisterObjectsNVX                           = cast( PFN_vkRegisterObjectsNVX                           ) vkGetDeviceProcAddr( device, "vkRegisterObjectsNVX" );
277         vkUnregisterObjectsNVX                         = cast( PFN_vkUnregisterObjectsNVX                         ) vkGetDeviceProcAddr( device, "vkUnregisterObjectsNVX" );
278 
279         // VK_NV_clip_space_w_scaling
280         vkCmdSetViewportWScalingNV                     = cast( PFN_vkCmdSetViewportWScalingNV                     ) vkGetDeviceProcAddr( device, "vkCmdSetViewportWScalingNV" );
281 
282         // VK_EXT_display_control
283         vkDisplayPowerControlEXT                       = cast( PFN_vkDisplayPowerControlEXT                       ) vkGetDeviceProcAddr( device, "vkDisplayPowerControlEXT" );
284         vkRegisterDeviceEventEXT                       = cast( PFN_vkRegisterDeviceEventEXT                       ) vkGetDeviceProcAddr( device, "vkRegisterDeviceEventEXT" );
285         vkRegisterDisplayEventEXT                      = cast( PFN_vkRegisterDisplayEventEXT                      ) vkGetDeviceProcAddr( device, "vkRegisterDisplayEventEXT" );
286         vkGetSwapchainCounterEXT                       = cast( PFN_vkGetSwapchainCounterEXT                       ) vkGetDeviceProcAddr( device, "vkGetSwapchainCounterEXT" );
287 
288         // VK_GOOGLE_display_timing
289         vkGetRefreshCycleDurationGOOGLE                = cast( PFN_vkGetRefreshCycleDurationGOOGLE                ) vkGetDeviceProcAddr( device, "vkGetRefreshCycleDurationGOOGLE" );
290         vkGetPastPresentationTimingGOOGLE              = cast( PFN_vkGetPastPresentationTimingGOOGLE              ) vkGetDeviceProcAddr( device, "vkGetPastPresentationTimingGOOGLE" );
291 
292         // VK_EXT_discard_rectangles
293         vkCmdSetDiscardRectangleEXT                    = cast( PFN_vkCmdSetDiscardRectangleEXT                    ) vkGetDeviceProcAddr( device, "vkCmdSetDiscardRectangleEXT" );
294 
295         // VK_EXT_hdr_metadata
296         vkSetHdrMetadataEXT                            = cast( PFN_vkSetHdrMetadataEXT                            ) vkGetDeviceProcAddr( device, "vkSetHdrMetadataEXT" );
297 
298         // VK_EXT_debug_utils
299         vkSetDebugUtilsObjectNameEXT                   = cast( PFN_vkSetDebugUtilsObjectNameEXT                   ) vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectNameEXT" );
300         vkSetDebugUtilsObjectTagEXT                    = cast( PFN_vkSetDebugUtilsObjectTagEXT                    ) vkGetDeviceProcAddr( device, "vkSetDebugUtilsObjectTagEXT" );
301         vkQueueBeginDebugUtilsLabelEXT                 = cast( PFN_vkQueueBeginDebugUtilsLabelEXT                 ) vkGetDeviceProcAddr( device, "vkQueueBeginDebugUtilsLabelEXT" );
302         vkQueueEndDebugUtilsLabelEXT                   = cast( PFN_vkQueueEndDebugUtilsLabelEXT                   ) vkGetDeviceProcAddr( device, "vkQueueEndDebugUtilsLabelEXT" );
303         vkQueueInsertDebugUtilsLabelEXT                = cast( PFN_vkQueueInsertDebugUtilsLabelEXT                ) vkGetDeviceProcAddr( device, "vkQueueInsertDebugUtilsLabelEXT" );
304         vkCmdBeginDebugUtilsLabelEXT                   = cast( PFN_vkCmdBeginDebugUtilsLabelEXT                   ) vkGetDeviceProcAddr( device, "vkCmdBeginDebugUtilsLabelEXT" );
305         vkCmdEndDebugUtilsLabelEXT                     = cast( PFN_vkCmdEndDebugUtilsLabelEXT                     ) vkGetDeviceProcAddr( device, "vkCmdEndDebugUtilsLabelEXT" );
306         vkCmdInsertDebugUtilsLabelEXT                  = cast( PFN_vkCmdInsertDebugUtilsLabelEXT                  ) vkGetDeviceProcAddr( device, "vkCmdInsertDebugUtilsLabelEXT" );
307 
308         // VK_EXT_sample_locations
309         vkCmdSetSampleLocationsEXT                     = cast( PFN_vkCmdSetSampleLocationsEXT                     ) vkGetDeviceProcAddr( device, "vkCmdSetSampleLocationsEXT" );
310 
311         // VK_EXT_image_drm_format_modifier
312         vkGetImageDrmFormatModifierPropertiesEXT       = cast( PFN_vkGetImageDrmFormatModifierPropertiesEXT       ) vkGetDeviceProcAddr( device, "vkGetImageDrmFormatModifierPropertiesEXT" );
313 
314         // VK_EXT_validation_cache
315         vkCreateValidationCacheEXT                     = cast( PFN_vkCreateValidationCacheEXT                     ) vkGetDeviceProcAddr( device, "vkCreateValidationCacheEXT" );
316         vkDestroyValidationCacheEXT                    = cast( PFN_vkDestroyValidationCacheEXT                    ) vkGetDeviceProcAddr( device, "vkDestroyValidationCacheEXT" );
317         vkMergeValidationCachesEXT                     = cast( PFN_vkMergeValidationCachesEXT                     ) vkGetDeviceProcAddr( device, "vkMergeValidationCachesEXT" );
318         vkGetValidationCacheDataEXT                    = cast( PFN_vkGetValidationCacheDataEXT                    ) vkGetDeviceProcAddr( device, "vkGetValidationCacheDataEXT" );
319 
320         // VK_NV_shading_rate_image
321         vkCmdBindShadingRateImageNV                    = cast( PFN_vkCmdBindShadingRateImageNV                    ) vkGetDeviceProcAddr( device, "vkCmdBindShadingRateImageNV" );
322         vkCmdSetViewportShadingRatePaletteNV           = cast( PFN_vkCmdSetViewportShadingRatePaletteNV           ) vkGetDeviceProcAddr( device, "vkCmdSetViewportShadingRatePaletteNV" );
323         vkCmdSetCoarseSampleOrderNV                    = cast( PFN_vkCmdSetCoarseSampleOrderNV                    ) vkGetDeviceProcAddr( device, "vkCmdSetCoarseSampleOrderNV" );
324 
325         // VK_NV_ray_tracing
326         vkCreateAccelerationStructureNV                = cast( PFN_vkCreateAccelerationStructureNV                ) vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureNV" );
327         vkDestroyAccelerationStructureNV               = cast( PFN_vkDestroyAccelerationStructureNV               ) vkGetDeviceProcAddr( device, "vkDestroyAccelerationStructureNV" );
328         vkGetAccelerationStructureMemoryRequirementsNV = cast( PFN_vkGetAccelerationStructureMemoryRequirementsNV ) vkGetDeviceProcAddr( device, "vkGetAccelerationStructureMemoryRequirementsNV" );
329         vkBindAccelerationStructureMemoryNV            = cast( PFN_vkBindAccelerationStructureMemoryNV            ) vkGetDeviceProcAddr( device, "vkBindAccelerationStructureMemoryNV" );
330         vkCmdBuildAccelerationStructureNV              = cast( PFN_vkCmdBuildAccelerationStructureNV              ) vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructureNV" );
331         vkCmdCopyAccelerationStructureNV               = cast( PFN_vkCmdCopyAccelerationStructureNV               ) vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureNV" );
332         vkCmdTraceRaysNV                               = cast( PFN_vkCmdTraceRaysNV                               ) vkGetDeviceProcAddr( device, "vkCmdTraceRaysNV" );
333         vkCreateRayTracingPipelinesNV                  = cast( PFN_vkCreateRayTracingPipelinesNV                  ) vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesNV" );
334         vkGetRayTracingShaderGroupHandlesNV            = cast( PFN_vkGetRayTracingShaderGroupHandlesNV            ) vkGetDeviceProcAddr( device, "vkGetRayTracingShaderGroupHandlesNV" );
335         vkGetAccelerationStructureHandleNV             = cast( PFN_vkGetAccelerationStructureHandleNV             ) vkGetDeviceProcAddr( device, "vkGetAccelerationStructureHandleNV" );
336         vkCmdWriteAccelerationStructuresPropertiesNV   = cast( PFN_vkCmdWriteAccelerationStructuresPropertiesNV   ) vkGetDeviceProcAddr( device, "vkCmdWriteAccelerationStructuresPropertiesNV" );
337         vkCompileDeferredNV                            = cast( PFN_vkCompileDeferredNV                            ) vkGetDeviceProcAddr( device, "vkCompileDeferredNV" );
338 
339         // VK_EXT_external_memory_host
340         vkGetMemoryHostPointerPropertiesEXT            = cast( PFN_vkGetMemoryHostPointerPropertiesEXT            ) vkGetDeviceProcAddr( device, "vkGetMemoryHostPointerPropertiesEXT" );
341 
342         // VK_AMD_buffer_marker
343         vkCmdWriteBufferMarkerAMD                      = cast( PFN_vkCmdWriteBufferMarkerAMD                      ) vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarkerAMD" );
344 
345         // VK_EXT_calibrated_timestamps
346         vkGetCalibratedTimestampsEXT                   = cast( PFN_vkGetCalibratedTimestampsEXT                   ) vkGetDeviceProcAddr( device, "vkGetCalibratedTimestampsEXT" );
347 
348         // VK_NV_mesh_shader
349         vkCmdDrawMeshTasksNV                           = cast( PFN_vkCmdDrawMeshTasksNV                           ) vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksNV" );
350         vkCmdDrawMeshTasksIndirectNV                   = cast( PFN_vkCmdDrawMeshTasksIndirectNV                   ) vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectNV" );
351         vkCmdDrawMeshTasksIndirectCountNV              = cast( PFN_vkCmdDrawMeshTasksIndirectCountNV              ) vkGetDeviceProcAddr( device, "vkCmdDrawMeshTasksIndirectCountNV" );
352 
353         // VK_NV_scissor_exclusive
354         vkCmdSetExclusiveScissorNV                     = cast( PFN_vkCmdSetExclusiveScissorNV                     ) vkGetDeviceProcAddr( device, "vkCmdSetExclusiveScissorNV" );
355 
356         // VK_NV_device_diagnostic_checkpoints
357         vkCmdSetCheckpointNV                           = cast( PFN_vkCmdSetCheckpointNV                           ) vkGetDeviceProcAddr( device, "vkCmdSetCheckpointNV" );
358         vkGetQueueCheckpointDataNV                     = cast( PFN_vkGetQueueCheckpointDataNV                     ) vkGetDeviceProcAddr( device, "vkGetQueueCheckpointDataNV" );
359 
360         // VK_INTEL_performance_query
361         vkInitializePerformanceApiINTEL                = cast( PFN_vkInitializePerformanceApiINTEL                ) vkGetDeviceProcAddr( device, "vkInitializePerformanceApiINTEL" );
362         vkUninitializePerformanceApiINTEL              = cast( PFN_vkUninitializePerformanceApiINTEL              ) vkGetDeviceProcAddr( device, "vkUninitializePerformanceApiINTEL" );
363         vkCmdSetPerformanceMarkerINTEL                 = cast( PFN_vkCmdSetPerformanceMarkerINTEL                 ) vkGetDeviceProcAddr( device, "vkCmdSetPerformanceMarkerINTEL" );
364         vkCmdSetPerformanceStreamMarkerINTEL           = cast( PFN_vkCmdSetPerformanceStreamMarkerINTEL           ) vkGetDeviceProcAddr( device, "vkCmdSetPerformanceStreamMarkerINTEL" );
365         vkCmdSetPerformanceOverrideINTEL               = cast( PFN_vkCmdSetPerformanceOverrideINTEL               ) vkGetDeviceProcAddr( device, "vkCmdSetPerformanceOverrideINTEL" );
366         vkAcquirePerformanceConfigurationINTEL         = cast( PFN_vkAcquirePerformanceConfigurationINTEL         ) vkGetDeviceProcAddr( device, "vkAcquirePerformanceConfigurationINTEL" );
367         vkReleasePerformanceConfigurationINTEL         = cast( PFN_vkReleasePerformanceConfigurationINTEL         ) vkGetDeviceProcAddr( device, "vkReleasePerformanceConfigurationINTEL" );
368         vkQueueSetPerformanceConfigurationINTEL        = cast( PFN_vkQueueSetPerformanceConfigurationINTEL        ) vkGetDeviceProcAddr( device, "vkQueueSetPerformanceConfigurationINTEL" );
369         vkGetPerformanceParameterINTEL                 = cast( PFN_vkGetPerformanceParameterINTEL                 ) vkGetDeviceProcAddr( device, "vkGetPerformanceParameterINTEL" );
370 
371         // VK_AMD_display_native_hdr
372         vkSetLocalDimmingAMD                           = cast( PFN_vkSetLocalDimmingAMD                           ) vkGetDeviceProcAddr( device, "vkSetLocalDimmingAMD" );
373 
374         // VK_EXT_buffer_device_address
375         vkGetBufferDeviceAddressEXT                    = cast( PFN_vkGetBufferDeviceAddressEXT                    ) vkGetDeviceProcAddr( device, "vkGetBufferDeviceAddressEXT" );
376 
377         // VK_EXT_host_query_reset
378         vkResetQueryPoolEXT                            = cast( PFN_vkResetQueryPoolEXT                            ) vkGetDeviceProcAddr( device, "vkResetQueryPoolEXT" );
379     }
380 
381 
382     /// convenience member functions, forwarded to corresponding vulkan functions
383     /// parameters of type VkDevice, const( VkAllocationCallbacks )* and VkCommandBuffer are omitted
384     /// they will be supplied by the member properties vkDevice, pAllocator and the public member commandBuffer
385     /// e.g.:
386     ///      auto dd = DispatchDevice( device );
387     ///      dd.DestroyDevice();       // instead of: dd.vkDestroyDevice( dd.vkDevice, pAllocator );
388     ///
389     /// Same mechanism works with functions which require a VkCommandBuffer as first arg
390     /// In this case the public member 'commandBuffer' must be set beforehand
391     /// e.g.:
392     ///      dd.commandBuffer = some_command_buffer;
393     ///      dd.BeginCommandBuffer( &beginInfo );
394     ///      dd.CmdBindPipeline( VK_PIPELINE_BIND_POINT_GRAPHICS, some_pipeline );
395     ///
396     /// Does not work with queues, there are just too few queue related functions
397 
398     // VK_VERSION_1_0
399     void      DestroyDevice() { vkDestroyDevice( vkDevice, pAllocator ); }
400     void      GetDeviceQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue ) { vkGetDeviceQueue( vkDevice, queueFamilyIndex, queueIndex, pQueue ); }
401     VkResult  DeviceWaitIdle() { return vkDeviceWaitIdle( vkDevice ); }
402     VkResult  AllocateMemory( const( VkMemoryAllocateInfo )* pAllocateInfo, VkDeviceMemory* pMemory ) { return vkAllocateMemory( vkDevice, pAllocateInfo, pAllocator, pMemory ); }
403     void      FreeMemory( VkDeviceMemory memory ) { vkFreeMemory( vkDevice, memory, pAllocator ); }
404     VkResult  MapMemory( VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData ) { return vkMapMemory( vkDevice, memory, offset, size, flags, ppData ); }
405     void      UnmapMemory( VkDeviceMemory memory ) { vkUnmapMemory( vkDevice, memory ); }
406     VkResult  FlushMappedMemoryRanges( uint32_t memoryRangeCount, const( VkMappedMemoryRange )* pMemoryRanges ) { return vkFlushMappedMemoryRanges( vkDevice, memoryRangeCount, pMemoryRanges ); }
407     VkResult  InvalidateMappedMemoryRanges( uint32_t memoryRangeCount, const( VkMappedMemoryRange )* pMemoryRanges ) { return vkInvalidateMappedMemoryRanges( vkDevice, memoryRangeCount, pMemoryRanges ); }
408     void      GetDeviceMemoryCommitment( VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes ) { vkGetDeviceMemoryCommitment( vkDevice, memory, pCommittedMemoryInBytes ); }
409     VkResult  BindBufferMemory( VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset ) { return vkBindBufferMemory( vkDevice, buffer, memory, memoryOffset ); }
410     VkResult  BindImageMemory( VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset ) { return vkBindImageMemory( vkDevice, image, memory, memoryOffset ); }
411     void      GetBufferMemoryRequirements( VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements ) { vkGetBufferMemoryRequirements( vkDevice, buffer, pMemoryRequirements ); }
412     void      GetImageMemoryRequirements( VkImage image, VkMemoryRequirements* pMemoryRequirements ) { vkGetImageMemoryRequirements( vkDevice, image, pMemoryRequirements ); }
413     void      GetImageSparseMemoryRequirements( VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements ) { vkGetImageSparseMemoryRequirements( vkDevice, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements ); }
414     VkResult  CreateFence( const( VkFenceCreateInfo )* pCreateInfo, VkFence* pFence ) { return vkCreateFence( vkDevice, pCreateInfo, pAllocator, pFence ); }
415     void      DestroyFence( VkFence fence ) { vkDestroyFence( vkDevice, fence, pAllocator ); }
416     VkResult  ResetFences( uint32_t fenceCount, const( VkFence )* pFences ) { return vkResetFences( vkDevice, fenceCount, pFences ); }
417     VkResult  GetFenceStatus( VkFence fence ) { return vkGetFenceStatus( vkDevice, fence ); }
418     VkResult  WaitForFences( uint32_t fenceCount, const( VkFence )* pFences, VkBool32 waitAll, uint64_t timeout ) { return vkWaitForFences( vkDevice, fenceCount, pFences, waitAll, timeout ); }
419     VkResult  CreateSemaphore( const( VkSemaphoreCreateInfo )* pCreateInfo, VkSemaphore* pSemaphore ) { return vkCreateSemaphore( vkDevice, pCreateInfo, pAllocator, pSemaphore ); }
420     void      DestroySemaphore( VkSemaphore semaphore ) { vkDestroySemaphore( vkDevice, semaphore, pAllocator ); }
421     VkResult  CreateEvent( const( VkEventCreateInfo )* pCreateInfo, VkEvent* pEvent ) { return vkCreateEvent( vkDevice, pCreateInfo, pAllocator, pEvent ); }
422     void      DestroyEvent( VkEvent event ) { vkDestroyEvent( vkDevice, event, pAllocator ); }
423     VkResult  GetEventStatus( VkEvent event ) { return vkGetEventStatus( vkDevice, event ); }
424     VkResult  SetEvent( VkEvent event ) { return vkSetEvent( vkDevice, event ); }
425     VkResult  ResetEvent( VkEvent event ) { return vkResetEvent( vkDevice, event ); }
426     VkResult  CreateQueryPool( const( VkQueryPoolCreateInfo )* pCreateInfo, VkQueryPool* pQueryPool ) { return vkCreateQueryPool( vkDevice, pCreateInfo, pAllocator, pQueryPool ); }
427     void      DestroyQueryPool( VkQueryPool queryPool ) { vkDestroyQueryPool( vkDevice, queryPool, pAllocator ); }
428     VkResult  GetQueryPoolResults( VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags ) { return vkGetQueryPoolResults( vkDevice, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags ); }
429     VkResult  CreateBuffer( const( VkBufferCreateInfo )* pCreateInfo, VkBuffer* pBuffer ) { return vkCreateBuffer( vkDevice, pCreateInfo, pAllocator, pBuffer ); }
430     void      DestroyBuffer( VkBuffer buffer ) { vkDestroyBuffer( vkDevice, buffer, pAllocator ); }
431     VkResult  CreateBufferView( const( VkBufferViewCreateInfo )* pCreateInfo, VkBufferView* pView ) { return vkCreateBufferView( vkDevice, pCreateInfo, pAllocator, pView ); }
432     void      DestroyBufferView( VkBufferView bufferView ) { vkDestroyBufferView( vkDevice, bufferView, pAllocator ); }
433     VkResult  CreateImage( const( VkImageCreateInfo )* pCreateInfo, VkImage* pImage ) { return vkCreateImage( vkDevice, pCreateInfo, pAllocator, pImage ); }
434     void      DestroyImage( VkImage image ) { vkDestroyImage( vkDevice, image, pAllocator ); }
435     void      GetImageSubresourceLayout( VkImage image, const( VkImageSubresource )* pSubresource, VkSubresourceLayout* pLayout ) { vkGetImageSubresourceLayout( vkDevice, image, pSubresource, pLayout ); }
436     VkResult  CreateImageView( const( VkImageViewCreateInfo )* pCreateInfo, VkImageView* pView ) { return vkCreateImageView( vkDevice, pCreateInfo, pAllocator, pView ); }
437     void      DestroyImageView( VkImageView imageView ) { vkDestroyImageView( vkDevice, imageView, pAllocator ); }
438     VkResult  CreateShaderModule( const( VkShaderModuleCreateInfo )* pCreateInfo, VkShaderModule* pShaderModule ) { return vkCreateShaderModule( vkDevice, pCreateInfo, pAllocator, pShaderModule ); }
439     void      DestroyShaderModule( VkShaderModule shaderModule ) { vkDestroyShaderModule( vkDevice, shaderModule, pAllocator ); }
440     VkResult  CreatePipelineCache( const( VkPipelineCacheCreateInfo )* pCreateInfo, VkPipelineCache* pPipelineCache ) { return vkCreatePipelineCache( vkDevice, pCreateInfo, pAllocator, pPipelineCache ); }
441     void      DestroyPipelineCache( VkPipelineCache pipelineCache ) { vkDestroyPipelineCache( vkDevice, pipelineCache, pAllocator ); }
442     VkResult  GetPipelineCacheData( VkPipelineCache pipelineCache, size_t* pDataSize, void* pData ) { return vkGetPipelineCacheData( vkDevice, pipelineCache, pDataSize, pData ); }
443     VkResult  MergePipelineCaches( VkPipelineCache dstCache, uint32_t srcCacheCount, const( VkPipelineCache )* pSrcCaches ) { return vkMergePipelineCaches( vkDevice, dstCache, srcCacheCount, pSrcCaches ); }
444     VkResult  CreateGraphicsPipelines( VkPipelineCache pipelineCache, uint32_t createInfoCount, const( VkGraphicsPipelineCreateInfo )* pCreateInfos, VkPipeline* pPipelines ) { return vkCreateGraphicsPipelines( vkDevice, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); }
445     VkResult  CreateComputePipelines( VkPipelineCache pipelineCache, uint32_t createInfoCount, const( VkComputePipelineCreateInfo )* pCreateInfos, VkPipeline* pPipelines ) { return vkCreateComputePipelines( vkDevice, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); }
446     void      DestroyPipeline( VkPipeline pipeline ) { vkDestroyPipeline( vkDevice, pipeline, pAllocator ); }
447     VkResult  CreatePipelineLayout( const( VkPipelineLayoutCreateInfo )* pCreateInfo, VkPipelineLayout* pPipelineLayout ) { return vkCreatePipelineLayout( vkDevice, pCreateInfo, pAllocator, pPipelineLayout ); }
448     void      DestroyPipelineLayout( VkPipelineLayout pipelineLayout ) { vkDestroyPipelineLayout( vkDevice, pipelineLayout, pAllocator ); }
449     VkResult  CreateSampler( const( VkSamplerCreateInfo )* pCreateInfo, VkSampler* pSampler ) { return vkCreateSampler( vkDevice, pCreateInfo, pAllocator, pSampler ); }
450     void      DestroySampler( VkSampler sampler ) { vkDestroySampler( vkDevice, sampler, pAllocator ); }
451     VkResult  CreateDescriptorSetLayout( const( VkDescriptorSetLayoutCreateInfo )* pCreateInfo, VkDescriptorSetLayout* pSetLayout ) { return vkCreateDescriptorSetLayout( vkDevice, pCreateInfo, pAllocator, pSetLayout ); }
452     void      DestroyDescriptorSetLayout( VkDescriptorSetLayout descriptorSetLayout ) { vkDestroyDescriptorSetLayout( vkDevice, descriptorSetLayout, pAllocator ); }
453     VkResult  CreateDescriptorPool( const( VkDescriptorPoolCreateInfo )* pCreateInfo, VkDescriptorPool* pDescriptorPool ) { return vkCreateDescriptorPool( vkDevice, pCreateInfo, pAllocator, pDescriptorPool ); }
454     void      DestroyDescriptorPool( VkDescriptorPool descriptorPool ) { vkDestroyDescriptorPool( vkDevice, descriptorPool, pAllocator ); }
455     VkResult  ResetDescriptorPool( VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags ) { return vkResetDescriptorPool( vkDevice, descriptorPool, flags ); }
456     VkResult  AllocateDescriptorSets( const( VkDescriptorSetAllocateInfo )* pAllocateInfo, VkDescriptorSet* pDescriptorSets ) { return vkAllocateDescriptorSets( vkDevice, pAllocateInfo, pDescriptorSets ); }
457     VkResult  FreeDescriptorSets( VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const( VkDescriptorSet )* pDescriptorSets ) { return vkFreeDescriptorSets( vkDevice, descriptorPool, descriptorSetCount, pDescriptorSets ); }
458     void      UpdateDescriptorSets( uint32_t descriptorWriteCount, const( VkWriteDescriptorSet )* pDescriptorWrites, uint32_t descriptorCopyCount, const( VkCopyDescriptorSet )* pDescriptorCopies ) { vkUpdateDescriptorSets( vkDevice, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies ); }
459     VkResult  CreateFramebuffer( const( VkFramebufferCreateInfo )* pCreateInfo, VkFramebuffer* pFramebuffer ) { return vkCreateFramebuffer( vkDevice, pCreateInfo, pAllocator, pFramebuffer ); }
460     void      DestroyFramebuffer( VkFramebuffer framebuffer ) { vkDestroyFramebuffer( vkDevice, framebuffer, pAllocator ); }
461     VkResult  CreateRenderPass( const( VkRenderPassCreateInfo )* pCreateInfo, VkRenderPass* pRenderPass ) { return vkCreateRenderPass( vkDevice, pCreateInfo, pAllocator, pRenderPass ); }
462     void      DestroyRenderPass( VkRenderPass renderPass ) { vkDestroyRenderPass( vkDevice, renderPass, pAllocator ); }
463     void      GetRenderAreaGranularity( VkRenderPass renderPass, VkExtent2D* pGranularity ) { vkGetRenderAreaGranularity( vkDevice, renderPass, pGranularity ); }
464     VkResult  CreateCommandPool( const( VkCommandPoolCreateInfo )* pCreateInfo, VkCommandPool* pCommandPool ) { return vkCreateCommandPool( vkDevice, pCreateInfo, pAllocator, pCommandPool ); }
465     void      DestroyCommandPool( VkCommandPool commandPool ) { vkDestroyCommandPool( vkDevice, commandPool, pAllocator ); }
466     VkResult  ResetCommandPool( VkCommandPool commandPool, VkCommandPoolResetFlags flags ) { return vkResetCommandPool( vkDevice, commandPool, flags ); }
467     VkResult  AllocateCommandBuffers( const( VkCommandBufferAllocateInfo )* pAllocateInfo, VkCommandBuffer* pCommandBuffers ) { return vkAllocateCommandBuffers( vkDevice, pAllocateInfo, pCommandBuffers ); }
468     void      FreeCommandBuffers( VkCommandPool commandPool, uint32_t commandBufferCount, const( VkCommandBuffer )* pCommandBuffers ) { vkFreeCommandBuffers( vkDevice, commandPool, commandBufferCount, pCommandBuffers ); }
469     VkResult  BeginCommandBuffer( const( VkCommandBufferBeginInfo )* pBeginInfo ) { return vkBeginCommandBuffer( commandBuffer, pBeginInfo ); }
470     VkResult  EndCommandBuffer() { return vkEndCommandBuffer( commandBuffer ); }
471     VkResult  ResetCommandBuffer( VkCommandBufferResetFlags flags ) { return vkResetCommandBuffer( commandBuffer, flags ); }
472     void      CmdBindPipeline( VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline ) { vkCmdBindPipeline( commandBuffer, pipelineBindPoint, pipeline ); }
473     void      CmdSetViewport( uint32_t firstViewport, uint32_t viewportCount, const( VkViewport )* pViewports ) { vkCmdSetViewport( commandBuffer, firstViewport, viewportCount, pViewports ); }
474     void      CmdSetScissor( uint32_t firstScissor, uint32_t scissorCount, const( VkRect2D )* pScissors ) { vkCmdSetScissor( commandBuffer, firstScissor, scissorCount, pScissors ); }
475     void      CmdSetLineWidth( float lineWidth ) { vkCmdSetLineWidth( commandBuffer, lineWidth ); }
476     void      CmdSetDepthBias( float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor ) { vkCmdSetDepthBias( commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor ); }
477     void      CmdSetBlendConstants( const float[4] blendConstants ) { vkCmdSetBlendConstants( commandBuffer, blendConstants ); }
478     void      CmdSetDepthBounds( float minDepthBounds, float maxDepthBounds ) { vkCmdSetDepthBounds( commandBuffer, minDepthBounds, maxDepthBounds ); }
479     void      CmdSetStencilCompareMask( VkStencilFaceFlags faceMask, uint32_t compareMask ) { vkCmdSetStencilCompareMask( commandBuffer, faceMask, compareMask ); }
480     void      CmdSetStencilWriteMask( VkStencilFaceFlags faceMask, uint32_t writeMask ) { vkCmdSetStencilWriteMask( commandBuffer, faceMask, writeMask ); }
481     void      CmdSetStencilReference( VkStencilFaceFlags faceMask, uint32_t reference ) { vkCmdSetStencilReference( commandBuffer, faceMask, reference ); }
482     void      CmdBindDescriptorSets( VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const( VkDescriptorSet )* pDescriptorSets, uint32_t dynamicOffsetCount, const( uint32_t )* pDynamicOffsets ) { vkCmdBindDescriptorSets( commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets ); }
483     void      CmdBindIndexBuffer( VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType ) { vkCmdBindIndexBuffer( commandBuffer, buffer, offset, indexType ); }
484     void      CmdBindVertexBuffers( uint32_t firstBinding, uint32_t bindingCount, const( VkBuffer )* pBuffers, const( VkDeviceSize )* pOffsets ) { vkCmdBindVertexBuffers( commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets ); }
485     void      CmdDraw( uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance ) { vkCmdDraw( commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance ); }
486     void      CmdDrawIndexed( uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance ) { vkCmdDrawIndexed( commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance ); }
487     void      CmdDrawIndirect( VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride ) { vkCmdDrawIndirect( commandBuffer, buffer, offset, drawCount, stride ); }
488     void      CmdDrawIndexedIndirect( VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride ) { vkCmdDrawIndexedIndirect( commandBuffer, buffer, offset, drawCount, stride ); }
489     void      CmdDispatch( uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) { vkCmdDispatch( commandBuffer, groupCountX, groupCountY, groupCountZ ); }
490     void      CmdDispatchIndirect( VkBuffer buffer, VkDeviceSize offset ) { vkCmdDispatchIndirect( commandBuffer, buffer, offset ); }
491     void      CmdCopyBuffer( VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const( VkBufferCopy )* pRegions ) { vkCmdCopyBuffer( commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions ); }
492     void      CmdCopyImage( VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const( VkImageCopy )* pRegions ) { vkCmdCopyImage( commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions ); }
493     void      CmdBlitImage( VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const( VkImageBlit )* pRegions, VkFilter filter ) { vkCmdBlitImage( commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter ); }
494     void      CmdCopyBufferToImage( VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const( VkBufferImageCopy )* pRegions ) { vkCmdCopyBufferToImage( commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions ); }
495     void      CmdCopyImageToBuffer( VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const( VkBufferImageCopy )* pRegions ) { vkCmdCopyImageToBuffer( commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions ); }
496     void      CmdUpdateBuffer( VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const( void )* pData ) { vkCmdUpdateBuffer( commandBuffer, dstBuffer, dstOffset, dataSize, pData ); }
497     void      CmdFillBuffer( VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data ) { vkCmdFillBuffer( commandBuffer, dstBuffer, dstOffset, size, data ); }
498     void      CmdClearColorImage( VkImage image, VkImageLayout imageLayout, const( VkClearColorValue )* pColor, uint32_t rangeCount, const( VkImageSubresourceRange )* pRanges ) { vkCmdClearColorImage( commandBuffer, image, imageLayout, pColor, rangeCount, pRanges ); }
499     void      CmdClearDepthStencilImage( VkImage image, VkImageLayout imageLayout, const( VkClearDepthStencilValue )* pDepthStencil, uint32_t rangeCount, const( VkImageSubresourceRange )* pRanges ) { vkCmdClearDepthStencilImage( commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges ); }
500     void      CmdClearAttachments( uint32_t attachmentCount, const( VkClearAttachment )* pAttachments, uint32_t rectCount, const( VkClearRect )* pRects ) { vkCmdClearAttachments( commandBuffer, attachmentCount, pAttachments, rectCount, pRects ); }
501     void      CmdResolveImage( VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const( VkImageResolve )* pRegions ) { vkCmdResolveImage( commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions ); }
502     void      CmdSetEvent( VkEvent event, VkPipelineStageFlags stageMask ) { vkCmdSetEvent( commandBuffer, event, stageMask ); }
503     void      CmdResetEvent( VkEvent event, VkPipelineStageFlags stageMask ) { vkCmdResetEvent( commandBuffer, event, stageMask ); }
504     void      CmdWaitEvents( 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 ) { vkCmdWaitEvents( commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers ); }
505     void      CmdPipelineBarrier( VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const( VkMemoryBarrier )* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const( VkBufferMemoryBarrier )* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const( VkImageMemoryBarrier )* pImageMemoryBarriers ) { vkCmdPipelineBarrier( commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers ); }
506     void      CmdBeginQuery( VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags ) { vkCmdBeginQuery( commandBuffer, queryPool, query, flags ); }
507     void      CmdEndQuery( VkQueryPool queryPool, uint32_t query ) { vkCmdEndQuery( commandBuffer, queryPool, query ); }
508     void      CmdResetQueryPool( VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) { vkCmdResetQueryPool( commandBuffer, queryPool, firstQuery, queryCount ); }
509     void      CmdWriteTimestamp( VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query ) { vkCmdWriteTimestamp( commandBuffer, pipelineStage, queryPool, query ); }
510     void      CmdCopyQueryPoolResults( VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags ) { vkCmdCopyQueryPoolResults( commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags ); }
511     void      CmdPushConstants( VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const( void )* pValues ) { vkCmdPushConstants( commandBuffer, layout, stageFlags, offset, size, pValues ); }
512     void      CmdBeginRenderPass( const( VkRenderPassBeginInfo )* pRenderPassBegin, VkSubpassContents contents ) { vkCmdBeginRenderPass( commandBuffer, pRenderPassBegin, contents ); }
513     void      CmdNextSubpass( VkSubpassContents contents ) { vkCmdNextSubpass( commandBuffer, contents ); }
514     void      CmdEndRenderPass() { vkCmdEndRenderPass( commandBuffer ); }
515     void      CmdExecuteCommands( uint32_t commandBufferCount, const( VkCommandBuffer )* pCommandBuffers ) { vkCmdExecuteCommands( commandBuffer, commandBufferCount, pCommandBuffers ); }
516 
517     // VK_VERSION_1_1
518     VkResult  BindBufferMemory2( uint32_t bindInfoCount, const( VkBindBufferMemoryInfo )* pBindInfos ) { return vkBindBufferMemory2( vkDevice, bindInfoCount, pBindInfos ); }
519     VkResult  BindImageMemory2( uint32_t bindInfoCount, const( VkBindImageMemoryInfo )* pBindInfos ) { return vkBindImageMemory2( vkDevice, bindInfoCount, pBindInfos ); }
520     void      GetDeviceGroupPeerMemoryFeatures( uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures ) { vkGetDeviceGroupPeerMemoryFeatures( vkDevice, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures ); }
521     void      CmdSetDeviceMask( uint32_t deviceMask ) { vkCmdSetDeviceMask( commandBuffer, deviceMask ); }
522     void      CmdDispatchBase( uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ ) { vkCmdDispatchBase( commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ ); }
523     void      GetImageMemoryRequirements2( const( VkImageMemoryRequirementsInfo2 )* pInfo, VkMemoryRequirements2* pMemoryRequirements ) { vkGetImageMemoryRequirements2( vkDevice, pInfo, pMemoryRequirements ); }
524     void      GetBufferMemoryRequirements2( const( VkBufferMemoryRequirementsInfo2 )* pInfo, VkMemoryRequirements2* pMemoryRequirements ) { vkGetBufferMemoryRequirements2( vkDevice, pInfo, pMemoryRequirements ); }
525     void      GetImageSparseMemoryRequirements2( const( VkImageSparseMemoryRequirementsInfo2 )* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements ) { vkGetImageSparseMemoryRequirements2( vkDevice, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements ); }
526     void      TrimCommandPool( VkCommandPool commandPool, VkCommandPoolTrimFlags flags ) { vkTrimCommandPool( vkDevice, commandPool, flags ); }
527     void      GetDeviceQueue2( const( VkDeviceQueueInfo2 )* pQueueInfo, VkQueue* pQueue ) { vkGetDeviceQueue2( vkDevice, pQueueInfo, pQueue ); }
528     VkResult  CreateSamplerYcbcrConversion( const( VkSamplerYcbcrConversionCreateInfo )* pCreateInfo, VkSamplerYcbcrConversion* pYcbcrConversion ) { return vkCreateSamplerYcbcrConversion( vkDevice, pCreateInfo, pAllocator, pYcbcrConversion ); }
529     void      DestroySamplerYcbcrConversion( VkSamplerYcbcrConversion ycbcrConversion ) { vkDestroySamplerYcbcrConversion( vkDevice, ycbcrConversion, pAllocator ); }
530     VkResult  CreateDescriptorUpdateTemplate( const( VkDescriptorUpdateTemplateCreateInfo )* pCreateInfo, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate ) { return vkCreateDescriptorUpdateTemplate( vkDevice, pCreateInfo, pAllocator, pDescriptorUpdateTemplate ); }
531     void      DestroyDescriptorUpdateTemplate( VkDescriptorUpdateTemplate descriptorUpdateTemplate ) { vkDestroyDescriptorUpdateTemplate( vkDevice, descriptorUpdateTemplate, pAllocator ); }
532     void      UpdateDescriptorSetWithTemplate( VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const( void )* pData ) { vkUpdateDescriptorSetWithTemplate( vkDevice, descriptorSet, descriptorUpdateTemplate, pData ); }
533     void      GetDescriptorSetLayoutSupport( const( VkDescriptorSetLayoutCreateInfo )* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport ) { vkGetDescriptorSetLayoutSupport( vkDevice, pCreateInfo, pSupport ); }
534 
535     // VK_KHR_swapchain
536     VkResult  CreateSwapchainKHR( const( VkSwapchainCreateInfoKHR )* pCreateInfo, VkSwapchainKHR* pSwapchain ) { return vkCreateSwapchainKHR( vkDevice, pCreateInfo, pAllocator, pSwapchain ); }
537     void      DestroySwapchainKHR( VkSwapchainKHR swapchain ) { vkDestroySwapchainKHR( vkDevice, swapchain, pAllocator ); }
538     VkResult  GetSwapchainImagesKHR( VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages ) { return vkGetSwapchainImagesKHR( vkDevice, swapchain, pSwapchainImageCount, pSwapchainImages ); }
539     VkResult  AcquireNextImageKHR( VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex ) { return vkAcquireNextImageKHR( vkDevice, swapchain, timeout, semaphore, fence, pImageIndex ); }
540     VkResult  GetDeviceGroupPresentCapabilitiesKHR( VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities ) { return vkGetDeviceGroupPresentCapabilitiesKHR( vkDevice, pDeviceGroupPresentCapabilities ); }
541     VkResult  GetDeviceGroupSurfacePresentModesKHR( VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes ) { return vkGetDeviceGroupSurfacePresentModesKHR( vkDevice, surface, pModes ); }
542     VkResult  AcquireNextImage2KHR( const( VkAcquireNextImageInfoKHR )* pAcquireInfo, uint32_t* pImageIndex ) { return vkAcquireNextImage2KHR( vkDevice, pAcquireInfo, pImageIndex ); }
543 
544     // VK_KHR_display_swapchain
545     VkResult  CreateSharedSwapchainsKHR( uint32_t swapchainCount, const( VkSwapchainCreateInfoKHR )* pCreateInfos, VkSwapchainKHR* pSwapchains ) { return vkCreateSharedSwapchainsKHR( vkDevice, swapchainCount, pCreateInfos, pAllocator, pSwapchains ); }
546 
547     // VK_KHR_external_memory_fd
548     VkResult  GetMemoryFdKHR( const( VkMemoryGetFdInfoKHR )* pGetFdInfo, int* pFd ) { return vkGetMemoryFdKHR( vkDevice, pGetFdInfo, pFd ); }
549     VkResult  GetMemoryFdPropertiesKHR( VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties ) { return vkGetMemoryFdPropertiesKHR( vkDevice, handleType, fd, pMemoryFdProperties ); }
550 
551     // VK_KHR_external_semaphore_fd
552     VkResult  ImportSemaphoreFdKHR( const( VkImportSemaphoreFdInfoKHR )* pImportSemaphoreFdInfo ) { return vkImportSemaphoreFdKHR( vkDevice, pImportSemaphoreFdInfo ); }
553     VkResult  GetSemaphoreFdKHR( const( VkSemaphoreGetFdInfoKHR )* pGetFdInfo, int* pFd ) { return vkGetSemaphoreFdKHR( vkDevice, pGetFdInfo, pFd ); }
554 
555     // VK_KHR_push_descriptor
556     void      CmdPushDescriptorSetKHR( VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const( VkWriteDescriptorSet )* pDescriptorWrites ) { vkCmdPushDescriptorSetKHR( commandBuffer, pipelineBindPoint, layout, set, descriptorWriteCount, pDescriptorWrites ); }
557     void      CmdPushDescriptorSetWithTemplateKHR( VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const( void )* pData ) { vkCmdPushDescriptorSetWithTemplateKHR( commandBuffer, descriptorUpdateTemplate, layout, set, pData ); }
558 
559     // VK_KHR_create_renderpass2
560     VkResult  CreateRenderPass2KHR( const( VkRenderPassCreateInfo2KHR )* pCreateInfo, VkRenderPass* pRenderPass ) { return vkCreateRenderPass2KHR( vkDevice, pCreateInfo, pAllocator, pRenderPass ); }
561     void      CmdBeginRenderPass2KHR( const( VkRenderPassBeginInfo )* pRenderPassBegin, const( VkSubpassBeginInfoKHR )* pSubpassBeginInfo ) { vkCmdBeginRenderPass2KHR( commandBuffer, pRenderPassBegin, pSubpassBeginInfo ); }
562     void      CmdNextSubpass2KHR( const( VkSubpassBeginInfoKHR )* pSubpassBeginInfo, const( VkSubpassEndInfoKHR )* pSubpassEndInfo ) { vkCmdNextSubpass2KHR( commandBuffer, pSubpassBeginInfo, pSubpassEndInfo ); }
563     void      CmdEndRenderPass2KHR( const( VkSubpassEndInfoKHR )* pSubpassEndInfo ) { vkCmdEndRenderPass2KHR( commandBuffer, pSubpassEndInfo ); }
564 
565     // VK_KHR_shared_presentable_image
566     VkResult  GetSwapchainStatusKHR( VkSwapchainKHR swapchain ) { return vkGetSwapchainStatusKHR( vkDevice, swapchain ); }
567 
568     // VK_KHR_external_fence_fd
569     VkResult  ImportFenceFdKHR( const( VkImportFenceFdInfoKHR )* pImportFenceFdInfo ) { return vkImportFenceFdKHR( vkDevice, pImportFenceFdInfo ); }
570     VkResult  GetFenceFdKHR( const( VkFenceGetFdInfoKHR )* pGetFdInfo, int* pFd ) { return vkGetFenceFdKHR( vkDevice, pGetFdInfo, pFd ); }
571 
572     // VK_KHR_draw_indirect_count
573     void      CmdDrawIndirectCountKHR( VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) { vkCmdDrawIndirectCountKHR( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); }
574     void      CmdDrawIndexedIndirectCountKHR( VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) { vkCmdDrawIndexedIndirectCountKHR( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); }
575 
576     // VK_EXT_debug_marker
577     VkResult  DebugMarkerSetObjectTagEXT( const( VkDebugMarkerObjectTagInfoEXT )* pTagInfo ) { return vkDebugMarkerSetObjectTagEXT( vkDevice, pTagInfo ); }
578     VkResult  DebugMarkerSetObjectNameEXT( const( VkDebugMarkerObjectNameInfoEXT )* pNameInfo ) { return vkDebugMarkerSetObjectNameEXT( vkDevice, pNameInfo ); }
579     void      CmdDebugMarkerBeginEXT( const( VkDebugMarkerMarkerInfoEXT )* pMarkerInfo ) { vkCmdDebugMarkerBeginEXT( commandBuffer, pMarkerInfo ); }
580     void      CmdDebugMarkerEndEXT() { vkCmdDebugMarkerEndEXT( commandBuffer ); }
581     void      CmdDebugMarkerInsertEXT( const( VkDebugMarkerMarkerInfoEXT )* pMarkerInfo ) { vkCmdDebugMarkerInsertEXT( commandBuffer, pMarkerInfo ); }
582 
583     // VK_EXT_transform_feedback
584     void      CmdBindTransformFeedbackBuffersEXT( uint32_t firstBinding, uint32_t bindingCount, const( VkBuffer )* pBuffers, const( VkDeviceSize )* pOffsets, const( VkDeviceSize )* pSizes ) { vkCmdBindTransformFeedbackBuffersEXT( commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes ); }
585     void      CmdBeginTransformFeedbackEXT( uint32_t firstCounterBuffer, uint32_t counterBufferCount, const( VkBuffer )* pCounterBuffers, const( VkDeviceSize )* pCounterBufferOffsets ) { vkCmdBeginTransformFeedbackEXT( commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets ); }
586     void      CmdEndTransformFeedbackEXT( uint32_t firstCounterBuffer, uint32_t counterBufferCount, const( VkBuffer )* pCounterBuffers, const( VkDeviceSize )* pCounterBufferOffsets ) { vkCmdEndTransformFeedbackEXT( commandBuffer, firstCounterBuffer, counterBufferCount, pCounterBuffers, pCounterBufferOffsets ); }
587     void      CmdBeginQueryIndexedEXT( VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index ) { vkCmdBeginQueryIndexedEXT( commandBuffer, queryPool, query, flags, index ); }
588     void      CmdEndQueryIndexedEXT( VkQueryPool queryPool, uint32_t query, uint32_t index ) { vkCmdEndQueryIndexedEXT( commandBuffer, queryPool, query, index ); }
589     void      CmdDrawIndirectByteCountEXT( uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride ) { vkCmdDrawIndirectByteCountEXT( commandBuffer, instanceCount, firstInstance, counterBuffer, counterBufferOffset, counterOffset, vertexStride ); }
590 
591     // VK_NVX_image_view_handle
592     uint32_t  GetImageViewHandleNVX( const( VkImageViewHandleInfoNVX )* pInfo ) { return vkGetImageViewHandleNVX( vkDevice, pInfo ); }
593 
594     // VK_AMD_shader_info
595     VkResult  GetShaderInfoAMD( VkPipeline pipeline, VkShaderStageFlagBits shaderStage, VkShaderInfoTypeAMD infoType, size_t* pInfoSize, void* pInfo ) { return vkGetShaderInfoAMD( vkDevice, pipeline, shaderStage, infoType, pInfoSize, pInfo ); }
596 
597     // VK_EXT_conditional_rendering
598     void      CmdBeginConditionalRenderingEXT( const( VkConditionalRenderingBeginInfoEXT )* pConditionalRenderingBegin ) { vkCmdBeginConditionalRenderingEXT( commandBuffer, pConditionalRenderingBegin ); }
599     void      CmdEndConditionalRenderingEXT() { vkCmdEndConditionalRenderingEXT( commandBuffer ); }
600 
601     // VK_NVX_device_generated_commands
602     void      CmdProcessCommandsNVX( const( VkCmdProcessCommandsInfoNVX )* pProcessCommandsInfo ) { vkCmdProcessCommandsNVX( commandBuffer, pProcessCommandsInfo ); }
603     void      CmdReserveSpaceForCommandsNVX( const( VkCmdReserveSpaceForCommandsInfoNVX )* pReserveSpaceInfo ) { vkCmdReserveSpaceForCommandsNVX( commandBuffer, pReserveSpaceInfo ); }
604     VkResult  CreateIndirectCommandsLayoutNVX( const( VkIndirectCommandsLayoutCreateInfoNVX )* pCreateInfo, VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout ) { return vkCreateIndirectCommandsLayoutNVX( vkDevice, pCreateInfo, pAllocator, pIndirectCommandsLayout ); }
605     void      DestroyIndirectCommandsLayoutNVX( VkIndirectCommandsLayoutNVX indirectCommandsLayout ) { vkDestroyIndirectCommandsLayoutNVX( vkDevice, indirectCommandsLayout, pAllocator ); }
606     VkResult  CreateObjectTableNVX( const( VkObjectTableCreateInfoNVX )* pCreateInfo, VkObjectTableNVX* pObjectTable ) { return vkCreateObjectTableNVX( vkDevice, pCreateInfo, pAllocator, pObjectTable ); }
607     void      DestroyObjectTableNVX( VkObjectTableNVX objectTable ) { vkDestroyObjectTableNVX( vkDevice, objectTable, pAllocator ); }
608     VkResult  RegisterObjectsNVX( VkObjectTableNVX objectTable, uint32_t objectCount, const( VkObjectTableEntryNVX* )* ppObjectTableEntries, const( uint32_t )* pObjectIndices ) { return vkRegisterObjectsNVX( vkDevice, objectTable, objectCount, ppObjectTableEntries, pObjectIndices ); }
609     VkResult  UnregisterObjectsNVX( VkObjectTableNVX objectTable, uint32_t objectCount, const( VkObjectEntryTypeNVX )* pObjectEntryTypes, const( uint32_t )* pObjectIndices ) { return vkUnregisterObjectsNVX( vkDevice, objectTable, objectCount, pObjectEntryTypes, pObjectIndices ); }
610 
611     // VK_NV_clip_space_w_scaling
612     void      CmdSetViewportWScalingNV( uint32_t firstViewport, uint32_t viewportCount, const( VkViewportWScalingNV )* pViewportWScalings ) { vkCmdSetViewportWScalingNV( commandBuffer, firstViewport, viewportCount, pViewportWScalings ); }
613 
614     // VK_EXT_display_control
615     VkResult  DisplayPowerControlEXT( VkDisplayKHR display, const( VkDisplayPowerInfoEXT )* pDisplayPowerInfo ) { return vkDisplayPowerControlEXT( vkDevice, display, pDisplayPowerInfo ); }
616     VkResult  RegisterDeviceEventEXT( const( VkDeviceEventInfoEXT )* pDeviceEventInfo, VkFence* pFence ) { return vkRegisterDeviceEventEXT( vkDevice, pDeviceEventInfo, pAllocator, pFence ); }
617     VkResult  RegisterDisplayEventEXT( VkDisplayKHR display, const( VkDisplayEventInfoEXT )* pDisplayEventInfo, VkFence* pFence ) { return vkRegisterDisplayEventEXT( vkDevice, display, pDisplayEventInfo, pAllocator, pFence ); }
618     VkResult  GetSwapchainCounterEXT( VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue ) { return vkGetSwapchainCounterEXT( vkDevice, swapchain, counter, pCounterValue ); }
619 
620     // VK_GOOGLE_display_timing
621     VkResult  GetRefreshCycleDurationGOOGLE( VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties ) { return vkGetRefreshCycleDurationGOOGLE( vkDevice, swapchain, pDisplayTimingProperties ); }
622     VkResult  GetPastPresentationTimingGOOGLE( VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings ) { return vkGetPastPresentationTimingGOOGLE( vkDevice, swapchain, pPresentationTimingCount, pPresentationTimings ); }
623 
624     // VK_EXT_discard_rectangles
625     void      CmdSetDiscardRectangleEXT( uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const( VkRect2D )* pDiscardRectangles ) { vkCmdSetDiscardRectangleEXT( commandBuffer, firstDiscardRectangle, discardRectangleCount, pDiscardRectangles ); }
626 
627     // VK_EXT_hdr_metadata
628     void      SetHdrMetadataEXT( uint32_t swapchainCount, const( VkSwapchainKHR )* pSwapchains, const( VkHdrMetadataEXT )* pMetadata ) { vkSetHdrMetadataEXT( vkDevice, swapchainCount, pSwapchains, pMetadata ); }
629 
630     // VK_EXT_debug_utils
631     VkResult  SetDebugUtilsObjectNameEXT( const( VkDebugUtilsObjectNameInfoEXT )* pNameInfo ) { return vkSetDebugUtilsObjectNameEXT( vkDevice, pNameInfo ); }
632     VkResult  SetDebugUtilsObjectTagEXT( const( VkDebugUtilsObjectTagInfoEXT )* pTagInfo ) { return vkSetDebugUtilsObjectTagEXT( vkDevice, pTagInfo ); }
633     void      CmdBeginDebugUtilsLabelEXT( const( VkDebugUtilsLabelEXT )* pLabelInfo ) { vkCmdBeginDebugUtilsLabelEXT( commandBuffer, pLabelInfo ); }
634     void      CmdEndDebugUtilsLabelEXT() { vkCmdEndDebugUtilsLabelEXT( commandBuffer ); }
635     void      CmdInsertDebugUtilsLabelEXT( const( VkDebugUtilsLabelEXT )* pLabelInfo ) { vkCmdInsertDebugUtilsLabelEXT( commandBuffer, pLabelInfo ); }
636 
637     // VK_EXT_sample_locations
638     void      CmdSetSampleLocationsEXT( const( VkSampleLocationsInfoEXT )* pSampleLocationsInfo ) { vkCmdSetSampleLocationsEXT( commandBuffer, pSampleLocationsInfo ); }
639 
640     // VK_EXT_image_drm_format_modifier
641     VkResult  GetImageDrmFormatModifierPropertiesEXT( VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties ) { return vkGetImageDrmFormatModifierPropertiesEXT( vkDevice, image, pProperties ); }
642 
643     // VK_EXT_validation_cache
644     VkResult  CreateValidationCacheEXT( const( VkValidationCacheCreateInfoEXT )* pCreateInfo, VkValidationCacheEXT* pValidationCache ) { return vkCreateValidationCacheEXT( vkDevice, pCreateInfo, pAllocator, pValidationCache ); }
645     void      DestroyValidationCacheEXT( VkValidationCacheEXT validationCache ) { vkDestroyValidationCacheEXT( vkDevice, validationCache, pAllocator ); }
646     VkResult  MergeValidationCachesEXT( VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const( VkValidationCacheEXT )* pSrcCaches ) { return vkMergeValidationCachesEXT( vkDevice, dstCache, srcCacheCount, pSrcCaches ); }
647     VkResult  GetValidationCacheDataEXT( VkValidationCacheEXT validationCache, size_t* pDataSize, void* pData ) { return vkGetValidationCacheDataEXT( vkDevice, validationCache, pDataSize, pData ); }
648 
649     // VK_NV_shading_rate_image
650     void      CmdBindShadingRateImageNV( VkImageView imageView, VkImageLayout imageLayout ) { vkCmdBindShadingRateImageNV( commandBuffer, imageView, imageLayout ); }
651     void      CmdSetViewportShadingRatePaletteNV( uint32_t firstViewport, uint32_t viewportCount, const( VkShadingRatePaletteNV )* pShadingRatePalettes ) { vkCmdSetViewportShadingRatePaletteNV( commandBuffer, firstViewport, viewportCount, pShadingRatePalettes ); }
652     void      CmdSetCoarseSampleOrderNV( VkCoarseSampleOrderTypeNV sampleOrderType, uint32_t customSampleOrderCount, const( VkCoarseSampleOrderCustomNV )* pCustomSampleOrders ) { vkCmdSetCoarseSampleOrderNV( commandBuffer, sampleOrderType, customSampleOrderCount, pCustomSampleOrders ); }
653 
654     // VK_NV_ray_tracing
655     VkResult  CreateAccelerationStructureNV( const( VkAccelerationStructureCreateInfoNV )* pCreateInfo, VkAccelerationStructureNV* pAccelerationStructure ) { return vkCreateAccelerationStructureNV( vkDevice, pCreateInfo, pAllocator, pAccelerationStructure ); }
656     void      DestroyAccelerationStructureNV( VkAccelerationStructureNV accelerationStructure ) { vkDestroyAccelerationStructureNV( vkDevice, accelerationStructure, pAllocator ); }
657     void      GetAccelerationStructureMemoryRequirementsNV( const( VkAccelerationStructureMemoryRequirementsInfoNV )* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements ) { vkGetAccelerationStructureMemoryRequirementsNV( vkDevice, pInfo, pMemoryRequirements ); }
658     VkResult  BindAccelerationStructureMemoryNV( uint32_t bindInfoCount, const( VkBindAccelerationStructureMemoryInfoNV )* pBindInfos ) { return vkBindAccelerationStructureMemoryNV( vkDevice, bindInfoCount, pBindInfos ); }
659     void      CmdBuildAccelerationStructureNV( const( VkAccelerationStructureInfoNV )* pInfo, VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkBuffer scratch, VkDeviceSize scratchOffset ) { vkCmdBuildAccelerationStructureNV( commandBuffer, pInfo, instanceData, instanceOffset, update, dst, src, scratch, scratchOffset ); }
660     void      CmdCopyAccelerationStructureNV( VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkCopyAccelerationStructureModeNV mode ) { vkCmdCopyAccelerationStructureNV( commandBuffer, dst, src, mode ); }
661     void      CmdTraceRaysNV( 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 ) { vkCmdTraceRaysNV( commandBuffer, raygenShaderBindingTableBuffer, raygenShaderBindingOffset, missShaderBindingTableBuffer, missShaderBindingOffset, missShaderBindingStride, hitShaderBindingTableBuffer, hitShaderBindingOffset, hitShaderBindingStride, callableShaderBindingTableBuffer, callableShaderBindingOffset, callableShaderBindingStride, width, height, depth ); }
662     VkResult  CreateRayTracingPipelinesNV( VkPipelineCache pipelineCache, uint32_t createInfoCount, const( VkRayTracingPipelineCreateInfoNV )* pCreateInfos, VkPipeline* pPipelines ) { return vkCreateRayTracingPipelinesNV( vkDevice, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); }
663     VkResult  GetRayTracingShaderGroupHandlesNV( VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData ) { return vkGetRayTracingShaderGroupHandlesNV( vkDevice, pipeline, firstGroup, groupCount, dataSize, pData ); }
664     VkResult  GetAccelerationStructureHandleNV( VkAccelerationStructureNV accelerationStructure, size_t dataSize, void* pData ) { return vkGetAccelerationStructureHandleNV( vkDevice, accelerationStructure, dataSize, pData ); }
665     void      CmdWriteAccelerationStructuresPropertiesNV( uint32_t accelerationStructureCount, const( VkAccelerationStructureNV )* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery ) { vkCmdWriteAccelerationStructuresPropertiesNV( commandBuffer, accelerationStructureCount, pAccelerationStructures, queryType, queryPool, firstQuery ); }
666     VkResult  CompileDeferredNV( VkPipeline pipeline, uint32_t shader ) { return vkCompileDeferredNV( vkDevice, pipeline, shader ); }
667 
668     // VK_EXT_external_memory_host
669     VkResult  GetMemoryHostPointerPropertiesEXT( VkExternalMemoryHandleTypeFlagBits handleType, const( void )* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties ) { return vkGetMemoryHostPointerPropertiesEXT( vkDevice, handleType, pHostPointer, pMemoryHostPointerProperties ); }
670 
671     // VK_AMD_buffer_marker
672     void      CmdWriteBufferMarkerAMD( VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker ) { vkCmdWriteBufferMarkerAMD( commandBuffer, pipelineStage, dstBuffer, dstOffset, marker ); }
673 
674     // VK_EXT_calibrated_timestamps
675     VkResult  GetCalibratedTimestampsEXT( uint32_t timestampCount, const( VkCalibratedTimestampInfoEXT )* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation ) { return vkGetCalibratedTimestampsEXT( vkDevice, timestampCount, pTimestampInfos, pTimestamps, pMaxDeviation ); }
676 
677     // VK_NV_mesh_shader
678     void      CmdDrawMeshTasksNV( uint32_t taskCount, uint32_t firstTask ) { vkCmdDrawMeshTasksNV( commandBuffer, taskCount, firstTask ); }
679     void      CmdDrawMeshTasksIndirectNV( VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride ) { vkCmdDrawMeshTasksIndirectNV( commandBuffer, buffer, offset, drawCount, stride ); }
680     void      CmdDrawMeshTasksIndirectCountNV( VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride ) { vkCmdDrawMeshTasksIndirectCountNV( commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride ); }
681 
682     // VK_NV_scissor_exclusive
683     void      CmdSetExclusiveScissorNV( uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const( VkRect2D )* pExclusiveScissors ) { vkCmdSetExclusiveScissorNV( commandBuffer, firstExclusiveScissor, exclusiveScissorCount, pExclusiveScissors ); }
684 
685     // VK_NV_device_diagnostic_checkpoints
686     void      CmdSetCheckpointNV( const( void )* pCheckpointMarker ) { vkCmdSetCheckpointNV( commandBuffer, pCheckpointMarker ); }
687 
688     // VK_INTEL_performance_query
689     VkResult  InitializePerformanceApiINTEL( const( VkInitializePerformanceApiInfoINTEL )* pInitializeInfo ) { return vkInitializePerformanceApiINTEL( vkDevice, pInitializeInfo ); }
690     void      UninitializePerformanceApiINTEL() { vkUninitializePerformanceApiINTEL( vkDevice ); }
691     VkResult  CmdSetPerformanceMarkerINTEL( const( VkPerformanceMarkerInfoINTEL )* pMarkerInfo ) { return vkCmdSetPerformanceMarkerINTEL( commandBuffer, pMarkerInfo ); }
692     VkResult  CmdSetPerformanceStreamMarkerINTEL( const( VkPerformanceStreamMarkerInfoINTEL )* pMarkerInfo ) { return vkCmdSetPerformanceStreamMarkerINTEL( commandBuffer, pMarkerInfo ); }
693     VkResult  CmdSetPerformanceOverrideINTEL( const( VkPerformanceOverrideInfoINTEL )* pOverrideInfo ) { return vkCmdSetPerformanceOverrideINTEL( commandBuffer, pOverrideInfo ); }
694     VkResult  AcquirePerformanceConfigurationINTEL( const( VkPerformanceConfigurationAcquireInfoINTEL )* pAcquireInfo, VkPerformanceConfigurationINTEL* pConfiguration ) { return vkAcquirePerformanceConfigurationINTEL( vkDevice, pAcquireInfo, pConfiguration ); }
695     VkResult  ReleasePerformanceConfigurationINTEL( VkPerformanceConfigurationINTEL configuration ) { return vkReleasePerformanceConfigurationINTEL( vkDevice, configuration ); }
696     VkResult  GetPerformanceParameterINTEL( VkPerformanceParameterTypeINTEL parameter, VkPerformanceValueINTEL* pValue ) { return vkGetPerformanceParameterINTEL( vkDevice, parameter, pValue ); }
697 
698     // VK_AMD_display_native_hdr
699     void      SetLocalDimmingAMD( VkSwapchainKHR swapChain, VkBool32 localDimmingEnable ) { vkSetLocalDimmingAMD( vkDevice, swapChain, localDimmingEnable ); }
700 
701     // VK_EXT_buffer_device_address
702     VkDeviceAddress  GetBufferDeviceAddressEXT( const( VkBufferDeviceAddressInfoEXT )* pInfo ) { return vkGetBufferDeviceAddressEXT( vkDevice, pInfo ); }
703 
704     // VK_EXT_host_query_reset
705     void      ResetQueryPoolEXT( VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount ) { vkResetQueryPoolEXT( vkDevice, queryPool, firstQuery, queryCount ); }
706 
707     // VK_KHR_device_group
708     alias GetDeviceGroupPeerMemoryFeaturesKHR                = GetDeviceGroupPeerMemoryFeatures;
709     alias CmdSetDeviceMaskKHR                                = CmdSetDeviceMask;
710     alias CmdDispatchBaseKHR                                 = CmdDispatchBase;
711 
712     // VK_KHR_maintenance1
713     alias TrimCommandPoolKHR                                 = TrimCommandPool;
714 
715     // VK_KHR_descriptor_update_template
716     alias CreateDescriptorUpdateTemplateKHR                  = CreateDescriptorUpdateTemplate;
717     alias DestroyDescriptorUpdateTemplateKHR                 = DestroyDescriptorUpdateTemplate;
718     alias UpdateDescriptorSetWithTemplateKHR                 = UpdateDescriptorSetWithTemplate;
719 
720     // VK_KHR_get_memory_requirements2
721     alias GetImageMemoryRequirements2KHR                     = GetImageMemoryRequirements2;
722     alias GetBufferMemoryRequirements2KHR                    = GetBufferMemoryRequirements2;
723     alias GetImageSparseMemoryRequirements2KHR               = GetImageSparseMemoryRequirements2;
724 
725     // VK_KHR_sampler_ycbcr_conversion
726     alias CreateSamplerYcbcrConversionKHR                    = CreateSamplerYcbcrConversion;
727     alias DestroySamplerYcbcrConversionKHR                   = DestroySamplerYcbcrConversion;
728 
729     // VK_KHR_bind_memory2
730     alias BindBufferMemory2KHR                               = BindBufferMemory2;
731     alias BindImageMemory2KHR                                = BindImageMemory2;
732 
733     // VK_KHR_maintenance3
734     alias GetDescriptorSetLayoutSupportKHR                   = GetDescriptorSetLayoutSupport;
735 
736     // VK_AMD_draw_indirect_count
737     alias CmdDrawIndirectCountAMD                            = CmdDrawIndirectCountKHR;
738     alias CmdDrawIndexedIndirectCountAMD                     = CmdDrawIndexedIndirectCountKHR;
739 
740 
741     /// member function pointer decelerations
742 
743     // VK_VERSION_1_0
744     PFN_vkDestroyDevice                                vkDestroyDevice;
745     PFN_vkGetDeviceQueue                               vkGetDeviceQueue;
746     PFN_vkQueueSubmit                                  vkQueueSubmit;
747     PFN_vkQueueWaitIdle                                vkQueueWaitIdle;
748     PFN_vkDeviceWaitIdle                               vkDeviceWaitIdle;
749     PFN_vkAllocateMemory                               vkAllocateMemory;
750     PFN_vkFreeMemory                                   vkFreeMemory;
751     PFN_vkMapMemory                                    vkMapMemory;
752     PFN_vkUnmapMemory                                  vkUnmapMemory;
753     PFN_vkFlushMappedMemoryRanges                      vkFlushMappedMemoryRanges;
754     PFN_vkInvalidateMappedMemoryRanges                 vkInvalidateMappedMemoryRanges;
755     PFN_vkGetDeviceMemoryCommitment                    vkGetDeviceMemoryCommitment;
756     PFN_vkBindBufferMemory                             vkBindBufferMemory;
757     PFN_vkBindImageMemory                              vkBindImageMemory;
758     PFN_vkGetBufferMemoryRequirements                  vkGetBufferMemoryRequirements;
759     PFN_vkGetImageMemoryRequirements                   vkGetImageMemoryRequirements;
760     PFN_vkGetImageSparseMemoryRequirements             vkGetImageSparseMemoryRequirements;
761     PFN_vkQueueBindSparse                              vkQueueBindSparse;
762     PFN_vkCreateFence                                  vkCreateFence;
763     PFN_vkDestroyFence                                 vkDestroyFence;
764     PFN_vkResetFences                                  vkResetFences;
765     PFN_vkGetFenceStatus                               vkGetFenceStatus;
766     PFN_vkWaitForFences                                vkWaitForFences;
767     PFN_vkCreateSemaphore                              vkCreateSemaphore;
768     PFN_vkDestroySemaphore                             vkDestroySemaphore;
769     PFN_vkCreateEvent                                  vkCreateEvent;
770     PFN_vkDestroyEvent                                 vkDestroyEvent;
771     PFN_vkGetEventStatus                               vkGetEventStatus;
772     PFN_vkSetEvent                                     vkSetEvent;
773     PFN_vkResetEvent                                   vkResetEvent;
774     PFN_vkCreateQueryPool                              vkCreateQueryPool;
775     PFN_vkDestroyQueryPool                             vkDestroyQueryPool;
776     PFN_vkGetQueryPoolResults                          vkGetQueryPoolResults;
777     PFN_vkCreateBuffer                                 vkCreateBuffer;
778     PFN_vkDestroyBuffer                                vkDestroyBuffer;
779     PFN_vkCreateBufferView                             vkCreateBufferView;
780     PFN_vkDestroyBufferView                            vkDestroyBufferView;
781     PFN_vkCreateImage                                  vkCreateImage;
782     PFN_vkDestroyImage                                 vkDestroyImage;
783     PFN_vkGetImageSubresourceLayout                    vkGetImageSubresourceLayout;
784     PFN_vkCreateImageView                              vkCreateImageView;
785     PFN_vkDestroyImageView                             vkDestroyImageView;
786     PFN_vkCreateShaderModule                           vkCreateShaderModule;
787     PFN_vkDestroyShaderModule                          vkDestroyShaderModule;
788     PFN_vkCreatePipelineCache                          vkCreatePipelineCache;
789     PFN_vkDestroyPipelineCache                         vkDestroyPipelineCache;
790     PFN_vkGetPipelineCacheData                         vkGetPipelineCacheData;
791     PFN_vkMergePipelineCaches                          vkMergePipelineCaches;
792     PFN_vkCreateGraphicsPipelines                      vkCreateGraphicsPipelines;
793     PFN_vkCreateComputePipelines                       vkCreateComputePipelines;
794     PFN_vkDestroyPipeline                              vkDestroyPipeline;
795     PFN_vkCreatePipelineLayout                         vkCreatePipelineLayout;
796     PFN_vkDestroyPipelineLayout                        vkDestroyPipelineLayout;
797     PFN_vkCreateSampler                                vkCreateSampler;
798     PFN_vkDestroySampler                               vkDestroySampler;
799     PFN_vkCreateDescriptorSetLayout                    vkCreateDescriptorSetLayout;
800     PFN_vkDestroyDescriptorSetLayout                   vkDestroyDescriptorSetLayout;
801     PFN_vkCreateDescriptorPool                         vkCreateDescriptorPool;
802     PFN_vkDestroyDescriptorPool                        vkDestroyDescriptorPool;
803     PFN_vkResetDescriptorPool                          vkResetDescriptorPool;
804     PFN_vkAllocateDescriptorSets                       vkAllocateDescriptorSets;
805     PFN_vkFreeDescriptorSets                           vkFreeDescriptorSets;
806     PFN_vkUpdateDescriptorSets                         vkUpdateDescriptorSets;
807     PFN_vkCreateFramebuffer                            vkCreateFramebuffer;
808     PFN_vkDestroyFramebuffer                           vkDestroyFramebuffer;
809     PFN_vkCreateRenderPass                             vkCreateRenderPass;
810     PFN_vkDestroyRenderPass                            vkDestroyRenderPass;
811     PFN_vkGetRenderAreaGranularity                     vkGetRenderAreaGranularity;
812     PFN_vkCreateCommandPool                            vkCreateCommandPool;
813     PFN_vkDestroyCommandPool                           vkDestroyCommandPool;
814     PFN_vkResetCommandPool                             vkResetCommandPool;
815     PFN_vkAllocateCommandBuffers                       vkAllocateCommandBuffers;
816     PFN_vkFreeCommandBuffers                           vkFreeCommandBuffers;
817     PFN_vkBeginCommandBuffer                           vkBeginCommandBuffer;
818     PFN_vkEndCommandBuffer                             vkEndCommandBuffer;
819     PFN_vkResetCommandBuffer                           vkResetCommandBuffer;
820     PFN_vkCmdBindPipeline                              vkCmdBindPipeline;
821     PFN_vkCmdSetViewport                               vkCmdSetViewport;
822     PFN_vkCmdSetScissor                                vkCmdSetScissor;
823     PFN_vkCmdSetLineWidth                              vkCmdSetLineWidth;
824     PFN_vkCmdSetDepthBias                              vkCmdSetDepthBias;
825     PFN_vkCmdSetBlendConstants                         vkCmdSetBlendConstants;
826     PFN_vkCmdSetDepthBounds                            vkCmdSetDepthBounds;
827     PFN_vkCmdSetStencilCompareMask                     vkCmdSetStencilCompareMask;
828     PFN_vkCmdSetStencilWriteMask                       vkCmdSetStencilWriteMask;
829     PFN_vkCmdSetStencilReference                       vkCmdSetStencilReference;
830     PFN_vkCmdBindDescriptorSets                        vkCmdBindDescriptorSets;
831     PFN_vkCmdBindIndexBuffer                           vkCmdBindIndexBuffer;
832     PFN_vkCmdBindVertexBuffers                         vkCmdBindVertexBuffers;
833     PFN_vkCmdDraw                                      vkCmdDraw;
834     PFN_vkCmdDrawIndexed                               vkCmdDrawIndexed;
835     PFN_vkCmdDrawIndirect                              vkCmdDrawIndirect;
836     PFN_vkCmdDrawIndexedIndirect                       vkCmdDrawIndexedIndirect;
837     PFN_vkCmdDispatch                                  vkCmdDispatch;
838     PFN_vkCmdDispatchIndirect                          vkCmdDispatchIndirect;
839     PFN_vkCmdCopyBuffer                                vkCmdCopyBuffer;
840     PFN_vkCmdCopyImage                                 vkCmdCopyImage;
841     PFN_vkCmdBlitImage                                 vkCmdBlitImage;
842     PFN_vkCmdCopyBufferToImage                         vkCmdCopyBufferToImage;
843     PFN_vkCmdCopyImageToBuffer                         vkCmdCopyImageToBuffer;
844     PFN_vkCmdUpdateBuffer                              vkCmdUpdateBuffer;
845     PFN_vkCmdFillBuffer                                vkCmdFillBuffer;
846     PFN_vkCmdClearColorImage                           vkCmdClearColorImage;
847     PFN_vkCmdClearDepthStencilImage                    vkCmdClearDepthStencilImage;
848     PFN_vkCmdClearAttachments                          vkCmdClearAttachments;
849     PFN_vkCmdResolveImage                              vkCmdResolveImage;
850     PFN_vkCmdSetEvent                                  vkCmdSetEvent;
851     PFN_vkCmdResetEvent                                vkCmdResetEvent;
852     PFN_vkCmdWaitEvents                                vkCmdWaitEvents;
853     PFN_vkCmdPipelineBarrier                           vkCmdPipelineBarrier;
854     PFN_vkCmdBeginQuery                                vkCmdBeginQuery;
855     PFN_vkCmdEndQuery                                  vkCmdEndQuery;
856     PFN_vkCmdResetQueryPool                            vkCmdResetQueryPool;
857     PFN_vkCmdWriteTimestamp                            vkCmdWriteTimestamp;
858     PFN_vkCmdCopyQueryPoolResults                      vkCmdCopyQueryPoolResults;
859     PFN_vkCmdPushConstants                             vkCmdPushConstants;
860     PFN_vkCmdBeginRenderPass                           vkCmdBeginRenderPass;
861     PFN_vkCmdNextSubpass                               vkCmdNextSubpass;
862     PFN_vkCmdEndRenderPass                             vkCmdEndRenderPass;
863     PFN_vkCmdExecuteCommands                           vkCmdExecuteCommands;
864 
865     // VK_VERSION_1_1
866     PFN_vkBindBufferMemory2                            vkBindBufferMemory2;
867     PFN_vkBindImageMemory2                             vkBindImageMemory2;
868     PFN_vkGetDeviceGroupPeerMemoryFeatures             vkGetDeviceGroupPeerMemoryFeatures;
869     PFN_vkCmdSetDeviceMask                             vkCmdSetDeviceMask;
870     PFN_vkCmdDispatchBase                              vkCmdDispatchBase;
871     PFN_vkGetImageMemoryRequirements2                  vkGetImageMemoryRequirements2;
872     PFN_vkGetBufferMemoryRequirements2                 vkGetBufferMemoryRequirements2;
873     PFN_vkGetImageSparseMemoryRequirements2            vkGetImageSparseMemoryRequirements2;
874     PFN_vkTrimCommandPool                              vkTrimCommandPool;
875     PFN_vkGetDeviceQueue2                              vkGetDeviceQueue2;
876     PFN_vkCreateSamplerYcbcrConversion                 vkCreateSamplerYcbcrConversion;
877     PFN_vkDestroySamplerYcbcrConversion                vkDestroySamplerYcbcrConversion;
878     PFN_vkCreateDescriptorUpdateTemplate               vkCreateDescriptorUpdateTemplate;
879     PFN_vkDestroyDescriptorUpdateTemplate              vkDestroyDescriptorUpdateTemplate;
880     PFN_vkUpdateDescriptorSetWithTemplate              vkUpdateDescriptorSetWithTemplate;
881     PFN_vkGetDescriptorSetLayoutSupport                vkGetDescriptorSetLayoutSupport;
882 
883     // VK_KHR_swapchain
884     PFN_vkCreateSwapchainKHR                           vkCreateSwapchainKHR;
885     PFN_vkDestroySwapchainKHR                          vkDestroySwapchainKHR;
886     PFN_vkGetSwapchainImagesKHR                        vkGetSwapchainImagesKHR;
887     PFN_vkAcquireNextImageKHR                          vkAcquireNextImageKHR;
888     PFN_vkQueuePresentKHR                              vkQueuePresentKHR;
889     PFN_vkGetDeviceGroupPresentCapabilitiesKHR         vkGetDeviceGroupPresentCapabilitiesKHR;
890     PFN_vkGetDeviceGroupSurfacePresentModesKHR         vkGetDeviceGroupSurfacePresentModesKHR;
891     PFN_vkAcquireNextImage2KHR                         vkAcquireNextImage2KHR;
892 
893     // VK_KHR_display_swapchain
894     PFN_vkCreateSharedSwapchainsKHR                    vkCreateSharedSwapchainsKHR;
895 
896     // VK_KHR_external_memory_fd
897     PFN_vkGetMemoryFdKHR                               vkGetMemoryFdKHR;
898     PFN_vkGetMemoryFdPropertiesKHR                     vkGetMemoryFdPropertiesKHR;
899 
900     // VK_KHR_external_semaphore_fd
901     PFN_vkImportSemaphoreFdKHR                         vkImportSemaphoreFdKHR;
902     PFN_vkGetSemaphoreFdKHR                            vkGetSemaphoreFdKHR;
903 
904     // VK_KHR_push_descriptor
905     PFN_vkCmdPushDescriptorSetKHR                      vkCmdPushDescriptorSetKHR;
906     PFN_vkCmdPushDescriptorSetWithTemplateKHR          vkCmdPushDescriptorSetWithTemplateKHR;
907 
908     // VK_KHR_create_renderpass2
909     PFN_vkCreateRenderPass2KHR                         vkCreateRenderPass2KHR;
910     PFN_vkCmdBeginRenderPass2KHR                       vkCmdBeginRenderPass2KHR;
911     PFN_vkCmdNextSubpass2KHR                           vkCmdNextSubpass2KHR;
912     PFN_vkCmdEndRenderPass2KHR                         vkCmdEndRenderPass2KHR;
913 
914     // VK_KHR_shared_presentable_image
915     PFN_vkGetSwapchainStatusKHR                        vkGetSwapchainStatusKHR;
916 
917     // VK_KHR_external_fence_fd
918     PFN_vkImportFenceFdKHR                             vkImportFenceFdKHR;
919     PFN_vkGetFenceFdKHR                                vkGetFenceFdKHR;
920 
921     // VK_KHR_draw_indirect_count
922     PFN_vkCmdDrawIndirectCountKHR                      vkCmdDrawIndirectCountKHR;
923     PFN_vkCmdDrawIndexedIndirectCountKHR               vkCmdDrawIndexedIndirectCountKHR;
924 
925     // VK_EXT_debug_marker
926     PFN_vkDebugMarkerSetObjectTagEXT                   vkDebugMarkerSetObjectTagEXT;
927     PFN_vkDebugMarkerSetObjectNameEXT                  vkDebugMarkerSetObjectNameEXT;
928     PFN_vkCmdDebugMarkerBeginEXT                       vkCmdDebugMarkerBeginEXT;
929     PFN_vkCmdDebugMarkerEndEXT                         vkCmdDebugMarkerEndEXT;
930     PFN_vkCmdDebugMarkerInsertEXT                      vkCmdDebugMarkerInsertEXT;
931 
932     // VK_EXT_transform_feedback
933     PFN_vkCmdBindTransformFeedbackBuffersEXT           vkCmdBindTransformFeedbackBuffersEXT;
934     PFN_vkCmdBeginTransformFeedbackEXT                 vkCmdBeginTransformFeedbackEXT;
935     PFN_vkCmdEndTransformFeedbackEXT                   vkCmdEndTransformFeedbackEXT;
936     PFN_vkCmdBeginQueryIndexedEXT                      vkCmdBeginQueryIndexedEXT;
937     PFN_vkCmdEndQueryIndexedEXT                        vkCmdEndQueryIndexedEXT;
938     PFN_vkCmdDrawIndirectByteCountEXT                  vkCmdDrawIndirectByteCountEXT;
939 
940     // VK_NVX_image_view_handle
941     PFN_vkGetImageViewHandleNVX                        vkGetImageViewHandleNVX;
942 
943     // VK_AMD_shader_info
944     PFN_vkGetShaderInfoAMD                             vkGetShaderInfoAMD;
945 
946     // VK_EXT_conditional_rendering
947     PFN_vkCmdBeginConditionalRenderingEXT              vkCmdBeginConditionalRenderingEXT;
948     PFN_vkCmdEndConditionalRenderingEXT                vkCmdEndConditionalRenderingEXT;
949 
950     // VK_NVX_device_generated_commands
951     PFN_vkCmdProcessCommandsNVX                        vkCmdProcessCommandsNVX;
952     PFN_vkCmdReserveSpaceForCommandsNVX                vkCmdReserveSpaceForCommandsNVX;
953     PFN_vkCreateIndirectCommandsLayoutNVX              vkCreateIndirectCommandsLayoutNVX;
954     PFN_vkDestroyIndirectCommandsLayoutNVX             vkDestroyIndirectCommandsLayoutNVX;
955     PFN_vkCreateObjectTableNVX                         vkCreateObjectTableNVX;
956     PFN_vkDestroyObjectTableNVX                        vkDestroyObjectTableNVX;
957     PFN_vkRegisterObjectsNVX                           vkRegisterObjectsNVX;
958     PFN_vkUnregisterObjectsNVX                         vkUnregisterObjectsNVX;
959 
960     // VK_NV_clip_space_w_scaling
961     PFN_vkCmdSetViewportWScalingNV                     vkCmdSetViewportWScalingNV;
962 
963     // VK_EXT_display_control
964     PFN_vkDisplayPowerControlEXT                       vkDisplayPowerControlEXT;
965     PFN_vkRegisterDeviceEventEXT                       vkRegisterDeviceEventEXT;
966     PFN_vkRegisterDisplayEventEXT                      vkRegisterDisplayEventEXT;
967     PFN_vkGetSwapchainCounterEXT                       vkGetSwapchainCounterEXT;
968 
969     // VK_GOOGLE_display_timing
970     PFN_vkGetRefreshCycleDurationGOOGLE                vkGetRefreshCycleDurationGOOGLE;
971     PFN_vkGetPastPresentationTimingGOOGLE              vkGetPastPresentationTimingGOOGLE;
972 
973     // VK_EXT_discard_rectangles
974     PFN_vkCmdSetDiscardRectangleEXT                    vkCmdSetDiscardRectangleEXT;
975 
976     // VK_EXT_hdr_metadata
977     PFN_vkSetHdrMetadataEXT                            vkSetHdrMetadataEXT;
978 
979     // VK_EXT_debug_utils
980     PFN_vkSetDebugUtilsObjectNameEXT                   vkSetDebugUtilsObjectNameEXT;
981     PFN_vkSetDebugUtilsObjectTagEXT                    vkSetDebugUtilsObjectTagEXT;
982     PFN_vkQueueBeginDebugUtilsLabelEXT                 vkQueueBeginDebugUtilsLabelEXT;
983     PFN_vkQueueEndDebugUtilsLabelEXT                   vkQueueEndDebugUtilsLabelEXT;
984     PFN_vkQueueInsertDebugUtilsLabelEXT                vkQueueInsertDebugUtilsLabelEXT;
985     PFN_vkCmdBeginDebugUtilsLabelEXT                   vkCmdBeginDebugUtilsLabelEXT;
986     PFN_vkCmdEndDebugUtilsLabelEXT                     vkCmdEndDebugUtilsLabelEXT;
987     PFN_vkCmdInsertDebugUtilsLabelEXT                  vkCmdInsertDebugUtilsLabelEXT;
988 
989     // VK_EXT_sample_locations
990     PFN_vkCmdSetSampleLocationsEXT                     vkCmdSetSampleLocationsEXT;
991 
992     // VK_EXT_image_drm_format_modifier
993     PFN_vkGetImageDrmFormatModifierPropertiesEXT       vkGetImageDrmFormatModifierPropertiesEXT;
994 
995     // VK_EXT_validation_cache
996     PFN_vkCreateValidationCacheEXT                     vkCreateValidationCacheEXT;
997     PFN_vkDestroyValidationCacheEXT                    vkDestroyValidationCacheEXT;
998     PFN_vkMergeValidationCachesEXT                     vkMergeValidationCachesEXT;
999     PFN_vkGetValidationCacheDataEXT                    vkGetValidationCacheDataEXT;
1000 
1001     // VK_NV_shading_rate_image
1002     PFN_vkCmdBindShadingRateImageNV                    vkCmdBindShadingRateImageNV;
1003     PFN_vkCmdSetViewportShadingRatePaletteNV           vkCmdSetViewportShadingRatePaletteNV;
1004     PFN_vkCmdSetCoarseSampleOrderNV                    vkCmdSetCoarseSampleOrderNV;
1005 
1006     // VK_NV_ray_tracing
1007     PFN_vkCreateAccelerationStructureNV                vkCreateAccelerationStructureNV;
1008     PFN_vkDestroyAccelerationStructureNV               vkDestroyAccelerationStructureNV;
1009     PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV;
1010     PFN_vkBindAccelerationStructureMemoryNV            vkBindAccelerationStructureMemoryNV;
1011     PFN_vkCmdBuildAccelerationStructureNV              vkCmdBuildAccelerationStructureNV;
1012     PFN_vkCmdCopyAccelerationStructureNV               vkCmdCopyAccelerationStructureNV;
1013     PFN_vkCmdTraceRaysNV                               vkCmdTraceRaysNV;
1014     PFN_vkCreateRayTracingPipelinesNV                  vkCreateRayTracingPipelinesNV;
1015     PFN_vkGetRayTracingShaderGroupHandlesNV            vkGetRayTracingShaderGroupHandlesNV;
1016     PFN_vkGetAccelerationStructureHandleNV             vkGetAccelerationStructureHandleNV;
1017     PFN_vkCmdWriteAccelerationStructuresPropertiesNV   vkCmdWriteAccelerationStructuresPropertiesNV;
1018     PFN_vkCompileDeferredNV                            vkCompileDeferredNV;
1019 
1020     // VK_EXT_external_memory_host
1021     PFN_vkGetMemoryHostPointerPropertiesEXT            vkGetMemoryHostPointerPropertiesEXT;
1022 
1023     // VK_AMD_buffer_marker
1024     PFN_vkCmdWriteBufferMarkerAMD                      vkCmdWriteBufferMarkerAMD;
1025 
1026     // VK_EXT_calibrated_timestamps
1027     PFN_vkGetCalibratedTimestampsEXT                   vkGetCalibratedTimestampsEXT;
1028 
1029     // VK_NV_mesh_shader
1030     PFN_vkCmdDrawMeshTasksNV                           vkCmdDrawMeshTasksNV;
1031     PFN_vkCmdDrawMeshTasksIndirectNV                   vkCmdDrawMeshTasksIndirectNV;
1032     PFN_vkCmdDrawMeshTasksIndirectCountNV              vkCmdDrawMeshTasksIndirectCountNV;
1033 
1034     // VK_NV_scissor_exclusive
1035     PFN_vkCmdSetExclusiveScissorNV                     vkCmdSetExclusiveScissorNV;
1036 
1037     // VK_NV_device_diagnostic_checkpoints
1038     PFN_vkCmdSetCheckpointNV                           vkCmdSetCheckpointNV;
1039     PFN_vkGetQueueCheckpointDataNV                     vkGetQueueCheckpointDataNV;
1040 
1041     // VK_INTEL_performance_query
1042     PFN_vkInitializePerformanceApiINTEL                vkInitializePerformanceApiINTEL;
1043     PFN_vkUninitializePerformanceApiINTEL              vkUninitializePerformanceApiINTEL;
1044     PFN_vkCmdSetPerformanceMarkerINTEL                 vkCmdSetPerformanceMarkerINTEL;
1045     PFN_vkCmdSetPerformanceStreamMarkerINTEL           vkCmdSetPerformanceStreamMarkerINTEL;
1046     PFN_vkCmdSetPerformanceOverrideINTEL               vkCmdSetPerformanceOverrideINTEL;
1047     PFN_vkAcquirePerformanceConfigurationINTEL         vkAcquirePerformanceConfigurationINTEL;
1048     PFN_vkReleasePerformanceConfigurationINTEL         vkReleasePerformanceConfigurationINTEL;
1049     PFN_vkQueueSetPerformanceConfigurationINTEL        vkQueueSetPerformanceConfigurationINTEL;
1050     PFN_vkGetPerformanceParameterINTEL                 vkGetPerformanceParameterINTEL;
1051 
1052     // VK_AMD_display_native_hdr
1053     PFN_vkSetLocalDimmingAMD                           vkSetLocalDimmingAMD;
1054 
1055     // VK_EXT_buffer_device_address
1056     PFN_vkGetBufferDeviceAddressEXT                    vkGetBufferDeviceAddressEXT;
1057 
1058     // VK_EXT_host_query_reset
1059     PFN_vkResetQueryPoolEXT                            vkResetQueryPoolEXT;
1060 
1061     // VK_KHR_device_group
1062     alias vkGetDeviceGroupPeerMemoryFeaturesKHR                = vkGetDeviceGroupPeerMemoryFeatures;
1063     alias vkCmdSetDeviceMaskKHR                                = vkCmdSetDeviceMask;
1064     alias vkCmdDispatchBaseKHR                                 = vkCmdDispatchBase;
1065 
1066     // VK_KHR_maintenance1
1067     alias vkTrimCommandPoolKHR                                 = vkTrimCommandPool;
1068 
1069     // VK_KHR_descriptor_update_template
1070     alias vkCreateDescriptorUpdateTemplateKHR                  = vkCreateDescriptorUpdateTemplate;
1071     alias vkDestroyDescriptorUpdateTemplateKHR                 = vkDestroyDescriptorUpdateTemplate;
1072     alias vkUpdateDescriptorSetWithTemplateKHR                 = vkUpdateDescriptorSetWithTemplate;
1073 
1074     // VK_KHR_get_memory_requirements2
1075     alias vkGetImageMemoryRequirements2KHR                     = vkGetImageMemoryRequirements2;
1076     alias vkGetBufferMemoryRequirements2KHR                    = vkGetBufferMemoryRequirements2;
1077     alias vkGetImageSparseMemoryRequirements2KHR               = vkGetImageSparseMemoryRequirements2;
1078 
1079     // VK_KHR_sampler_ycbcr_conversion
1080     alias vkCreateSamplerYcbcrConversionKHR                    = vkCreateSamplerYcbcrConversion;
1081     alias vkDestroySamplerYcbcrConversionKHR                   = vkDestroySamplerYcbcrConversion;
1082 
1083     // VK_KHR_bind_memory2
1084     alias vkBindBufferMemory2KHR                               = vkBindBufferMemory2;
1085     alias vkBindImageMemory2KHR                                = vkBindImageMemory2;
1086 
1087     // VK_KHR_maintenance3
1088     alias vkGetDescriptorSetLayoutSupportKHR                   = vkGetDescriptorSetLayoutSupport;
1089 
1090     // VK_AMD_draw_indirect_count
1091     alias vkCmdDrawIndirectCountAMD                            = vkCmdDrawIndirectCountKHR;
1092     alias vkCmdDrawIndexedIndirectCountAMD                     = vkCmdDrawIndexedIndirectCountKHR;
1093 }
1094