1 /**
2  * Dlang vulkan platform specific types and functions as mixin template
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.platform_extensions;
9 
10 /// define platform extension names as enums
11 /// these enums can be used directly in Platform_Extensions mixin template
12 enum KHR_xlib_surface;
13 enum KHR_xcb_surface;
14 enum KHR_wayland_surface;
15 enum KHR_android_surface;
16 enum KHR_win32_surface;
17 enum KHR_external_memory_win32;
18 enum KHR_win32_keyed_mutex;
19 enum KHR_external_semaphore_win32;
20 enum KHR_external_fence_win32;
21 enum KHR_portability_subset;
22 enum KHR_deferred_host_operations;
23 enum KHR_pipeline_library;
24 enum GGP_stream_descriptor_surface;
25 enum NV_external_memory_win32;
26 enum NV_win32_keyed_mutex;
27 enum NN_vi_surface;
28 enum EXT_acquire_xlib_display;
29 enum MVK_ios_surface;
30 enum MVK_macos_surface;
31 enum ANDROID_external_memory_android_hardware_buffer;
32 enum GGP_frame_token;
33 enum FUCHSIA_imagepipe_surface;
34 enum EXT_metal_surface;
35 enum EXT_full_screen_exclusive;
36 enum EXT_directfb_surface;
37 enum KHR_ray_tracing;
38 
39 
40 /// extensions to a specific platform are grouped in these enum sequences
41 import std.meta : AliasSeq;
42 alias USE_PLATFORM_XLIB_KHR        = AliasSeq!( KHR_xlib_surface );
43 alias USE_PLATFORM_XCB_KHR         = AliasSeq!( KHR_xcb_surface );
44 alias USE_PLATFORM_WAYLAND_KHR     = AliasSeq!( KHR_wayland_surface );
45 alias USE_PLATFORM_ANDROID_KHR     = AliasSeq!( KHR_android_surface, ANDROID_external_memory_android_hardware_buffer );
46 alias USE_PLATFORM_WIN32_KHR       = AliasSeq!( KHR_win32_surface, KHR_external_memory_win32, KHR_win32_keyed_mutex, KHR_external_semaphore_win32, KHR_external_fence_win32, NV_external_memory_win32, NV_win32_keyed_mutex, EXT_full_screen_exclusive );
47 alias ENABLE_BETA_EXTENSIONS       = AliasSeq!( KHR_portability_subset, KHR_deferred_host_operations, KHR_pipeline_library, KHR_ray_tracing );
48 alias USE_PLATFORM_GGP             = AliasSeq!( GGP_stream_descriptor_surface, GGP_frame_token );
49 alias USE_PLATFORM_VI_NN           = AliasSeq!( NN_vi_surface );
50 alias USE_PLATFORM_XLIB_XRANDR_EXT = AliasSeq!( EXT_acquire_xlib_display );
51 alias USE_PLATFORM_IOS_MVK         = AliasSeq!( MVK_ios_surface );
52 alias USE_PLATFORM_MACOS_MVK       = AliasSeq!( MVK_macos_surface );
53 alias USE_PLATFORM_FUCHSIA         = AliasSeq!( FUCHSIA_imagepipe_surface );
54 alias USE_PLATFORM_METAL_EXT       = AliasSeq!( EXT_metal_surface );
55 alias USE_PLATFORM_DIRECTFB_EXT    = AliasSeq!( EXT_directfb_surface );
56 
57 
58 
59 /// instantiate platform and extension specific code with this mixin template
60 /// required types and data structures must be imported into the module where
61 /// this template is instantiated
62 mixin template Platform_Extensions( extensions... ) {
63 
64     // publicly import erupted package modules
65     public import erupted.types;
66     public import erupted.functions;
67     import erupted.dispatch_device;
68 
69     // mixin function linkage, nothrow and @nogc attributes for subsecuent functions
70     extern(System) nothrow @nogc:
71 
72     // remove duplicates from alias sequence
73     // this might happen if a platform extension collection AND a single extension, which is included in the collection, was specified
74     // e.g.: mixin Platform_Extensions!( VK_USE_PLATFORM_WIN32_KHR, VK_KHR_external_memory_win32 );
75     import std.meta : NoDuplicates;
76     alias noDuplicateExtensions = NoDuplicates!extensions;
77 
78     // 1. loop through alias sequence and mixin corresponding
79     // extension types, aliased function pointer type definitions and __gshared function pointer declarations
80     static foreach( extension; noDuplicateExtensions ) {
81 
82         // VK_KHR_xlib_surface : types and function pointer type aliases
83         static if( __traits( isSame, extension, KHR_xlib_surface )) {
84             enum VK_KHR_xlib_surface = 1;
85 
86             enum VK_KHR_XLIB_SURFACE_SPEC_VERSION = 6;
87             enum VK_KHR_XLIB_SURFACE_EXTENSION_NAME = "VK_KHR_xlib_surface";
88             
89             alias VkXlibSurfaceCreateFlagsKHR = VkFlags;
90             
91             struct VkXlibSurfaceCreateInfoKHR {
92                 VkStructureType              sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR;
93                 const( void )*               pNext;
94                 VkXlibSurfaceCreateFlagsKHR  flags;
95                 Display*                     dpy;
96                 Window                       window;
97             }
98             
99             alias PFN_vkCreateXlibSurfaceKHR                                            = VkResult  function( VkInstance instance, const( VkXlibSurfaceCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
100             alias PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR                     = VkBool32  function( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID );
101         }
102 
103         // VK_KHR_xcb_surface : types and function pointer type aliases
104         else static if( __traits( isSame, extension, KHR_xcb_surface )) {
105             enum VK_KHR_xcb_surface = 1;
106 
107             enum VK_KHR_XCB_SURFACE_SPEC_VERSION = 6;
108             enum VK_KHR_XCB_SURFACE_EXTENSION_NAME = "VK_KHR_xcb_surface";
109             
110             alias VkXcbSurfaceCreateFlagsKHR = VkFlags;
111             
112             struct VkXcbSurfaceCreateInfoKHR {
113                 VkStructureType             sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
114                 const( void )*              pNext;
115                 VkXcbSurfaceCreateFlagsKHR  flags;
116                 xcb_connection_t*           connection;
117                 xcb_window_t                window;
118             }
119             
120             alias PFN_vkCreateXcbSurfaceKHR                                             = VkResult  function( VkInstance instance, const( VkXcbSurfaceCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
121             alias PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR                      = VkBool32  function( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id );
122         }
123 
124         // VK_KHR_wayland_surface : types and function pointer type aliases
125         else static if( __traits( isSame, extension, KHR_wayland_surface )) {
126             enum VK_KHR_wayland_surface = 1;
127 
128             enum VK_KHR_WAYLAND_SURFACE_SPEC_VERSION = 6;
129             enum VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME = "VK_KHR_wayland_surface";
130             
131             alias VkWaylandSurfaceCreateFlagsKHR = VkFlags;
132             
133             struct VkWaylandSurfaceCreateInfoKHR {
134                 VkStructureType                 sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR;
135                 const( void )*                  pNext;
136                 VkWaylandSurfaceCreateFlagsKHR  flags;
137                 const( wl_display )*            display;
138                 const( wl_surface )*            surface;
139             }
140             
141             alias PFN_vkCreateWaylandSurfaceKHR                                         = VkResult  function( VkInstance instance, const( VkWaylandSurfaceCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
142             alias PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR                  = VkBool32  function( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, const( wl_display )* display );
143         }
144 
145         // VK_KHR_android_surface : types and function pointer type aliases
146         else static if( __traits( isSame, extension, KHR_android_surface )) {
147             enum VK_KHR_android_surface = 1;
148 
149             alias ANativeWindow = ANativeWindow;
150             
151             enum VK_KHR_ANDROID_SURFACE_SPEC_VERSION = 6;
152             enum VK_KHR_ANDROID_SURFACE_EXTENSION_NAME = "VK_KHR_android_surface";
153             
154             alias VkAndroidSurfaceCreateFlagsKHR = VkFlags;
155             
156             struct VkAndroidSurfaceCreateInfoKHR {
157                 VkStructureType                 sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR;
158                 const( void )*                  pNext;
159                 VkAndroidSurfaceCreateFlagsKHR  flags;
160                 const( ANativeWindow )*         window;
161             }
162             
163             alias PFN_vkCreateAndroidSurfaceKHR                                         = VkResult  function( VkInstance instance, const( VkAndroidSurfaceCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
164         }
165 
166         // VK_KHR_win32_surface : types and function pointer type aliases
167         else static if( __traits( isSame, extension, KHR_win32_surface )) {
168             enum VK_KHR_win32_surface = 1;
169 
170             enum VK_KHR_WIN32_SURFACE_SPEC_VERSION = 6;
171             enum VK_KHR_WIN32_SURFACE_EXTENSION_NAME = "VK_KHR_win32_surface";
172             
173             alias VkWin32SurfaceCreateFlagsKHR = VkFlags;
174             
175             struct VkWin32SurfaceCreateInfoKHR {
176                 VkStructureType               sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
177                 const( void )*                pNext;
178                 VkWin32SurfaceCreateFlagsKHR  flags;
179                 HINSTANCE                     hinstance;
180                 HWND                          hwnd;
181             }
182             
183             alias PFN_vkCreateWin32SurfaceKHR                                           = VkResult  function( VkInstance instance, const( VkWin32SurfaceCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
184             alias PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR                    = VkBool32  function( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex );
185         }
186 
187         // VK_KHR_external_memory_win32 : types and function pointer type aliases
188         else static if( __traits( isSame, extension, KHR_external_memory_win32 )) {
189             enum VK_KHR_external_memory_win32 = 1;
190 
191             enum VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION = 1;
192             enum VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME = "VK_KHR_external_memory_win32";
193             
194             struct VkImportMemoryWin32HandleInfoKHR {
195                 VkStructureType                     sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR;
196                 const( void )*                      pNext;
197                 VkExternalMemoryHandleTypeFlagBits  handleType;
198                 HANDLE                              handle;
199                 LPCWSTR                             name;
200             }
201             
202             struct VkExportMemoryWin32HandleInfoKHR {
203                 VkStructureType                sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR;
204                 const( void )*                 pNext;
205                 const( SECURITY_ATTRIBUTES )*  pAttributes;
206                 DWORD                          dwAccess;
207                 LPCWSTR                        name;
208             }
209             
210             struct VkMemoryWin32HandlePropertiesKHR {
211                 VkStructureType  sType = VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR;
212                 void*            pNext;
213                 uint32_t         memoryTypeBits;
214             }
215             
216             struct VkMemoryGetWin32HandleInfoKHR {
217                 VkStructureType                     sType = VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR;
218                 const( void )*                      pNext;
219                 VkDeviceMemory                      memory;
220                 VkExternalMemoryHandleTypeFlagBits  handleType;
221             }
222             
223             alias PFN_vkGetMemoryWin32HandleKHR                                         = VkResult  function( VkDevice device, const( VkMemoryGetWin32HandleInfoKHR )* pGetWin32HandleInfo, HANDLE* pHandle );
224             alias PFN_vkGetMemoryWin32HandlePropertiesKHR                               = VkResult  function( VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties );
225         }
226 
227         // VK_KHR_win32_keyed_mutex : types and function pointer type aliases
228         else static if( __traits( isSame, extension, KHR_win32_keyed_mutex )) {
229             enum VK_KHR_win32_keyed_mutex = 1;
230 
231             enum VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION = 1;
232             enum VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME = "VK_KHR_win32_keyed_mutex";
233             
234             struct VkWin32KeyedMutexAcquireReleaseInfoKHR {
235                 VkStructureType           sType = VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR;
236                 const( void )*            pNext;
237                 uint32_t                  acquireCount;
238                 const( VkDeviceMemory )*  pAcquireSyncs;
239                 const( uint64_t )*        pAcquireKeys;
240                 const( uint32_t )*        pAcquireTimeouts;
241                 uint32_t                  releaseCount;
242                 const( VkDeviceMemory )*  pReleaseSyncs;
243                 const( uint64_t )*        pReleaseKeys;
244             }
245             
246         }
247 
248         // VK_KHR_external_semaphore_win32 : types and function pointer type aliases
249         else static if( __traits( isSame, extension, KHR_external_semaphore_win32 )) {
250             enum VK_KHR_external_semaphore_win32 = 1;
251 
252             enum VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION = 1;
253             enum VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME = "VK_KHR_external_semaphore_win32";
254             
255             struct VkImportSemaphoreWin32HandleInfoKHR {
256                 VkStructureType                        sType = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR;
257                 const( void )*                         pNext;
258                 VkSemaphore                            semaphore;
259                 VkSemaphoreImportFlags                 flags;
260                 VkExternalSemaphoreHandleTypeFlagBits  handleType;
261                 HANDLE                                 handle;
262                 LPCWSTR                                name;
263             }
264             
265             struct VkExportSemaphoreWin32HandleInfoKHR {
266                 VkStructureType                sType = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR;
267                 const( void )*                 pNext;
268                 const( SECURITY_ATTRIBUTES )*  pAttributes;
269                 DWORD                          dwAccess;
270                 LPCWSTR                        name;
271             }
272             
273             struct VkD3D12FenceSubmitInfoKHR {
274                 VkStructureType     sType = VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR;
275                 const( void )*      pNext;
276                 uint32_t            waitSemaphoreValuesCount;
277                 const( uint64_t )*  pWaitSemaphoreValues;
278                 uint32_t            signalSemaphoreValuesCount;
279                 const( uint64_t )*  pSignalSemaphoreValues;
280             }
281             
282             struct VkSemaphoreGetWin32HandleInfoKHR {
283                 VkStructureType                        sType = VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR;
284                 const( void )*                         pNext;
285                 VkSemaphore                            semaphore;
286                 VkExternalSemaphoreHandleTypeFlagBits  handleType;
287             }
288             
289             alias PFN_vkImportSemaphoreWin32HandleKHR                                   = VkResult  function( VkDevice device, const( VkImportSemaphoreWin32HandleInfoKHR )* pImportSemaphoreWin32HandleInfo );
290             alias PFN_vkGetSemaphoreWin32HandleKHR                                      = VkResult  function( VkDevice device, const( VkSemaphoreGetWin32HandleInfoKHR )* pGetWin32HandleInfo, HANDLE* pHandle );
291         }
292 
293         // VK_KHR_external_fence_win32 : types and function pointer type aliases
294         else static if( __traits( isSame, extension, KHR_external_fence_win32 )) {
295             enum VK_KHR_external_fence_win32 = 1;
296 
297             enum VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION = 1;
298             enum VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME = "VK_KHR_external_fence_win32";
299             
300             struct VkImportFenceWin32HandleInfoKHR {
301                 VkStructureType                    sType = VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR;
302                 const( void )*                     pNext;
303                 VkFence                            fence;
304                 VkFenceImportFlags                 flags;
305                 VkExternalFenceHandleTypeFlagBits  handleType;
306                 HANDLE                             handle;
307                 LPCWSTR                            name;
308             }
309             
310             struct VkExportFenceWin32HandleInfoKHR {
311                 VkStructureType                sType = VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR;
312                 const( void )*                 pNext;
313                 const( SECURITY_ATTRIBUTES )*  pAttributes;
314                 DWORD                          dwAccess;
315                 LPCWSTR                        name;
316             }
317             
318             struct VkFenceGetWin32HandleInfoKHR {
319                 VkStructureType                    sType = VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR;
320                 const( void )*                     pNext;
321                 VkFence                            fence;
322                 VkExternalFenceHandleTypeFlagBits  handleType;
323             }
324             
325             alias PFN_vkImportFenceWin32HandleKHR                                       = VkResult  function( VkDevice device, const( VkImportFenceWin32HandleInfoKHR )* pImportFenceWin32HandleInfo );
326             alias PFN_vkGetFenceWin32HandleKHR                                          = VkResult  function( VkDevice device, const( VkFenceGetWin32HandleInfoKHR )* pGetWin32HandleInfo, HANDLE* pHandle );
327         }
328 
329         // VK_KHR_portability_subset : types and function pointer type aliases
330         else static if( __traits( isSame, extension, KHR_portability_subset )) {
331             enum VK_KHR_portability_subset = 1;
332 
333             enum VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION = 1;
334             enum VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME = "VK_KHR_portability_subset";
335             
336             struct VkPhysicalDevicePortabilitySubsetFeaturesKHR {
337                 VkStructureType  sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR;
338                 void*            pNext;
339                 VkBool32         constantAlphaColorBlendFactors;
340                 VkBool32         events;
341                 VkBool32         imageViewFormatReinterpretation;
342                 VkBool32         imageViewFormatSwizzle;
343                 VkBool32         imageView2DOn3DImage;
344                 VkBool32         multisampleArrayImage;
345                 VkBool32         mutableComparisonSamplers;
346                 VkBool32         pointPolygons;
347                 VkBool32         samplerMipLodBias;
348                 VkBool32         separateStencilMaskRef;
349                 VkBool32         shaderSampleRateInterpolationFunctions;
350                 VkBool32         tessellationIsolines;
351                 VkBool32         tessellationPointMode;
352                 VkBool32         triangleFans;
353                 VkBool32         vertexAttributeAccessBeyondStride;
354             }
355             
356             struct VkPhysicalDevicePortabilitySubsetPropertiesKHR {
357                 VkStructureType  sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR;
358                 void*            pNext;
359                 uint32_t         minVertexInputBindingStrideAlignment;
360             }
361             
362         }
363 
364         // VK_KHR_deferred_host_operations : types and function pointer type aliases
365         else static if( __traits( isSame, extension, KHR_deferred_host_operations )) {
366             enum VK_KHR_deferred_host_operations = 1;
367 
368             mixin( VK_DEFINE_NON_DISPATCHABLE_HANDLE!q{VkDeferredOperationKHR} );
369             
370             enum VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION = 3;
371             enum VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME = "VK_KHR_deferred_host_operations";
372             
373             struct VkDeferredOperationInfoKHR {
374                 VkStructureType         sType = VK_STRUCTURE_TYPE_DEFERRED_OPERATION_INFO_KHR;
375                 const( void )*          pNext;
376                 VkDeferredOperationKHR  operationHandle;
377             }
378             
379             alias PFN_vkCreateDeferredOperationKHR                                      = VkResult  function( VkDevice device, const( VkAllocationCallbacks )* pAllocator, VkDeferredOperationKHR* pDeferredOperation );
380             alias PFN_vkDestroyDeferredOperationKHR                                     = void      function( VkDevice device, VkDeferredOperationKHR operation, const( VkAllocationCallbacks )* pAllocator );
381             alias PFN_vkGetDeferredOperationMaxConcurrencyKHR                           = uint32_t  function( VkDevice device, VkDeferredOperationKHR operation );
382             alias PFN_vkGetDeferredOperationResultKHR                                   = VkResult  function( VkDevice device, VkDeferredOperationKHR operation );
383             alias PFN_vkDeferredOperationJoinKHR                                        = VkResult  function( VkDevice device, VkDeferredOperationKHR operation );
384         }
385 
386         // VK_KHR_pipeline_library : types and function pointer type aliases
387         else static if( __traits( isSame, extension, KHR_pipeline_library )) {
388             enum VK_KHR_pipeline_library = 1;
389 
390             enum VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION = 1;
391             enum VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME = "VK_KHR_pipeline_library";
392             
393             struct VkPipelineLibraryCreateInfoKHR {
394                 VkStructureType       sType = VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR;
395                 const( void )*        pNext;
396                 uint32_t              libraryCount;
397                 const( VkPipeline )*  pLibraries;
398             }
399             
400         }
401 
402         // VK_GGP_stream_descriptor_surface : types and function pointer type aliases
403         else static if( __traits( isSame, extension, GGP_stream_descriptor_surface )) {
404             enum VK_GGP_stream_descriptor_surface = 1;
405 
406             enum VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION = 1;
407             enum VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME = "VK_GGP_stream_descriptor_surface";
408             
409             alias VkStreamDescriptorSurfaceCreateFlagsGGP = VkFlags;
410             
411             struct VkStreamDescriptorSurfaceCreateInfoGGP {
412                 VkStructureType                          sType = VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP;
413                 const( void )*                           pNext;
414                 VkStreamDescriptorSurfaceCreateFlagsGGP  flags;
415                 GgpStreamDescriptor                      streamDescriptor;
416             }
417             
418             alias PFN_vkCreateStreamDescriptorSurfaceGGP                                = VkResult  function( VkInstance instance, const( VkStreamDescriptorSurfaceCreateInfoGGP )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
419         }
420 
421         // VK_NV_external_memory_win32 : types and function pointer type aliases
422         else static if( __traits( isSame, extension, NV_external_memory_win32 )) {
423             enum VK_NV_external_memory_win32 = 1;
424 
425             enum VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION = 1;
426             enum VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME = "VK_NV_external_memory_win32";
427             
428             struct VkImportMemoryWin32HandleInfoNV {
429                 VkStructureType                    sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV;
430                 const( void )*                     pNext;
431                 VkExternalMemoryHandleTypeFlagsNV  handleType;
432                 HANDLE                             handle;
433             }
434             
435             struct VkExportMemoryWin32HandleInfoNV {
436                 VkStructureType                sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV;
437                 const( void )*                 pNext;
438                 const( SECURITY_ATTRIBUTES )*  pAttributes;
439                 DWORD                          dwAccess;
440             }
441             
442             alias PFN_vkGetMemoryWin32HandleNV                                          = VkResult  function( VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle );
443         }
444 
445         // VK_NV_win32_keyed_mutex : types and function pointer type aliases
446         else static if( __traits( isSame, extension, NV_win32_keyed_mutex )) {
447             enum VK_NV_win32_keyed_mutex = 1;
448 
449             enum VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION = 2;
450             enum VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME = "VK_NV_win32_keyed_mutex";
451             
452             struct VkWin32KeyedMutexAcquireReleaseInfoNV {
453                 VkStructureType           sType = VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV;
454                 const( void )*            pNext;
455                 uint32_t                  acquireCount;
456                 const( VkDeviceMemory )*  pAcquireSyncs;
457                 const( uint64_t )*        pAcquireKeys;
458                 const( uint32_t )*        pAcquireTimeoutMilliseconds;
459                 uint32_t                  releaseCount;
460                 const( VkDeviceMemory )*  pReleaseSyncs;
461                 const( uint64_t )*        pReleaseKeys;
462             }
463             
464         }
465 
466         // VK_NN_vi_surface : types and function pointer type aliases
467         else static if( __traits( isSame, extension, NN_vi_surface )) {
468             enum VK_NN_vi_surface = 1;
469 
470             enum VK_NN_VI_SURFACE_SPEC_VERSION = 1;
471             enum VK_NN_VI_SURFACE_EXTENSION_NAME = "VK_NN_vi_surface";
472             
473             alias VkViSurfaceCreateFlagsNN = VkFlags;
474             
475             struct VkViSurfaceCreateInfoNN {
476                 VkStructureType           sType = VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN;
477                 const( void )*            pNext;
478                 VkViSurfaceCreateFlagsNN  flags;
479                 void*                     window;
480             }
481             
482             alias PFN_vkCreateViSurfaceNN                                               = VkResult  function( VkInstance instance, const( VkViSurfaceCreateInfoNN )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
483         }
484 
485         // VK_EXT_acquire_xlib_display : types and function pointer type aliases
486         else static if( __traits( isSame, extension, EXT_acquire_xlib_display )) {
487             enum VK_EXT_acquire_xlib_display = 1;
488 
489             enum VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION = 1;
490             enum VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME = "VK_EXT_acquire_xlib_display";
491             
492             alias PFN_vkAcquireXlibDisplayEXT                                           = VkResult  function( VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display );
493             alias PFN_vkGetRandROutputDisplayEXT                                        = VkResult  function( VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay );
494         }
495 
496         // VK_MVK_ios_surface : types and function pointer type aliases
497         else static if( __traits( isSame, extension, MVK_ios_surface )) {
498             enum VK_MVK_ios_surface = 1;
499 
500             enum VK_MVK_IOS_SURFACE_SPEC_VERSION = 3;
501             enum VK_MVK_IOS_SURFACE_EXTENSION_NAME = "VK_MVK_ios_surface";
502             
503             alias VkIOSSurfaceCreateFlagsMVK = VkFlags;
504             
505             struct VkIOSSurfaceCreateInfoMVK {
506                 VkStructureType             sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK;
507                 const( void )*              pNext;
508                 VkIOSSurfaceCreateFlagsMVK  flags;
509                 const( void )*              pView;
510             }
511             
512             alias PFN_vkCreateIOSSurfaceMVK                                             = VkResult  function( VkInstance instance, const( VkIOSSurfaceCreateInfoMVK )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
513         }
514 
515         // VK_MVK_macos_surface : types and function pointer type aliases
516         else static if( __traits( isSame, extension, MVK_macos_surface )) {
517             enum VK_MVK_macos_surface = 1;
518 
519             enum VK_MVK_MACOS_SURFACE_SPEC_VERSION = 3;
520             enum VK_MVK_MACOS_SURFACE_EXTENSION_NAME = "VK_MVK_macos_surface";
521             
522             alias VkMacOSSurfaceCreateFlagsMVK = VkFlags;
523             
524             struct VkMacOSSurfaceCreateInfoMVK {
525                 VkStructureType               sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
526                 const( void )*                pNext;
527                 VkMacOSSurfaceCreateFlagsMVK  flags;
528                 const( void )*                pView;
529             }
530             
531             alias PFN_vkCreateMacOSSurfaceMVK                                           = VkResult  function( VkInstance instance, const( VkMacOSSurfaceCreateInfoMVK )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
532         }
533 
534         // VK_ANDROID_external_memory_android_hardware_buffer : types and function pointer type aliases
535         else static if( __traits( isSame, extension, ANDROID_external_memory_android_hardware_buffer )) {
536             enum VK_ANDROID_external_memory_android_hardware_buffer = 1;
537 
538             alias AHardwareBuffer = AHardwareBuffer;
539             
540             enum VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION = 3;
541             enum VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME = "VK_ANDROID_external_memory_android_hardware_buffer";
542             
543             struct VkAndroidHardwareBufferUsageANDROID {
544                 VkStructureType  sType = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID;
545                 void*            pNext;
546                 uint64_t         androidHardwareBufferUsage;
547             }
548             
549             struct VkAndroidHardwareBufferPropertiesANDROID {
550                 VkStructureType  sType = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID;
551                 void*            pNext;
552                 VkDeviceSize     allocationSize;
553                 uint32_t         memoryTypeBits;
554             }
555             
556             struct VkAndroidHardwareBufferFormatPropertiesANDROID {
557                 VkStructureType                sType = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID;
558                 void*                          pNext;
559                 VkFormat                       format;
560                 uint64_t                       externalFormat;
561                 VkFormatFeatureFlags           formatFeatures;
562                 VkComponentMapping             samplerYcbcrConversionComponents;
563                 VkSamplerYcbcrModelConversion  suggestedYcbcrModel;
564                 VkSamplerYcbcrRange            suggestedYcbcrRange;
565                 VkChromaLocation               suggestedXChromaOffset;
566                 VkChromaLocation               suggestedYChromaOffset;
567             }
568             
569             struct VkImportAndroidHardwareBufferInfoANDROID {
570                 VkStructureType            sType = VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID;
571                 const( void )*             pNext;
572                 const( AHardwareBuffer )*  buffer;
573             }
574             
575             struct VkMemoryGetAndroidHardwareBufferInfoANDROID {
576                 VkStructureType  sType = VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID;
577                 const( void )*   pNext;
578                 VkDeviceMemory   memory;
579             }
580             
581             struct VkExternalFormatANDROID {
582                 VkStructureType  sType = VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID;
583                 void*            pNext;
584                 uint64_t         externalFormat;
585             }
586             
587             alias PFN_vkGetAndroidHardwareBufferPropertiesANDROID                       = VkResult  function( VkDevice device, const( AHardwareBuffer )* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties );
588             alias PFN_vkGetMemoryAndroidHardwareBufferANDROID                           = VkResult  function( VkDevice device, const( VkMemoryGetAndroidHardwareBufferInfoANDROID )* pInfo, AHardwareBuffer pBuffer );
589         }
590 
591         // VK_GGP_frame_token : types and function pointer type aliases
592         else static if( __traits( isSame, extension, GGP_frame_token )) {
593             enum VK_GGP_frame_token = 1;
594 
595             enum VK_GGP_FRAME_TOKEN_SPEC_VERSION = 1;
596             enum VK_GGP_FRAME_TOKEN_EXTENSION_NAME = "VK_GGP_frame_token";
597             
598             struct VkPresentFrameTokenGGP {
599                 VkStructureType  sType = VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP;
600                 const( void )*   pNext;
601                 GgpFrameToken    frameToken;
602             }
603             
604         }
605 
606         // VK_FUCHSIA_imagepipe_surface : types and function pointer type aliases
607         else static if( __traits( isSame, extension, FUCHSIA_imagepipe_surface )) {
608             enum VK_FUCHSIA_imagepipe_surface = 1;
609 
610             enum VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION = 1;
611             enum VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME = "VK_FUCHSIA_imagepipe_surface";
612             
613             alias VkImagePipeSurfaceCreateFlagsFUCHSIA = VkFlags;
614             
615             struct VkImagePipeSurfaceCreateInfoFUCHSIA {
616                 VkStructureType                       sType = VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA;
617                 const( void )*                        pNext;
618                 VkImagePipeSurfaceCreateFlagsFUCHSIA  flags;
619                 zx_handle_t                           imagePipeHandle;
620             }
621             
622             alias PFN_vkCreateImagePipeSurfaceFUCHSIA                                   = VkResult  function( VkInstance instance, const( VkImagePipeSurfaceCreateInfoFUCHSIA )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
623         }
624 
625         // VK_EXT_metal_surface : types and function pointer type aliases
626         else static if( __traits( isSame, extension, EXT_metal_surface )) {
627             enum VK_EXT_metal_surface = 1;
628 
629             alias CAMetalLayer = CAMetalLayer;
630             
631             enum VK_EXT_METAL_SURFACE_SPEC_VERSION = 1;
632             enum VK_EXT_METAL_SURFACE_EXTENSION_NAME = "VK_EXT_metal_surface";
633             
634             alias VkMetalSurfaceCreateFlagsEXT = VkFlags;
635             
636             struct VkMetalSurfaceCreateInfoEXT {
637                 VkStructureType               sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
638                 const( void )*                pNext;
639                 VkMetalSurfaceCreateFlagsEXT  flags;
640                 const( CAMetalLayer )*        pLayer;
641             }
642             
643             alias PFN_vkCreateMetalSurfaceEXT                                           = VkResult  function( VkInstance instance, const( VkMetalSurfaceCreateInfoEXT )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
644         }
645 
646         // VK_EXT_full_screen_exclusive : types and function pointer type aliases
647         else static if( __traits( isSame, extension, EXT_full_screen_exclusive )) {
648             enum VK_EXT_full_screen_exclusive = 1;
649 
650             enum VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION = 4;
651             enum VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME = "VK_EXT_full_screen_exclusive";
652             
653             enum VkFullScreenExclusiveEXT {
654                 VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT                 = 0,
655                 VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT                 = 1,
656                 VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT              = 2,
657                 VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT  = 3,
658                 VK_FULL_SCREEN_EXCLUSIVE_BEGIN_RANGE_EXT             = VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT,
659                 VK_FULL_SCREEN_EXCLUSIVE_END_RANGE_EXT               = VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT,
660                 VK_FULL_SCREEN_EXCLUSIVE_RANGE_SIZE_EXT              = VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT - VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT + 1,
661                 VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT                = 0x7FFFFFFF
662             }
663             
664             enum VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT                = VkFullScreenExclusiveEXT.VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT;
665             enum VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT                = VkFullScreenExclusiveEXT.VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT;
666             enum VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT             = VkFullScreenExclusiveEXT.VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT;
667             enum VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = VkFullScreenExclusiveEXT.VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT;
668             enum VK_FULL_SCREEN_EXCLUSIVE_BEGIN_RANGE_EXT            = VkFullScreenExclusiveEXT.VK_FULL_SCREEN_EXCLUSIVE_BEGIN_RANGE_EXT;
669             enum VK_FULL_SCREEN_EXCLUSIVE_END_RANGE_EXT              = VkFullScreenExclusiveEXT.VK_FULL_SCREEN_EXCLUSIVE_END_RANGE_EXT;
670             enum VK_FULL_SCREEN_EXCLUSIVE_RANGE_SIZE_EXT             = VkFullScreenExclusiveEXT.VK_FULL_SCREEN_EXCLUSIVE_RANGE_SIZE_EXT;
671             enum VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT               = VkFullScreenExclusiveEXT.VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT;
672             
673             struct VkSurfaceFullScreenExclusiveInfoEXT {
674                 VkStructureType           sType = VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT;
675                 void*                     pNext;
676                 VkFullScreenExclusiveEXT  fullScreenExclusive;
677             }
678             
679             struct VkSurfaceCapabilitiesFullScreenExclusiveEXT {
680                 VkStructureType  sType = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT;
681                 void*            pNext;
682                 VkBool32         fullScreenExclusiveSupported;
683             }
684             
685             struct VkSurfaceFullScreenExclusiveWin32InfoEXT {
686                 VkStructureType  sType = VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT;
687                 const( void )*   pNext;
688                 HMONITOR         hmonitor;
689             }
690             
691             alias PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT                        = VkResult  function( VkPhysicalDevice physicalDevice, const( VkPhysicalDeviceSurfaceInfo2KHR )* pSurfaceInfo, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes );
692             alias PFN_vkAcquireFullScreenExclusiveModeEXT                               = VkResult  function( VkDevice device, VkSwapchainKHR swapchain );
693             alias PFN_vkReleaseFullScreenExclusiveModeEXT                               = VkResult  function( VkDevice device, VkSwapchainKHR swapchain );
694             alias PFN_vkGetDeviceGroupSurfacePresentModes2EXT                           = VkResult  function( VkDevice device, const( VkPhysicalDeviceSurfaceInfo2KHR )* pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR* pModes );
695         }
696 
697         // VK_EXT_directfb_surface : types and function pointer type aliases
698         else static if( __traits( isSame, extension, EXT_directfb_surface )) {
699             enum VK_EXT_directfb_surface = 1;
700 
701             enum VK_EXT_DIRECTFB_SURFACE_SPEC_VERSION = 1;
702             enum VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME = "VK_EXT_directfb_surface";
703             
704             alias VkDirectFBSurfaceCreateFlagsEXT = VkFlags;
705             
706             struct VkDirectFBSurfaceCreateInfoEXT {
707                 VkStructureType                  sType = VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT;
708                 const( void )*                   pNext;
709                 VkDirectFBSurfaceCreateFlagsEXT  flags;
710                 IDirectFB*                       dfb;
711                 IDirectFBSurface*                surface;
712             }
713             
714             alias PFN_vkCreateDirectFBSurfaceEXT                                        = VkResult  function( VkInstance instance, const( VkDirectFBSurfaceCreateInfoEXT )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkSurfaceKHR* pSurface );
715             alias PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT                 = VkBool32  function( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, IDirectFB* dfb );
716         }
717 
718         // VK_KHR_ray_tracing : types and function pointer type aliases
719         else static if( __traits( isSame, extension, KHR_ray_tracing )) {
720             enum VK_KHR_ray_tracing = 1;
721 
722             enum VK_KHR_RAY_TRACING_SPEC_VERSION = 8;
723             enum VK_KHR_RAY_TRACING_EXTENSION_NAME = "VK_KHR_ray_tracing";
724             
725             enum VkAccelerationStructureBuildTypeKHR {
726                 VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR                = 0,
727                 VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR              = 1,
728                 VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR      = 2,
729                 VK_ACCELERATION_STRUCTURE_BUILD_TYPE_BEGIN_RANGE_KHR         = VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR,
730                 VK_ACCELERATION_STRUCTURE_BUILD_TYPE_END_RANGE_KHR           = VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR,
731                 VK_ACCELERATION_STRUCTURE_BUILD_TYPE_RANGE_SIZE_KHR          = VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR - VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR + 1,
732                 VK_ACCELERATION_STRUCTURE_BUILD_TYPE_MAX_ENUM_KHR            = 0x7FFFFFFF
733             }
734             
735             enum VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR               = VkAccelerationStructureBuildTypeKHR.VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR;
736             enum VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR             = VkAccelerationStructureBuildTypeKHR.VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR;
737             enum VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR     = VkAccelerationStructureBuildTypeKHR.VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR;
738             enum VK_ACCELERATION_STRUCTURE_BUILD_TYPE_BEGIN_RANGE_KHR        = VkAccelerationStructureBuildTypeKHR.VK_ACCELERATION_STRUCTURE_BUILD_TYPE_BEGIN_RANGE_KHR;
739             enum VK_ACCELERATION_STRUCTURE_BUILD_TYPE_END_RANGE_KHR          = VkAccelerationStructureBuildTypeKHR.VK_ACCELERATION_STRUCTURE_BUILD_TYPE_END_RANGE_KHR;
740             enum VK_ACCELERATION_STRUCTURE_BUILD_TYPE_RANGE_SIZE_KHR         = VkAccelerationStructureBuildTypeKHR.VK_ACCELERATION_STRUCTURE_BUILD_TYPE_RANGE_SIZE_KHR;
741             enum VK_ACCELERATION_STRUCTURE_BUILD_TYPE_MAX_ENUM_KHR           = VkAccelerationStructureBuildTypeKHR.VK_ACCELERATION_STRUCTURE_BUILD_TYPE_MAX_ENUM_KHR;
742             
743             union VkDeviceOrHostAddressKHR {
744                 VkDeviceAddress  deviceAddress;
745                 void*            hostAddress;
746             }
747             
748             union VkDeviceOrHostAddressConstKHR {
749                 VkDeviceAddress  deviceAddress;
750                 const( void )*   hostAddress;
751             }
752             
753             struct VkAccelerationStructureBuildOffsetInfoKHR {
754                 uint32_t  primitiveCount;
755                 uint32_t  primitiveOffset;
756                 uint32_t  firstVertex;
757                 uint32_t  transformOffset;
758             }
759             
760             struct VkRayTracingShaderGroupCreateInfoKHR {
761                 VkStructureType                 sType = VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR;
762                 const( void )*                  pNext;
763                 VkRayTracingShaderGroupTypeKHR  type;
764                 uint32_t                        generalShader;
765                 uint32_t                        closestHitShader;
766                 uint32_t                        anyHitShader;
767                 uint32_t                        intersectionShader;
768                 const( void )*                  pShaderGroupCaptureReplayHandle;
769             }
770             
771             struct VkRayTracingPipelineInterfaceCreateInfoKHR {
772                 VkStructureType  sType = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR;
773                 const( void )*   pNext;
774                 uint32_t         maxPayloadSize;
775                 uint32_t         maxAttributeSize;
776                 uint32_t         maxCallableSize;
777             }
778             
779             struct VkRayTracingPipelineCreateInfoKHR {
780                 VkStructureType                                       sType = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR;
781                 const( void )*                                        pNext;
782                 VkPipelineCreateFlags                                 flags;
783                 uint32_t                                              stageCount;
784                 const( VkPipelineShaderStageCreateInfo )*             pStages;
785                 uint32_t                                              groupCount;
786                 const( VkRayTracingShaderGroupCreateInfoKHR )*        pGroups;
787                 uint32_t                                              maxRecursionDepth;
788                 VkPipelineLibraryCreateInfoKHR                        libraries;
789                 const( VkRayTracingPipelineInterfaceCreateInfoKHR )*  pLibraryInterface;
790                 VkPipelineLayout                                      layout;
791                 VkPipeline                                            basePipelineHandle;
792                 int32_t                                               basePipelineIndex;
793             }
794             
795             struct VkAccelerationStructureGeometryTrianglesDataKHR {
796                 VkStructureType                sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR;
797                 const( void )*                 pNext;
798                 VkFormat                       vertexFormat;
799                 VkDeviceOrHostAddressConstKHR  vertexData;
800                 VkDeviceSize                   vertexStride;
801                 VkIndexType                    indexType;
802                 VkDeviceOrHostAddressConstKHR  indexData;
803                 VkDeviceOrHostAddressConstKHR  transformData;
804             }
805             
806             struct VkAccelerationStructureGeometryAabbsDataKHR {
807                 VkStructureType                sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR;
808                 const( void )*                 pNext;
809                 VkDeviceOrHostAddressConstKHR  data;
810                 VkDeviceSize                   stride;
811             }
812             
813             struct VkAccelerationStructureGeometryInstancesDataKHR {
814                 VkStructureType                sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR;
815                 const( void )*                 pNext;
816                 VkBool32                       arrayOfPointers;
817                 VkDeviceOrHostAddressConstKHR  data;
818             }
819             
820             union VkAccelerationStructureGeometryDataKHR {
821                 VkAccelerationStructureGeometryTrianglesDataKHR  triangles;
822                 VkAccelerationStructureGeometryAabbsDataKHR      aabbs;
823                 VkAccelerationStructureGeometryInstancesDataKHR  instances;
824             }
825             
826             struct VkAccelerationStructureGeometryKHR {
827                 VkStructureType                         sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR;
828                 const( void )*                          pNext;
829                 VkGeometryTypeKHR                       geometryType;
830                 VkAccelerationStructureGeometryDataKHR  geometry;
831                 VkGeometryFlagsKHR                      flags;
832             }
833             
834             struct VkAccelerationStructureBuildGeometryInfoKHR {
835                 VkStructureType                                sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
836                 const( void )*                                 pNext;
837                 VkAccelerationStructureTypeKHR                 type;
838                 VkBuildAccelerationStructureFlagsKHR           flags;
839                 VkBool32                                       update;
840                 VkAccelerationStructureKHR                     srcAccelerationStructure;
841                 VkAccelerationStructureKHR                     dstAccelerationStructure;
842                 VkBool32                                       geometryArrayOfPointers;
843                 uint32_t                                       geometryCount;
844                 const( VkAccelerationStructureGeometryKHR* )*  ppGeometries;
845                 VkDeviceOrHostAddressKHR                       scratchData;
846             }
847             
848             struct VkAccelerationStructureCreateGeometryTypeInfoKHR {
849                 VkStructureType    sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_GEOMETRY_TYPE_INFO_KHR;
850                 const( void )*     pNext;
851                 VkGeometryTypeKHR  geometryType;
852                 uint32_t           maxPrimitiveCount;
853                 VkIndexType        indexType;
854                 uint32_t           maxVertexCount;
855                 VkFormat           vertexFormat;
856                 VkBool32           allowsTransforms;
857             }
858             
859             struct VkAccelerationStructureCreateInfoKHR {
860                 VkStructureType                                             sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR;
861                 const( void )*                                              pNext;
862                 VkDeviceSize                                                compactedSize;
863                 VkAccelerationStructureTypeKHR                              type;
864                 VkBuildAccelerationStructureFlagsKHR                        flags;
865                 uint32_t                                                    maxGeometryCount;
866                 const( VkAccelerationStructureCreateGeometryTypeInfoKHR )*  pGeometryInfos;
867                 VkDeviceAddress                                             deviceAddress;
868             }
869             
870             struct VkAccelerationStructureMemoryRequirementsInfoKHR {
871                 VkStructureType                                   sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR;
872                 const( void )*                                    pNext;
873                 VkAccelerationStructureMemoryRequirementsTypeKHR  type;
874                 VkAccelerationStructureBuildTypeKHR               buildType;
875                 VkAccelerationStructureKHR                        accelerationStructure;
876             }
877             
878             struct VkPhysicalDeviceRayTracingFeaturesKHR {
879                 VkStructureType  sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_FEATURES_KHR;
880                 void*            pNext;
881                 VkBool32         rayTracing;
882                 VkBool32         rayTracingShaderGroupHandleCaptureReplay;
883                 VkBool32         rayTracingShaderGroupHandleCaptureReplayMixed;
884                 VkBool32         rayTracingAccelerationStructureCaptureReplay;
885                 VkBool32         rayTracingIndirectTraceRays;
886                 VkBool32         rayTracingIndirectAccelerationStructureBuild;
887                 VkBool32         rayTracingHostAccelerationStructureCommands;
888                 VkBool32         rayQuery;
889                 VkBool32         rayTracingPrimitiveCulling;
890             }
891             
892             struct VkPhysicalDeviceRayTracingPropertiesKHR {
893                 VkStructureType  sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR;
894                 void*            pNext;
895                 uint32_t         shaderGroupHandleSize;
896                 uint32_t         maxRecursionDepth;
897                 uint32_t         maxShaderGroupStride;
898                 uint32_t         shaderGroupBaseAlignment;
899                 uint64_t         maxGeometryCount;
900                 uint64_t         maxInstanceCount;
901                 uint64_t         maxPrimitiveCount;
902                 uint32_t         maxDescriptorSetAccelerationStructures;
903                 uint32_t         shaderGroupHandleCaptureReplaySize;
904             }
905             
906             struct VkAccelerationStructureDeviceAddressInfoKHR {
907                 VkStructureType             sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR;
908                 const( void )*              pNext;
909                 VkAccelerationStructureKHR  accelerationStructure;
910             }
911             
912             struct VkAccelerationStructureVersionKHR {
913                 VkStructureType    sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_KHR;
914                 const( void )*     pNext;
915                 const( uint8_t )*  versionData;
916             }
917             
918             struct VkStridedBufferRegionKHR {
919                 VkBuffer      buffer;
920                 VkDeviceSize  offset;
921                 VkDeviceSize  stride;
922                 VkDeviceSize  size;
923             }
924             
925             struct VkTraceRaysIndirectCommandKHR {
926                 uint32_t  width;
927                 uint32_t  height;
928                 uint32_t  depth;
929             }
930             
931             struct VkCopyAccelerationStructureToMemoryInfoKHR {
932                 VkStructureType                     sType = VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR;
933                 const( void )*                      pNext;
934                 VkAccelerationStructureKHR          src;
935                 VkDeviceOrHostAddressKHR            dst;
936                 VkCopyAccelerationStructureModeKHR  mode;
937             }
938             
939             struct VkCopyMemoryToAccelerationStructureInfoKHR {
940                 VkStructureType                     sType = VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR;
941                 const( void )*                      pNext;
942                 VkDeviceOrHostAddressConstKHR       src;
943                 VkAccelerationStructureKHR          dst;
944                 VkCopyAccelerationStructureModeKHR  mode;
945             }
946             
947             struct VkCopyAccelerationStructureInfoKHR {
948                 VkStructureType                     sType = VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR;
949                 const( void )*                      pNext;
950                 VkAccelerationStructureKHR          src;
951                 VkAccelerationStructureKHR          dst;
952                 VkCopyAccelerationStructureModeKHR  mode;
953             }
954             
955             alias PFN_vkCreateAccelerationStructureKHR                                  = VkResult  function( VkDevice device, const( VkAccelerationStructureCreateInfoKHR )* pCreateInfo, const( VkAllocationCallbacks )* pAllocator, VkAccelerationStructureKHR* pAccelerationStructure );
956             alias PFN_vkGetAccelerationStructureMemoryRequirementsKHR                   = void      function( VkDevice device, const( VkAccelerationStructureMemoryRequirementsInfoKHR )* pInfo, VkMemoryRequirements2* pMemoryRequirements );
957             alias PFN_vkCmdBuildAccelerationStructureKHR                                = void      function( VkCommandBuffer commandBuffer, uint32_t infoCount, const( VkAccelerationStructureBuildGeometryInfoKHR )* pInfos, const( VkAccelerationStructureBuildOffsetInfoKHR* )* ppOffsetInfos );
958             alias PFN_vkCmdBuildAccelerationStructureIndirectKHR                        = void      function( VkCommandBuffer commandBuffer, const( VkAccelerationStructureBuildGeometryInfoKHR )* pInfo, VkBuffer indirectBuffer, VkDeviceSize indirectOffset, uint32_t indirectStride );
959             alias PFN_vkBuildAccelerationStructureKHR                                   = VkResult  function( VkDevice device, uint32_t infoCount, const( VkAccelerationStructureBuildGeometryInfoKHR )* pInfos, const( VkAccelerationStructureBuildOffsetInfoKHR* )* ppOffsetInfos );
960             alias PFN_vkCopyAccelerationStructureKHR                                    = VkResult  function( VkDevice device, const( VkCopyAccelerationStructureInfoKHR )* pInfo );
961             alias PFN_vkCopyAccelerationStructureToMemoryKHR                            = VkResult  function( VkDevice device, const( VkCopyAccelerationStructureToMemoryInfoKHR )* pInfo );
962             alias PFN_vkCopyMemoryToAccelerationStructureKHR                            = VkResult  function( VkDevice device, const( VkCopyMemoryToAccelerationStructureInfoKHR )* pInfo );
963             alias PFN_vkWriteAccelerationStructuresPropertiesKHR                        = VkResult  function( VkDevice device, uint32_t accelerationStructureCount, const( VkAccelerationStructureKHR )* pAccelerationStructures, VkQueryType queryType, size_t dataSize, void* pData, size_t stride );
964             alias PFN_vkCmdCopyAccelerationStructureKHR                                 = void      function( VkCommandBuffer commandBuffer, const( VkCopyAccelerationStructureInfoKHR )* pInfo );
965             alias PFN_vkCmdCopyAccelerationStructureToMemoryKHR                         = void      function( VkCommandBuffer commandBuffer, const( VkCopyAccelerationStructureToMemoryInfoKHR )* pInfo );
966             alias PFN_vkCmdCopyMemoryToAccelerationStructureKHR                         = void      function( VkCommandBuffer commandBuffer, const( VkCopyMemoryToAccelerationStructureInfoKHR )* pInfo );
967             alias PFN_vkCmdTraceRaysKHR                                                 = void      function( VkCommandBuffer commandBuffer, const( VkStridedBufferRegionKHR )* pRaygenShaderBindingTable, const( VkStridedBufferRegionKHR )* pMissShaderBindingTable, const( VkStridedBufferRegionKHR )* pHitShaderBindingTable, const( VkStridedBufferRegionKHR )* pCallableShaderBindingTable, uint32_t width, uint32_t height, uint32_t depth );
968             alias PFN_vkCreateRayTracingPipelinesKHR                                    = VkResult  function( VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const( VkRayTracingPipelineCreateInfoKHR )* pCreateInfos, const( VkAllocationCallbacks )* pAllocator, VkPipeline* pPipelines );
969             alias PFN_vkGetAccelerationStructureDeviceAddressKHR                        = VkDeviceAddress  function( VkDevice device, const( VkAccelerationStructureDeviceAddressInfoKHR )* pInfo );
970             alias PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR                 = VkResult  function( VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData );
971             alias PFN_vkCmdTraceRaysIndirectKHR                                         = void      function( VkCommandBuffer commandBuffer, const( VkStridedBufferRegionKHR )* pRaygenShaderBindingTable, const( VkStridedBufferRegionKHR )* pMissShaderBindingTable, const( VkStridedBufferRegionKHR )* pHitShaderBindingTable, const( VkStridedBufferRegionKHR )* pCallableShaderBindingTable, VkBuffer buffer, VkDeviceSize offset );
972             alias PFN_vkGetDeviceAccelerationStructureCompatibilityKHR                  = VkResult  function( VkDevice device, const( VkAccelerationStructureVersionKHR )* Version );
973         }
974 
975         __gshared {
976 
977             // VK_KHR_xlib_surface : function pointer decelerations
978             static if( __traits( isSame, extension, KHR_xlib_surface )) {
979                 PFN_vkCreateXlibSurfaceKHR                                            vkCreateXlibSurfaceKHR;
980                 PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR                     vkGetPhysicalDeviceXlibPresentationSupportKHR;
981             }
982 
983             // VK_KHR_xcb_surface : function pointer decelerations
984             else static if( __traits( isSame, extension, KHR_xcb_surface )) {
985                 PFN_vkCreateXcbSurfaceKHR                                             vkCreateXcbSurfaceKHR;
986                 PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR                      vkGetPhysicalDeviceXcbPresentationSupportKHR;
987             }
988 
989             // VK_KHR_wayland_surface : function pointer decelerations
990             else static if( __traits( isSame, extension, KHR_wayland_surface )) {
991                 PFN_vkCreateWaylandSurfaceKHR                                         vkCreateWaylandSurfaceKHR;
992                 PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR                  vkGetPhysicalDeviceWaylandPresentationSupportKHR;
993             }
994 
995             // VK_KHR_android_surface : function pointer decelerations
996             else static if( __traits( isSame, extension, KHR_android_surface )) {
997                 PFN_vkCreateAndroidSurfaceKHR                                         vkCreateAndroidSurfaceKHR;
998             }
999 
1000             // VK_KHR_win32_surface : function pointer decelerations
1001             else static if( __traits( isSame, extension, KHR_win32_surface )) {
1002                 PFN_vkCreateWin32SurfaceKHR                                           vkCreateWin32SurfaceKHR;
1003                 PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR                    vkGetPhysicalDeviceWin32PresentationSupportKHR;
1004             }
1005 
1006             // VK_KHR_external_memory_win32 : function pointer decelerations
1007             else static if( __traits( isSame, extension, KHR_external_memory_win32 )) {
1008                 PFN_vkGetMemoryWin32HandleKHR                                         vkGetMemoryWin32HandleKHR;
1009                 PFN_vkGetMemoryWin32HandlePropertiesKHR                               vkGetMemoryWin32HandlePropertiesKHR;
1010             }
1011 
1012             // VK_KHR_external_semaphore_win32 : function pointer decelerations
1013             else static if( __traits( isSame, extension, KHR_external_semaphore_win32 )) {
1014                 PFN_vkImportSemaphoreWin32HandleKHR                                   vkImportSemaphoreWin32HandleKHR;
1015                 PFN_vkGetSemaphoreWin32HandleKHR                                      vkGetSemaphoreWin32HandleKHR;
1016             }
1017 
1018             // VK_KHR_external_fence_win32 : function pointer decelerations
1019             else static if( __traits( isSame, extension, KHR_external_fence_win32 )) {
1020                 PFN_vkImportFenceWin32HandleKHR                                       vkImportFenceWin32HandleKHR;
1021                 PFN_vkGetFenceWin32HandleKHR                                          vkGetFenceWin32HandleKHR;
1022             }
1023 
1024             // VK_KHR_deferred_host_operations : function pointer decelerations
1025             else static if( __traits( isSame, extension, KHR_deferred_host_operations )) {
1026                 PFN_vkCreateDeferredOperationKHR                                      vkCreateDeferredOperationKHR;
1027                 PFN_vkDestroyDeferredOperationKHR                                     vkDestroyDeferredOperationKHR;
1028                 PFN_vkGetDeferredOperationMaxConcurrencyKHR                           vkGetDeferredOperationMaxConcurrencyKHR;
1029                 PFN_vkGetDeferredOperationResultKHR                                   vkGetDeferredOperationResultKHR;
1030                 PFN_vkDeferredOperationJoinKHR                                        vkDeferredOperationJoinKHR;
1031             }
1032 
1033             // VK_GGP_stream_descriptor_surface : function pointer decelerations
1034             else static if( __traits( isSame, extension, GGP_stream_descriptor_surface )) {
1035                 PFN_vkCreateStreamDescriptorSurfaceGGP                                vkCreateStreamDescriptorSurfaceGGP;
1036             }
1037 
1038             // VK_NV_external_memory_win32 : function pointer decelerations
1039             else static if( __traits( isSame, extension, NV_external_memory_win32 )) {
1040                 PFN_vkGetMemoryWin32HandleNV                                          vkGetMemoryWin32HandleNV;
1041             }
1042 
1043             // VK_NN_vi_surface : function pointer decelerations
1044             else static if( __traits( isSame, extension, NN_vi_surface )) {
1045                 PFN_vkCreateViSurfaceNN                                               vkCreateViSurfaceNN;
1046             }
1047 
1048             // VK_EXT_acquire_xlib_display : function pointer decelerations
1049             else static if( __traits( isSame, extension, EXT_acquire_xlib_display )) {
1050                 PFN_vkAcquireXlibDisplayEXT                                           vkAcquireXlibDisplayEXT;
1051                 PFN_vkGetRandROutputDisplayEXT                                        vkGetRandROutputDisplayEXT;
1052             }
1053 
1054             // VK_MVK_ios_surface : function pointer decelerations
1055             else static if( __traits( isSame, extension, MVK_ios_surface )) {
1056                 PFN_vkCreateIOSSurfaceMVK                                             vkCreateIOSSurfaceMVK;
1057             }
1058 
1059             // VK_MVK_macos_surface : function pointer decelerations
1060             else static if( __traits( isSame, extension, MVK_macos_surface )) {
1061                 PFN_vkCreateMacOSSurfaceMVK                                           vkCreateMacOSSurfaceMVK;
1062             }
1063 
1064             // VK_ANDROID_external_memory_android_hardware_buffer : function pointer decelerations
1065             else static if( __traits( isSame, extension, ANDROID_external_memory_android_hardware_buffer )) {
1066                 PFN_vkGetAndroidHardwareBufferPropertiesANDROID                       vkGetAndroidHardwareBufferPropertiesANDROID;
1067                 PFN_vkGetMemoryAndroidHardwareBufferANDROID                           vkGetMemoryAndroidHardwareBufferANDROID;
1068             }
1069 
1070             // VK_FUCHSIA_imagepipe_surface : function pointer decelerations
1071             else static if( __traits( isSame, extension, FUCHSIA_imagepipe_surface )) {
1072                 PFN_vkCreateImagePipeSurfaceFUCHSIA                                   vkCreateImagePipeSurfaceFUCHSIA;
1073             }
1074 
1075             // VK_EXT_metal_surface : function pointer decelerations
1076             else static if( __traits( isSame, extension, EXT_metal_surface )) {
1077                 PFN_vkCreateMetalSurfaceEXT                                           vkCreateMetalSurfaceEXT;
1078             }
1079 
1080             // VK_EXT_full_screen_exclusive : function pointer decelerations
1081             else static if( __traits( isSame, extension, EXT_full_screen_exclusive )) {
1082                 PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT                        vkGetPhysicalDeviceSurfacePresentModes2EXT;
1083                 PFN_vkAcquireFullScreenExclusiveModeEXT                               vkAcquireFullScreenExclusiveModeEXT;
1084                 PFN_vkReleaseFullScreenExclusiveModeEXT                               vkReleaseFullScreenExclusiveModeEXT;
1085                 PFN_vkGetDeviceGroupSurfacePresentModes2EXT                           vkGetDeviceGroupSurfacePresentModes2EXT;
1086             }
1087 
1088             // VK_EXT_directfb_surface : function pointer decelerations
1089             else static if( __traits( isSame, extension, EXT_directfb_surface )) {
1090                 PFN_vkCreateDirectFBSurfaceEXT                                        vkCreateDirectFBSurfaceEXT;
1091                 PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT                 vkGetPhysicalDeviceDirectFBPresentationSupportEXT;
1092             }
1093 
1094             // VK_KHR_ray_tracing : function pointer decelerations
1095             else static if( __traits( isSame, extension, KHR_ray_tracing )) {
1096                 PFN_vkCreateAccelerationStructureKHR                                  vkCreateAccelerationStructureKHR;
1097                 PFN_vkGetAccelerationStructureMemoryRequirementsKHR                   vkGetAccelerationStructureMemoryRequirementsKHR;
1098                 PFN_vkCmdBuildAccelerationStructureKHR                                vkCmdBuildAccelerationStructureKHR;
1099                 PFN_vkCmdBuildAccelerationStructureIndirectKHR                        vkCmdBuildAccelerationStructureIndirectKHR;
1100                 PFN_vkBuildAccelerationStructureKHR                                   vkBuildAccelerationStructureKHR;
1101                 PFN_vkCopyAccelerationStructureKHR                                    vkCopyAccelerationStructureKHR;
1102                 PFN_vkCopyAccelerationStructureToMemoryKHR                            vkCopyAccelerationStructureToMemoryKHR;
1103                 PFN_vkCopyMemoryToAccelerationStructureKHR                            vkCopyMemoryToAccelerationStructureKHR;
1104                 PFN_vkWriteAccelerationStructuresPropertiesKHR                        vkWriteAccelerationStructuresPropertiesKHR;
1105                 PFN_vkCmdCopyAccelerationStructureKHR                                 vkCmdCopyAccelerationStructureKHR;
1106                 PFN_vkCmdCopyAccelerationStructureToMemoryKHR                         vkCmdCopyAccelerationStructureToMemoryKHR;
1107                 PFN_vkCmdCopyMemoryToAccelerationStructureKHR                         vkCmdCopyMemoryToAccelerationStructureKHR;
1108                 PFN_vkCmdTraceRaysKHR                                                 vkCmdTraceRaysKHR;
1109                 PFN_vkCreateRayTracingPipelinesKHR                                    vkCreateRayTracingPipelinesKHR;
1110                 PFN_vkGetAccelerationStructureDeviceAddressKHR                        vkGetAccelerationStructureDeviceAddressKHR;
1111                 PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR                 vkGetRayTracingCaptureReplayShaderGroupHandlesKHR;
1112                 PFN_vkCmdTraceRaysIndirectKHR                                         vkCmdTraceRaysIndirectKHR;
1113                 PFN_vkGetDeviceAccelerationStructureCompatibilityKHR                  vkGetDeviceAccelerationStructureCompatibilityKHR;
1114             }
1115         }
1116     }
1117 
1118     // workaround for not being able to mixin two overloads with the same symbol name
1119     alias loadDeviceLevelFunctionsExt = loadDeviceLevelFunctionsExtI;
1120     alias loadDeviceLevelFunctionsExt = loadDeviceLevelFunctionsExtD;
1121 
1122     // backwards compatibility aliases
1123     alias loadInstanceLevelFunctions = loadInstanceLevelFunctionsExt;
1124     alias loadDeviceLevelFunctions = loadDeviceLevelFunctionsExt;
1125     alias DispatchDevice = DispatchDeviceExt;
1126 
1127     // compose loadInstanceLevelFunctionsExt function out of unextended
1128     // loadInstanceLevelFunctions and additional function pointers from extensions
1129     void loadInstanceLevelFunctionsExt( VkInstance instance ) {
1130 
1131         // first load all non platform related function pointers from implementation
1132         erupted.functions.loadInstanceLevelFunctions( instance );
1133 
1134         // 2. loop through alias sequence and mixin corresponding
1135         // instance level function pointer definitions
1136         static foreach( extension; noDuplicateExtensions ) {
1137 
1138             // VK_KHR_xlib_surface : load instance level function definitions
1139             static if( __traits( isSame, extension, KHR_xlib_surface )) {
1140                 vkCreateXlibSurfaceKHR                                            = cast( PFN_vkCreateXlibSurfaceKHR                                            ) vkGetInstanceProcAddr( instance, "vkCreateXlibSurfaceKHR" );
1141                 vkGetPhysicalDeviceXlibPresentationSupportKHR                     = cast( PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR                     ) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR" );
1142             }
1143 
1144             // VK_KHR_xcb_surface : load instance level function definitions
1145             else static if( __traits( isSame, extension, KHR_xcb_surface )) {
1146                 vkCreateXcbSurfaceKHR                                             = cast( PFN_vkCreateXcbSurfaceKHR                                             ) vkGetInstanceProcAddr( instance, "vkCreateXcbSurfaceKHR" );
1147                 vkGetPhysicalDeviceXcbPresentationSupportKHR                      = cast( PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR                      ) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR" );
1148             }
1149 
1150             // VK_KHR_wayland_surface : load instance level function definitions
1151             else static if( __traits( isSame, extension, KHR_wayland_surface )) {
1152                 vkCreateWaylandSurfaceKHR                                         = cast( PFN_vkCreateWaylandSurfaceKHR                                         ) vkGetInstanceProcAddr( instance, "vkCreateWaylandSurfaceKHR" );
1153                 vkGetPhysicalDeviceWaylandPresentationSupportKHR                  = cast( PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR                  ) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR" );
1154             }
1155 
1156             // VK_KHR_android_surface : load instance level function definitions
1157             else static if( __traits( isSame, extension, KHR_android_surface )) {
1158                 vkCreateAndroidSurfaceKHR                                         = cast( PFN_vkCreateAndroidSurfaceKHR                                         ) vkGetInstanceProcAddr( instance, "vkCreateAndroidSurfaceKHR" );
1159             }
1160 
1161             // VK_KHR_win32_surface : load instance level function definitions
1162             else static if( __traits( isSame, extension, KHR_win32_surface )) {
1163                 vkCreateWin32SurfaceKHR                                           = cast( PFN_vkCreateWin32SurfaceKHR                                           ) vkGetInstanceProcAddr( instance, "vkCreateWin32SurfaceKHR" );
1164                 vkGetPhysicalDeviceWin32PresentationSupportKHR                    = cast( PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR                    ) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR" );
1165             }
1166 
1167             // VK_GGP_stream_descriptor_surface : load instance level function definitions
1168             else static if( __traits( isSame, extension, GGP_stream_descriptor_surface )) {
1169                 vkCreateStreamDescriptorSurfaceGGP                                = cast( PFN_vkCreateStreamDescriptorSurfaceGGP                                ) vkGetInstanceProcAddr( instance, "vkCreateStreamDescriptorSurfaceGGP" );
1170             }
1171 
1172             // VK_NN_vi_surface : load instance level function definitions
1173             else static if( __traits( isSame, extension, NN_vi_surface )) {
1174                 vkCreateViSurfaceNN                                               = cast( PFN_vkCreateViSurfaceNN                                               ) vkGetInstanceProcAddr( instance, "vkCreateViSurfaceNN" );
1175             }
1176 
1177             // VK_EXT_acquire_xlib_display : load instance level function definitions
1178             else static if( __traits( isSame, extension, EXT_acquire_xlib_display )) {
1179                 vkAcquireXlibDisplayEXT                                           = cast( PFN_vkAcquireXlibDisplayEXT                                           ) vkGetInstanceProcAddr( instance, "vkAcquireXlibDisplayEXT" );
1180                 vkGetRandROutputDisplayEXT                                        = cast( PFN_vkGetRandROutputDisplayEXT                                        ) vkGetInstanceProcAddr( instance, "vkGetRandROutputDisplayEXT" );
1181             }
1182 
1183             // VK_MVK_ios_surface : load instance level function definitions
1184             else static if( __traits( isSame, extension, MVK_ios_surface )) {
1185                 vkCreateIOSSurfaceMVK                                             = cast( PFN_vkCreateIOSSurfaceMVK                                             ) vkGetInstanceProcAddr( instance, "vkCreateIOSSurfaceMVK" );
1186             }
1187 
1188             // VK_MVK_macos_surface : load instance level function definitions
1189             else static if( __traits( isSame, extension, MVK_macos_surface )) {
1190                 vkCreateMacOSSurfaceMVK                                           = cast( PFN_vkCreateMacOSSurfaceMVK                                           ) vkGetInstanceProcAddr( instance, "vkCreateMacOSSurfaceMVK" );
1191             }
1192 
1193             // VK_FUCHSIA_imagepipe_surface : load instance level function definitions
1194             else static if( __traits( isSame, extension, FUCHSIA_imagepipe_surface )) {
1195                 vkCreateImagePipeSurfaceFUCHSIA                                   = cast( PFN_vkCreateImagePipeSurfaceFUCHSIA                                   ) vkGetInstanceProcAddr( instance, "vkCreateImagePipeSurfaceFUCHSIA" );
1196             }
1197 
1198             // VK_EXT_metal_surface : load instance level function definitions
1199             else static if( __traits( isSame, extension, EXT_metal_surface )) {
1200                 vkCreateMetalSurfaceEXT                                           = cast( PFN_vkCreateMetalSurfaceEXT                                           ) vkGetInstanceProcAddr( instance, "vkCreateMetalSurfaceEXT" );
1201             }
1202 
1203             // VK_EXT_full_screen_exclusive : load instance level function definitions
1204             else static if( __traits( isSame, extension, EXT_full_screen_exclusive )) {
1205                 vkGetPhysicalDeviceSurfacePresentModes2EXT                        = cast( PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT                        ) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceSurfacePresentModes2EXT" );
1206             }
1207 
1208             // VK_EXT_directfb_surface : load instance level function definitions
1209             else static if( __traits( isSame, extension, EXT_directfb_surface )) {
1210                 vkCreateDirectFBSurfaceEXT                                        = cast( PFN_vkCreateDirectFBSurfaceEXT                                        ) vkGetInstanceProcAddr( instance, "vkCreateDirectFBSurfaceEXT" );
1211                 vkGetPhysicalDeviceDirectFBPresentationSupportEXT                 = cast( PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT                 ) vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceDirectFBPresentationSupportEXT" );
1212             }
1213         }
1214     }
1215 
1216     // compose instance based loadDeviceLevelFunctionsExtI function out of unextended
1217     // loadDeviceLevelFunctions and additional function pointers from extensions
1218     // suffix I is required, as we cannot mixin mixin two overloads with the same symbol name (any more!)
1219     void loadDeviceLevelFunctionsExtI( VkInstance instance ) {
1220 
1221         // first load all non platform related function pointers from implementation
1222         erupted.functions.loadDeviceLevelFunctions( instance );
1223 
1224         // 3. loop through alias sequence and mixin corresponding
1225         // instance based device level function pointer definitions
1226         static foreach( extension; noDuplicateExtensions ) {
1227 
1228             // VK_KHR_external_memory_win32 : load instance based device level function definitions
1229             static if( __traits( isSame, extension, KHR_external_memory_win32 )) {
1230                 vkGetMemoryWin32HandleKHR                         = cast( PFN_vkGetMemoryWin32HandleKHR                         ) vkGetInstanceProcAddr( instance, "vkGetMemoryWin32HandleKHR" );
1231                 vkGetMemoryWin32HandlePropertiesKHR               = cast( PFN_vkGetMemoryWin32HandlePropertiesKHR               ) vkGetInstanceProcAddr( instance, "vkGetMemoryWin32HandlePropertiesKHR" );
1232             }
1233 
1234             // VK_KHR_external_semaphore_win32 : load instance based device level function definitions
1235             else static if( __traits( isSame, extension, KHR_external_semaphore_win32 )) {
1236                 vkImportSemaphoreWin32HandleKHR                   = cast( PFN_vkImportSemaphoreWin32HandleKHR                   ) vkGetInstanceProcAddr( instance, "vkImportSemaphoreWin32HandleKHR" );
1237                 vkGetSemaphoreWin32HandleKHR                      = cast( PFN_vkGetSemaphoreWin32HandleKHR                      ) vkGetInstanceProcAddr( instance, "vkGetSemaphoreWin32HandleKHR" );
1238             }
1239 
1240             // VK_KHR_external_fence_win32 : load instance based device level function definitions
1241             else static if( __traits( isSame, extension, KHR_external_fence_win32 )) {
1242                 vkImportFenceWin32HandleKHR                       = cast( PFN_vkImportFenceWin32HandleKHR                       ) vkGetInstanceProcAddr( instance, "vkImportFenceWin32HandleKHR" );
1243                 vkGetFenceWin32HandleKHR                          = cast( PFN_vkGetFenceWin32HandleKHR                          ) vkGetInstanceProcAddr( instance, "vkGetFenceWin32HandleKHR" );
1244             }
1245 
1246             // VK_KHR_deferred_host_operations : load instance based device level function definitions
1247             else static if( __traits( isSame, extension, KHR_deferred_host_operations )) {
1248                 vkCreateDeferredOperationKHR                      = cast( PFN_vkCreateDeferredOperationKHR                      ) vkGetInstanceProcAddr( instance, "vkCreateDeferredOperationKHR" );
1249                 vkDestroyDeferredOperationKHR                     = cast( PFN_vkDestroyDeferredOperationKHR                     ) vkGetInstanceProcAddr( instance, "vkDestroyDeferredOperationKHR" );
1250                 vkGetDeferredOperationMaxConcurrencyKHR           = cast( PFN_vkGetDeferredOperationMaxConcurrencyKHR           ) vkGetInstanceProcAddr( instance, "vkGetDeferredOperationMaxConcurrencyKHR" );
1251                 vkGetDeferredOperationResultKHR                   = cast( PFN_vkGetDeferredOperationResultKHR                   ) vkGetInstanceProcAddr( instance, "vkGetDeferredOperationResultKHR" );
1252                 vkDeferredOperationJoinKHR                        = cast( PFN_vkDeferredOperationJoinKHR                        ) vkGetInstanceProcAddr( instance, "vkDeferredOperationJoinKHR" );
1253             }
1254 
1255             // VK_NV_external_memory_win32 : load instance based device level function definitions
1256             else static if( __traits( isSame, extension, NV_external_memory_win32 )) {
1257                 vkGetMemoryWin32HandleNV                          = cast( PFN_vkGetMemoryWin32HandleNV                          ) vkGetInstanceProcAddr( instance, "vkGetMemoryWin32HandleNV" );
1258             }
1259 
1260             // VK_ANDROID_external_memory_android_hardware_buffer : load instance based device level function definitions
1261             else static if( __traits( isSame, extension, ANDROID_external_memory_android_hardware_buffer )) {
1262                 vkGetAndroidHardwareBufferPropertiesANDROID       = cast( PFN_vkGetAndroidHardwareBufferPropertiesANDROID       ) vkGetInstanceProcAddr( instance, "vkGetAndroidHardwareBufferPropertiesANDROID" );
1263                 vkGetMemoryAndroidHardwareBufferANDROID           = cast( PFN_vkGetMemoryAndroidHardwareBufferANDROID           ) vkGetInstanceProcAddr( instance, "vkGetMemoryAndroidHardwareBufferANDROID" );
1264             }
1265 
1266             // VK_EXT_full_screen_exclusive : load instance based device level function definitions
1267             else static if( __traits( isSame, extension, EXT_full_screen_exclusive )) {
1268                 vkAcquireFullScreenExclusiveModeEXT               = cast( PFN_vkAcquireFullScreenExclusiveModeEXT               ) vkGetInstanceProcAddr( instance, "vkAcquireFullScreenExclusiveModeEXT" );
1269                 vkReleaseFullScreenExclusiveModeEXT               = cast( PFN_vkReleaseFullScreenExclusiveModeEXT               ) vkGetInstanceProcAddr( instance, "vkReleaseFullScreenExclusiveModeEXT" );
1270                 vkGetDeviceGroupSurfacePresentModes2EXT           = cast( PFN_vkGetDeviceGroupSurfacePresentModes2EXT           ) vkGetInstanceProcAddr( instance, "vkGetDeviceGroupSurfacePresentModes2EXT" );
1271             }
1272 
1273             // VK_KHR_ray_tracing : load instance based device level function definitions
1274             else static if( __traits( isSame, extension, KHR_ray_tracing )) {
1275                 vkCreateAccelerationStructureKHR                  = cast( PFN_vkCreateAccelerationStructureKHR                  ) vkGetInstanceProcAddr( instance, "vkCreateAccelerationStructureKHR" );
1276                 vkGetAccelerationStructureMemoryRequirementsKHR   = cast( PFN_vkGetAccelerationStructureMemoryRequirementsKHR   ) vkGetInstanceProcAddr( instance, "vkGetAccelerationStructureMemoryRequirementsKHR" );
1277                 vkCmdBuildAccelerationStructureKHR                = cast( PFN_vkCmdBuildAccelerationStructureKHR                ) vkGetInstanceProcAddr( instance, "vkCmdBuildAccelerationStructureKHR" );
1278                 vkCmdBuildAccelerationStructureIndirectKHR        = cast( PFN_vkCmdBuildAccelerationStructureIndirectKHR        ) vkGetInstanceProcAddr( instance, "vkCmdBuildAccelerationStructureIndirectKHR" );
1279                 vkBuildAccelerationStructureKHR                   = cast( PFN_vkBuildAccelerationStructureKHR                   ) vkGetInstanceProcAddr( instance, "vkBuildAccelerationStructureKHR" );
1280                 vkCopyAccelerationStructureKHR                    = cast( PFN_vkCopyAccelerationStructureKHR                    ) vkGetInstanceProcAddr( instance, "vkCopyAccelerationStructureKHR" );
1281                 vkCopyAccelerationStructureToMemoryKHR            = cast( PFN_vkCopyAccelerationStructureToMemoryKHR            ) vkGetInstanceProcAddr( instance, "vkCopyAccelerationStructureToMemoryKHR" );
1282                 vkCopyMemoryToAccelerationStructureKHR            = cast( PFN_vkCopyMemoryToAccelerationStructureKHR            ) vkGetInstanceProcAddr( instance, "vkCopyMemoryToAccelerationStructureKHR" );
1283                 vkWriteAccelerationStructuresPropertiesKHR        = cast( PFN_vkWriteAccelerationStructuresPropertiesKHR        ) vkGetInstanceProcAddr( instance, "vkWriteAccelerationStructuresPropertiesKHR" );
1284                 vkCmdCopyAccelerationStructureKHR                 = cast( PFN_vkCmdCopyAccelerationStructureKHR                 ) vkGetInstanceProcAddr( instance, "vkCmdCopyAccelerationStructureKHR" );
1285                 vkCmdCopyAccelerationStructureToMemoryKHR         = cast( PFN_vkCmdCopyAccelerationStructureToMemoryKHR         ) vkGetInstanceProcAddr( instance, "vkCmdCopyAccelerationStructureToMemoryKHR" );
1286                 vkCmdCopyMemoryToAccelerationStructureKHR         = cast( PFN_vkCmdCopyMemoryToAccelerationStructureKHR         ) vkGetInstanceProcAddr( instance, "vkCmdCopyMemoryToAccelerationStructureKHR" );
1287                 vkCmdTraceRaysKHR                                 = cast( PFN_vkCmdTraceRaysKHR                                 ) vkGetInstanceProcAddr( instance, "vkCmdTraceRaysKHR" );
1288                 vkCreateRayTracingPipelinesKHR                    = cast( PFN_vkCreateRayTracingPipelinesKHR                    ) vkGetInstanceProcAddr( instance, "vkCreateRayTracingPipelinesKHR" );
1289                 vkGetAccelerationStructureDeviceAddressKHR        = cast( PFN_vkGetAccelerationStructureDeviceAddressKHR        ) vkGetInstanceProcAddr( instance, "vkGetAccelerationStructureDeviceAddressKHR" );
1290                 vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = cast( PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR ) vkGetInstanceProcAddr( instance, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR" );
1291                 vkCmdTraceRaysIndirectKHR                         = cast( PFN_vkCmdTraceRaysIndirectKHR                         ) vkGetInstanceProcAddr( instance, "vkCmdTraceRaysIndirectKHR" );
1292                 vkGetDeviceAccelerationStructureCompatibilityKHR  = cast( PFN_vkGetDeviceAccelerationStructureCompatibilityKHR  ) vkGetInstanceProcAddr( instance, "vkGetDeviceAccelerationStructureCompatibilityKHR" );
1293             }
1294         }
1295     }
1296 
1297     // compose device based loadDeviceLevelFunctionsExtD function out of unextended
1298     // loadDeviceLevelFunctions and additional function pointers from extensions
1299     // suffix D is required as, we cannot mixin mixin two overloads with the same symbol name (any more!)
1300     void loadDeviceLevelFunctionsExtD( VkDevice device ) {
1301 
1302         // first load all non platform related function pointers from implementation
1303         loadDeviceLevelFunctions( device );
1304 
1305         // 4. loop through alias sequence and mixin corresponding
1306         // device based device level function pointer definitions
1307         static foreach( extension; noDuplicateExtensions ) {
1308 
1309             // VK_KHR_external_memory_win32 : load device based device level function definitions
1310             static if( __traits( isSame, extension, KHR_external_memory_win32 )) {
1311                 vkGetMemoryWin32HandleKHR                         = cast( PFN_vkGetMemoryWin32HandleKHR                         ) vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleKHR" );
1312                 vkGetMemoryWin32HandlePropertiesKHR               = cast( PFN_vkGetMemoryWin32HandlePropertiesKHR               ) vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandlePropertiesKHR" );
1313             }
1314 
1315             // VK_KHR_external_semaphore_win32 : load device based device level function definitions
1316             else static if( __traits( isSame, extension, KHR_external_semaphore_win32 )) {
1317                 vkImportSemaphoreWin32HandleKHR                   = cast( PFN_vkImportSemaphoreWin32HandleKHR                   ) vkGetDeviceProcAddr( device, "vkImportSemaphoreWin32HandleKHR" );
1318                 vkGetSemaphoreWin32HandleKHR                      = cast( PFN_vkGetSemaphoreWin32HandleKHR                      ) vkGetDeviceProcAddr( device, "vkGetSemaphoreWin32HandleKHR" );
1319             }
1320 
1321             // VK_KHR_external_fence_win32 : load device based device level function definitions
1322             else static if( __traits( isSame, extension, KHR_external_fence_win32 )) {
1323                 vkImportFenceWin32HandleKHR                       = cast( PFN_vkImportFenceWin32HandleKHR                       ) vkGetDeviceProcAddr( device, "vkImportFenceWin32HandleKHR" );
1324                 vkGetFenceWin32HandleKHR                          = cast( PFN_vkGetFenceWin32HandleKHR                          ) vkGetDeviceProcAddr( device, "vkGetFenceWin32HandleKHR" );
1325             }
1326 
1327             // VK_KHR_deferred_host_operations : load device based device level function definitions
1328             else static if( __traits( isSame, extension, KHR_deferred_host_operations )) {
1329                 vkCreateDeferredOperationKHR                      = cast( PFN_vkCreateDeferredOperationKHR                      ) vkGetDeviceProcAddr( device, "vkCreateDeferredOperationKHR" );
1330                 vkDestroyDeferredOperationKHR                     = cast( PFN_vkDestroyDeferredOperationKHR                     ) vkGetDeviceProcAddr( device, "vkDestroyDeferredOperationKHR" );
1331                 vkGetDeferredOperationMaxConcurrencyKHR           = cast( PFN_vkGetDeferredOperationMaxConcurrencyKHR           ) vkGetDeviceProcAddr( device, "vkGetDeferredOperationMaxConcurrencyKHR" );
1332                 vkGetDeferredOperationResultKHR                   = cast( PFN_vkGetDeferredOperationResultKHR                   ) vkGetDeviceProcAddr( device, "vkGetDeferredOperationResultKHR" );
1333                 vkDeferredOperationJoinKHR                        = cast( PFN_vkDeferredOperationJoinKHR                        ) vkGetDeviceProcAddr( device, "vkDeferredOperationJoinKHR" );
1334             }
1335 
1336             // VK_NV_external_memory_win32 : load device based device level function definitions
1337             else static if( __traits( isSame, extension, NV_external_memory_win32 )) {
1338                 vkGetMemoryWin32HandleNV                          = cast( PFN_vkGetMemoryWin32HandleNV                          ) vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleNV" );
1339             }
1340 
1341             // VK_ANDROID_external_memory_android_hardware_buffer : load device based device level function definitions
1342             else static if( __traits( isSame, extension, ANDROID_external_memory_android_hardware_buffer )) {
1343                 vkGetAndroidHardwareBufferPropertiesANDROID       = cast( PFN_vkGetAndroidHardwareBufferPropertiesANDROID       ) vkGetDeviceProcAddr( device, "vkGetAndroidHardwareBufferPropertiesANDROID" );
1344                 vkGetMemoryAndroidHardwareBufferANDROID           = cast( PFN_vkGetMemoryAndroidHardwareBufferANDROID           ) vkGetDeviceProcAddr( device, "vkGetMemoryAndroidHardwareBufferANDROID" );
1345             }
1346 
1347             // VK_EXT_full_screen_exclusive : load device based device level function definitions
1348             else static if( __traits( isSame, extension, EXT_full_screen_exclusive )) {
1349                 vkAcquireFullScreenExclusiveModeEXT               = cast( PFN_vkAcquireFullScreenExclusiveModeEXT               ) vkGetDeviceProcAddr( device, "vkAcquireFullScreenExclusiveModeEXT" );
1350                 vkReleaseFullScreenExclusiveModeEXT               = cast( PFN_vkReleaseFullScreenExclusiveModeEXT               ) vkGetDeviceProcAddr( device, "vkReleaseFullScreenExclusiveModeEXT" );
1351                 vkGetDeviceGroupSurfacePresentModes2EXT           = cast( PFN_vkGetDeviceGroupSurfacePresentModes2EXT           ) vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModes2EXT" );
1352             }
1353 
1354             // VK_KHR_ray_tracing : load device based device level function definitions
1355             else static if( __traits( isSame, extension, KHR_ray_tracing )) {
1356                 vkCreateAccelerationStructureKHR                  = cast( PFN_vkCreateAccelerationStructureKHR                  ) vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureKHR" );
1357                 vkGetAccelerationStructureMemoryRequirementsKHR   = cast( PFN_vkGetAccelerationStructureMemoryRequirementsKHR   ) vkGetDeviceProcAddr( device, "vkGetAccelerationStructureMemoryRequirementsKHR" );
1358                 vkCmdBuildAccelerationStructureKHR                = cast( PFN_vkCmdBuildAccelerationStructureKHR                ) vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructureKHR" );
1359                 vkCmdBuildAccelerationStructureIndirectKHR        = cast( PFN_vkCmdBuildAccelerationStructureIndirectKHR        ) vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructureIndirectKHR" );
1360                 vkBuildAccelerationStructureKHR                   = cast( PFN_vkBuildAccelerationStructureKHR                   ) vkGetDeviceProcAddr( device, "vkBuildAccelerationStructureKHR" );
1361                 vkCopyAccelerationStructureKHR                    = cast( PFN_vkCopyAccelerationStructureKHR                    ) vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureKHR" );
1362                 vkCopyAccelerationStructureToMemoryKHR            = cast( PFN_vkCopyAccelerationStructureToMemoryKHR            ) vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureToMemoryKHR" );
1363                 vkCopyMemoryToAccelerationStructureKHR            = cast( PFN_vkCopyMemoryToAccelerationStructureKHR            ) vkGetDeviceProcAddr( device, "vkCopyMemoryToAccelerationStructureKHR" );
1364                 vkWriteAccelerationStructuresPropertiesKHR        = cast( PFN_vkWriteAccelerationStructuresPropertiesKHR        ) vkGetDeviceProcAddr( device, "vkWriteAccelerationStructuresPropertiesKHR" );
1365                 vkCmdCopyAccelerationStructureKHR                 = cast( PFN_vkCmdCopyAccelerationStructureKHR                 ) vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureKHR" );
1366                 vkCmdCopyAccelerationStructureToMemoryKHR         = cast( PFN_vkCmdCopyAccelerationStructureToMemoryKHR         ) vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureToMemoryKHR" );
1367                 vkCmdCopyMemoryToAccelerationStructureKHR         = cast( PFN_vkCmdCopyMemoryToAccelerationStructureKHR         ) vkGetDeviceProcAddr( device, "vkCmdCopyMemoryToAccelerationStructureKHR" );
1368                 vkCmdTraceRaysKHR                                 = cast( PFN_vkCmdTraceRaysKHR                                 ) vkGetDeviceProcAddr( device, "vkCmdTraceRaysKHR" );
1369                 vkCreateRayTracingPipelinesKHR                    = cast( PFN_vkCreateRayTracingPipelinesKHR                    ) vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesKHR" );
1370                 vkGetAccelerationStructureDeviceAddressKHR        = cast( PFN_vkGetAccelerationStructureDeviceAddressKHR        ) vkGetDeviceProcAddr( device, "vkGetAccelerationStructureDeviceAddressKHR" );
1371                 vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = cast( PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR ) vkGetDeviceProcAddr( device, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR" );
1372                 vkCmdTraceRaysIndirectKHR                         = cast( PFN_vkCmdTraceRaysIndirectKHR                         ) vkGetDeviceProcAddr( device, "vkCmdTraceRaysIndirectKHR" );
1373                 vkGetDeviceAccelerationStructureCompatibilityKHR  = cast( PFN_vkGetDeviceAccelerationStructureCompatibilityKHR  ) vkGetDeviceProcAddr( device, "vkGetDeviceAccelerationStructureCompatibilityKHR" );
1374             }
1375         }
1376     }
1377 
1378     // compose extended dispatch device out of unextended original dispatch device with
1379     // extended, device based loadDeviceLevelFunctionsExt member function,
1380     // device and command buffer based function pointer decelerations
1381     struct DispatchDeviceExt {
1382 
1383         // use unextended dispatch device from module erupted.functions as member and alias this
1384         erupted.dispatch_device.DispatchDevice commonDispatchDevice;
1385         alias commonDispatchDevice this;
1386 
1387         // Constructor forwards parameter 'device' to 'loadDeviceLevelFunctionsExt'
1388         this( VkDevice device ) {
1389             loadDeviceLevelFunctionsExt( device );
1390         }
1391 
1392         // backwards compatibility alias
1393         alias loadDeviceLevelFunctions = loadDeviceLevelFunctionsExt;
1394 
1395         // compose device based loadDeviceLevelFunctionsExt member function out of unextended
1396         // loadDeviceLevelFunctions and additional member function pointers from extensions
1397         void loadDeviceLevelFunctionsExt( VkDevice device ) {
1398 
1399             // first load all non platform related member function pointers of wrapped commonDispatchDevice
1400             commonDispatchDevice.loadDeviceLevelFunctions( device );
1401 
1402             // 5. loop through alias sequence and mixin corresponding
1403             // device level member function pointer definitions of this wrapping DispatchDevice
1404             static foreach( extension; noDuplicateExtensions ) {
1405 
1406                 // VK_KHR_external_memory_win32 : load dispatch device member function definitions
1407                 static if( __traits( isSame, extension, KHR_external_memory_win32 )) {
1408                     vkGetMemoryWin32HandleKHR                         = cast( PFN_vkGetMemoryWin32HandleKHR                         ) vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleKHR" );
1409                     vkGetMemoryWin32HandlePropertiesKHR               = cast( PFN_vkGetMemoryWin32HandlePropertiesKHR               ) vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandlePropertiesKHR" );
1410                 }
1411 
1412                 // VK_KHR_external_semaphore_win32 : load dispatch device member function definitions
1413                 else static if( __traits( isSame, extension, KHR_external_semaphore_win32 )) {
1414                     vkImportSemaphoreWin32HandleKHR                   = cast( PFN_vkImportSemaphoreWin32HandleKHR                   ) vkGetDeviceProcAddr( device, "vkImportSemaphoreWin32HandleKHR" );
1415                     vkGetSemaphoreWin32HandleKHR                      = cast( PFN_vkGetSemaphoreWin32HandleKHR                      ) vkGetDeviceProcAddr( device, "vkGetSemaphoreWin32HandleKHR" );
1416                 }
1417 
1418                 // VK_KHR_external_fence_win32 : load dispatch device member function definitions
1419                 else static if( __traits( isSame, extension, KHR_external_fence_win32 )) {
1420                     vkImportFenceWin32HandleKHR                       = cast( PFN_vkImportFenceWin32HandleKHR                       ) vkGetDeviceProcAddr( device, "vkImportFenceWin32HandleKHR" );
1421                     vkGetFenceWin32HandleKHR                          = cast( PFN_vkGetFenceWin32HandleKHR                          ) vkGetDeviceProcAddr( device, "vkGetFenceWin32HandleKHR" );
1422                 }
1423 
1424                 // VK_KHR_deferred_host_operations : load dispatch device member function definitions
1425                 else static if( __traits( isSame, extension, KHR_deferred_host_operations )) {
1426                     vkCreateDeferredOperationKHR                      = cast( PFN_vkCreateDeferredOperationKHR                      ) vkGetDeviceProcAddr( device, "vkCreateDeferredOperationKHR" );
1427                     vkDestroyDeferredOperationKHR                     = cast( PFN_vkDestroyDeferredOperationKHR                     ) vkGetDeviceProcAddr( device, "vkDestroyDeferredOperationKHR" );
1428                     vkGetDeferredOperationMaxConcurrencyKHR           = cast( PFN_vkGetDeferredOperationMaxConcurrencyKHR           ) vkGetDeviceProcAddr( device, "vkGetDeferredOperationMaxConcurrencyKHR" );
1429                     vkGetDeferredOperationResultKHR                   = cast( PFN_vkGetDeferredOperationResultKHR                   ) vkGetDeviceProcAddr( device, "vkGetDeferredOperationResultKHR" );
1430                     vkDeferredOperationJoinKHR                        = cast( PFN_vkDeferredOperationJoinKHR                        ) vkGetDeviceProcAddr( device, "vkDeferredOperationJoinKHR" );
1431                 }
1432 
1433                 // VK_NV_external_memory_win32 : load dispatch device member function definitions
1434                 else static if( __traits( isSame, extension, NV_external_memory_win32 )) {
1435                     vkGetMemoryWin32HandleNV                          = cast( PFN_vkGetMemoryWin32HandleNV                          ) vkGetDeviceProcAddr( device, "vkGetMemoryWin32HandleNV" );
1436                 }
1437 
1438                 // VK_ANDROID_external_memory_android_hardware_buffer : load dispatch device member function definitions
1439                 else static if( __traits( isSame, extension, ANDROID_external_memory_android_hardware_buffer )) {
1440                     vkGetAndroidHardwareBufferPropertiesANDROID       = cast( PFN_vkGetAndroidHardwareBufferPropertiesANDROID       ) vkGetDeviceProcAddr( device, "vkGetAndroidHardwareBufferPropertiesANDROID" );
1441                     vkGetMemoryAndroidHardwareBufferANDROID           = cast( PFN_vkGetMemoryAndroidHardwareBufferANDROID           ) vkGetDeviceProcAddr( device, "vkGetMemoryAndroidHardwareBufferANDROID" );
1442                 }
1443 
1444                 // VK_EXT_full_screen_exclusive : load dispatch device member function definitions
1445                 else static if( __traits( isSame, extension, EXT_full_screen_exclusive )) {
1446                     vkAcquireFullScreenExclusiveModeEXT               = cast( PFN_vkAcquireFullScreenExclusiveModeEXT               ) vkGetDeviceProcAddr( device, "vkAcquireFullScreenExclusiveModeEXT" );
1447                     vkReleaseFullScreenExclusiveModeEXT               = cast( PFN_vkReleaseFullScreenExclusiveModeEXT               ) vkGetDeviceProcAddr( device, "vkReleaseFullScreenExclusiveModeEXT" );
1448                     vkGetDeviceGroupSurfacePresentModes2EXT           = cast( PFN_vkGetDeviceGroupSurfacePresentModes2EXT           ) vkGetDeviceProcAddr( device, "vkGetDeviceGroupSurfacePresentModes2EXT" );
1449                 }
1450 
1451                 // VK_KHR_ray_tracing : load dispatch device member function definitions
1452                 else static if( __traits( isSame, extension, KHR_ray_tracing )) {
1453                     vkCreateAccelerationStructureKHR                  = cast( PFN_vkCreateAccelerationStructureKHR                  ) vkGetDeviceProcAddr( device, "vkCreateAccelerationStructureKHR" );
1454                     vkGetAccelerationStructureMemoryRequirementsKHR   = cast( PFN_vkGetAccelerationStructureMemoryRequirementsKHR   ) vkGetDeviceProcAddr( device, "vkGetAccelerationStructureMemoryRequirementsKHR" );
1455                     vkCmdBuildAccelerationStructureKHR                = cast( PFN_vkCmdBuildAccelerationStructureKHR                ) vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructureKHR" );
1456                     vkCmdBuildAccelerationStructureIndirectKHR        = cast( PFN_vkCmdBuildAccelerationStructureIndirectKHR        ) vkGetDeviceProcAddr( device, "vkCmdBuildAccelerationStructureIndirectKHR" );
1457                     vkBuildAccelerationStructureKHR                   = cast( PFN_vkBuildAccelerationStructureKHR                   ) vkGetDeviceProcAddr( device, "vkBuildAccelerationStructureKHR" );
1458                     vkCopyAccelerationStructureKHR                    = cast( PFN_vkCopyAccelerationStructureKHR                    ) vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureKHR" );
1459                     vkCopyAccelerationStructureToMemoryKHR            = cast( PFN_vkCopyAccelerationStructureToMemoryKHR            ) vkGetDeviceProcAddr( device, "vkCopyAccelerationStructureToMemoryKHR" );
1460                     vkCopyMemoryToAccelerationStructureKHR            = cast( PFN_vkCopyMemoryToAccelerationStructureKHR            ) vkGetDeviceProcAddr( device, "vkCopyMemoryToAccelerationStructureKHR" );
1461                     vkWriteAccelerationStructuresPropertiesKHR        = cast( PFN_vkWriteAccelerationStructuresPropertiesKHR        ) vkGetDeviceProcAddr( device, "vkWriteAccelerationStructuresPropertiesKHR" );
1462                     vkCmdCopyAccelerationStructureKHR                 = cast( PFN_vkCmdCopyAccelerationStructureKHR                 ) vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureKHR" );
1463                     vkCmdCopyAccelerationStructureToMemoryKHR         = cast( PFN_vkCmdCopyAccelerationStructureToMemoryKHR         ) vkGetDeviceProcAddr( device, "vkCmdCopyAccelerationStructureToMemoryKHR" );
1464                     vkCmdCopyMemoryToAccelerationStructureKHR         = cast( PFN_vkCmdCopyMemoryToAccelerationStructureKHR         ) vkGetDeviceProcAddr( device, "vkCmdCopyMemoryToAccelerationStructureKHR" );
1465                     vkCmdTraceRaysKHR                                 = cast( PFN_vkCmdTraceRaysKHR                                 ) vkGetDeviceProcAddr( device, "vkCmdTraceRaysKHR" );
1466                     vkCreateRayTracingPipelinesKHR                    = cast( PFN_vkCreateRayTracingPipelinesKHR                    ) vkGetDeviceProcAddr( device, "vkCreateRayTracingPipelinesKHR" );
1467                     vkGetAccelerationStructureDeviceAddressKHR        = cast( PFN_vkGetAccelerationStructureDeviceAddressKHR        ) vkGetDeviceProcAddr( device, "vkGetAccelerationStructureDeviceAddressKHR" );
1468                     vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = cast( PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR ) vkGetDeviceProcAddr( device, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR" );
1469                     vkCmdTraceRaysIndirectKHR                         = cast( PFN_vkCmdTraceRaysIndirectKHR                         ) vkGetDeviceProcAddr( device, "vkCmdTraceRaysIndirectKHR" );
1470                     vkGetDeviceAccelerationStructureCompatibilityKHR  = cast( PFN_vkGetDeviceAccelerationStructureCompatibilityKHR  ) vkGetDeviceProcAddr( device, "vkGetDeviceAccelerationStructureCompatibilityKHR" );
1471                 }
1472             }
1473         }
1474 
1475         // 6. loop through alias sequence and mixin corresponding convenience member functions
1476         // omitting device parameter of this wrapping DispatchDevice. Member vkDevice of commonDispatchDevice is used instead
1477         static foreach( extension; noDuplicateExtensions ) {
1478 
1479             // VK_KHR_external_memory_win32 : dispatch device convenience member functions
1480             static if( __traits( isSame, extension, KHR_external_memory_win32 )) {
1481                 VkResult  GetMemoryWin32HandleKHR( const( VkMemoryGetWin32HandleInfoKHR )* pGetWin32HandleInfo, HANDLE* pHandle ) { return vkGetMemoryWin32HandleKHR( vkDevice, pGetWin32HandleInfo, pHandle ); }
1482                 VkResult  GetMemoryWin32HandlePropertiesKHR( VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties ) { return vkGetMemoryWin32HandlePropertiesKHR( vkDevice, handleType, handle, pMemoryWin32HandleProperties ); }
1483             }
1484 
1485             // VK_KHR_external_semaphore_win32 : dispatch device convenience member functions
1486             else static if( __traits( isSame, extension, KHR_external_semaphore_win32 )) {
1487                 VkResult  ImportSemaphoreWin32HandleKHR( const( VkImportSemaphoreWin32HandleInfoKHR )* pImportSemaphoreWin32HandleInfo ) { return vkImportSemaphoreWin32HandleKHR( vkDevice, pImportSemaphoreWin32HandleInfo ); }
1488                 VkResult  GetSemaphoreWin32HandleKHR( const( VkSemaphoreGetWin32HandleInfoKHR )* pGetWin32HandleInfo, HANDLE* pHandle ) { return vkGetSemaphoreWin32HandleKHR( vkDevice, pGetWin32HandleInfo, pHandle ); }
1489             }
1490 
1491             // VK_KHR_external_fence_win32 : dispatch device convenience member functions
1492             else static if( __traits( isSame, extension, KHR_external_fence_win32 )) {
1493                 VkResult  ImportFenceWin32HandleKHR( const( VkImportFenceWin32HandleInfoKHR )* pImportFenceWin32HandleInfo ) { return vkImportFenceWin32HandleKHR( vkDevice, pImportFenceWin32HandleInfo ); }
1494                 VkResult  GetFenceWin32HandleKHR( const( VkFenceGetWin32HandleInfoKHR )* pGetWin32HandleInfo, HANDLE* pHandle ) { return vkGetFenceWin32HandleKHR( vkDevice, pGetWin32HandleInfo, pHandle ); }
1495             }
1496 
1497             // VK_KHR_deferred_host_operations : dispatch device convenience member functions
1498             else static if( __traits( isSame, extension, KHR_deferred_host_operations )) {
1499                 VkResult  CreateDeferredOperationKHR( VkDeferredOperationKHR* pDeferredOperation ) { return vkCreateDeferredOperationKHR( vkDevice, pAllocator, pDeferredOperation ); }
1500                 void      DestroyDeferredOperationKHR( VkDeferredOperationKHR operation ) { vkDestroyDeferredOperationKHR( vkDevice, operation, pAllocator ); }
1501                 uint32_t  GetDeferredOperationMaxConcurrencyKHR( VkDeferredOperationKHR operation ) { return vkGetDeferredOperationMaxConcurrencyKHR( vkDevice, operation ); }
1502                 VkResult  GetDeferredOperationResultKHR( VkDeferredOperationKHR operation ) { return vkGetDeferredOperationResultKHR( vkDevice, operation ); }
1503                 VkResult  DeferredOperationJoinKHR( VkDeferredOperationKHR operation ) { return vkDeferredOperationJoinKHR( vkDevice, operation ); }
1504             }
1505 
1506             // VK_NV_external_memory_win32 : dispatch device convenience member functions
1507             else static if( __traits( isSame, extension, NV_external_memory_win32 )) {
1508                 VkResult  GetMemoryWin32HandleNV( VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle ) { return vkGetMemoryWin32HandleNV( vkDevice, memory, handleType, pHandle ); }
1509             }
1510 
1511             // VK_ANDROID_external_memory_android_hardware_buffer : dispatch device convenience member functions
1512             else static if( __traits( isSame, extension, ANDROID_external_memory_android_hardware_buffer )) {
1513                 VkResult  GetAndroidHardwareBufferPropertiesANDROID( const( AHardwareBuffer )* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties ) { return vkGetAndroidHardwareBufferPropertiesANDROID( vkDevice, buffer, pProperties ); }
1514                 VkResult  GetMemoryAndroidHardwareBufferANDROID( const( VkMemoryGetAndroidHardwareBufferInfoANDROID )* pInfo, AHardwareBuffer pBuffer ) { return vkGetMemoryAndroidHardwareBufferANDROID( vkDevice, pInfo, pBuffer ); }
1515             }
1516 
1517             // VK_EXT_full_screen_exclusive : dispatch device convenience member functions
1518             else static if( __traits( isSame, extension, EXT_full_screen_exclusive )) {
1519                 VkResult  AcquireFullScreenExclusiveModeEXT( VkSwapchainKHR swapchain ) { return vkAcquireFullScreenExclusiveModeEXT( vkDevice, swapchain ); }
1520                 VkResult  ReleaseFullScreenExclusiveModeEXT( VkSwapchainKHR swapchain ) { return vkReleaseFullScreenExclusiveModeEXT( vkDevice, swapchain ); }
1521                 VkResult  GetDeviceGroupSurfacePresentModes2EXT( const( VkPhysicalDeviceSurfaceInfo2KHR )* pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR* pModes ) { return vkGetDeviceGroupSurfacePresentModes2EXT( vkDevice, pSurfaceInfo, pModes ); }
1522             }
1523 
1524             // VK_KHR_ray_tracing : dispatch device convenience member functions
1525             else static if( __traits( isSame, extension, KHR_ray_tracing )) {
1526                 VkResult  CreateAccelerationStructureKHR( const( VkAccelerationStructureCreateInfoKHR )* pCreateInfo, VkAccelerationStructureKHR* pAccelerationStructure ) { return vkCreateAccelerationStructureKHR( vkDevice, pCreateInfo, pAllocator, pAccelerationStructure ); }
1527                 void      GetAccelerationStructureMemoryRequirementsKHR( const( VkAccelerationStructureMemoryRequirementsInfoKHR )* pInfo, VkMemoryRequirements2* pMemoryRequirements ) { vkGetAccelerationStructureMemoryRequirementsKHR( vkDevice, pInfo, pMemoryRequirements ); }
1528                 void      CmdBuildAccelerationStructureKHR( uint32_t infoCount, const( VkAccelerationStructureBuildGeometryInfoKHR )* pInfos, const( VkAccelerationStructureBuildOffsetInfoKHR* )* ppOffsetInfos ) { vkCmdBuildAccelerationStructureKHR( commandBuffer, infoCount, pInfos, ppOffsetInfos ); }
1529                 void      CmdBuildAccelerationStructureIndirectKHR( const( VkAccelerationStructureBuildGeometryInfoKHR )* pInfo, VkBuffer indirectBuffer, VkDeviceSize indirectOffset, uint32_t indirectStride ) { vkCmdBuildAccelerationStructureIndirectKHR( commandBuffer, pInfo, indirectBuffer, indirectOffset, indirectStride ); }
1530                 VkResult  BuildAccelerationStructureKHR( uint32_t infoCount, const( VkAccelerationStructureBuildGeometryInfoKHR )* pInfos, const( VkAccelerationStructureBuildOffsetInfoKHR* )* ppOffsetInfos ) { return vkBuildAccelerationStructureKHR( vkDevice, infoCount, pInfos, ppOffsetInfos ); }
1531                 VkResult  CopyAccelerationStructureKHR( const( VkCopyAccelerationStructureInfoKHR )* pInfo ) { return vkCopyAccelerationStructureKHR( vkDevice, pInfo ); }
1532                 VkResult  CopyAccelerationStructureToMemoryKHR( const( VkCopyAccelerationStructureToMemoryInfoKHR )* pInfo ) { return vkCopyAccelerationStructureToMemoryKHR( vkDevice, pInfo ); }
1533                 VkResult  CopyMemoryToAccelerationStructureKHR( const( VkCopyMemoryToAccelerationStructureInfoKHR )* pInfo ) { return vkCopyMemoryToAccelerationStructureKHR( vkDevice, pInfo ); }
1534                 VkResult  WriteAccelerationStructuresPropertiesKHR( uint32_t accelerationStructureCount, const( VkAccelerationStructureKHR )* pAccelerationStructures, VkQueryType queryType, size_t dataSize, void* pData, size_t stride ) { return vkWriteAccelerationStructuresPropertiesKHR( vkDevice, accelerationStructureCount, pAccelerationStructures, queryType, dataSize, pData, stride ); }
1535                 void      CmdCopyAccelerationStructureKHR( const( VkCopyAccelerationStructureInfoKHR )* pInfo ) { vkCmdCopyAccelerationStructureKHR( commandBuffer, pInfo ); }
1536                 void      CmdCopyAccelerationStructureToMemoryKHR( const( VkCopyAccelerationStructureToMemoryInfoKHR )* pInfo ) { vkCmdCopyAccelerationStructureToMemoryKHR( commandBuffer, pInfo ); }
1537                 void      CmdCopyMemoryToAccelerationStructureKHR( const( VkCopyMemoryToAccelerationStructureInfoKHR )* pInfo ) { vkCmdCopyMemoryToAccelerationStructureKHR( commandBuffer, pInfo ); }
1538                 void      CmdTraceRaysKHR( const( VkStridedBufferRegionKHR )* pRaygenShaderBindingTable, const( VkStridedBufferRegionKHR )* pMissShaderBindingTable, const( VkStridedBufferRegionKHR )* pHitShaderBindingTable, const( VkStridedBufferRegionKHR )* pCallableShaderBindingTable, uint32_t width, uint32_t height, uint32_t depth ) { vkCmdTraceRaysKHR( commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, width, height, depth ); }
1539                 VkResult  CreateRayTracingPipelinesKHR( VkPipelineCache pipelineCache, uint32_t createInfoCount, const( VkRayTracingPipelineCreateInfoKHR )* pCreateInfos, VkPipeline* pPipelines ) { return vkCreateRayTracingPipelinesKHR( vkDevice, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines ); }
1540                 VkDeviceAddress  GetAccelerationStructureDeviceAddressKHR( const( VkAccelerationStructureDeviceAddressInfoKHR )* pInfo ) { return vkGetAccelerationStructureDeviceAddressKHR( vkDevice, pInfo ); }
1541                 VkResult  GetRayTracingCaptureReplayShaderGroupHandlesKHR( VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData ) { return vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( vkDevice, pipeline, firstGroup, groupCount, dataSize, pData ); }
1542                 void      CmdTraceRaysIndirectKHR( const( VkStridedBufferRegionKHR )* pRaygenShaderBindingTable, const( VkStridedBufferRegionKHR )* pMissShaderBindingTable, const( VkStridedBufferRegionKHR )* pHitShaderBindingTable, const( VkStridedBufferRegionKHR )* pCallableShaderBindingTable, VkBuffer buffer, VkDeviceSize offset ) { vkCmdTraceRaysIndirectKHR( commandBuffer, pRaygenShaderBindingTable, pMissShaderBindingTable, pHitShaderBindingTable, pCallableShaderBindingTable, buffer, offset ); }
1543                 VkResult  GetDeviceAccelerationStructureCompatibilityKHR( const( VkAccelerationStructureVersionKHR )* Version ) { return vkGetDeviceAccelerationStructureCompatibilityKHR( vkDevice, Version ); }
1544             }
1545         }
1546 
1547         // 7. loop last time through alias sequence and mixin corresponding function pointer declarations
1548         static foreach( extension; noDuplicateExtensions ) {
1549 
1550             // VK_KHR_xlib_surface : dispatch device member function pointer decelerations
1551             static if( __traits( isSame, extension, KHR_xlib_surface )) {
1552                 PFN_vkCreateXlibSurfaceKHR                                            vkCreateXlibSurfaceKHR;
1553                 PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR                     vkGetPhysicalDeviceXlibPresentationSupportKHR;
1554             }
1555 
1556             // VK_KHR_xcb_surface : dispatch device member function pointer decelerations
1557             else static if( __traits( isSame, extension, KHR_xcb_surface )) {
1558                 PFN_vkCreateXcbSurfaceKHR                                             vkCreateXcbSurfaceKHR;
1559                 PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR                      vkGetPhysicalDeviceXcbPresentationSupportKHR;
1560             }
1561 
1562             // VK_KHR_wayland_surface : dispatch device member function pointer decelerations
1563             else static if( __traits( isSame, extension, KHR_wayland_surface )) {
1564                 PFN_vkCreateWaylandSurfaceKHR                                         vkCreateWaylandSurfaceKHR;
1565                 PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR                  vkGetPhysicalDeviceWaylandPresentationSupportKHR;
1566             }
1567 
1568             // VK_KHR_android_surface : dispatch device member function pointer decelerations
1569             else static if( __traits( isSame, extension, KHR_android_surface )) {
1570                 PFN_vkCreateAndroidSurfaceKHR                                         vkCreateAndroidSurfaceKHR;
1571             }
1572 
1573             // VK_KHR_win32_surface : dispatch device member function pointer decelerations
1574             else static if( __traits( isSame, extension, KHR_win32_surface )) {
1575                 PFN_vkCreateWin32SurfaceKHR                                           vkCreateWin32SurfaceKHR;
1576                 PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR                    vkGetPhysicalDeviceWin32PresentationSupportKHR;
1577             }
1578 
1579             // VK_KHR_external_memory_win32 : dispatch device member function pointer decelerations
1580             else static if( __traits( isSame, extension, KHR_external_memory_win32 )) {
1581                 PFN_vkGetMemoryWin32HandleKHR                                         vkGetMemoryWin32HandleKHR;
1582                 PFN_vkGetMemoryWin32HandlePropertiesKHR                               vkGetMemoryWin32HandlePropertiesKHR;
1583             }
1584 
1585             // VK_KHR_external_semaphore_win32 : dispatch device member function pointer decelerations
1586             else static if( __traits( isSame, extension, KHR_external_semaphore_win32 )) {
1587                 PFN_vkImportSemaphoreWin32HandleKHR                                   vkImportSemaphoreWin32HandleKHR;
1588                 PFN_vkGetSemaphoreWin32HandleKHR                                      vkGetSemaphoreWin32HandleKHR;
1589             }
1590 
1591             // VK_KHR_external_fence_win32 : dispatch device member function pointer decelerations
1592             else static if( __traits( isSame, extension, KHR_external_fence_win32 )) {
1593                 PFN_vkImportFenceWin32HandleKHR                                       vkImportFenceWin32HandleKHR;
1594                 PFN_vkGetFenceWin32HandleKHR                                          vkGetFenceWin32HandleKHR;
1595             }
1596 
1597             // VK_KHR_deferred_host_operations : dispatch device member function pointer decelerations
1598             else static if( __traits( isSame, extension, KHR_deferred_host_operations )) {
1599                 PFN_vkCreateDeferredOperationKHR                                      vkCreateDeferredOperationKHR;
1600                 PFN_vkDestroyDeferredOperationKHR                                     vkDestroyDeferredOperationKHR;
1601                 PFN_vkGetDeferredOperationMaxConcurrencyKHR                           vkGetDeferredOperationMaxConcurrencyKHR;
1602                 PFN_vkGetDeferredOperationResultKHR                                   vkGetDeferredOperationResultKHR;
1603                 PFN_vkDeferredOperationJoinKHR                                        vkDeferredOperationJoinKHR;
1604             }
1605 
1606             // VK_GGP_stream_descriptor_surface : dispatch device member function pointer decelerations
1607             else static if( __traits( isSame, extension, GGP_stream_descriptor_surface )) {
1608                 PFN_vkCreateStreamDescriptorSurfaceGGP                                vkCreateStreamDescriptorSurfaceGGP;
1609             }
1610 
1611             // VK_NV_external_memory_win32 : dispatch device member function pointer decelerations
1612             else static if( __traits( isSame, extension, NV_external_memory_win32 )) {
1613                 PFN_vkGetMemoryWin32HandleNV                                          vkGetMemoryWin32HandleNV;
1614             }
1615 
1616             // VK_NN_vi_surface : dispatch device member function pointer decelerations
1617             else static if( __traits( isSame, extension, NN_vi_surface )) {
1618                 PFN_vkCreateViSurfaceNN                                               vkCreateViSurfaceNN;
1619             }
1620 
1621             // VK_EXT_acquire_xlib_display : dispatch device member function pointer decelerations
1622             else static if( __traits( isSame, extension, EXT_acquire_xlib_display )) {
1623                 PFN_vkAcquireXlibDisplayEXT                                           vkAcquireXlibDisplayEXT;
1624                 PFN_vkGetRandROutputDisplayEXT                                        vkGetRandROutputDisplayEXT;
1625             }
1626 
1627             // VK_MVK_ios_surface : dispatch device member function pointer decelerations
1628             else static if( __traits( isSame, extension, MVK_ios_surface )) {
1629                 PFN_vkCreateIOSSurfaceMVK                                             vkCreateIOSSurfaceMVK;
1630             }
1631 
1632             // VK_MVK_macos_surface : dispatch device member function pointer decelerations
1633             else static if( __traits( isSame, extension, MVK_macos_surface )) {
1634                 PFN_vkCreateMacOSSurfaceMVK                                           vkCreateMacOSSurfaceMVK;
1635             }
1636 
1637             // VK_ANDROID_external_memory_android_hardware_buffer : dispatch device member function pointer decelerations
1638             else static if( __traits( isSame, extension, ANDROID_external_memory_android_hardware_buffer )) {
1639                 PFN_vkGetAndroidHardwareBufferPropertiesANDROID                       vkGetAndroidHardwareBufferPropertiesANDROID;
1640                 PFN_vkGetMemoryAndroidHardwareBufferANDROID                           vkGetMemoryAndroidHardwareBufferANDROID;
1641             }
1642 
1643             // VK_FUCHSIA_imagepipe_surface : dispatch device member function pointer decelerations
1644             else static if( __traits( isSame, extension, FUCHSIA_imagepipe_surface )) {
1645                 PFN_vkCreateImagePipeSurfaceFUCHSIA                                   vkCreateImagePipeSurfaceFUCHSIA;
1646             }
1647 
1648             // VK_EXT_metal_surface : dispatch device member function pointer decelerations
1649             else static if( __traits( isSame, extension, EXT_metal_surface )) {
1650                 PFN_vkCreateMetalSurfaceEXT                                           vkCreateMetalSurfaceEXT;
1651             }
1652 
1653             // VK_EXT_full_screen_exclusive : dispatch device member function pointer decelerations
1654             else static if( __traits( isSame, extension, EXT_full_screen_exclusive )) {
1655                 PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT                        vkGetPhysicalDeviceSurfacePresentModes2EXT;
1656                 PFN_vkAcquireFullScreenExclusiveModeEXT                               vkAcquireFullScreenExclusiveModeEXT;
1657                 PFN_vkReleaseFullScreenExclusiveModeEXT                               vkReleaseFullScreenExclusiveModeEXT;
1658                 PFN_vkGetDeviceGroupSurfacePresentModes2EXT                           vkGetDeviceGroupSurfacePresentModes2EXT;
1659             }
1660 
1661             // VK_EXT_directfb_surface : dispatch device member function pointer decelerations
1662             else static if( __traits( isSame, extension, EXT_directfb_surface )) {
1663                 PFN_vkCreateDirectFBSurfaceEXT                                        vkCreateDirectFBSurfaceEXT;
1664                 PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT                 vkGetPhysicalDeviceDirectFBPresentationSupportEXT;
1665             }
1666 
1667             // VK_KHR_ray_tracing : dispatch device member function pointer decelerations
1668             else static if( __traits( isSame, extension, KHR_ray_tracing )) {
1669                 PFN_vkCreateAccelerationStructureKHR                                  vkCreateAccelerationStructureKHR;
1670                 PFN_vkGetAccelerationStructureMemoryRequirementsKHR                   vkGetAccelerationStructureMemoryRequirementsKHR;
1671                 PFN_vkCmdBuildAccelerationStructureKHR                                vkCmdBuildAccelerationStructureKHR;
1672                 PFN_vkCmdBuildAccelerationStructureIndirectKHR                        vkCmdBuildAccelerationStructureIndirectKHR;
1673                 PFN_vkBuildAccelerationStructureKHR                                   vkBuildAccelerationStructureKHR;
1674                 PFN_vkCopyAccelerationStructureKHR                                    vkCopyAccelerationStructureKHR;
1675                 PFN_vkCopyAccelerationStructureToMemoryKHR                            vkCopyAccelerationStructureToMemoryKHR;
1676                 PFN_vkCopyMemoryToAccelerationStructureKHR                            vkCopyMemoryToAccelerationStructureKHR;
1677                 PFN_vkWriteAccelerationStructuresPropertiesKHR                        vkWriteAccelerationStructuresPropertiesKHR;
1678                 PFN_vkCmdCopyAccelerationStructureKHR                                 vkCmdCopyAccelerationStructureKHR;
1679                 PFN_vkCmdCopyAccelerationStructureToMemoryKHR                         vkCmdCopyAccelerationStructureToMemoryKHR;
1680                 PFN_vkCmdCopyMemoryToAccelerationStructureKHR                         vkCmdCopyMemoryToAccelerationStructureKHR;
1681                 PFN_vkCmdTraceRaysKHR                                                 vkCmdTraceRaysKHR;
1682                 PFN_vkCreateRayTracingPipelinesKHR                                    vkCreateRayTracingPipelinesKHR;
1683                 PFN_vkGetAccelerationStructureDeviceAddressKHR                        vkGetAccelerationStructureDeviceAddressKHR;
1684                 PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR                 vkGetRayTracingCaptureReplayShaderGroupHandlesKHR;
1685                 PFN_vkCmdTraceRaysIndirectKHR                                         vkCmdTraceRaysIndirectKHR;
1686                 PFN_vkGetDeviceAccelerationStructureCompatibilityKHR                  vkGetDeviceAccelerationStructureCompatibilityKHR;
1687             }
1688         }
1689     }
1690 }