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 }